From 5b4d77eaa73efad6ac1b46701bf6b39fc117d5b5 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 18 Jul 2022 00:56:35 +0000 Subject: [PATCH 01/82] maintenance: dependency upgrade (#81) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/81 --- .../object_validators/attachment_validator.ex | 6 +- .../audio_video_validator.ex | 4 +- lib/pleroma/web/feed/tag_controller.ex | 3 +- lib/pleroma/web/feed/user_controller.ex | 3 +- lib/pleroma/web/o_auth/o_auth_controller.ex | 5 +- mix.exs | 18 ++-- mix.lock | 83 ++++++++++--------- .../web/activity_pub/activity_pub_test.exs | 2 + test/pleroma/web/common_api_test.exs | 2 + .../controllers/media_controller_test.exs | 2 + .../controllers/status_controller_test.exs | 2 + .../controllers/chat_controller_test.exs | 3 + 12 files changed, 75 insertions(+), 58 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex index 59fef42d6..ffdb16976 100644 --- a/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/attachment_validator.ex @@ -44,9 +44,9 @@ def changeset(struct, data) do struct |> cast(data, [:type, :mediaType, :name, :blurhash]) - |> cast_embed(:url, with: &url_changeset/2) + |> cast_embed(:url, with: &url_changeset/2, required: true) |> validate_inclusion(:type, ~w[Link Document Audio Image Video]) - |> validate_required([:type, :mediaType, :url]) + |> validate_required([:type, :mediaType]) end def url_changeset(struct, data) do @@ -96,6 +96,6 @@ defp fix_url(data) do defp validate_data(cng) do cng |> validate_inclusion(:type, ~w[Document Audio Image Video]) - |> validate_required([:mediaType, :url, :type]) + |> validate_required([:mediaType, :type]) end end diff --git a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex index 331ec9050..ffdeb1757 100644 --- a/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/audio_video_validator.ex @@ -104,14 +104,14 @@ def changeset(struct, data) do struct |> cast(data, __schema__(:fields) -- [:attachment, :tag]) - |> cast_embed(:attachment) + |> cast_embed(:attachment, required: true) |> cast_embed(:tag) end defp validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["Audio", "Video"]) - |> validate_required([:id, :actor, :attributedTo, :type, :context, :attachment]) + |> validate_required([:id, :actor, :attributedTo, :type, :context]) |> CommonValidations.validate_any_presence([:cc, :to]) |> CommonValidations.validate_fields_match([:actor, :attributedTo]) |> CommonValidations.validate_actor_presence() diff --git a/lib/pleroma/web/feed/tag_controller.ex b/lib/pleroma/web/feed/tag_controller.ex index ef9293a55..1e0f7223c 100644 --- a/lib/pleroma/web/feed/tag_controller.ex +++ b/lib/pleroma/web/feed/tag_controller.ex @@ -31,7 +31,8 @@ defp render_feed(conn, %{"tag" => raw_tag} = params) do |> render("tag.#{format}", activities: activities, tag: tag, - feed_config: Config.get([:feed]) + feed_config: Config.get([:feed]), + view_module: FeedView ) end diff --git a/lib/pleroma/web/feed/user_controller.ex b/lib/pleroma/web/feed/user_controller.ex index 739b1f026..dc3b1f94b 100644 --- a/lib/pleroma/web/feed/user_controller.ex +++ b/lib/pleroma/web/feed/user_controller.ex @@ -60,7 +60,8 @@ def feed(conn, %{"nickname" => nickname} = params) do |> render("user.#{format}", user: user, activities: activities, - feed_config: Config.get([:feed]) + feed_config: Config.get([:feed]), + view_module: FeedView ) end end diff --git a/lib/pleroma/web/o_auth/o_auth_controller.ex b/lib/pleroma/web/o_auth/o_auth_controller.ex index 247d8399c..358120fe6 100644 --- a/lib/pleroma/web/o_auth/o_auth_controller.ex +++ b/lib/pleroma/web/o_auth/o_auth_controller.ex @@ -101,7 +101,8 @@ defp do_authorize(%Plug.Conn{} = conn, params) do scopes: scopes, redirect_uri: params["redirect_uri"], state: params["state"], - params: params + params: params, + view_module: OAuthView }) end @@ -160,7 +161,7 @@ def after_create_authorization(%Plug.Conn{} = conn, %Authorization{} = auth, %{ # Enforcing the view to reuse the template when calling from other controllers conn |> put_view(OAuthView) - |> render("oob_authorization_created.html", %{auth: auth}) + |> render("oob_authorization_created.html", %{auth: auth, view_module: OAuthView}) end def after_create_authorization(%Plug.Conn{} = conn, %Authorization{} = auth, %{ diff --git a/mix.exs b/mix.exs index 3e6710bc3..420ea2e24 100644 --- a/mix.exs +++ b/mix.exs @@ -114,15 +114,15 @@ defp oauth_deps do # Type `mix help deps` for examples and options. defp deps do [ - {:phoenix, "~> 1.5.5"}, - {:tzdata, "~> 1.0.3"}, - {:plug_cowboy, "~> 2.3"}, - {:phoenix_pubsub, "~> 2.0"}, - {:phoenix_ecto, "~> 4.0"}, + {:phoenix, "~> 1.6.11"}, + {:tzdata, "~> 1.1.1"}, + {:plug_cowboy, "~> 2.5"}, + {:phoenix_pubsub, "~> 2.1"}, + {:phoenix_ecto, "~> 4.4"}, {:ecto_enum, "~> 1.4"}, - {:ecto_sql, "~> 3.6.2"}, - {:postgrex, ">= 0.15.5"}, - {:oban, "~> 2.3.4"}, + {:ecto_sql, "~> 3.8.3"}, + {:postgrex, ">= 0.16.3"}, + {:oban, "~> 2.12.1"}, {:gettext, git: "https://github.com/tusooa/gettext.git", ref: "72fb2496b6c5280ed911bdc3756890e7f38a4808", @@ -194,7 +194,7 @@ defp deps do {:restarter, path: "./restarter"}, {:majic, "~> 1.0"}, {:eblurhash, "~> 1.2.2"}, - {:open_api_spex, "~> 3.10"}, + {:open_api_spex, "3.10.0"}, {:search_parser, git: "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git", ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"}, diff --git a/mix.lock b/mix.lock index 8cd6f8255..49c620a32 100644 --- a/mix.lock +++ b/mix.lock @@ -4,8 +4,8 @@ "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, - "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.0", "6cb662d5c1b0a8858801cf20997bd006e7016aa8c52959c9ef80e0f34fb60b7a", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "2c81d61d4f6ed0e5cf7bf27a9109b791ff216a1034b3d541327484f46dd43769"}, - "benchee": {:hex, :benchee, "1.0.1", "66b211f9bfd84bd97e6d1beaddf8fc2312aaabe192f776e8931cb0c16f53a521", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}], "hexpm", "3ad58ae787e9c7c94dd7ceda3b587ec2c64604563e049b2a0e8baafae832addb"}, + "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, + "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, "bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm", "7af5c7e09fe1d40f76c8e4f9dd2be7cebd83909f31fee7cd0e9eadc567da8353"}, "cachex": {:hex, :cachex, "3.4.0", "868b2959ea4aeb328c6b60ff66c8d5123c083466ad3c33d3d8b5f142e13101fb", [:mix], [{:eternal, "~> 1.2", [hex: :eternal, repo: "hexpm", optional: false]}, {:jumper, "~> 1.0", [hex: :jumper, repo: "hexpm", optional: false]}, {:sleeplocks, "~> 1.1", [hex: :sleeplocks, repo: "hexpm", optional: false]}, {:unsafe, "~> 1.0", [hex: :unsafe, repo: "hexpm", optional: false]}], "hexpm", "370123b1ab4fba4d2965fb18f87fd758325709787c8c5fce35b3fe80645ccbe5"}, "calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"}, @@ -13,47 +13,47 @@ "castore": {:hex, :castore, "0.1.17", "ba672681de4e51ed8ec1f74ed624d104c0db72742ea1a5e74edbc770c815182f", [:mix], [], "hexpm", "d9844227ed52d26e7519224525cb6868650c272d4a3d327ce3ca5570c12163f9"}, "certifi": {:hex, :certifi, "2.9.0", "6f2a475689dd47f19fb74334859d460a2dc4e3252a3324bd2111b8f0429e7e21", [:rebar3], [], "hexpm", "266da46bdb06d6c6d35fde799bcb28d36d985d424ad7c08b5bb48f5b5cdd4641"}, "combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"}, - "comeonin": {:hex, :comeonin, "5.3.2", "5c2f893d05c56ae3f5e24c1b983c2d5dfb88c6d979c9287a76a7feb1e1d8d646", [:mix], [], "hexpm", "d0993402844c49539aeadb3fe46a3c9bd190f1ecf86b6f9ebd71957534c95f04"}, + "comeonin": {:hex, :comeonin, "5.3.3", "2c564dac95a35650e9b6acfe6d2952083d8a08e4a89b93a481acb552b325892e", [:mix], [], "hexpm", "3e38c9c2cb080828116597ca8807bb482618a315bfafd98c90bc22a821cc84df"}, "concurrent_limiter": {:hex, :concurrent_limiter, "0.1.1", "43ae1dc23edda1ab03dd66febc739c4ff710d047bb4d735754909f9a474ae01c", [:mix], [{:telemetry, "~> 0.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "53968ff238c0fbb4d7ed76ddb1af0be6f3b2f77909f6796e249e737c505a16eb"}, "connection": {:hex, :connection, "1.1.0", "ff2a49c4b75b6fb3e674bfc5536451607270aac754ffd1bdfe175abe4a6d7a68", [:mix], [], "hexpm", "722c1eb0a418fbe91ba7bd59a47e28008a189d47e37e0e7bb85585a016b2869c"}, "cors_plug": {:hex, :cors_plug, "2.0.3", "316f806d10316e6d10f09473f19052d20ba0a0ce2a1d910ddf57d663dac402ae", [:mix], [{:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ee4ae1418e6ce117fc42c2ba3e6cbdca4e95ecd2fe59a05ec6884ca16d469aea"}, "cowboy": {:hex, :cowboy, "2.9.0", "865dd8b6607e14cf03282e10e934023a1bd8be6f6bacf921a7e2a96d800cd452", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, "1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "2c729f934b4e1aa149aff882f57c6372c15399a20d54f65c8d67bef583021bde"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, - "credo": {:hex, :credo, "1.6.4", "ddd474afb6e8c240313f3a7b0d025cc3213f0d171879429bf8535d7021d9ad78", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "c28f910b61e1ff829bffa056ef7293a8db50e87f2c57a9b5c3f57eee124536b7"}, + "credo": {:hex, :credo, "1.6.5", "330ca591c12244ab95498d8f47994c493064b2689febf1236d43d596b4f2261d", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "101de53e6907397c3246ccd2cc9b9f0d3fc0b7805b8e1c1c3d818471fc85bafd"}, "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt.git", "f75cd55325e33cbea198fb41fe41871392f8fb76", [ref: "f75cd55325e33cbea198fb41fe41871392f8fb76"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, - "db_connection": {:hex, :db_connection, "2.4.0", "d04b1b73795dae60cead94189f1b8a51cc9e1f911c234cc23074017c43c031e5", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad416c21ad9f61b3103d254a71b63696ecadb6a917b36f563921e0de00d7d7c8"}, + "db_connection": {:hex, :db_connection, "2.4.2", "f92e79aff2375299a16bcb069a14ee8615c3414863a6fef93156aee8e86c2ff3", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4fe53ca91b99f55ea249693a0229356a08f4d1a7931d8ffa79289b145fe83668"}, "decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"}, "deep_merge": {:hex, :deep_merge, "1.0.0", "b4aa1a0d1acac393bdf38b2291af38cb1d4a52806cf7a4906f718e1feb5ee961", [:mix], [], "hexpm", "ce708e5f094b9cd4e8f2be4f00d2f4250c4095be93f8cd6d018c753894885430"}, - "earmark": {:hex, :earmark, "1.4.18", "618c4ff1563450d1832b7fb41dc6755e470f91a6fd4c70f350a58b14f64a7db8", [:mix], [{:earmark_parser, ">= 1.4.17", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "57ac3b6da3958ed09c669a9b159e86377fcccda56bacde8a209fa4dcdef52560"}, - "earmark_parser": {:hex, :earmark_parser, "1.4.17", "6f3c7e94170377ba45241d394389e800fb15adc5de51d0a3cd52ae766aafd63f", [:mix], [], "hexpm", "f93ac89c9feca61c165b264b5837bf82344d13bebc634cd575cb711e2e342023"}, + "earmark": {:hex, :earmark, "1.4.26", "f0e3c3d5c278a6d448ad8c27ab0ecdec9c57a7710553138c56af220a6330a4fd", [:mix], [{:earmark_parser, "~> 1.4.26", [hex: :earmark_parser, repo: "hexpm", optional: false]}], "hexpm", "e1231882b56bece0692af33f0959f06c9cd580c2dc2ecb1dc9f16f2750fa78c5"}, + "earmark_parser": {:hex, :earmark_parser, "1.4.26", "f4291134583f373c7d8755566122908eb9662df4c4b63caa66a0eabe06569b0a", [:mix], [], "hexpm", "48d460899f8a0c52c5470676611c01f64f3337bad0b26ddab43648428d94aabc"}, "eblurhash": {:hex, :eblurhash, "1.2.2", "7da4255aaea984b31bb71155f673257353b0e0554d0d30dcf859547e74602582", [:rebar3], [], "hexpm", "8c20ca00904de023a835a9dcb7b7762fed32264c85a80c3cafa85288e405044c"}, - "ecto": {:hex, :ecto, "3.6.2", "efdf52acfc4ce29249bab5417415bd50abd62db7b0603b8bab0d7b996548c2bc", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "efad6dfb04e6f986b8a3047822b0f826d9affe8e4ebdd2aeedbfcb14fd48884e"}, + "ecto": {:hex, :ecto, "3.8.4", "e06b8b87e62b27fea17fd2ff6041572ddd10339fd16cdf58446e402c6c90a74b", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f9244288b8d42db40515463a008cf3f4e0e564bb9c249fe87bf28a6d79fe82d4"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"}, - "ecto_sql": {:hex, :ecto_sql, "3.6.2", "9526b5f691701a5181427634c30655ac33d11e17e4069eff3ae1176c764e0ba3", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.6.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.4.0 or ~> 0.5.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5ec9d7e6f742ea39b63aceaea9ac1d1773d574ea40df5a53ef8afbd9242fdb6b"}, + "ecto_sql": {:hex, :ecto_sql, "3.8.3", "a7d22c624202546a39d615ed7a6b784580391e65723f2d24f65941b4dd73d471", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.8.4", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "348cb17fb9e6daf6f251a87049eafcb57805e2892e5e6a0f5dea0985d367329b"}, "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, "elasticsearch": {:git, "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", "6cd946f75f6ab9042521a009d1d32d29a90113ca", [ref: "main"]}, "elastix": {:hex, :elastix, "0.10.0", "7567da885677ba9deffc20063db5f3ca8cd10f23cff1ab3ed9c52b7063b7e340", [:mix], [{:httpoison, "~> 1.4", [hex: :httpoison, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0", [hex: :poison, repo: "hexpm", optional: true]}, {:retry, "~> 0.8", [hex: :retry, repo: "hexpm", optional: false]}], "hexpm", "5fb342ce068b20f7845f5dd198c2dc80d967deafaa940a6e51b846db82696d1d"}, - "elixir_make": {:hex, :elixir_make, "0.6.2", "7dffacd77dec4c37b39af867cedaabb0b59f6a871f89722c25b28fcd4bd70530", [:mix], [], "hexpm", "03e49eadda22526a7e5279d53321d1cced6552f344ba4e03e619063de75348d9"}, + "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"}, "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, - "ex_aws_s3": {:hex, :ex_aws_s3, "2.2.0", "07a09de557070320e264893c0acc8a1d2e7ddf80155736e0aed966486d1988e6", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "15175c613371e29e1f88b78ec8a4327389ca1ec5b34489744b175727496b21bd"}, + "ex_aws_s3": {:hex, :ex_aws_s3, "2.3.3", "61412e524616ea31d3f31675d8bc4c73f277e367dee0ae8245610446f9b778aa", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0044f0b6f9ce925666021eafd630de64c2b3404d79c85245cc7c8a9a32d7f104"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, - "ex_doc": {:hex, :ex_doc, "0.24.2", "e4c26603830c1a2286dae45f4412a4d1980e1e89dc779fcd0181ed1d5a05c8d9", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "e134e1d9e821b8d9e4244687fb2ace58d479b67b282de5158333b0d57c6fb7da"}, + "ex_doc": {:hex, :ex_doc, "0.28.4", "001a0ea6beac2f810f1abc3dbf4b123e9593eaa5f00dd13ded024eae7c523298", [:mix], [{:earmark_parser, "~> 1.4.19", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1", [hex: :makeup_erlang, repo: "hexpm", optional: false]}], "hexpm", "bf85d003dd34911d89c8ddb8bda1a958af3471a274a4c2150a9c01c78ac3f8ed"}, "ex_machina": {:hex, :ex_machina, "2.7.0", "b792cc3127fd0680fecdb6299235b4727a4944a09ff0fa904cc639272cd92dc7", [:mix], [{:ecto, "~> 2.2 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_sql, "~> 3.0", [hex: :ecto_sql, repo: "hexpm", optional: true]}], "hexpm", "419aa7a39bde11894c87a615c4ecaa52d8f107bbdd81d810465186f783245bf8"}, "ex_syslogger": {:hex, :ex_syslogger, "1.5.2", "72b6aa2d47a236e999171f2e1ec18698740f40af0bd02c8c650bf5f1fd1bac79", [:mix], [{:poison, ">= 1.5.0", [hex: :poison, repo: "hexpm", optional: true]}, {:syslog, "~> 1.1.0", [hex: :syslog, repo: "hexpm", optional: false]}], "hexpm", "ab9fab4136dbc62651ec6f16fa4842f10cf02ab4433fa3d0976c01be99398399"}, "excoveralls": {:hex, :excoveralls, "0.12.3", "2142be7cb978a3ae78385487edda6d1aff0e482ffc6123877bb7270a8ffbcfe0", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "568a3e616c264283f5dea5b020783ae40eef3f7ee2163f7a67cbd7b35bcadada"}, "fast_html": {:hex, :fast_html, "2.0.5", "c61760340606c1077ff1f196f17834056cb1dd3d5cb92a9f2cabf28bc6221c3c", [:make, :mix], [{:elixir_make, "~> 0.4", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2.0", [hex: :nimble_pool, repo: "hexpm", optional: false]}], "hexpm", "605f4f4829443c14127694ebabb681778712ceecb4470ec32aa31012330e6506"}, - "fast_sanitize": {:hex, :fast_sanitize, "0.2.2", "3cbbaebaea6043865dfb5b4ecb0f1af066ad410a51470e353714b10c42007b81", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "69f204db9250afa94a0d559d9110139850f57de2b081719fbafa1e9a89e94466"}, + "fast_sanitize": {:hex, :fast_sanitize, "0.2.3", "67b93dfb34e302bef49fec3aaab74951e0f0602fd9fa99085987af05bd91c7a5", [:mix], [{:fast_html, "~> 2.0", [hex: :fast_html, repo: "hexpm", optional: false]}, {:plug, "~> 1.8", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "e8ad286d10d0386e15d67d0ee125245ebcfbc7d7290b08712ba9013c8c5e56e2"}, "file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"}, "finch": {:hex, :finch, "0.10.2", "9ad27d68270d879f73f26604bb2e573d40f29bf0e907064a9a337f90a16a0312", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: false]}, {:mint, "~> 1.3", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dd8b11b282072cec2ef30852283949c248bd5d2820c88d8acc89402b81db7550"}, "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, - "floki": {:hex, :floki, "0.30.1", "75d35526d3a1459920b6e87fdbc2e0b8a3670f965dd0903708d2b267e0904c55", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "e9c03524447d1c4cbfccd672d739b8c18453eee377846b119d4fd71b1a176bb8"}, + "floki": {:hex, :floki, "0.33.1", "f20f1eb471e726342b45ccb68edb9486729e7df94da403936ea94a794f072781", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "461035fd125f13fdf30f243c85a0b1e50afbec876cbf1ceefe6fddd2e6d712c6"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, @@ -68,74 +68,77 @@ "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, "jason": {:hex, :jason, "1.3.0", "fa6b82a934feb176263ad2df0dbd91bf633d4a46ebfdffea0c8ae82953714946", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "53fc1f51255390e0ec7e50f9cb41e751c260d065dcba2bf0d08dc51a4002c2ac"}, - "joken": {:hex, :joken, "2.3.0", "62a979c46f2c81dcb8ddc9150453b60d3757d1ac393c72bb20fc50a7b0827dc6", [:mix], [{:jose, "~> 1.10", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "57b263a79c0ec5d536ac02d569c01e6b4de91bd1cb825625fe90eab4feb7bc1e"}, - "jose": {:hex, :jose, "1.11.1", "59da64010c69aad6cde2f5b9248b896b84472e99bd18f246085b7b9fe435dcdb", [:mix, :rebar3], [], "hexpm", "078f6c9fb3cd2f4cfafc972c814261a7d1e8d2b3685c0a76eb87e158efff1ac5"}, + "joken": {:hex, :joken, "2.5.0", "09be497d804b8115eb6f07615cef2e60c2a1008fb89dc0aef0d4c4b4609b99aa", [:mix], [{:jose, "~> 1.11.2", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "22b25c89617c5ed8ca7b31026340a25ea0f9ca7160f9706b79be9ed81fdf74e7"}, + "jose": {:hex, :jose, "1.11.2", "f4c018ccf4fdce22c71e44d471f15f723cb3efab5d909ab2ba202b5bf35557b3", [:mix, :rebar3], [], "hexpm", "98143fbc48d55f3a18daba82d34fe48959d44538e9697c08f34200fa5f0947d2"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "linkify": {:git, "https://akkoma.dev/AkkomaGang/linkify.git", "2567e2c1073fa371fd26fd66dfa5bc77b6919c16", [branch: "bugfix/line-ending-buffer"]}, "majic": {:hex, :majic, "1.0.0", "37e50648db5f5c2ff0c9fb46454d034d11596c03683807b9fb3850676ffdaab3", [:make, :mix], [{:elixir_make, "~> 0.6.1", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7905858f76650d49695f14ea55cd9aaaee0c6654fa391671d4cf305c275a0a9e"}, - "makeup": {:hex, :makeup, "1.0.5", "d5a830bc42c9800ce07dd97fa94669dfb93d3bf5fcf6ea7a0c67b2e0e4a7f26c", [:mix], [{:nimble_parsec, "~> 0.5 or ~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "cfa158c02d3f5c0c665d0af11512fed3fba0144cf1aadee0f2ce17747fba2ca9"}, - "makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"}, + "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, + "makeup_elixir": {:hex, :makeup_elixir, "0.16.0", "f8c570a0d33f8039513fbccaf7108c5d750f47d8defd44088371191b76492b0b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "28b2cbdc13960a46ae9a8858c4bebdec3c9a6d7b4b9e7f4ed1502f8159f338e7"}, "makeup_erlang": {:hex, :makeup_erlang, "0.1.1", "3fcb7f09eb9d98dc4d208f49cc955a34218fc41ff6b84df7c75b3e6e533cc65f", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "174d0809e98a4ef0b3309256cbf97101c6ec01c4ab0b23e926a9e17df2077cbb"}, "meck": {:hex, :meck, "0.9.2", "85ccbab053f1db86c7ca240e9fc718170ee5bda03810a6292b5306bf31bae5f5", [:rebar3], [], "hexpm", "81344f561357dc40a8344afa53767c32669153355b626ea9fcbc8da6b3045826"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, - "mint": {:hex, :mint, "1.4.1", "49b3b6ea35a9a38836d2ad745251b01ca9ec062f7cb66f546bf22e6699137126", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "cd261766e61011a9079cccf8fa9d826e7a397c24fbedf0e11b49312bea629b58"}, + "mint": {:hex, :mint, "1.4.2", "50330223429a6e1260b2ca5415f69b0ab086141bc76dc2fbf34d7c389a6675b2", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "ce75a5bbcc59b4d7d8d70f8b2fc284b1751ffb35c7b6a6302b5192f8ab4ddd80"}, "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.7", "75b3bbf1466d7e486ea2052a73c6e062c6256fb429d6797999ab02fa32f29e03", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "4da49a4609e41fd99b7836945c26f373623ea968cfb6282742bcb94440cf7e5c"}, - "mogrify": {:hex, :mogrify, "0.9.1", "a26f107c4987477769f272bd0f7e3ac4b7b75b11ba597fd001b877beffa9c068", [:mix], [], "hexpm", "134edf189337d2125c0948bf0c228fdeef975c594317452d536224069a5b7f05"}, - "mox": {:hex, :mox, "1.0.0", "4b3c7005173f47ff30641ba044eb0fe67287743eec9bd9545e37f3002b0a9f8b", [:mix], [], "hexpm", "201b0a20b7abdaaab083e9cf97884950f8a30a1350a1da403b3145e213c6f4df"}, + "mogrify": {:hex, :mogrify, "0.9.2", "b360984adea7dd6a55f18028e6327973c58de7f548fdb86c9859848aa904d5b0", [:mix], [], "hexpm", "c18d10fd70ca20e2585301616c89f6e4f7159d92efc9cc8ee579e00c886f699d"}, + "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, - "nimble_parsec": {:hex, :nimble_parsec, "1.2.0", "b44d75e2a6542dcb6acf5d71c32c74ca88960421b6874777f79153bbbbd7dccc", [:mix], [], "hexpm", "52b2871a7515a5ac49b00f214e4165a40724cf99798d8e4a65e4fd64ebd002c1"}, + "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, - "oban": {:hex, :oban, "2.3.4", "ec7509b9af2524d55f529cb7aee93d36131ae0bf0f37706f65d2fe707f4d9fd8", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c70ca0434758fd1805422ea4446af5e910ddc697c0c861549c8f0eb0cfbd2fdf"}, + "oban": {:hex, :oban, "2.12.1", "f604d7e6a8be9fda4a9b0f6cebbd633deba569f85dbff70c4d25d99a6f023177", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b1844c2b74e0d788b73e5144b0c9d5674cb775eae29d88a36f3c3b48d42d058"}, "open_api_spex": {:hex, :open_api_spex, "3.10.0", "94e9521ad525b3fcf6dc77da7c45f87fdac24756d4de588cb0816b413e7c1844", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "2dbb2bde3d2b821f06936e8dfaf3284331186556291946d84eeba3750ac28765"}, "p1_utils": {:hex, :p1_utils, "1.0.18", "3fe224de5b2e190d730a3c5da9d6e8540c96484cf4b4692921d1e28f0c32b01c", [:rebar3], [], "hexpm", "1fc8773a71a15553b179c986b22fbeead19b28fe486c332d4929700ffeb71f88"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, - "phoenix": {:hex, :phoenix, "1.5.9", "a6368d36cfd59d917b37c44386e01315bc89f7609a10a45a22f47c007edf2597", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7e4bce20a67c012f1fbb0af90e5da49fa7bf0d34e3a067795703b74aef75427d"}, - "phoenix_ecto": {:hex, :phoenix_ecto, "4.2.1", "13f124cf0a3ce0f1948cf24654c7b9f2347169ff75c1123f44674afee6af3b03", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 2.15", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "478a1bae899cac0a6e02be1deec7e2944b7754c04e7d4107fc5a517f877743c0"}, - "phoenix_html": {:hex, :phoenix_html, "3.1.0", "0b499df05aad27160d697a9362f0e89fa0e24d3c7a9065c2bd9d38b4d1416c09", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "0c0a98a2cefa63433657983a2a594c7dee5927e4391e0f1bfd3a151d1def33fc"}, - "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.6.2", "0769470265eb13af01b5001b29cb935f4710d6adaa1ffc18417a570a337a2f0f", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.3", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.17.1", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "5bc6c6b38a2ca8b5020b442322fcee6afd5e641637a0b1fb059d4bd89bc58e7b"}, - "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.5", "63f52a6f9f6983f04e424586ff897c016ecc5e4f8d1e2c22c2887af1c57215d8", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.5.9 or ~> 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c5586e6a3d4df71b8214c769d4f5eb8ece2b4001711a7ca0f97323c36958b0e3"}, - "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"}, - "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.3", "039435dd975f7e55953525b88f1d596f26c6141412584c16f4db109708a8ee68", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "4a540cea32e05356541737033d666ee7fea7700eb2101bf76783adbfe06601cd"}, + "phoenix": {:hex, :phoenix, "1.6.11", "29f3c0fd12fa1fc4d4b05e341578e55bc78d96ea83a022587a7e276884d397e4", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1664e34f80c25ea4918fbadd957f491225ef601c0e00b4e644b1a772864bfbc2"}, + "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, + "phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"}, + "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.6.5", "1495bb014be12c9a9252eca04b9af54246f6b5c1e4cd1f30210cd00ec540cf8e", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.3", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.17.7", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "ef4fa50dd78364409039c99cf6f98ab5209b4c5f8796c17f4db118324f0db852"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "0.17.11", "205f6aa5405648c76f2abcd57716f42fc07d8f21dd8ea7b262dd12b324b50c95", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.0", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.1", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7177791944b7f90ed18f5935a6a5f07f760b36f7b3bdfb9d28c57440a3c43f99"}, + "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.1", "ba04e489ef03763bf28a17eb2eaddc2c20c6d217e2150a61e3298b0f4c2012b5", [:mix], [], "hexpm", "81367c6d1eea5878ad726be80808eb5a787a23dee699f96e72b1109c57cdd8d9"}, + "phoenix_swoosh": {:hex, :phoenix_swoosh, "0.3.4", "615f8f393135de7e0cbb4bd00ba238b1e0cd324b0d90efbaee613c2f02ca5e5c", [:mix], [{:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:swoosh, "~> 1.0", [hex: :swoosh, repo: "hexpm", optional: false]}], "hexpm", "3971221846232021ab5e3c7489fd62ec5bfd6a2e01cae10a317ccf6fb350571c"}, + "phoenix_view": {:hex, :phoenix_view, "1.1.2", "1b82764a065fb41051637872c7bd07ed2fdb6f5c3bd89684d4dca6e10115c95a", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "7ae90ad27b09091266f6adbb61e1d2516a7c3d7062c6789d46a7554ec40f3a56"}, "plug": {:hex, :plug, "1.10.4", "41eba7d1a2d671faaf531fa867645bd5a3dce0957d8e2a3f398ccff7d2ef017f", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ad1e233fe73d2eec56616568d260777b67f53148a999dc2d048f4eb9778fe4a0"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.5.0", "51c998f788c4e68fc9f947a5eba8c215fbb1d63a520f7604134cab0270ea6513", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "5b2c8925a5e2587446f33810a58c01e66b3c345652eeec809b76ba007acde71a"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.5.2", "62894ccd601cf9597e2c23911ff12798a8a18d237e9739f58a6b04e4988899fe", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "ea6e87f774c8608d60c8d34022a7d073bd7680a0a013f049fc62bf35efea1044"}, "plug_crypto": {:hex, :plug_crypto, "1.2.2", "05654514ac717ff3a1843204b424477d9e60c143406aa94daf2274fdd280794d", [:mix], [], "hexpm", "87631c7ad914a5a445f0a3809f99b079113ae4ed4b867348dd9eec288cecb6db"}, "plug_static_index_html": {:hex, :plug_static_index_html, "1.0.0", "840123d4d3975585133485ea86af73cb2600afd7f2a976f9f5fd8b3808e636a0", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "79fd4fcf34d110605c26560cbae8f23c603ec4158c08298bd4360fdea90bb5cf"}, "poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm", "fec8660eb7733ee4117b85f55799fd3833eb769a6df71ccf8903e8dc5447cfce"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, - "postgrex": {:hex, :postgrex, "0.15.9", "46f8fe6f25711aeb861c4d0ae09780facfdf3adbd2fb5594ead61504dd489bda", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "610719103e4cb2223d4ab78f9f0f3e720320eeca6011415ab4137ddef730adee"}, - "pot": {:hex, :pot, "1.0.1", "81b511b1fa7c3123171c265cb7065a1528cebd7277b0cbc94257c50a8b2e4c17", [:rebar3], [], "hexpm", "ed87f5976531d91528452faa1138a5328db7f9f20d8feaae15f5051f79bcfb6d"}, - "prometheus": {:hex, :prometheus, "4.8.0", "1ce1e1002b173c336d61f186b56263346536e76814edd9a142e12aeb2d6c1ad2", [:mix, :rebar3], [], "hexpm", "0fc2e17103073edb3758a46a5d44b006191bf25b73cbaa2b779109de396afcb5"}, + "postgrex": {:hex, :postgrex, "0.16.3", "fac79a81a9a234b11c44235a4494d8565303fa4b9147acf57e48978a074971db", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "aeaae1d2d1322da4e5fe90d241b0a564ce03a3add09d7270fb85362166194590"}, + "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, + "prometheus": {:hex, :prometheus, "4.8.2", "b88f24279dd7a1f512cb090595ff6c88b50aad0a6b394a4c4983725723dcd834", [:mix, :rebar3], [{:quantile_estimator, "~> 0.2.1", [hex: :quantile_estimator, repo: "hexpm", optional: false]}], "hexpm", "c3abd6521e52cec4f0d8eca603cf214dfc84d8a27aa85946639f1424b8554d98"}, "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, "prometheus_ex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", [ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5"]}, "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, "prometheus_phx": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", "9cd8f248c9381ffedc799905050abce194a97514", [branch: "no-logging"]}, "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, + "quantile_estimator": {:hex, :quantile_estimator, "0.2.1", "ef50a361f11b5f26b5f16d0696e46a9e4661756492c981f7b2229ef42ff1cd15", [:rebar3], [], "hexpm", "282a8a323ca2a845c9e6f787d166348f776c1d4a41ede63046d72d422e3da946"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, - "recon": {:hex, :recon, "2.5.1", "430ffa60685ac1efdfb1fe4c97b8767c92d0d92e6e7c3e8621559ba77598678a", [:mix, :rebar3], [], "hexpm", "5721c6b6d50122d8f68cccac712caa1231f97894bab779eff5ff0f886cb44648"}, + "recon": {:hex, :recon, "2.5.2", "cba53fa8db83ad968c9a652e09c3ed7ddcc4da434f27c3eaa9ca47ffb2b1ff03", [:mix, :rebar3], [], "hexpm", "2c7523c8dee91dff41f6b3d63cba2bd49eb6d2fe5bf1eec0df7f87eb5e230e1c"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, "retry": {:hex, :retry, "0.15.0", "ba6aaeba92905a396c18c299a07e638947b2ba781e914f803202bc1b9ae867c3", [:mix], [], "hexpm", "93d3310bce78c0a30cc94610684340a14adfc9136856a3f662e4d9ce6013c784"}, "search_parser": {:git, "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git", "08971a81e68686f9ac465cfb6661d51c5e4e1e7f", [ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"]}, "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, - "sweet_xml": {:hex, :sweet_xml, "0.7.2", "4729f997286811fabdd8288f8474e0840a76573051062f066c4b597e76f14f9f", [:mix], [], "hexpm", "6894e68a120f454534d99045ea3325f7740ea71260bc315f82e29731d570a6e8"}, - "swoosh": {:hex, :swoosh, "1.3.11", "34f79c57f19892b43bd2168de9ff5de478a721a26328ef59567aad4243e7a77b", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "f1e2a048db454f9982b9cf840f75e7399dd48be31ecc2a7dc10012a803b913af"}, + "statistex": {:hex, :statistex, "1.0.0", "f3dc93f3c0c6c92e5f291704cf62b99b553253d7969e9a5fa713e5481cd858a5", [:mix], [], "hexpm", "ff9d8bee7035028ab4742ff52fc80a2aa35cece833cf5319009b52f1b5a86c27"}, + "sweet_xml": {:hex, :sweet_xml, "0.7.3", "debb256781c75ff6a8c5cbf7981146312b66f044a2898f453709a53e5031b45b", [:mix], [], "hexpm", "e110c867a1b3fe74bfc7dd9893aa851f0eed5518d0d7cad76d7baafd30e4f5ba"}, + "swoosh": {:hex, :swoosh, "1.7.3", "febb47c8c3ce76747eb9e3ea25ed694c815f72069127e3bb039b7724082ec670", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "76abac313f95b6825baa8ceec269d597e8395950c928742fc6451d3456ca256d"}, "syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"}, "table_rex": {:hex, :table_rex, "3.1.1", "0c67164d1714b5e806d5067c1e96ff098ba7ae79413cc075973e17c38a587caa", [:mix], [], "hexpm", "678a23aba4d670419c23c17790f9dcd635a4a89022040df7d5d772cb21012490"}, "telemetry": {:hex, :telemetry, "0.4.3", "a06428a514bdbc63293cd9a6263aad00ddeb66f608163bdec7c8995784080818", [:rebar3], [], "hexpm", "eb72b8365ffda5bed68a620d1da88525e326cb82a75ee61354fc24b844768041"}, "telemetry_metrics": {:hex, :telemetry_metrics, "0.6.1", "315d9163a1d4660aedc3fee73f33f1d355dcc76c5c3ab3d59e76e3edf80eef1f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7be9e0871c41732c233be71e4be11b96e56177bf15dde64a8ac9ce72ac9834c6"}, "tesla": {:hex, :tesla, "1.4.4", "bb89aa0c9745190930366f6a2ac612cdf2d0e4d7fff449861baa7875afd797b2", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: true]}, {:finch, "~> 0.3", [hex: :finch, repo: "hexpm", optional: true]}, {:fuse, "~> 2.4", [hex: :fuse, repo: "hexpm", optional: true]}, {:gun, "~> 1.3", [hex: :gun, repo: "hexpm", optional: true]}, {:hackney, "~> 1.6", [hex: :hackney, repo: "hexpm", optional: true]}, {:ibrowse, "4.4.0", [hex: :ibrowse, repo: "hexpm", optional: true]}, {:jason, ">= 1.0.0", [hex: :jason, repo: "hexpm", optional: true]}, {:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.0", [hex: :mint, repo: "hexpm", optional: true]}, {:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "d5503a49f9dec1b287567ea8712d085947e247cb11b06bc54adb05bfde466457"}, - "timex": {:hex, :timex, "3.7.5", "3eca56e23bfa4e0848f0b0a29a92fa20af251a975116c6d504966e8a90516dfd", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "a15608dca680f2ef663d71c95842c67f0af08a0f3b1d00e17bbd22872e2874e4"}, + "timex": {:hex, :timex, "3.7.8", "0e6e8bf7c0aba95f1e13204889b2446e7a5297b1c8e408f15ab58b2c8dc85f81", [:mix], [{:combine, "~> 0.10", [hex: :combine, repo: "hexpm", optional: false]}, {:gettext, "~> 0.10", [hex: :gettext, repo: "hexpm", optional: false]}, {:tzdata, "~> 1.1", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "8f3b8edc5faab5205d69e5255a1d64a83b190bab7f16baa78aefcb897cf81435"}, "trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"}, - "tzdata": {:hex, :tzdata, "1.0.5", "69f1ee029a49afa04ad77801febaf69385f3d3e3d1e4b56b9469025677b89a28", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "55519aa2a99e5d2095c1e61cc74c9be69688f8ab75c27da724eb8279ff402a5a"}, - "ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"}, + "tzdata": {:hex, :tzdata, "1.1.1", "20c8043476dfda8504952d00adac41c6eda23912278add38edc140ae0c5bcc46", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "a69cec8352eafcd2e198dea28a34113b60fdc6cb57eb5ad65c10292a6ba89787"}, + "ueberauth": {:hex, :ueberauth, "0.10.1", "6706b410ee6bd9d67eac983ed9dc7fdc1f06b18677d7b8ba71d5725e07cc8826", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bb715b562395c4cc26b2d8e637c6bb0eb8c67d50c0ea543c0f78f06b7e8efdb1"}, "unicode_util_compat": {:hex, :unicode_util_compat, "0.7.0", "bc84380c9ab48177092f43ac89e4dfa2c6d62b40b8bd132b1059ecc7232f9a78", [:rebar3], [], "hexpm", "25eee6d67df61960cf6a794239566599b09e17e668d3700247bc498638152521"}, "unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"}, "vex": {:hex, :vex, "0.9.0", "613ea5eb3055662e7178b83e25b2df0975f68c3d8bb67c1645f0573e1a78d606", [:mix], [], "hexpm", "c69fff44d5c8aa3f1faee71bba1dcab05dd36364c5a629df8bb11751240c857f"}, diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index a38d8a3fb..f85c4bbb8 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -23,6 +23,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do import Tesla.Mock setup do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + clear_config([Pleroma.Uploaders.Local, :uploads], "uploads") mock(fn env -> apply(HttpRequestMock, :request, [env]) end) :ok end diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 20870bdd7..85a4a3a11 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -27,6 +27,8 @@ defmodule Pleroma.Web.CommonAPITest do require Pleroma.Constants setup_all do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + clear_config([Pleroma.Uploaders.Local, :uploads], "uploads") Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) :ok end diff --git a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs index ff988a7fd..50b9febea 100644 --- a/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/media_controller_test.exs @@ -13,6 +13,8 @@ defmodule Pleroma.Web.MastodonAPI.MediaControllerTest do describe "Upload media" do setup do: oauth_access(["write:media"]) + setup do: clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + setup do: clear_config([Pleroma.Uploaders.Local, :uploads], "uploads") setup do image = %Plug.Upload{ diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 3e0660031..c5d204358 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -25,6 +25,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusControllerTest do setup do: clear_config([:rich_media, :enabled]) setup do: clear_config([:mrf, :policies]) setup do: clear_config([:mrf_keyword, :reject]) + setup do: clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + setup do: clear_config([Pleroma.Uploaders.Local, :uploads], "uploads") describe "posting statuses" do setup do: oauth_access(["write:statuses"]) diff --git a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs index 99b0d43a7..a817a2dba 100644 --- a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs @@ -106,6 +106,9 @@ test "it fails if there is no content", %{conn: conn, user: user} do end test "it works with an attachment", %{conn: conn, user: user} do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + clear_config([Pleroma.Uploaders.Local, :uploads], "uploads") + file = %Plug.Upload{ content_type: "image/jpeg", path: Path.absname("test/fixtures/image.jpg"), From ff16840cc8fac0f2ae9d183b4e5d5e5fae530a9e Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 18 Jul 2022 10:17:24 +0000 Subject: [PATCH 02/82] Refactor CI build (#80) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/80 --- .dockerignore | 6 ++ .woodpecker/.release.yml | 143 ++++++++++----------------------------- Dockerfile | 38 +++++------ 3 files changed, 61 insertions(+), 126 deletions(-) diff --git a/.dockerignore b/.dockerignore index 6b1879e62..2b5f1abff 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,6 +6,12 @@ COPYING *file elixir_buildpack.config test/ +instance/ +_build +deps +test +benchmarks +docs/site # Required to get version !.git diff --git a/.woodpecker/.release.yml b/.woodpecker/.release.yml index c411dd2e9..e672c1251 100644 --- a/.woodpecker/.release.yml +++ b/.woodpecker/.release.yml @@ -1,127 +1,58 @@ -matrix: - docker_prefix: - - "" - - arm64v8/ - - arm32v7/ - tag: - - amd64 - - arm64 - - arm - - include: - - tag: amd64 - docker_prefix: "" - -pipeline: - glibc: - when: - event: - - push - - tag - branch: - - develop - - stable - - refs/tags/v* - - refs/tags/stable-* - secrets: +variables: + - &scw-secrets - SCW_ACCESS_KEY - SCW_SECRET_KEY - SCW_DEFAULT_ORGANIZATION_ID - image: ${docker_prefix}elixir:1.13 + - &setup-scw-s3 "wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 && mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli && chmod +x scaleway-cli && ./scaleway-cli object config install type=rclone" + + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &build-on + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &tag-build 'export BUILD_TAG=$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG' + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix) && (rm scaleway-cli || true) && (mix deps.clean --all || true)" + + +pipeline: + glibc: + image: elixir:1.13 + <<: *build-on + secrets: *scw-secrets environment: MIX_ENV: prod commands: - - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli - - chmod +x scaleway-cli - - ./scaleway-cli object config install type=rclone + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git + - *clean + - *setup-scw-s3 - echo "import Mix.Config" > config/prod.secret.exs - - mix local.hex --force - - mix local.rebar --force - - export BUILD_TAG=$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"} - - export PLEROMA_BUILD_BRANCH=$BUILD_TAG - - mix deps.clean --all + - *setup-hex + - *tag-build - mix deps.get --only prod - - mkdir release - mix release --path release - zip akkoma-${tag}.zip -r release - rclone copyto akkoma-${tag}.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-${tag}.zip musl: - when: - event: - - push - - tag - branch: - - develop - - stable - - refs/tags/v* - - refs/tags/stable-* - secrets: - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - image: ${docker_prefix}elixir:1.13-alpine + image: elixir:1.13-alpine + <<: *build-on + secrets: *scw-secrets environment: MIX_ENV: prod commands: - apk add git gcc g++ musl-dev make cmake file-dev rclone wget zip imagemagick - - rm -rf release || true - - rm -rf _build || true - - rm -rf /root/.mix - - rm scaleway-cli || true - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli - - chmod +x scaleway-cli - - ./scaleway-cli object config install type=rclone - - - mix local.hex --force - - mix local.rebar --force - - export BUILD_TAG=$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"} - - export PLEROMA_BUILD_BRANCH=$BUILD_TAG - - mix deps.clean --all + - *clean + - *setup-scw-s3 + - *setup-hex + - *tag-build - mix deps.get --only prod - mix release --path release - zip akkoma-${tag}.zip -r release - rclone copyto akkoma-${tag}.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-${tag}-musl.zip - - musl1.1: - when: - event: - - push - - tag - branch: - - develop - - stable - - refs/tags/v* - - refs/tags/stable-* - secrets: - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - image: voidlinux/voidlinux-musl - environment: - MIX_ENV: prod - commands: - - xbps-install -Suy || xbps-install -uy xbps - - xbps-install -Suy - - xbps-install -y git gcc musl-devel make cmake file-devel rclone wget zip libmagic elixir - - rm -rf release || true - - rm -rf _build || true - - rm -rf /root/.mix - - rm scaleway-cli || true - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli - - chmod +x scaleway-cli - - ./scaleway-cli object config install type=rclone - - - mix local.hex --force - - mix local.rebar --force - - export BUILD_TAG=$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"} - - export PLEROMA_BUILD_BRANCH=$BUILD_TAG - - mix deps.clean --all - - mix deps.get --only prod - - mix release --path release - - zip akkoma-${tag}.zip -r release - - rclone copyto akkoma-${tag}.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-${tag}-musl11.zip diff --git a/Dockerfile b/Dockerfile index c51ebbab0..e6210affb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,52 +1,50 @@ -FROM elixir:1.9-alpine as build +FROM hexpm/elixir:1.13.4-erlang-24.3.4.2-alpine-3.16.0 as build COPY . . ENV MIX_ENV=prod RUN apk add git gcc g++ musl-dev make cmake file-dev &&\ - echo "import Mix.Config" > config/prod.secret.exs &&\ + echo "import Config" > config/prod.secret.exs &&\ mix local.hex --force &&\ mix local.rebar --force &&\ mix deps.get --only prod &&\ mkdir release &&\ mix release --path release -FROM alpine:3.14 +FROM alpine:3.16 ARG BUILD_DATE ARG VCS_REF -LABEL maintainer="ops@pleroma.social" \ - org.opencontainers.image.title="pleroma" \ - org.opencontainers.image.description="Pleroma for Docker" \ - org.opencontainers.image.authors="ops@pleroma.social" \ - org.opencontainers.image.vendor="pleroma.social" \ - org.opencontainers.image.documentation="https://git.pleroma.social/pleroma/pleroma" \ +LABEL org.opencontainers.image.title="akkoma" \ + org.opencontainers.image.description="Akkoma for Docker" \ + org.opencontainers.image.vendor="akkoma.dev" \ + org.opencontainers.image.documentation="https://docs.akkoma.dev/stable/" \ org.opencontainers.image.licenses="AGPL-3.0" \ - org.opencontainers.image.url="https://pleroma.social" \ + org.opencontainers.image.url="https://akkoma.dev" \ org.opencontainers.image.revision=$VCS_REF \ org.opencontainers.image.created=$BUILD_DATE -ARG HOME=/opt/pleroma -ARG DATA=/var/lib/pleroma +ARG HOME=/opt/akkoma +ARG DATA=/var/lib/akkoma RUN apk update &&\ apk add exiftool ffmpeg imagemagick libmagic ncurses postgresql-client &&\ - adduser --system --shell /bin/false --home ${HOME} pleroma &&\ + adduser --system --shell /bin/false --home ${HOME} akkoma &&\ mkdir -p ${DATA}/uploads &&\ mkdir -p ${DATA}/static &&\ - chown -R pleroma ${DATA} &&\ - mkdir -p /etc/pleroma &&\ - chown -R pleroma /etc/pleroma + chown -R akkoma ${DATA} &&\ + mkdir -p /etc/akkoma &&\ + chown -R akkoma /etc/akkoma -USER pleroma +USER akkoma -COPY --from=build --chown=pleroma:0 /release ${HOME} +COPY --from=build --chown=akkoma:0 /release ${HOME} -COPY ./config/docker.exs /etc/pleroma/config.exs +COPY ./config/docker.exs /etc/akkoma/config.exs COPY ./docker-entrypoint.sh ${HOME} EXPOSE 4000 -ENTRYPOINT ["/opt/pleroma/docker-entrypoint.sh"] +ENTRYPOINT ["/opt/akkoma/docker-entrypoint.sh"] From 17ea24838bd53637c301079ba9a3430a294145ed Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 18 Jul 2022 11:25:09 +0100 Subject: [PATCH 03/82] Add avatar image file --- priv/static/images/avi.png | Bin 0 -> 53957 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 priv/static/images/avi.png diff --git a/priv/static/images/avi.png b/priv/static/images/avi.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1134b5ffd30957bdc1ab5c9f74c937f9bc8c59 GIT binary patch literal 53957 zcmXtg2RzmN`~ERQ_9j~)Wbb6Jgz#92tYgbw$u4_k?;S$6vLbuW?CedFgpl>WegCiD z^Eyf%=bX>y{l4G#ecjh}-6u?4O%V@=8V7+u;5}B7(}chO!Pg=dCj3b{MoSBSp}WXD z*204Sys?m>@NaBKrDrY(1lruq7fQ#Kj2`@u%2i&^^*;v-R}T|sbA*S72bZb}?XcO12xvB^pE?39#K69&X7?r^WLG#@lTO8pORXnQ21uf!qGr#0|HiMai^PWbw$S^p zJu&+C%`Ha!PjB7dy}2T8QXDI5Yw6doAEu?JuN-@gEiF~dHMkTBQb+0E4w8AoMyjt{ zrX!iDba!-aE?t|{Tuvil@4x^48xZv0ynYmm91im5mazA4@UgJ6@`{Rv z9UM4C#>6nkDlufLb*wnH+Shfg9a!Ba=Tv&tytu%Xyt~ub*m!;VeY#~za-_n~IfJIh ze6UHLo|?MRY^lWuQ(GHe?#SyAyg7R!PWuW^$s~Jt7t^0J@#r& z6K7{)5)u-nqVZlNpE@Z9<{Okm<)9^Puh*|L4?Hh^dQ13yUa-IZ0r&lGcYAxgxT3u!0I{l51|PoI-BO$6^g`Q;%0NTl6D<7Dahj`1gb69MYn@tqvDaK{yGZTSLC zBAIe)>cBPz*u+@n0$71}DlD-oEM0DRm}qd7aB*;oxJQ#6jvsH;sD zo|mIpoTJAnGhVxMYmxgxC>@V0`Sz?Gd9fBwkPHeuFyG`VJX?1bCB?y@j8fP>9>;lc=IOT%sE>jJD>Zr#xvl#-ZDo*J`-Z0`AE1j*z|YimFKr0}{(I9|RIym=n{KH#vgTRxtX(i%{UWkht6Hm6 zTQGTmZ1upCg%l^soGE=LUFFnjb%Z&i|SC?`bCCp+H5T z?^=|w@9LK1^_k!Hv6odE%iC%#cIl$=Hq$CBln2QJy<3ND$pas>*l%I^e$t2i4d_D# zj#%oDn_>nfI@eD7}jV|cN81FjDx;WD`lh_>kHXgM>p zHTRgFLnDdo{VhX7!ydWcO^uCOb#s@ND~_k!E)DbFHH&MJc6NipA|h5{a!mi68zPZ> z@C~DQ_SBS)fS@2;R<3@Tsg)I0ACfqN{6S#PTHEq6101CwMYEdOw@ecPco5dD0ut@7 zAZzeYNB#B`|LxU`6(mDRLnFsPCsN<^)h=#K)PUn@1DBzJ9@7_B zz22#ZXBTIwDw{IRFZ{e34D1PlWPau5GQMUbQC-%~Y9%>~16*`6d@y@AFYdEj>J$ zcZr9zGP84dMt9;Ve&Xuprb^c*E`D{o_GH2Sgv_Gmto`ch%KZ8)`+Dcc-kx^dTnmTZM$(KsXA8Yxa2l25u~Is&hsKA10qpoIdFOM3S3D$6CGEu0Wtb=Oqs8akpg^-vyG&=U`Nh8ci;9!(CtMBh8y#2LQ#w{WJ4~y@&8zf$UtJzg z(|sK=LDr+!Q(yjmw~grO?*3ule5}Kt=)^$i-?1VkPN&G8C?k^@KC|ZeW8D3tgR)oG45Vs;Z56s&fP9X1g&D17!2~zKOwj2&-ImDZbRV zB_)-5oTxQ$d8;l3nvXptAkQd>{y6r6x)Zwx*ITJy<|smQ^AO9t$^RBLGDK(I5`v^S zXWiZ1S6|fGF3#51*B{tUmzQ~oXT9w*O@*hB=#&Z~Yi4DH(jP!F;X|YdxxF8^)`h5t zd>5cuy#5rjL~toWi=0{GNWNUnVun`ZTe^!1bgo`;>0r5rP%kl|vYiPI6F1|Z`4)>B`f{PK}V z9=LQV)@nSTQJQ!j^NP$>b^J#$(Z-NMRR1;PLPlhU)SEU$=_HP^{_}y`%E_hrW#RI1 zzwS%ilA2Ez@&8$EoffQFe7B{?aybT){(?P)=w(0v3Y0i2OP2VZ!L7sOXPo4Eoa8fm z?vSqf`W`d7&N~hyb5qzaMbkd~y_xP1?ii4JtC^sM!%)5DYoWDiM?Y6_p>?Pn6D%fV zM$<#h;y+X$mSMA_C^~I5t)1zPy&er(@c-D|&7I!m6&H_GXG5=<#cf)^hlBI)pBKQ8 zRcr3!D_9H*}= zAC|XER0P`B&8b2WnzhrZ7oQ)krI|>9$^lhUrbA1CS8#FR*MI&TU_h1An!?Z7 z8pZk2@^btDDa3{|RYyn1O-#t-5@x6s5sI^mUX4D>3CMrnm%$Aym0UmZvE%5>m1PcMDZQBk0RuTa5#5=~J>DG*8YXArQXvlkT> zveYlwo7Ce3p#rLcI8B_~OH|$vMfmh+wyg731ZE9vM8e^-dIVXT1wW-q3t_X$(XGr9 z|Cr&Ifq}icZ*(9Rw>Tnqp! z-~hlm2N$F~zS&uX!tckdK2|AD+Gr2nc|g%YULI0t4KV`iNmk`2^w7}eT_5t@kcIqI zyUiyV4N~+s(w@yPoSGpMz1O_&WN7@o@pbbH_z~PaJUqqe7`=1Vv6z{e+iyFGWm;KT z`9r{#l!SJf!UIx3?}l@Getuk0UeXEKQbp$m&F)RF!tq!g1@n#MtUYgs%C&VPjx>U_(0B4$@BJ zL|;X8F_H7958+JP|6LuOd_W!%_))fWXl4+W1|B=ErrzE(fcy?T4eZzvSm>xCd$r@} zQu*UMosY=mQO1P;52h8i0qiv9F@|3?Gc%JpdJ3x2g_X)Msj|B zlBDv|K0c4q($bb4MF=ChM(5`_Tcx~Aw3IWJHa9H*%jCitVTmv9{>FOhqnpP9yN;(O6~V?$K~P>9OgbD&b|Q{iOP(rD&faT{6YwH`_2Xy z)SFB&WD%=$ciqExDLXP}ZqI$lzAi!pH>FD7nHnh+7HrKE=r&Q`s$$2o)nkofxixeq zj6ciNFO_IFyFKhgf*60{-(?ywX%nPY^k!~P!O)P_w2D$eK|!4>*@Q2ZhmTM5jW8U4 zC@7>6@^C_8zr_i&Hd8h(X(@;2VZE=@t}I6-7WmAg88=q|I2JhkT@l?@Np`4*)Z$-Q7p?<2n0ruOKiuix0# zp^2lTdi_`O2>DLw!CaR&B)o-g!%!mE4i6(w?&r{4G})!D*JqX+N@RzOS-l;yAURo8 zD0r@vkoc=+ZZCLxmn>=0qK1(Y_a^Xse0;X|_Q;Y_QMI^|q5n}Y(}8_~GiHMj!Vwkb zl77^f381Q2OSyi4F6Ne65y_a97F(XpC-!;AGg>nF0C+hm>Y!)%9!kQ6s~@%4;ig*~ z-F6|sh~e;cn(_wJ7ir!{5Qd5$9(9sIorDwtohAU7gMN+*V>>%s2qs9FOt^RG=@rH4 z0B;5lY_zX-MXb1r1)(gei=9w}asg`TB>P8>Ei`|1^pX-B z&cfVWlou5gReCB0F*qf9oZ+@E5?Dy*muC(yB;)%aZDVD;!5!-ERsfJMudThG{Whm) ze21ouii$9=saKWDR>NM$UX6+&FKENE*zNuY=P%q%r(Z&7(ur~NcU5EF1X@7r;M)xE zQmRuX!COSy@>oH=SZFxz7P~abE&9L=wyS9>r;~2US(^9vvMq5QpWc zv)vqcG&D3QTjiVBd#gzZD`<*}6eX|N!{tS=BSDve3td(xN zIxAeyImscln2hDgJ2oxMe6pp$#KeTy1N;c_5o8X>^!J%J7UmmxApBj$9yo7%bK6gt zR)xBX8O8_Y@bsTKGYv;ZyvqFb%f5RDfuj>#@8yAAtcd*cJ;u9go6zi{6Bx`HS0Vob?K3^*C>VXJUvcErPnPo%)rhQ!^ zfc1t9h)Y0V=IKcZdx6^PDncW3AMhxGf7wPToy?e8R*rrD^1deT79YM0ZiuMIFI{7W zRA+9@T*s@hE+}shb5N(C9K9dkX|H-$`X=fudhA4tJ#k>CWT2SW=4oR;;%y>xo?Vq* z=W6!7565SPx?goAt+J^U)MD|p>(DH#vY+F$RMcD*H{X=3VDuCPRzy& zRcD$!xK|JA2}J_+=T)jXSc@)CTRQ3dcWRBq=_p3zZ7RMrY^UOfwRHZ% z`JcDBaaj4oFu~gTGjBS8J);76KrTQ~-gKT%pAry%RB>o|KZr zf4S$xLPsW7UDfxyosgNUE9r>D`NtGLRHRDS#^I}6b-3!# zbjh5-`meyE@W)L=R@*T&E{@3{Qqq~{PP<7aX2KmV!xUJ;bI5#}1&2VA5OTI~WY)5sY*(w{3?n z${;IttbE9A?x#X+A;=EfX@y#r%N9Tt6N(eHLV(e4%!7r)vy`nYkUU^wY>ZfOqy(TZ z@8H1w@83W4?;~U5<8M}0OaMyWlE@|?kHEkWLG%4euaK{?j01QT-V~rS>M4W`^wWxf z3i(n=XHXI`ns4EV)u5v{t$W;MHT7$IjJF~$#73&_Oia%GB69qxq+$IE)bv;-IW}~v zgv2lvQfHi6yDx}Pp5R~rKf|1ZymW``+u?cQk9nfDKdKm+8}xZb>@ejeI}gu6Yrl1f z{X3dExtP3q(bG_0IMC%w$j23w&=G)%xeMbvu0xi05;s%N*<&8#(xNsqjI@SaEezlYL0zOzmZDT*O`B*Hef zUM6Vub8KSbEr8G5%5?$KhRuvM+OGuff4TTG;7474?$L6XIZ>irT3xKwZ&Npik`rv)I+LC@Yb6lw&HG9G zF*bm5s1DEryr|Hv4~A-Hrx4$FSCiI&veD}ZfBWAzG2*wm_rkkOWki2dN3NKkB;U`5 z_Izwi<3N<^adL5eO@;JrC5L<{%pOH`ZS<)qY$QI&-4VRUM~i#zXeo@i1>@F4=_FRG z=Yj$P#(i=3RxP)Nf%+vD6i1iW0Dc*&nLK$ws5lw_bfO)9#WcrT9$1N@B1N8EBK`Bl;lUm@cf$D(TRz>SE?MUPa|I|VFos2bvm6k z+k6W5mf*fh8nU?Q*^~?T93wk_rhT$gSfiDQP7?Rjg1=?koi+Y( zti2gdCz1~vy&f>olRmtmU6N;89!OiYx_Y=dyb;0xdm%#sR71Yc42OU2N8*Rbu79-- zLxhTpE{NF!)q$5h5Cpgq7&8?$H5~sCNr-pYUM!+!X3;DprF0-R58hFqI6Aw2FcoAL zI1o1^WsA4y)W>Jcy_}?Jp5oDqi!V&@u#MTnZ;E(A6vR?V395HO^X*_0!2NGIfP{o| z16aeWnGWcjKBOj6G9^6m7C*jR-80X2kN1dv8a%I{YDM&$vpDzpWe1co;Dv)UC)??7&|7~~t(9=?s{eq_honeY%B}p5 zawo1oh!0_dLyy4H3{t^PTrgoLC{#kS&{F-k{&c*{te24@ax`$~*h@u4g#obq0H@1` zK4Dgd&6D%7si|P-J~~aSsHGY0fl88ZjN&Rch;iVdB*ewUFc$#$K^%tFnR$Fxjqy>Z z^h0SWWZ5^N&p?4-8wU<;rp7X+RW-Do0tW+1ZJYl4Cl8qa8p!HP1Fi-#vYk_3j_T}b zfu>S{rl5e1=tA#k^fXe0X^n*D2yNZH-X1K$0>U+ztQ6(v8&Cf-H*ty>@_ZOEYWEy{2XH;#?nSGxuilx(fIha=J2D+k^|}=k0}|VFjp-(Ksk`$KESdTYieJ z14kc^OT?vbo)De1Se^15;OW@ql$}t=?lF#Zm3~=Zn4)c;w|I~);H8O2q&V0o2Hj}e zk9!YT5N+hUySvaQ2lcEGE#k)7%cpY9V~2E@{z~b8U(Jj!^E6lnTMCh^WzdRynNZBb z&PQx-rA}0*XmY4>S9B5qhm*&XvT&U$|`_ z2(8}VwePu8-6lF^wurH?b@-@zCWSoXSE<3BmvwVhfCk3M!>JSWGX=*D#O;Md-OV!8 zMwK*3i4^-Yb=VN-!=M0oOBmrr5&6#ysulg0VA*KEwUS3f|1M0TRpl0maUlwNP_`81 zlY1|P(ksO!vY%pMi0&R))bEJ+X>s9dx35$p4iOXel^0n*-T7!mL`1NX2kr@dHoyfo zZ~5e$z$%n6OrGJH3_L#GFY zOJkb5$fSYWoRm%~YHJhDA@BH=dd z17?oE(4VM;wJLDhfGHm#+8c1E!TQxx7MkCdd(*Q7Vh?4p*JenHzVU+2h+; zIK;0;Gcz+XNJSlR6aa=JDR9K@m+^5_Xt4uF-L`*H!ylvm#hay^2qSfxGf`Qlx3I9V z(_`I~R#Yen7|QgRR))tq$YRmV;k2#7Iqne?;8Sl9UdF%%`t7H~o=Q^BhrAu1#@iLJ z^^f;Rf3&#~79sssq^J~{*Ydol;=|kuRE4yihkBdny{T`2?||D@Ehks_8x42F6gMSgX=< zgbo1mZ8cY>SVD0Jds23$Mt|46$GYZCd2&n|@wygh*r-TcMJw&cdbteh4c`nmy1B_C z^86$o+)qSc#7V`^KT5>WEM$$3SCd!qmeTob;71i%(8PuI0=IdamPkEeJi+-i$9mlD z2-HmlAS$4V1lkPf3OQ9D0cz-J6pW1M7rhUMs4T^{{Pm9CyXOsf;JT$A!GwC%x&W(FS#4d=Ff~(wTUYT)=$|2|BQxkPk`P!GJ!^zuj zRU!*DT+~rG0qe~hSFV2uoQPM^&_5{c7fdFW{`g>U7VY{PyPt?Nkrz|qHXd4b>dErI zevy$I*41@KQ)8SC7c;k{#CS(OUjwulTwGkN0!0UDmf?4|p(NSz&@D#14sIq3{lped zJYZ4dC-RxtZCQj7{W9S{wX?lE`H0bl1;cUXsN2JR1;obv1N$e;(6ai!Z7@wA3idhw z8y0=nHCr!I=H#6ua;Q&+i9&)fY)cTfzshk%CSkyQC5hi~(@~@nuEo{e-4uyLzu~EP ztnlvKxpT8rnkIOk3#|bUxsku)`adtg_OD+Ge5rEhS6Nn__n_f`R2b!!`^^-0aHtz^ z_@tm|BwEB(c1Lh@0lLw4uYRWz+;0aScFkQU`N!re{X!U{{pQ?xQt1OTj9?PYHSKOTomLk8Q> zdk#*1tiE0*85M3>{D^Je{`+d88ww)|6M%$ISekXJ8Ejl*_%kf#>U`Yr z*;%j04mVwn@9({ZDbuP}D8;5E7@4_Ge0-XFOMZKOk-R?vjmp~E+UnUh(b)LE)PSVNWzou*5QKoU`6q%9}34EmxEBRGb z(5A}TvCNhslhtRB&1~;oMU%g9KMP20+4@Mk1eAJkaIjn(-q)VjacXy>6y!0eo6(sn zpcxBPTo@Z;Oyd9w7#9x@Iy&wLM) zX*CeqZHEM&Vrh&iXZ9aRX~4%v!;YW?_7#gG1ns%D^nSG{Z}c8prnI^;Wk=;wkR^i( zJhw;w>Gyi+A^*qV_Y|Gtegf1t^oN3?qI?Y@IoXg-Xiavk440W$Yvky-(3`8O4$QT+lR3fzb&Y(;q+XsI*(;?6vo)Q_MTGT}>=bNRT--0xMW#Iv z#w$xvu}q8*R+^lzbI2Z@s68D#=7yAznVAVRc2^+A?a{HZ09X*T#WOg5qT2?*7Dq-$ z-<%pqvfKOnionQ1#~t+R*Dq?7z!$+Z*@xE+y!X{fk;Azv9GlBudLt!(diuH)1DZ25 zt0^ih8bnI>IBTeO?rZRB9B5XGjCgaU-j#czTA3LBpFPpNc&BwYR0~gRKHt^`;O$dV zQd)siv!RY89NXXDuPByFc!)TpLziyoQ3}r!ZuQ8>Y$??#)vGe?x&zb+Kh}y94Qpi1 z9o*n!P!ULKz4&@Ebb=92Imt_NQ$e$b?9WVt9})HReY%dE!Vjva{W}DjqO+fZA}|N* zUtajJrvUU`&2SlR+bPP9hTfJI+!BISTN;BH-{c@vH4{zUJPc5piG8Rx^!(z~&@>C`I{- zTeLzoAfKUcN*{ANw5)ezL?k^IWDTNEYk;0;a?w>@KdNZ{Oa1TsJV;lnOWGkYim%Tr zf$Wj`T(go8ZgpL|=$7AE7VMRz#E&7Tw`*^STx({(_`==*Y)9o>#mo&(TCk>a{kG!@ zh&=F2-XklBx;lsNZ$cZRkOw#<1k1AOu^TF%ByqMCB)`HqD|=K_qS1ZgjWgtPSLu1dVe&dMwIZJ=y-%4^!u)vpkZIcv z=P?Qf0}rAhQmb1QX&Pa7-`r762i2KCNK`0UlyLnoNisuzOkm${{1kj$ASH4@y4Swv zG-CT_rMieEK59MVkt8cg5VG+BkL;kewe|g1;#sdZJs;BiNjWi#-#C~Z@fE5v>A>9D z-u}SQK{&zC5n4_(Yf%%1GjZX3EnJwmP8nmc2SVTtD-Ike*cmFm{0aY!3zE;U=oZbF z^M(CxP!b}8Zc_|z9npOIpi_E7=Ly-*hxX9>(LjqvvQfpi`XEI9{mi#JIi|}2xajQp zV;>lLdtG%JtB)c-2;9Hh$+M2%*gE*#S@rB9vhSInTA?XdGRabIo~bOpg~X{EUpeC% zANtA%gk{qvsi|lti|)t1ENq_UE#%KPhfGC`hiBr8=ZhyTzjuwU|9x4jBeChhHXB0$ zg5m@p53h{nOxislCFXA4P@lOj;j{RD)Tbv2nM$XkqL}8{ybV$tZ|E-=Bo0$Yj5qod z55+k`gtfH65XMny+J)nNb(pQ_;UP@t{abq8@A@(iJwXy7_i?~)K!v-o3R#!h&zGo- z{X}73iKV#rUXBWF|1a*4jDciBQ;FOA9Mdx+n`I>N#;5WKRUNzPX{nWD6jd*FzF&;v zrVTOcGk021UiAH(VDy`wn)=%;YV@;%va#;E_u!7-UrWEw&OjtsPEAf?Uy1S5@VH|5 zNM!5z0|&0hsWaYzmlC$KuG&RsR;&M0dCj>2ECJvI3K{X<K6`Lw}F7QH!A_; zirZZE2;CR2?j>;lbSSw;hoJYwN^_f#`=(Ia=Q5I!d;8QpQ6Yg zB`S`&%L5l^IQ(ZPcfau*w%LyL_h*KA1~)_s_8K$zvBpQNm&gQuzQErK(J{iLG3W9v z)@p|or@T8|aeZ#~^}E9(HMWRf&JDh{e5n#W{6k3e)O7!H;XV$#Se27^vQsT`24_B~ zKJ%j-y5*g>Bu}Mpd}oKpKYF|&t9ftB(zl0595H?YGt>WWh&9VIue&+(gfR;5P<{XKcuU`%RNH)rkeDu|zL*m^H)r6^Hrv{lEWnm^DM#BvLk0i24Z4 zt>trY@ne`{Fk0epcmA14>Hr8XC^})*4!F-T5)+w|*K`US4iv zYik=BM8M~WHb~>v(S6G~Sv`G-C5@TKPuaF@zY2MLlY99`#NQ~=y;^^&*1It_KOcDm zXJ%@xNhJQn#!T=K?cA>lRj`QT&Ahv{W4`}b;X^>Gh=H17U()N(tM48j_AcKc6Ks=D z`a8_UooHx@!(LYIZCXJ?-LERMp+MwqFZ%Nxwp4Xo{B0W~hNh8`-lbDtw?+X zB)qfI%!eMID?_E-A8bTv0C!LZ(hiOS=_7kV54rjWFI}^V)GIfXudr}<%~jdMp#coOo3_I@4u+*xy- zorU1(7Jf`qWV=PK%Rw-*QC=eXp5s9`-ZQ;>eEQQ;GUDXx^=17=((~UxYesPDCcwS~Xi`ec zy~}(R3;PK)MS0V7Yp+G!3vvc#<7U^%pg&f&3S(A3=xxoWVI~o0rfYo{%W%xCwcl*$|mS+ky34k-{`ek z8?m%|QvF@cZ4rbmXfMz;aqray7dN$tX6@M$*XI{^Thq}Buo4FG*~XS+ zu@~?J|Gmx;5PZ246(IU`?S4^4-~d+>E|@`q2hCMi!r~0!ti4FjW6Q&so|#FJ+BKgr z98MkB=yd)UF}?MVFWTPLR`&c#-+z`%Xxy{Y8JUoooqRy=MY7&hT7r{2fC0PqHy0G+ z2_tH%q`Lz&9;uDZU&Zw<|0I9)J_M7PZn~oQ@Y>s|Z7@XsSc{Ro$_FJl4bLWxh0?Kx zKoU$Lc>^{Dd<#*oK!NKuIN!5x++mrRoE%!{ur_B4qsVzn|Au%8k?^03$6h||to?^s zd*gL?t3q8yt#|Ce6K-8`GzQ?nM4sHHk@HuC>DjyW&wY1AtLhNa zg8Khv%lQ!|sk5B_NvMol3ABTK;M9lo0 z4fz&iOyCFs)ackuU@f4%ZD@Y*SG`7J=5aH_zT`#Pu72*Fc9 zHys-@$o1h;81+q^%%Neh&1KJ4XTRT{_-r{v#arcH{wR<6KKuN|Sy@E~^?gl$hAYnP zwZ%Hq?SmThGq6buyxg?1%=s)8Y+W%cM}s4h9rDI6d6)6D<0rm9H9ks!ctb$J;Og2U z7`nE1c0^A;uwJqCU=!uvdefHN)YP=VDW4!s-5u-Bx?|P5%y@RCQ>y(ge0>)b?*kuGTp)BdODkIb1r4POpU_Ws(s!kJ zMED*K3H$90Kis#|PS{a<56@74PK$pF482ugn}?R2cUD}b5&$x|R|%%d4PUzw#ClUT zwmG2gWV#$`vTm!dj>uB@(WPz4SiLj~w%8G0wSDmXGw#>RJ%@v=lP|YG>hRQoqLhJr zA}(+7nOCT2StC>rwA!nXr>zYS=u6z(OFZv71R0UL^{Ga>i(WkmPU03Ce9Xd$tp34EZ9J{G3X$~$EH7S3zR7lZY=;nxA zzYks$Oz@UW2s1+65Lwo{{UMmSF&e5k*m$Girdq+Ma`tCK@3S2hA~b>WxmVvUs<<&F z>DB8RzUZmUUmgtx!Jzys?JI&I4~{$!FK+x|U{DUt2XY>>9MgSIxWpx~tE@ucqc?}n|chxV3v z17dvp!YDTJ!&MA!=I49^$%><%zpL}(YCvvQK_C9v?LL-g%-=xRa0)a_is~e- zy~0`kNvzMFrNw^FUyO>IA+$F?p;+pJIMUUq5ChyZV0>LbSKP)rIh3~qe%t+q zn=uE5=lvVbCbQM%B5RTSj?jr2gGC%HWMBumQI$l_I&D6!!n{Yv*;ck6Qn>tm?%%81 z6S4FtlNT8+;}4zK67MGbHj@&(T|b4=zcMW&Q<2sxeVK#G^9iFSl zX$m#bpKiaVskT2Abv7K0ACI#b_f(j!qbvLoRb;+1<4m#&%hQI{aE_MiZ%?>sJwDHW z(K{+H=W-iJdO+}d+X(D)+i{@Z0!szf7PvFdjYQqf*smZ!NM5WE#87(v=ln>$@tR7x z+#z~tJ5xg7gV{BKQgir^ReD)|x|yoKd%<84v)pnW97)i*QQktH5t87CfPWg=WJJHe zwOsn7h4Z*Fome0LFSd_2e$$!OLB??LFqT*)V`F0}Z}1O?xpKZf=Lly?(^qdmeA+1T zrfB$;b;68bOD^ueFW%4wu0^@K#A7g}lZ|qEO2hfxBk)6=%n>swOb|9re3U(*~ zA))r&V^joa?cmSj<>B!McNbVAX`q4|UHwTu5cWG1R&;%OuYtxv3=U;p;|6QAX(#Md@yu}QMQ^T;^TXf`k6YSaV$qL`& z&|k$WmlP9=yC{2aKX8lWhG^o*)}8OG8y+!RWp$infVl?5*)cG(K6?H4W>tmjN~YA{&Udk+*If+10BeGmHwuWwRu-T!y`s#{pU3_BVxV^JRd_Du8< z+es)hB^w7q-@bu7+XQPV?1Z@~dixp}*J`)jDOMDkX|bI(uI(m|{TD{;iCQ+MsPtd} z1zs)iWhcFMroFo-bZOJ?W$@kDVvp5dSD@9t+DX42rb*ITqu4 zRN+!*<>yVK%kvB5sp}#|dY_}U3`7Gx1?$@{?txse5HS+}wxyqny=vlp*>}D1{vG|; zXijGqrb?Or%N-M+|FpGTU0s*6UjHI8p|~T;XJKB%pySiGEiCz@ZF2WG&kR@N<*Zvd z*b?XLBmuE-VQ0w-3pUj5B01cUz;TfSK z9hWrqOA#6g2fxO>dYXFAdCtZ{>wfE^%)fh}Zb(t$2vfxE@Pn8?UkI3_PP}nD2Jc=2 zhRss48qV1mZW-#QeJ?F-5`m?au?VyPM9XoR!-~)TYoj5joO3$2+RuwK7($Dp}|ksThX z9JDc2Ewf^9bbL(p+RMuqWBCvBv$PJ{o}oOLa`WB4Xrp< zR~4qc8mfLYx_3sY-Zyj^anXl|2e7-fft*K>eoA=m`*(0cR)I-vOe4vdoX8o+LRJ@)yS61BHcz^78X#J6Bb(>3)K;k3maI zds7{FC~w@Q3C0#wFj=zd+^{$~K7LpuYEbqjdW~rtrguD-fyp)8Iq(E01dzPZU;xxG z8s=|$X8Un^_aMr_8x26*ipk>RH{V_G5++J})*oHH579w49Z{Wb+{M2f6xG(QvKXQk zKN^*7zsEx11Eua}CJ96qKnFTy`aw{FYd?PmBY0#~)Fc)$kLvINSkkSm2zyldDYDgy zx~eq5L;~f>Sn8um@_;hc^MOG2!zpuxj660lufv1M@2PNRaqVpL@|i*8T;IKSG2iHD zXg;2=QhYt_kKk^Z;SVWwYZciH^c{FmhfeQzanR%@mbvQQbi=bnN8=7^EFdi0 z0VTXG5Cgb&3~)djJiRb_g7cG(vNEO%V3BQ1@zP_n5Akc)E>*lE#Sd*+kV)y{Xh*L9}aSV@7}2X z)kbBD$E3FI3Q+hUw`PCX5K13{2_3MXg7)?M{1S2tjBsNu}Tx2zr~}& zc!mEnycy-ZON=OdEDXaN8A$`Sv3?`ve7KBM_`MT)s^jRTF$~r74_|;gWYGWKM=0*# zhtJ>|&|>2Fr^i?anZ3KhXU~?t8F)bYj8eC>N72POe&=&b5*t_N``0dKgB+V0FNL1t zu@#lDLwX(-KOAHhnW+?us?_C!uu_Zuo*R8Zsy!`cH7vXT(UynO5wQFkGyR!TROz5= z3Aj%{Ks)aQ&O7CW{iNLY`>`%KtO0^A;OyOq`O{$Y>Hs?#8hu|0Go~CO#j@!RE+!Zc zG^9F8ngE*qS*uxiy_kNU@ybiz`}0Q@yyU%-+d-(G9hR*CFzeM3=B4o!$J9%Rt5aTH=s21NG>YD2R=eBoIt zEYK8yp<7Oa%+OU79bplTWTEWcV)S~-Sai&am%P02gu8jd8|JrKt_#!c|Lqx+llJgF zjN5^Ki0vLv8yNv}i@pyLZ={cwrX&-`C>rpr2?z9_|02md7q&9iL!;jZsAb~OAE z5`27r_#1g)Gy)7}aKHf^=BYS2J8Qb`bCO4R?!R7oJ#(V*?<4{RVH3&ZitZEAY1^`Kvs!n`h3 zQl*Iss!=_f*)mKzfE{>joPiJvY+VdA_+|j#05dZD;R|I!YjbTf&&9C#@qJ?yHAOT; z)n2KuHfQhxjUnr~wzl1Tebr^-Zu$8Dkequ2F12!|G$hj3b$;h{K?IMEM%lqy=XV<7 z*D6n8cy~1x<|vmgHihf=Th3uB8Qrk5rG;+a_oRtnS3-I99^1i|jqk}7w_>G7edJe( zk-)Fby@C8sd50%$Gih#7Df>~>j$hqTC-BLtX!<24e(}2lpmW|B>vNBjlan>*(Yn(e zTEaZVxk?89H^1h;eM=Z7%lrEJ(tO=OaSN8~;NOQ~9T{GS)#qh7!bl?5F)`;CBQO?|^(WW4@mA}}z)KI&$K zoxmjc_39v>>WipechZ9V{G}ZE$rV>bzyS`84p~_nNgl=KbxCdliTV+~RkWu}fbnOLx6i)*4&uHrIouq&MR(>xYBua~wO6-9 zH&bcS@w5dv0FJihBPZ#!LX(lKM^FX8{BCL@@jHM(s%ZS?N2h&HeVJ_D5}31*5XfLl zI=AlcUmB944WWO898O6|*}B;LI_O^V`6o0&RfUHS zAA%YE#%BtqSa>>gGap|xQ(I;@VcyhXsO&KK1Ro7xc0<$`jUy}!+>O7ho}76D)+F`M z&3McdAEVUs%w)?8+y=!%y-hZChB@bzHxUV_RSjk@nRkM@&ejD z@5^7rExsPa1K*EN&m+oCXPU~aerMJmDGIXRXIndwwiP`Z56~?)2-7arG1*^i1`YRS z(6nhGR3SgG+J-L`23cYF;O6rjW@gwL+y8VLz{f8{KZ%nTgmFk{MjQKGJv^AHquQYw zV7`YY^-a&3H1t_FMy&4BEc1f(=|eWQU;?`mX%zF2XT~hPtR(6hq+@@=JMUP~&9o&c z?}03=KRY=&IWsvaD5U#Dpva=Ev~-}+dc5!?%Wdk}s)z8BcMYL4V&=;${;9I(A*|Wn zniuvkB@yCAf6tXbJ)G{yA%wlQ=~n;g*Xt~~^N=2=gRd$pS*$goMWqhcUGZqSN*EP; z4^|3WtFrD=h#k8P+7+7(H(N|O0xtRtR)*BHX zJOvtz-Ap9<8Zfe#JrW|tz<^_ne6sJ{0L>?uZR9USsN5n`v3~;{HHN{OKEy;91LGm! zUmZ)&!U@oM#uctXiUIr>8~&LH`zk{2-?L}Q0~-l#ZEgEQD{(_*^7K?xXJgQ`wKTjc z?6(F;bjzEIJYwZ$$L;G^Fz12e2pI`X_uADmyEM_?QYQ0se~vO@&#`u-d=_SjbvWP#QB>mo0r&^FTKZ;CvH#n#+$1OS#dA#%&rGRpx?>a+* zXp^u9I$Z*oYE`jF+wR09gc&w)DT5)L^yAODIszDnV(KEp55dSAn);8F2X>yVnkzZt zSEW*RRhdA91q_M6hzbm9%G<*faw}khtwR`YVUnnB~K zs@S_@FkIGwu4z$czwj@h!C*j?1O|c=HU^UYRA4|IJQGVd)(}wB``aX99DH`4&osJm z+sYoWjVP=#G#bVfqug zpt#_ktdW(fEte06AL>`R%T7DZbvSJ$t6R4A6LPJk{60iZzkcHR(gC~TIN|sAMJ5(g zhy4}11?FQ_tjk;K*Ss`8q{rZ+0l>J{TBw?iP8D2~fgo&6YBMJ6{bGQxOkFl>S1xLn z*$M%|Z1^=x(RmGZYoB0G-~E4(-Qfp9QaGd&h1Il7@*U10TDN+-k1p4Y8Hp^!u@ zgOD$F;~^Lu8++rsKWmxY1z%CO=)DQ62d;J2V&H>ltP;^LKh_Kf!kjcNn@$JJoY;M@ z#U_wAWdNZw_6^P@@?$u?ct$q?omzzFRs4Qc+rF3O8_x|KsGDzfo1V<@>vfl35r6*4 zWyPHCw4P44IhnSC7|D7Zx-_x-~)JA%wSLi=4)L`A!|Zv;H~X4m1a+D@9aDZppR^T zDbVHe9#h_`q8UR4mYLrnL%iR11R@pkD=%Q$4lqr8e7rCsg+w~L#_%C%6tMO%Jl~2& zAP#euJL8ITb8}VZ1LOvdZ5aQLrmqaEa&6jPw1l8Yry|`g9g+eP5&|O9p@_7Ul!Qo2 zcS(xU(k-0^rF5615>nsX`}yAE@P}?Tx>)PJu9-P&UYtzF#9TLWpAR~oIhx_-EV>&i zaiS#s)lmBOTJKWZFb9|jYmXPg9Cw~sl%bw@=R95AE3Ef z?Yug4c$He1Q+lB@rYlYVPv-fS^>0W685RdE3LHxi{ zrHcS%iDwa9OLEI?-j6Ru2<2nYy)dU>_Q>5kBZ{jL6)O_WdR>e@%FZhya{PJNzFdEI zp2(Mi{$e+z{P{0oBd_1pz?OfPl}_b(dORv1dbW{FlY$}Uy*2&4@O&ZRM0_{j5DUAj zA9EFUU?_Pp((W1;Yu&A$u4q#|>a2zTlyp1Pe$ zyU+Q*@atCglb`*WqPPR&IHjMZOSHY$u)a^u?>0$!xD*Ry@m8Ejb=J zA*=oEyz?`WqjgT6@>G#yjh4%NR-f`!uH~Ny-H|(nip}m@SpPnDZD}g91^F)tx7Mvh zmwpADq{-{(?Nh$`RemqEPwug&wO`-zAFlXcwYv*_3m9+ZuZn+I?&4&h8k zb3+3)WK1>uM_|d({~H;gPr10R+(OuRA18Tit||-6FNoU-pPXA_>7@q%*E4!O)=`5m zNXkzl7^E&=i;QvInO~@8Zah^J(Bl%E)AY2KkJSxiASKYyT8CSJ>0m)bjZp2;j2DsTG-!=DKGmW_ooWS2{uiGK(L%-D;^4+sT^k%n*#OkR5LH9ic|GAbWlj;=9 z2$$Y^_#;~RVa$LHMSAhgha!AI$C`?*uddxs@H{X31Qo*{8Z_{XvKFX4M7vhPFB}bh z9s}8m^_9=PYvKoUV4MXWRR%au5{2t5<-r}M(A8?051ElHpctFVK16`8o=-|zNi$+B zv+fmH59(UpY87B=|L2nIy zpp@@=pPCL0C7?vq0$T%*s!6%N1B~=$zkgQOLRieR$kh1m$1kUYpx?W3H0yim^5Ufe z(Z}D|IisZ4DxZz?w`lZI)E=Zcz{BSrB~z*#)cvBrt>~Xn|e0wB@2+W^{5jecKbb9TCOk zau?xL1xDiQGMPqqxNGu1gXI=7h)%q7T7w3;Ev`kN50MQ+ynqR=%euh;!%+;&9P4XO zrywH`&mzO9CHQ#@{#It5+Z`&8uNPvz>Il9%2(A<@NG<|e4gB6@+(xXZc%-IRj~ip~ zrvEyd-th?mKxaO&<%~&P`rHN8S|ELHi%b*rCp}6t#1dZfLF8p_zYUQe7QJb_kv#XQ z!4=mXX|&0o&7Mv(r${3JRmFmM_)&y7z`149hthu?c_aNFM9Q!c$O%-_d=rAX6-Y%O z8BD>rtx*S`OYQXb&RKUr@vo&jjwbZzjXYAA~&Bng6DnxiU#QnXJ_6J z6tT3tT-266Jw467J~lR%&s_d(G$Br_YJ_HdK$al+rB&MSyOaUZ zYnSR}QPcJh``YY;b1N&qkBpA~l|%_C{mYPw&w`LJ-&7Gt29UR2#|w({QosX?W+2e9 zteDy`q=20RQUAdMb;ZNO1BLw#0V6x$g9)pd_3@h6*+20Xfj4v)q>!k~eV$8xO`O5> zzzfRK*0LRYn~OU?tgY3kro6$FhwviJAp4}-HwNXt58ML2DcyU?Jl`l|kG6J92UErF zdOdAKqsYs`kkQh*4vy;FrxV~+?f^+lIPMMRtg0%V&Jl1+;vg_-q z;^X6se{?MwSX&q1aipfCfL4kmGM(fHiB#``ic$T4Oq*85hC{$7`}3P0Nk5A5?Q-_t z3*!oTIC6vXj(ytO&3i9&A3gHok_yW5EhcefB@r8kPJP+w77vfcv_AND;jsh@l)hl=9gMx~WJzsdOt-<;F#Q|lR|ED5~? zF^rDEXv`QsPa|MKD;j%(kuzYI5t$FXv5R2Z8j^oW#!8=*&c%YY4zLB0_4i*7s$c2# zo1h{;P@xGW*-(G46VagcV^54vOw6sQAchFJw-Vp%Yc?w;Tm5SEwY2=}oL7q@t2Q>C z#w8@QLrjPXZ&pD84hV;k2@S-4@mZ>9d9LvR-TNuStJ+l$CcD4>wyKL75W+lBmJn}x z9T0#{^K!~DN%%Px9zOo)6@FukSYM!#zyb?@$qgWi>T>ubb;=_raxOO>wiJWX{1Do> z_&ml9R^rgYlNI@M2R~yUAE|teOsNvyXDPwr+qD?q3pBdNTP|EN(L3&ZY6N*Ua@+e{ zp3a(gg`-Kx=DV}~bN*m5;YA(Zt4<@`8BQck`R0_GifR|49>PVO>RMXpAwIEFphr(n zZ^0jju9Yd#h@Ugk??YA=3TosJA^ca@pFIttjGUU6RW!_@HNVG~keK*E)UwKsiHV7o zjZMou)|RcZpzvu*@czCN06RJmC|Fyo@0w5^J~lo5QQs13o~s;1WhgD%R``cr?tZqr zBzNgxGSaNojwYGYUd~Qq2r4*_r^8EfQJVgC@w6eO& zArDDDTIDA&e&B%tBPl0Karc9?b@zj{{S zO!uw(qhI#nHql!l1u8XpVgbn^qpD;i``M(Flxa_t@PKU zEA`2enCsXreM{os=3?MixXVbarMJ`SkKqoD2juO6NtRtGE>`+|X3i$QOgDj?Fu7ID z-VS z=9};geZUh}rhN`M0|zJEo!9aHU2oV{%yq;Sk1Fhi7z8*Y7l$=1rXYr%sChw;YI=4f zs#{6Os;IG%=0(f7uswYK*QMdVIRcqBpYX_@a^PnwezeqKP3_uQrAy{C2uqFKO<7az zCFrCpPV94yCVR?b#)8O=MV{V*C@%NQ^CRg_UE1`&@!tt$Nxn&c#^fu?xFYx5*7m=y z^v;Ys#)pTcUH|@WBHcH%vePWr>K!;*kr)ey zZ}(W{VX)99sh`}0lOgokZZZH!JY2ZL{H)sF3;4dik>3loV$LFA^p)A zNEnv{LI(@tl6QNg8+J7guzxiiUQvIRyxB* z5T&BYM51dpzN~L;)op-}lXcA*bCUP7^<)X0I$*}epS`I01-AY7?RWu!g-QA;E3G&c zV|qF|Q-pKdU|bX9)mq0z9gHZL(;q!bMgJY0@|I}>{%%lP zK|6Y?((XU5dKKchtX#G{lF9 ztTH&2d&GJayvWAhdz~E_zV9zihMjfeQyhl8H?yTJLD5tBnxUZBu8{^VjjlD$Il-xMk(F97s@`|tC-Z>EERb7R#jCM z#og?Yzvi#3&Bq8pzy1A+wA1%U8h1;Er|SCgyo}6=!L71%vwcw{~hY=Ue=B zx{$j9UGANg;mjyx%>3Kb&lGEDJv`i|P_VL~v9ozHAcb#AxyrZT^`xJA)OwXppz7ib zSgR}JPkfsq>BPOx;gXhI*c3P1{H#hF@_eip=n(;EM}XQcUiDfTNM_~WkW*E~ciWx{ z1-hElxqnYJO?GB-vWU46ra^=hdH(!4#8r(5-oKB7hl&1_UWH@e8Gt8GcNs1-TPcH4 zldj%)cbcvzbV6DP6?-2uPvvAdn|6MyjUWI@9G37L1Ol24fg^17wq|F`J`hC&6nrgR ztAM#jvpLxxurd3Z*%AL2D;AD{LzvavY+NS?=h#+B`+qZ!kv$~b-NJ^*2q z^{Z^I!-!H?F=m8R8#yA$KxM|9l>2}tF>7Rmi#o5stEB^NU$Jdobu}q`v?|KVyE1qz z=sK(;?}FcsrGy#0*zW{W;c~y|dZVzq!@ax*#V%b%@}#7s?4nAhI~yDA5Ecarh?(9gla0X%;Rs~e<=@xGXmNb^`pM!GlPNIl=s zSPaW!`|%Aw>|fHmrTve~rs=PYjU>Ov0otHnMFoH3>2?F)f8=G*s0^eC;e$c3T5M?K zf^&pkL81J*#_W98H+ll1R#B>Fz4!EtPBd~?h3-)J`PMNI&3X$Ko?aq|D*0oV>qxV= zl!RDB%D7T9|NdLSI=n8+UvJ4q_uZqkZYAY9rH>yPbBaNw6_VKmd_Fv6tnBRVfQs>& zcM*&>R+x7aBA4;49~8#?+m`5)i+hD%)j<+C_~PL7T+IFsZee!W^8{5&Xx1yjscU<&Y@XsU84WV(1 z@+ifZvd>N<{;gVCFPVL}$MM-e?a^v!d~0^w$GL_&WTK$s(=+m4yC24LC#t-zO?(H) zlG?r&4cseVm-%6u+a@b%H z2XC-$CdMB*np%h`efr2U-?nk%0L4Rn$3F0@%@-b@J^VDEe`_IIuedp;@jEh7{o^t^ zSLRb6zxg8I{;xWhJTvNus(gdRn1rTni98q0eWl?<9|ZlOOIdj{Wu_PiBO?KtW)&12 z=wEJ8Zyy*-H+~fo!={zvju!VMM48;Q-UnGU;+z8=OAx~oOh1@l7J%GTw72J0m;9@v z^Y9^u1A##VXfxnfUw=OW2tz>wrRU>{K@;9W-U&xh-&t^FMx zTXFo?ud*m>~x7?l!|qN_o>O4lxh@TW;1^;`+EcvsmZtZ_gJ~O zbng*Tl=SHM5dEC_RnbgzeDv!;>#=G3v_^*q3TB4h;4*cXPK}SMH24iCp4LX+OwJWTp{?`mB zPgRAf?mdKg<)I;5I>kjrqAoRKZ9-3FFZZH+x6YS&eAg2&esedwN1I=q&R$CS999n7 zH69d>Arm{??^pfE@e*#vo>EjD`%GI4UOhg{BTRF>OSpY`pQ6;~TDN}3j9CrZEL=t{2a@@A3mi%hCrm!XR z3y%NO0uasi0|kr3vzF+Wqa(gR_+F(~R{^ry*n!R#j0Lg~9p;aL1HnjTCT-|ynNp9H z+(1%A>J+)m@2TJtk;jn5_wGK|yPlZ48jRGYAFAdm&a4HgwDk4g^!2Gg5r^PS2C9f0 zh5EjZdK;`*k+Cz*4Wb;gV&~!zVj7e=h zRm;wn6bkH{w4%)lOwoSc^)9wV#M)nX9NSB9jHe|w>QKh>ikUr}Af>-vkrtBwxX4#@ zHdTEnH!&@ytkE+RdX@&MzXpWdy#?)&Z(CnH$KKeZ7wf@Z;g&9@b{D&e`9t@+f9w7)Y z_ME&tSdM@Pw<#+R&-hpQer!s1s$Rv8*_W=ak0Wxq)_|US(mOZ^lKqFy1((J>L`&~d zq+_)`Cz5a7Pz|p=|3El(G1^v^b$T;1bu_2V4t>fa^Lzw53_4nRcZcnx`rWqfj_*%j zUEll==H%G_a0`RmV}{0JDlFP9gFwV8(tQAii~kM_0oqUyA|tgPdKWz7pRjtNo{{q4K{ToHg zy+^-);pBdO1I-$Z*H$@_JAtH~rlyiEjRUv>;m=i7B!IycYlRoq>2u~czn-OyP=v-fbSzY|M;NO>Ao)#YqP6#pfm6W-U zn6XJ(t;_B7u5!@rEmZhkog1dVN?+=e@vMtcAfvtkFB!My=3{qU6Dqp;G?hGX=845C z1AQ@E@NZ^n$_Q@ib^QtpT)0mq!s(@r&+WmM!F~~M9tqY0Bslo^!-_A@8%= zmf^`og7^5UiG|A2>t{LvGZ0GddG2r7_;M-O7~y_II~}mr5M_)B4fQ7bUK>2N@cVX(={S#76@j(o5sc+{i=^j2<5!=SVy|KbpP#vD|DP zB}s-P3V^L842BmE`BpWE-=Xu`;%nS($G@3--CVD}j(7rH#=y$(%udA;B^KT=@JTg+ z+|Z-l9JC0Z64RTgm%HCIW^CPE(=s;*YJXLJfcriMjUfiuMEYcJE4Mg&>)e4 zr|T=ROUtY;8CKM!j1@I#khQ!)CD&b4kRg_$9q}|Gui^Q^mr%J2je{0kxy{nZpMOy! z_sP!ROX2#mzMA-XG89bGd?2nF5|e3IwwT z+>As}@V^Yl&9!8hi*a#M<;v}Y~ ze&Anilw$Y=fx+HVnL`^jpFgwn>*BeCr~+b9xEZt17h9N^1bOGmf#ssVlVUB+E(<3~ zB!Q%AK+Wmc=;pQ7>6fz+(B7DJg;OT+TjK2>9FPVPg|b=Dz7ugLKBA3}zlZ*Hnzu?S z*E~?tP!(O_o9*24(ZcZx*6oA(=M%}T3p;LX-seFtPxrPLjr9l2!*-%F&AMOgQ!_sSw3-KB6MPc&~K${*z*vg-v3m`EVGRcvL0_1hV zn5u20QQiO5Ov7qChS%gWUD++Rr_}Xta?gQ1 z{(;MPr{+}1-NRsktWGMAf&E0zVLl1VHPtf0((8U3cdTn~wTU&dFke_ahy2^@vi$rm zO>J%Go`GXitS0!wKG=4aA#|H*36d@W?q(N-^(i2ZE(lDfil*XYVNvQ%R`~c2v>a3j zdSQB}e{TA)qwF_LmNdGJr%XhG4F-R1J0Z>26sfkr8exKq)5#jM+j#$!8i+-X8hjq# z7z|FwojUk%&Br_J*}&{`UetJ+d56&I#O}pssk8346f-|}*YmT`{U+a=!gw=P_9d8S zxQ1}7_u~zc+-=a$3o_rjLqU)v?JEV0PXIhr<|_j+l?SL@c;WNlIdA`2{VaYtqI;1Q zAR~xA?d$8)G&C$$(SbG&l6UnmDA$9vYi)3~i{gl}4K44jrb%{0IF{1P$jslK3mS_v z#%PIkwI6z6eabPcaVPVZtpwde6Y5WP4{0d^vHBAnK5tbRMk_NC6zObmqI{)(I7^iv z;lriiSg41HZZrS2q22Mht+)LDI+@C%&Vj6a@=|=`L3ob!DD=`YqasM`vWwz z>OLJqm~KM(F50FjlYG3vC(V2)4W^)1GFl9K*fJF1cZ z-*%AkY-1;PzT8-p?$2KqN`e5a7m4{uL(bcUAQ;{b?n~(gwS_gmh$EWh3A5&S%`L3C$yx#b19HOJW^9ZylN2oc{HyE{7k^q?6@6JFGzG85 zI?jpj(^9>a#5kB$tgL!Zq#T5by@8NemWhvr-)CFF#L&kiy&R|ArOu3wcpXNW%9FCt zvo^1o2fXdLj^Xd8k^m>LC{5khwDiy7Z$$J*}x|{Dk0)ngGmUV!rY=pnSa~#@q>1(qM)@LUh!UAZYY+3HzC(2aIec9 z_ITBH+SsjBF<(1aqPi*`2^sy%Gdf!>ZX39)*9zY42K%Kzb6=|C!^LU$jnTH1R7bko5YHg6z}G5c)xtZ=dp6fmUZO^9 zxT)Qv<4uIxg}WR9%aOa=1O)itDK**nQIxsC0qcWy0Ri1?lt$GPllNPKzeKElSDqnz zkzq;H;z6Wu;&;P|-mY^znN{xZ^_6VFDj_E*P)h?p21^hCqbokti}bWYkDBK!jUbbv zo@RDN1Je2qX>ij40f%yr>Fx#}vE8TgO@S$QN(At=uq`BDwd%06_Ajzido%s2LUV%p3 z`H~*_#cyVEw;u&%9~^mocjqG+ho0Cdlv}SYYA_1aZnR~oizbD)(qBG7EAEf#i`&%V z;%cT(&QV1zqU2N!3@8!U&*NYvA|>IU<|gGZ~mKXYY9;6j~(%(R(v(^ zRloAXponFH0*=OBU0wnBF3a@9Q^0 zF@d`jW$JNaMUU`j48O?{PH^kQ%S^10mr*<%$S$BPAyv)E$tjLnP3=upl^u)gf7;%S zOJ^r1Sa}kinHdGb5abG>i-PSyMJr^Y6aMz1l8?I((4@1ovj_Sk#Sz#pvg3ck;mPc@ zc3bksvmQl%pi?93O+i4{% zMx)z@F)@VnILWkWLfwWONz3E4p}t9z;6?^9HFW$arl+@Iu2jmLMqH~SM1XTfrVrqH|02G+gmEy1yUQ zW)%XML&Fr*;VFg_UlypRsp$vv^gx>E4ebJT1xrgNc6N46J-vM5r;R-8Sjxn2-@PMt zea`vf)LRM&k}R<8BljV|WSrFN$@JfHScpS|TwWY^-u}Dx?WbzaD`o-4dZnSb9A;zi zjl&+LF}We?eq+iV51D>#8M~vxC{e1-fFM22G~2eHzdJDWw_9dHeVg2Doc6j7w)77Z zleTM*J|CL4-A_*vnhbw9_J<*vYQW!H>n`DIto3$PG=eK9@ehqdVbhesdHwtMm`EPd zr@9p?8s`B%bE#L5yO!axLTSNIx%|10jV0|h9bt%WKqUIWPr;+Cz-si7`x@B|YKJ<^ ze?e+U92)q~*zf_0{SgrgOz6uA6Gt#IeCpy#R$~@gF$lg&Q)&mxC@lL(;^N}6a&pk& zb4e0$%xSN@bLY+?bn&u~JP$o+y`o9kU4_>0MkQ3e#Y+gXTrUiEiVAgA4wHKI?+?z) z?Wy$@a+N--lPm*0^RaYa{?Il~#>do?&Evm*g@L*Q=E27t3-gKC`gqbe90qQ+=whtU znYZoeb&c@6+k|HY`fTr)>${|w_c6$Z29PgAlMu>0)SwdI`1`TEPL#^$WfYF;@V~Sm z8dREd4BG{jA6kCu4mdRHpFp`rI2sM96UG^jRoXvCN3a)6B~euBhani&z*(Ok7!c4Q zp8#ua6gp*CTd#M*f{5Ruh6nS(*WU@ncaRj)fE@I0b~KeMNmO^dlc`78o`A=)1YMNM zMo@<-SR-=*cK{v@3}kQ3A!Zly|CGvyEAGy@i18sfII@NCWGU7W*j6*}T>z6yjKFLF z0+c*%AZu{@eHWxgpymL%3ltStU!v2Lj-B8`KTi0ER-Ndbw4Stz-rSG9vb5Aoi(=_Wti*j7Qmf;PdK(zoCcI)N$rW0^A;}|yD z|LLX)(%s@~UlcT1{)hIkapHL^Fm;3+Nm$$%Qy$ojbv{c&Rr?IL^)4pDDp!0W`Rep3 zHyJJPTF_0hS}vn}&lcZgKDW2;0&s8l%MA?^Fdsl`URYQt!q~frsK6j!Eq#vPzkf@p zjR|wup^?0o3?C0qXY0P01s+OL(_jG|yPHvg;d)R!PF4e9{a_jKU{1UNI?xkC<~0oa9NDP@~|a_z)y?XK3y zx)1Lo)Eha)E`&u1#UOPPm<>BFC%mHt_3G-?Fe!n62(CVsi`_=gm)17o-T?7 zLUe$q!J`Z9MNW0KZr$l0hqZSCU%)DYXQ+OLvgUwW0?1*tG?8*s2*jigmT;lDJ7PVY z@v3bTWOk$QaRM#KIv)5}D&cw|rRDQ?dDlb3W2;pdUa!$!oBsg;T!<*dPH)-f!3(jZ0ia}0elg^ch{72p`Y>9YVgNt_Y_;tjr<4W@7NbSdP zVZMF)mN?UUzgM-RDe*d1Q(@uSXSjbYfdh-B(&~3oFgDJ3sush9;;yIPU)EfN4vrS{ z8bw-k8)J9U$NJwCHs#YJ3#VOfQ{+|QidPfUW5Qghl6Z##pZE?(JR2%+vpKW7!qwII z0L=n#2n_}NHAc;p6Ta183fv4L3(@^sP$ox4M*NTfPvk;#+nI>~ZGc)5uPh}Z65!M? zL%|+a3`kZbf$%v1g9|5LVGdkdYWD>>Hq#p9c#KQS;&TP11#nMVFvdOVIw-k+V;8o~ zX#%eN_AMST!2lY37>S?sWS)Xb2+AH&vH#YAJ$;H?Q()WdQ$S&OHJ6oLgE}q#a$6qg zp1bOn3Y#w~Cv~_ohsh`il-6v;X$boP3-y(nI;GGWVNp*zK8F^WpLu*K5I^UayQxdB z(0y$t{A9lPgmiM{@xVRe>PdvocHdjzYcoT;8S6_`HJ6#47imoN&$=!g`)b$gDTO27klRBCE!X7#Ck$<)@je2rK4D=E%= ziwlRP?^W{jVAt}VyN>NA5S+l05qKL{gF#US-TOd>BsGZ2loS-OVCEsD5%Gf;fWW#) zK{)Y7C@~nw0g%#l%e?Ooiv4DR{JAe&Cx}QDL8tIe%U;YjYsG59(6Rip6v__@ zsqV`vt4m9BAPVS)3_w2T6}7F2atzQsK=x<|ltsW_**Q3Li6cena6_4PgEe)Szbn6H z=2}s{YtKuesiPAJ9aQ|8xd6WG6Tsg=qzfL0&U-BBf$QH3%+HSZkd;cXU-AdhN+pn`%tQ+hUB{ZX5xjT= z`#^i@Md=}LEkj87{CE;gbJ&gKYd-=HIlbSl^x6w;N3MFg-=&IrM;UGRmMDPWxDnUcw^TX&* zQ&SVNUNGa;p#ici6m$|vqR#n0=^_7$2KG*Wl#ssv9eE(&s1@U~fG zc-;2aq|f-pqB9O@OlTz&nrdq)tTSH;BRf%%(_XGm05o0**H=eZ7Z(#y-W>zC;0OMI zyVVvx@a8`KX@jWPy1)MW`ggY690xW{=J4toZ%ymJ4qa-w)tRboBJv*IhPJ?DRjB78kdl zog9G26ReD+M>M=Wr`$~m@b-;>P{WvJpFPBDLOWlrt~5K_lvv!uug%@R92fPMw{n^> z)ZI+AxYO*b>r#(xe5*&jJ2t%PO|0fK4V<2qq=}_H!x&lYgR=`eN z9H6K|G*x@|KTW-Cy}1}(wZw0$RO;`Q{FaF-qS)yXgkZpf9s->PG${=6DyBeC;0eI~ zK4jqxBsKY*x#!V<8m_(U`|m*1*2Wg+bD=fB5d?%vF4u#y#=XG!7QNO)87f|(*q z_L;Z)K=;M4G1a#l+e%%px~|ivt1*v?V`7(_0sSBO>qQGK$Pm8xUab0>K^_=zZ&FJh zOT2^y-;10(aShjZ=qX~VAUzGx&}^_3%06Neic`bh+}5$!WKvP*CRAS+fMNtnOB#f50@wxoAhK}< zt^^RY0xaNy7slNP5^@cV;j-}54#PiZXJAyp-NRR*10&JFcLxRsMCJAr_ zq2TLr*DCUjA3O+fTTSj#qYDQOFAzV#cn7=bLI1$dpZbI% zhj>>PE>%!{FZ&~v2FCDu>=fwtKn75hBrPpX-%aC8U^S5B54RwQ0+4w730Un2N-P}# z!qP;)o4sr=uVs9Ihz2>0vy)-pG0VFlNj)hkRGYV>B+TMm729!>?-jK2&seQQ5g9~& zj>!|gNWUj$5{;h7qxtU9h&Vilh+hIZeITP>d?Rd9zqH9~@ot35*G0bjQbT`z;X_Q3 zNX05XfnXbAU6fmxg~_Aw{P354^;6RSFGNGYQk4-vW*or_k7PZ`LUJDLrGZ&mtow!U z=_3f3&{_?~&`by?8JMhg@KH2uw$l)3_|nDXI}5BQEXh;wyjMk6M})g<#p4N0JScJC zRCr6#!)gqenRGefe=ER*?L2HmdEn1L8wSx}k=QSQe%^L?Jcr;P8q=9yzdkhV$lNSL zwc>e5%VA2Ag$>?hPULy}UHjf8qd;W1xQM2))%Ut%;-v6cOLDr7u*3u-Ph4<}fWb)` zdSWCp%(W+sa!@6z1=o;&H>j-VqN&uS_iB$??dh8+pxRo&bC;E$q%!`_iwSmQ!Bh64 z`Ggr>qPo-x%xjGla11siChL;G<%RjhlVU z@YNztSb`&)c56cLJ19rKvb6AZ;M;naUCG2Q>-62+)T;m00x zFZi0%03XRs5flaEVJzj*R$|){q|dk2w46VOk~R0`hLWW6gBt$$m$$zEy29n4>^5~N z+HWK0`K{&FBJFKrtrA!}mZzGCOq{>3uju>9u8`QTfC>m+2O>8?!tWfwl{_CVFr=Ao zy#A;4%a7U1iz9acEOZA{O)aof&^x3YwnZspi5|+WzT0jrIpn>RSDpU#3mov1U4pSsGj(&4 z(%tG9Z7y~8jQL_w`U2x%h4$XM68yMwyn!_`s*#_59L%~}I(>-#bb)0;?RE0t6Owub zp4}!w_WSduY;V2Z$VuoYm;d^WtVIAdK4K*XU6jzXv8>OZ$v_DYb~U+wOa$1ksZws@ zs!?>H|C2WoW>utOUe9qR;$O*kG<%S8^$w#~7Mcamo7o-MFREx@kbKvxVmU6^-8fN4 zAI1?a9q3x&<3T(&Fqa{kf)1XY&7xO7V#=Yf!SN4qg>Tpshq-kH!so zY-^DhKZ9%Tv_f2HK{U1$GIB(i7|xNS5P#k@>4(lX_wCB@RX863gf+Dgaxk>n_} zq~JhcUx|vi?)cJa)>^L7k}O>>E}NTF4{Qk!JnfWC(IdRXQZXO6IrdGFaEV{d*D>Vx z7=&R#=slmQNLU6>fr2K-w^6H?DN74h$@dw8C>mhFGCbX^D_83|7>VZIhi#?K_0M-$ zAI4^*-ysQl1#MXpU=b5;ADrpt(ue|uBY)TWX2qAsp_s-Q9#@g@Mttn{eGmUa5LB68 zZ&@Pt3TftKKd6)rLHaYDh#N121Hpx14xL5ulLokKo2;F3Fh=5I1fNGgilBT>MZ8}d zboZ9!wc!4G>+ZF0tz{>Hl3T>&!)0xYdp9WviZ7ffr6K23_XTWx6B_+CYYyi8$smO?1r;M7$j=L@=@{1b+^4#ha2Ks$ zjUx8Q0amoE;%C&pZ26y7_f&iASYkDsX!JKp9#X7Q`s?a@-4^^sZVIV``3u>wB7p`G zZ>o!}zvp}Y(`9emzqw~+5a3A0 zS6|`X>dgN->9?_#vvZ0C_$ocKRTH@p1FyLEy6O|Ezg>gwLudnZHz_F=6E05;DYelw z9fbKacy2F>trym=PHqBxecK0Yq0m=l!9>->)9hv9FjRvnV3c6IC4S}@*FlzAd6170@rKe_{=70pY9tBVxfWhv%<& z1__o16}w!CzkSk1b?;%sYD>K)4V8C*C~ibg^36b4@4kqWa#tqjhw@u0pKoHkZdVv1 z{l=+1x6FGD*E>6Ff41b2fZU5}L)~^g{x+3QBF13@#zYTin3m!lrEi3#eeUz|fV&_1 z6ae6Jq45V=5~+XC??D(B`dC?BHC&8r*nM%3Jcg%+$2sjP^+ZbC(0=ANd4$=E7cb(y zL&W~4>utKcICT{$wQ$B=#1$SsXj7I6qhV(;ce{wJmPWU~!m_kl7ei5l8p+=MpJn)m z6)H=ZT1y`3$YF?)jEf^E;wNahxP>_#jWJOiGxP|x#3RrAVg`k=ZQTeq*C;R_5P{<0 ztwfAhz}uugQ7?WXk6#o!=$d%x_W4uh;e1SPX)U?<97=xWnUH>4OyCN5?$lP1mIs6pZh3}F6*o5~DJToZGJXyEs^5I5c%??(FyT63qK=LD>|N5Mrn~MSU z3s^)DM6YdZJeb;nitTl{)du#hGFV2&bcRVFy6-i*$Y^KZcNrxnO1PGn6Vc_ zOcLX4t~%6m<@l-!e#)*y0vVwhj1kF7jYVV8oioeNu7wec()n&TG(8|#6p$`r1_IJ-bJq`l$f3+~Ec+7h~VoV%suG$-e~%2enD4djUOio2HX3h?6(rPll`o zod*ElpozO}weoe-yoSX@43OpwSv~-|;XP?hlNF(XJ@enLO2;VbEXC^o4Q|j8Hy=Gr|rJo8LRm6sjK>hUC?CcYE z`h3V5@cv0+^Z;#nX^Ft2%)1s``(T)d($~iov#Wp`9>bITGky$mu-KKE`iZ?|p*KZN zW@->w!0J$MZyRK!7Z`8N>xsQ+%f|V7wUR%9xYd<^E-AF?RhM7t^PW*(=F=oTpYGN2 zcfH7_@gR2zLb&@D7R-=zgu?+Cg_&q7_(Ey0{*=9cG%#zxNd|CGkZmH0%4D|*V`TaH z`>aY;E->isWILG(;IDVot-0=N+;delXJGlP>}IyD8fj^k933E!A~dK#;n)y5544185xlT);)!fDIY)?;t$_+-EFES`ehMRkCXdn6f^4!1l*` zg}|0DxTfAiUraViF_-DVW_feBQ-J)Jz4=|VuNYaMcYgm4g3CGCvFoo(ss45}fsnTd zu@Vu1)m{;stpeNy+~MH4s~-}Bb{+6LwG4@q-G*r?QeJ((Kf8<3qfP_zU0zcBCk3}- z#g}(i&&8jBFdGf*j|vD&RcSRC@O}M9Ha$qpp5hJ$vmTt6+cD1fxy08|_L>eYGPPYH z<=fkXTr-c?7C8CW?m=Q>v})Ef_0GG`26kdkFbw3ZdwM*Z&S*Py554=h`_-6V!(wKL zID}IDm&LSFjf9Mx`~$H*Be6g1Bw#Gk(HUR^;l~14*&kGXhppX^DxmA6{#}qZJfZu0 z!-})j0}$h`b4IFHgcQdU zaQRF|id9qx%YRnTumr`dTIXl1U zLLIyZgv!}BTwb@$A)oR@Do@niUaC8%X31JhcEa^e;Qrdc;y+;JLVxHsl@XDiIFAxf zxstrh@a5gLN3Ywm-myQbvG0ViA&KI_OveE~W~^x=zky@w819RoGI|&E-gyt$5ZB*- zE3se}ZZ)Bx=zdnNk1(-F*ayBmsv8Kz(cpymYm}Z}-+kTCDqJhZc`ci_Wt+@qGIg7u zQdQ&Kn>*-L6RZlnVLHs-mw`)%fBqCci(ZXSH`Wp6T!jgO&YzF}x<^G|=jO`nedgF4 zA?r~;Q*7UE>n}?*lDC{@|AH9g1azqgT~ z8&}8?Lt+)&@L~fu(MBw%*wow_XrW=Nw@pmRXS?7AC|K1Hyr{a&(V2;p8o0jyucq@3 z$MXN%_-#j|>``_?lD$Go_TI9ySGJ6h5wgi%*?VP`O=M+9M2KYXk(oU2>-#&N{%RbD zxbOS=eBR?cU+0pPNkMgWwHm=$+!D0~3nXQ$kwmZxfE>i;QSbMHM;NHV*9xQNGD(;H zD4T6sk3UC8zd8vYenya{u-w%g{A`Jy;o*7~|ayJ~~V$kHM0)6v*3vRa|v z6Xovv?M{P|oG7-MH+?H|q^WAk&ZZL1Tu=fSbi@otd2-^hss=&Tu33UCo=*=}fYG9^ zO==vVZ$kLyDdNigLW++~z{kfI4C72*&e|w@#^|PI+*ZNX>$pXCV*EKJgzks!%5?lO zn|jheq7E&7fv6*C36;FRts) zD;xMElS9PD2nrZ>;hJ4==NjBSM#Bp46Y`Ay`d-F8DVvdJz1g8b;5LU}p9mETTX>+) zJkHK24i#W!|vl`+K=6eNrHi2bSiV3NAW5(pbiO}x6~Bw6R&4}r^?PXb!q;m4 zAr}H^jmMuErRn6A3~2$@nsY2YiQqyqel(19<$XPlDK*i zOq~n8d{Un--^*kKcXsLz3+@z+u7KO!AY={B_`2ITYmZcJ`S}=vDS-=*DT9d*9R<@F zo!ZBxKCkSXoaEg0@VhV9cz1xMIxaF))R>bwmmdrJ01cmzLg03sEPTTFg4CiuF9pX; zCsh#|9YKDa6BagN=Hxc>| z;(03eR}ddvSD^#Bf7k<7d=v>=#KjUU&DhQd+3fFRZX=UU#%Xn>JKBl z#}j$22fN=+^wpi3wXf%xS#r&_)e7rAshbEPUg+&~UGw|d&4si7p zZN7*68Td1zJb;f3tV|7LB(VAjx*`=fg$2lQh({XZ_TuFd(v%;kHcX+dHs4EZWBINj zQrlSTE0U@4eJ0NJ8!q+Ixrqnsy?PBRHQc^^+8_n~aL1qT2_DcyZxkggS+4yXD=!F2 zR211yIWS}zPwI~S689xAR6$IS4Yf=!gC_c{0~6N8(w-BbNMbV!iW-!NK2BwSOh-NiDz_7an4gKpy{x>E8zs;Y^zn0^TsT+6y5>ssA zCOPpvWbAL&SS9hA3!ialr|S}I5#5#z9gcB&P?_*0+QXZQ3HL0g+L$PYLnxE$Mn?5a z@4?v8O5K65->2(=E9MmJ#9?KEqj%}b5-%r#;*;72^*H*V+0{nXM*i{5+OTGE8%$b$m+mm~{`8eZf?;6wsmbOl|)E%`@whgk)d zLS?0;^8Wf1+-JLJR@`fs(jXK@!a$yMWYCsn(>l@+o#_SHUm zyWKi~g*LL}miIO`faySDChn_kHmA&$`<2RxPEYx=3cs{4{V4T}oO13E&3u0IRFs?i zcBclbrJ56$6C0YWg10&cXsR^q*QUwnT8-x2sGK($juow$T$ujXkwUXO||&CC$|)tUe2nMn|J3}N!SC+6n)_NMt` z)&R!mL7)c(3PN5fe_*o!G|hSB@;u*Zi$)r3*s6gB1(75mR%;#hV6bQ-p8o7JtEJ!a z%gYNY51C6>)xH{-DGJ5P(803ErrcGyJU%Fo?rnsu_ zN^q@G8O%jz2glyNYO(t~&O3WNM4a6_mUnI%cs{L3l2v+__A>ogB2YZYgR}X?Zj)QU zI~gY4wXof#elrY#XD_yRdmo^kR?L_`V2dXnDby6vGYk78uhEQODR7&D3*8y#02a`L&<_XY#mb zFn#iovR9)-@BK=3&-6vU6uM&G^*%*><2RDIe!x_@1};#oi|NhNM0&cNryVBN3qrTw zWai&qPDh`r?b=DCVT~TVMw-VRbNu#sAM}ZvFPf%nM3SHt1_c#Bn_!g(+P;okW+6O( zA7po6e%+npQ#5r}Hcxa5;HdE>0*|C{iqLOKnPj$_nOc6B6J)Q-97=nXMTDMY52F*&KmjWVteOB{$^vmfM)WH0 z9AS$zZe>2v!mzO)uvea|T+6+h)$Ipd@PYYD-reDNl@XH$7)_m*Rc?vjOn+Bq&g zehUJ9!^~l2L&i3}U>pUL<72|zz1wkp*<^@=ZEr+^kYH45-{10%%n4R?!58WTT}_5S zk55ErETnJ7x2HIWjqqyTDzx@h$JYK$Em%M@UV+yOI#pJEU>;@4^{N+>Ak<5dv(;Ri zl3@La7N+DUi7HH0^a*4;@?tn_%D7QrYF{gYR}x7^#1n4qX#P2&3kh3 z`6#D*|Ari@F)6(pmhK+o-h69_k)=GdM==*YXweDtFp|m)m<&kJ!x##g4ZXU8l{tBT z?;f{EtR^$=5(M0a1<2qw_L(`yet*QwOL3{@c-zx}f6vd3@i$ky-_>67#~bvts73qJ zJC*)q0c4Sso|HYKui$byRZ9-gtBx%}I@c?_8^E+_7{S4XYJZ_je1 z1SQ~dv|5Sj+kdsQZIAry#qN-ps$%mTH*db+?RI*^!tJQ1jrwYjoG^@>`)(r)H?CLz zykQN4f2S=3W()@Pa8K`n9AaI6WOJXc(uj?%6&3g_rb$oN+pzNHQs*lO7|B=~<{0e# zuG-3DNIbmdCmM>-dABKl zWVjN2XyAD~S*w_u_^Y;Ur7!Ns$2JEa+wz}V7Y155$iPCoCu7iJ_ESW=?t{b6?RT=>=HwK3)u4I;(HgMj>t%upOo+=T2bAz=f<;m)sIGU_J#i=nb&Xwd8LkA`w|N$)dDzpJ6HzPNu33>`pnLahy*ufEd5hdpm?3s~Yl>WD8M zoa%P~qU#Yf#;wOKJ0PISM&UCn`MC~O{CQ9%8|dUq&WGp6m(eOnxHd|n!H8iK}>O7e1Y zVM?Dy*l7O{@@@CXjt;I6?0BdukkS}#^#+-k;AVbOXFZ*Pvkp=AcPqS;%XeJMPx=LB zcBg}^9UjuXTSbGUEkGFJvYH!leg2_20Io_h z1pxvuCql12v@PX*&cr1qw#~p05kB@98j0r9SSK=euhuF?0LkX{Idbk0j>#S50CHkvkQ*(S3*}r6S6(;)nN%- z4`K_dk$U7O`^v||g90_<^2U7k5>J;^ZV2<%T$&b+LE#gIg;YwLYxPpby=LCDm0dly z){VqVD>Tp8Qx>><1bnM72pC1nYSpj5)#`_5O|4i%^>G-(^o*Vve;4s;w*r=i@j4%K5oD`A!%C=ib>eMAd_>LJwTj9^i_^}<2D}y z783r3sV2zC#@5r*tMWXsz}d2W-Y6&4_H&1b<;`208I@Rl8@{v5)bZ@BD0^N$pEd4X z`8^D!D?5X!YhWWZ1@_C>ilaiUpctr{0DAd>0ToI-w8#Cggd+$~7~O$=mhgYSJ9%(IJfDEE{pofe#QDeLLk)CHsD*DaSA& zwVbiWHjzHmR8!r6PY8>O(r`s`kMY|{n4UEsv*If}EXgreRLZ}>U^=rG`H*9Ys9DR( z@DU|HDB<&cl`h5lFKg#8yjXC}!qf0yF`go`It`#m z-+)jpv`(MYrNWR1$8rjzLheyFZB*0-^|g?N1I2gv68J%MEIps9Sab$6zp0Hz2nX+v z-_pu6ddUtlpC$@nW!F(p<0wFBiXt#siH71Pc@$mR;6DsMDU{&l--Ers2g8dHU+ZFw z;^V%PgkS1g-0js;K&@!_$MYMZn#B_4dcm&E6}iWMDnZ5w1RF<)_N3hmI?hF4#Ym`f zhTpy}6P`G$Tv@onFR2{9&n8$exRwIO(k4-G1ICIiR*3qhVhSx{gWZ zm`faHM*OfytIr`$&iopq?(;tzev&p6(&ah~d-x)!4P%TJDgm9(6uq!Qu=t7o6XOd zIfxW>16b0TDt~r^zR;|4$}-{;LT82Yk9I#_wn6_I@X?!ixZKpodNiN+$}V4O?iNuh zJX$(FHz0H}OqlaVb8j!j2*g4{G=MTvsq-1F?eAeFpH8&8Arb*@PW*h5R`hrtO zOTP&f*3!AYYndRY3|qE?mskh0t*E#UrM~oZ)zDa%%^(#@IvDNcw6x52b+LM!P`afE z+7I#E1ob>pS(l+)tjhYv|cNkNpF?%-PU;XZhc9 zK39zodV-|_awhlJ?EXCFNP3xr*&d%k4iaLd<^7L~2MDv?hpD3L(VPk$eOXxT z^(=~7WFtJ;kLnIIvLYFB|59IE5`y}NN6y6uY`C0IJv`PQpE0}1T^JB_R?+xW*88Ci z-oG-R&Xx@6B6`<2RNT}vn6)7z*Oh~7&zC(7L4$V%lUb?L8qU6spsT7ZB>J>&%cLx= z?Of~W`&7EO!<;R-DJPwRJ1T)M4JI+L0|7wOzRb1jilJ&+siyR0Qh_}PH~a0W|CdaL zY&RgaYCD8bg=K?g;qS}AV|dNMpWGzcd69=-d4n-3!Frl)rrEY~6eDwZWm%&f6E8@g zV`bWs5Fa1Td8#U%fuLJc=2jpf0@n~=&D>koShH$1p$+L#es!h}vq1~p^BIbRAN%|J zQA8;DYpzhnQf{|h`sxGB`2>Rd1d{wEd3=6GhE*r&?0$-)^Oqg`+_zw<`BLo*TAb+b zhEpMbDtFDZ?>%C{=KYC^8(sdmS-TM724VPWABP{a89`{yW@CZY?7P6jLV z{v=gAvhXNQk=t6qLN9LkmZ=rFQXT>(ItnVP4p@w>g=xZ$l{jEdXoV(c?OHo)45W7m zU&qW)ckzc;6_&S3)B4L~-vwn&#gNeHXM(5b@22HL zgy1i-)nZ?M!Oy8WP9*X@2qqIJJ+J;s|Ca^w@M7$tP@77p(iy|y%3AbwjXpDOC6}>b z%P2n6#Ad^D!_q0-tT#_lz}Yhfp*@^3ovv$;=pf0KfX=z5U2I)iknLW>rtU?qCV)vy zXZ6CyB-9=~)$>e=sxh0auMto}cOpcfSTJTy zu1V)L_x-z0Em`Vhg@XLE-izhil}#lFm0E@5QIt&zg6 zTYKf<*=RHZ0#|&QiSeBbANv)W0;d}jB7G)f*YT@-b+I8?K+DOxR$s&` zt6>@|$QnVQZd>w1lP5al;i^kAmU(&C^N+K^u&?+vz%!hF^yBj2;iZe}uR!fHGQ2oN z+IqD3M`$FGqZ_4r8Flj#DWL~BtWoI#sV}{Q1L71ukC=roEIfnt2m+#kR})d<-MZ4V z$KrA$WhI!=uYgKVUHcD>h+BwpLL=4Lw%L<%!jX~qs8IaWe#P3u?TrnWEc&3>;EpTP zYPNBnp3Fj6ky5U%v#w=kTHJYO6J7+9J>fjozx!-QcU>uUKR~4R$ynyU*RTb*+~Qg* zgwyKQ*P?o~d#lh|`gp8nhge|p?oh7`c2l^k_4f;6=Efm$D2So|WWZ7^@WY1>7mrEw zRg^d`=+7SVUTvuIIAk9by62YP)@4I$leV|#bZ1K&vIYOkC;E5XW@L6o8v!{s2uG&D zV^3qtx8XXk?VnqGzLi(_9ug{~I@XF^F;;bqnW}5m4}U$b|Kp>vedkMJGY{Wmn5eKhD?w(3888CjQN z6(4A0t?zZm$3zF0e>+@!s;a6B!uuZ}5eOIm7bTRkLoK;kgUm($) z{E9H>arD74k?Fu?-GqJmHo@Ha-0?4jE?-gq3lHJFNs3X1(qo)u$9uC=vqQ&fAh{;Z zJ)Ub-l6vsPJ3X&yr}bsqlQ@Y{NL5?kmgtwbcdd*1#L$paNl{92umv#vQgLwy*#QAS z%Ap8IoOz$FJeT=6;2^GliIbCaUO{Vl@}-2^VcqG&?vv1Bczwpk7Kw6ryA}QARibp0 z%JX@zM$+B&u?XgHyVcUL7g6Uz=rp@_Y2y+8B;4;(JJaA8b24TkZd+NgexWsoQ)NL? z%{FSIjN_{9O(@a;9u^2u2FJc6QY5cQf?YE`UPX0L1U79qUd=q8S+S^XJ06wER$*cL z!H$cG9&J%GbssIcd#ZyN5V9d)*1Y-Z^7vIW4vj}vZ%_82rcnrW@GMWg|J1X1zD^sm zl1v$ua8!I98A1sFg~)?NN)O1D)ED!cv;-CVL_0wzJF8@2OWp)QTuJt-+Z%jlScHUxjKIYs3vcLJ z{=@5*z?D2v==p0x7dm)E>?>R*3u^d>bS$~lL0ODGdX-Nr+9S^#*#t?NvgA8|7NeEd z4b`rQHsESHvLrq#S5`MP?K9ksNsYFBi&Pf1AijhhS_NlNYD&v4DB!ND?zuo<9h?S| zS$A#8zB}vw^xw&Mk?l?fnuS(uv)6%{|@_fppP-u(Au2WgmG?#>tA zAiD2YLRTX2Mf_)){f)77%@bsHw$Kq&At{g+!lCy8-{|iza@D76Lx#z$qA>T`+51<8 zi2{_<)iu|%tKG>CgNGH!+803_BXL0|P?+k+bM=JIzdkxT0o7vBa;RP6JUz?IwR)3~vr|gdGP%DFn+aQk>m~|yaQd*I=2zozz#;;}UBzP5q znagy9)qz6VKS*Yx_90glPGCqKW@2v+Wrsx-)u! z7T>I^ujqkACnRm>c1?jvMb!hg)7nXJMEL>06Y6PF=!n6UAh=aKRzSc)>lcjr8_8v1 zR`N<%N}&7u!oq?wcHk%NvbwSRmqd`EAUbzCM5&9%7D%`}9YPo4lU=p3mMu@xdsB!VH$7CXY!JaEo5bkj-nVcuq{d-Id2XpW9 zZJc(zl+8QH@w&`w#4?BTuk$rdB820+cgoF@?9Y1^#O8(DUxlAKeWCpB*vi+M~RS8hL}&&~{!PrKn+ z(NoesoOyAnv%;A?ZyEt1%E)JeKGN^VI%H56`tM5mqpHW}Vb)$$R_1zo0_zVrghJ}b zs&vY(z}M3%r{<0r;;Q3aNzqL@F}SnQk~Dc_NkV#u2@*F~ZvQ&UT8dBh;~FFdE$D9+n)#QdO{AF$AY)TX#FGJOG} zlo@Jrtgx%@6mp{_qUI)&jR^(Qm?;X~;FZ7CeeRg+*{NLnmUnLG<$e*fXt2z~!iau$ zfwN*WKae4TD!#HH|YU{UiBdHEGx5n=2AhxAeqH2*?adJvCe zSr;waoji;c_$h?YZT4SFC<+tZKaD$OfX#H^+>+-FU~CYKeUiR2E|PpXKPpY@rW=lm zXBHO<7HmMfcHR*aUh_%li~Vyc9Q|3)yIJ93PN(FN{{hl6Z@oNVkhwV2)peo@dB zY$6p?QvxaB z656-1YgS_DhweZzdZoP5!Adzx5mz%|7(ZxXgz5OzPFfv`3D6~zBhvtcP4Hh?)v%OK zVc>0lh1&}@By$JvjukvF0Tz)1B1f1Hh1~21b`y|1k$Q;gxHNb|j$Y0oDpu13nR9|s zWjXcHU#L^v@!Qq;ntPkbvkp$Zqees3JxbB}WIx+BqQ^xHwJwiWkFy-+w&=c14Hn~y zvrG2B>3ywX8S!`^(q^N zU+aPV_)6#Z^=QXts{OBm_nDoSkP77EF)KIy|Nd;WypD2Ob)17YV* zy*@%1Y&y0Mux|R9(id{AcNGOZ3ecGUKM392;w^-RT--!3|Nl6c~ zQ~S)|6J+3>zIbfoQAypiYX<)-L+q8ZI*#dfkJFQrdY4zc)8d~fL!YRCLJqhY4+fR> z{j?Ib+$sRS{c-jM^}n;qORwpd&Z+Te?^$nNyEH4H6=BK60F=R+!`HRLpA@DvX+wX; zZo>pM+WR-7;7Yp7F7Oe4Z8z-z+9LeC?Mxj;IHg+U!t*Wl&-l(ajcbADKLgAI`$yKn zdv+Db0fuB9LpCz?lhYYve$7b1tl4ky!0kfAzIg^-oj5!k4s$ z3>50dne3BC8r)d%l>Vr&S~tO)5Ta`oYmL`_8l)Sa`#hsrmKMK`i#?z2?L?uAek!JE zIpkuIgS#oCzl#Mo==Ir>w*&gK=0sC17egn^NU|c^6@oEUN6v$&M7*X!tMAdRe6!f3 z;>~x0Sfc-3gH@#1xD7nW|ABCkc_1XT&|7`ieW@yV^WS9W>258B0K7g7X@iEQw<43Z*~XzRq1Qw=@V z$5-1^YEz3ok*KE5v7>T^sqnE4q^I=l_ls!6!c*huAEb_&d1I~fvdTy}*E)`escZxk z@CRX{l2-EyL>1k$PT2WvfG!H|tJSEWUnkb)Ba_;%W~iqznX&Q*|C`~RgAePLlz6VIvc)W5EW-z$67g)VFeE1*#2&6Y(x@tBch^!8h;boAozSE zu^k9c5>OG=TMeCgMsNwsM{*TU&6r6QcyLm9vt%e8Q=0ms(}|?v(7uV_`VMI-{C3~{ zz?C%*4Bp#NjgCBRzlB)wl!7X}`yc-lW&fXi^(eP2>n9@jKFrIxTO#>1%oV z$|m4t&2)3-$~jxFT)|j_YIDFgZV)Th)lb|~%*i78_i|PbTsE5pDlJ`z@i2c~Lxo-Q zHa_M3DUj3;u5+CKIeMIXm@|EjrjWM~LJJym2AXok$=VIzioI%Kbns?sBtjZmG+GGv zBi}YX>b1jhx&r3Mo8sAT>HI>1U{BaOtzkVt3)sxlGMS^-+mW->-#Vo3Q9av zcuKjD34};$A!hLRg~VP#myY5s(!c61DFXw7{3-+9hkI+vHd2|)Q6nKM-G$K=R$}ij zS&Pg}#FBQT>AP)p@}&x@CWNmBX6CmIWj+=Aa?WGqPoN7%HX_PWIuchts!Z zW*Prw+UB6>E{9g$yT(8EFHgkP2QJf8{qMK(1*B6#=<(GP_IM$kID;?JaBn5bz;D|i zOK1me_dY5$dfeDTUQ<)E4a{~Mn7bdx8himKRlix?zYC4K;Iau%5WG=^1og5$Vwt7? zra|+LA~AnwEq$w;LY+Xm;H!>+0PmpIpAA0myet}3SBDqxa`xAii8ZxdGZz=!zx`?+ z)}S(s(~7TsfWJ6$Sm>#r_@RY{ii)koO=U8;Q zX;VGny9D#b2$R%^YbYe7@ZGC_o||(mKj_!Mp$=ubdwJ68MpQ&ZJ-^~iGF8rELBY|e zh~BQyMzBodsJ6juit5Ur>GJr>W`P{ocjpq3X-9YDOh_YFz^Hqz}5E z;g#n6!c$OfB1UN#>BadqbJ0{9IDmox&QKgjB!>~AfuE1VkpbIqTyeP+}K^&50p}<45STDp3!3(mjZ%CxV}%;*mI8g7ed-klXWO zDFt(#m%ltggSQyIpg}3ix7zk`-}lQNNl8gfB)Z&hCvk98##2*|HF@4C>?l^|8>`ZO zqh24|v;B*lAc8X!!4eviR}q&e2yT)JK>vWKx(~Ofal*uDuE4G95tq-G%B%dEkj&$r^2@ z^U2{8P6~G6>!K9+|DZxRLN7|~i{xnDeT<9&Ar$uscrQ0dz6=PaPLyaS+*s9nOW*(H z3$z$F9Sbb@V^3kA4`|iKdV5dLhA}C#9N_N!w0>u|-@Z5c_cpPO_pM~i*;QhmPttL! zI%&#ik2YQ>=%y2LlP->|FY??LOzIcv_s7q#JF@wuF31whNxEOT+VJ5g!_g-$@PcWp zy#$HdBE)eEK&{RY+e_~hl&cUpG5r9d4BaERrX-Aff3FsOzq{agB5S*)-k`rd7W8!;e#`Y&RpP zA@kw95mX@biDNkciZ!h?ctQ3lLqQYMI{ay~*jc{af$0JJry`K8bz21J_9uf5zJX9k4`!rv zbz?T@51j^z{QCflr@F^S%rS6=0-3&pA`m7I2(%XtKx=dEn5aiCzw6kdnBQ}CpLQ#p z=E+vDW>HNr@Q~tRSq7I=rRCZxJBDyYOZn?zN~%E2|?M@~u@@2WJ*+sDcp!Cv2mU zjBmJ{4DvM~?+&>E5q$1{mbP}M?#7U!sbHipdz!7yY0+f5mhIy)t0|MDf zNaQOh?b)AJW5SyG=kT4&t65~G0|x%$^DiCvM)+@e{TL{yn}~>xZfjCu(GLur+m}V% ze`;C1Xc+YmlB90l1xkGyy{R8*%VD@vL2TSf_C;lykA~qBA0`2KGqIOyy$_TeQlrgDvcrcAWZwvKv)yKF{Upiq9id!hS zKDkeP zTYz?Q9+v4{U|pYmM9Dr?2DjFqsn3)k2nJH7#AviJ`B)ooHOkk#yag!3m*-V90}8A4 z&sX6oOmsP&=k5EFVA>LVS*SOIw4p`){}I`7E4G2OoLb`H6)&DF6G}EF-wwO;eZ3 z?yR(;i)CKU#oC|kzQ|fk97O~5S8J#4IdOAjw&q z(um&UrU))&61<=uiR_V`NUju9(X5ZDN}P=$@LGp>i~Ss&n68QbqoXwPO!cncJ(MBV zt{i+@ui$EV8NC$~C7NM;h@rxtCRzs{ecOns*SX`J|1bwrg;C9~Lp9ct;I^cV;F|66 zQgM(L{gi`EdC!OY6#6yIBHkOwMU2m?R(XZ?E}AC-O0E7#f^J#gWnCwB3oqx$^%viS$am>LVo3u;r{NUkOffAI}}VXTZSMu|K8OE;KopIh^% z8JLxe;H#rT1G3vPzirp`@t(sjYgc@?*(dWV)})tLI_tuiwcV?grK*;fBliG zV22|5puT`O;vZRD-3RszrOA_ve~ob0a&>=>3^t H8wdO!H4t7d literal 0 HcmV?d00001 From 3cbc401fe0c0fc2da167ae2b1acd0f145cc293ba Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 18 Jul 2022 10:48:49 +0000 Subject: [PATCH 04/82] upgrade oban to v11 (#84) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/84 --- .woodpecker/.release.yml | 3 ++- .../repo/migrations/20220718102634_upgrade_oban_to_v11.exs | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 priv/repo/migrations/20220718102634_upgrade_oban_to_v11.exs diff --git a/.woodpecker/.release.yml b/.woodpecker/.release.yml index e672c1251..18f206a6b 100644 --- a/.woodpecker/.release.yml +++ b/.woodpecker/.release.yml @@ -18,7 +18,7 @@ variables: - refs/tags/stable-* - &tag-build 'export BUILD_TAG=$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG' - - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix) && (rm scaleway-cli || true) && (mix deps.clean --all || true)" + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix) && (rm scaleway-cli || true)" pipeline: @@ -51,6 +51,7 @@ pipeline: - *clean - *setup-scw-s3 - *setup-hex + - mix deps.clean --all - *tag-build - mix deps.get --only prod - mix release --path release diff --git a/priv/repo/migrations/20220718102634_upgrade_oban_to_v11.exs b/priv/repo/migrations/20220718102634_upgrade_oban_to_v11.exs new file mode 100644 index 000000000..eb9c4986c --- /dev/null +++ b/priv/repo/migrations/20220718102634_upgrade_oban_to_v11.exs @@ -0,0 +1,7 @@ +defmodule Pleroma.Repo.Migrations.UpgradeObanToV11 do + use Ecto.Migration + + def up, do: Oban.Migrations.up(version: 11) + + def down, do: Oban.Migrations.down(version: 11) +end From 54ed8760ff1d3416115a52c949b0d869fbfc3b28 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 18 Jul 2022 13:08:36 +0000 Subject: [PATCH 05/82] Merge branch 'from/upstream-develop/tusooa/server-announcements' into 'develop' (#85) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/85 --- docs/docs/development/API/admin_api.md | 114 +++++++ lib/pleroma/announcement.ex | 160 ++++++++++ lib/pleroma/announcement_read_relationship.ex | 55 ++++ .../controllers/announcement_controller.ex | 83 ++++++ .../web/admin_api/views/announcement_view.ex | 15 + .../admin/announcement_operation.ex | 165 ++++++++++ .../operations/announcement_operation.ex | 57 ++++ .../web/api_spec/schemas/announcement.ex | 45 +++ .../controllers/announcement_controller.ex | 60 ++++ .../mastodon_api/views/announcement_view.ex | 15 + lib/pleroma/web/router.ex | 9 + .../20220308012601_create_announcements.exs | 26 ++ .../announcement_read_relationship_test.exs | 40 +++ test/pleroma/announcement_test.exs | 98 ++++++ .../announcement_controller_test.exs | 281 ++++++++++++++++++ .../announcement_controller_test.exs | 169 +++++++++++ test/support/factory.ex | 12 + 17 files changed, 1404 insertions(+) create mode 100644 lib/pleroma/announcement.ex create mode 100644 lib/pleroma/announcement_read_relationship.ex create mode 100644 lib/pleroma/web/admin_api/controllers/announcement_controller.ex create mode 100644 lib/pleroma/web/admin_api/views/announcement_view.ex create mode 100644 lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex create mode 100644 lib/pleroma/web/api_spec/operations/announcement_operation.ex create mode 100644 lib/pleroma/web/api_spec/schemas/announcement.ex create mode 100644 lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex create mode 100644 lib/pleroma/web/mastodon_api/views/announcement_view.ex create mode 100644 priv/repo/migrations/20220308012601_create_announcements.exs create mode 100644 test/pleroma/announcement_read_relationship_test.exs create mode 100644 test/pleroma/announcement_test.exs create mode 100644 test/pleroma/web/admin_api/controllers/announcement_controller_test.exs create mode 100644 test/pleroma/web/mastodon_api/controllers/announcement_controller_test.exs diff --git a/docs/docs/development/API/admin_api.md b/docs/docs/development/API/admin_api.md index f14081893..c46f83839 100644 --- a/docs/docs/development/API/admin_api.md +++ b/docs/docs/development/API/admin_api.md @@ -1636,3 +1636,117 @@ Returns the content of the document "error": "Could not install frontend" } ``` + +## `GET /api/v1/pleroma/admin/announcements` + +### List announcements + +- Params: `offset`, `limit` + +- Response: JSON, list of announcements + +```json +[ + { + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" + } +] +``` + +Note that this differs from the Mastodon API variant: Mastodon API only returns *active* announcements, while this returns all. + +## `GET /api/v1/pleroma/admin/announcements/:id` + +### Display one announcement + +- Response: JSON, one announcement + +```json +{ + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" +} +``` + +## `POST /api/v1/pleroma/admin/announcements` + +### Create an announcement + +- Params: + - `content`: string, required, announcement content + - `starts_at`: datetime, optional, default to null, the time when the announcement will become active (displayed to users); if it is null, the announcement will be active immediately + - `ends_at`: datetime, optional, default to null, the time when the announcement will become inactive (no longer displayed to users); if it is null, the announcement will be active until an admin deletes it + - `all_day`: boolean, optional, default to false, tells the client whether to only display dates for `starts_at` and `ends_at` + +- Response: JSON, created announcement + +```json +{ + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" +} +``` + +## `PATCH /api/v1/pleroma/admin/announcements/:id` + +### Change an announcement + +- Params: same as `POST /api/v1/pleroma/admin/announcements`, except no param is required. + +- Updates the announcement according to params. Missing params are kept as-is. + +- Response: JSON, updated announcement + +```json +{ + "id": "AHDp0GBdRn1EPN5HN2", + "content": "some content", + "starts_at": null, + "ends_at": null, + "all_day": false, + "published_at": "2022-03-09T02:13:05", + "reactions": [], + "statuses": [], + "tags": [], + "emojis": [], + "updated_at": "2022-03-09T02:13:05" +} +``` + +## `DELETE /api/v1/pleroma/admin/announcements/:id` + +### Delete an announcement + +- Response: JSON, empty object + +```json +{} +``` diff --git a/lib/pleroma/announcement.ex b/lib/pleroma/announcement.ex new file mode 100644 index 000000000..d97c5e728 --- /dev/null +++ b/lib/pleroma/announcement.ex @@ -0,0 +1,160 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Announcement do + use Ecto.Schema + + import Ecto.Changeset, only: [cast: 3, validate_required: 2] + import Ecto.Query + + alias Pleroma.AnnouncementReadRelationship + alias Pleroma.Repo + + @type t :: %__MODULE__{} + @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true} + + schema "announcements" do + field(:data, :map) + field(:starts_at, :utc_datetime) + field(:ends_at, :utc_datetime) + field(:rendered, :map) + + timestamps(type: :utc_datetime) + end + + def change(struct, params \\ %{}) do + struct + |> cast(validate_params(struct, params), [:data, :starts_at, :ends_at, :rendered]) + |> validate_required([:data]) + end + + defp validate_params(struct, params) do + base_data = + %{ + "content" => "", + "all_day" => false + } + |> Map.merge((struct && struct.data) || %{}) + + merged_data = + Map.merge(base_data, params.data) + |> Map.take(["content", "all_day"]) + + params + |> Map.merge(%{data: merged_data}) + |> add_rendered_properties() + end + + def add_rendered_properties(params) do + {content_html, _, _} = + Pleroma.Web.CommonAPI.Utils.format_input(params.data["content"], "text/plain", + mentions_format: :full + ) + + rendered = %{ + "content" => content_html + } + + params + |> Map.put(:rendered, rendered) + end + + def add(params) do + changeset = change(%__MODULE__{}, params) + + Repo.insert(changeset) + end + + def update(announcement, params) do + changeset = change(announcement, params) + + Repo.update(changeset) + end + + def list_all do + __MODULE__ + |> Repo.all() + end + + def list_paginated(%{limit: limited_number, offset: offset_number}) do + __MODULE__ + |> limit(^limited_number) + |> offset(^offset_number) + |> Repo.all() + end + + def get_by_id(id) do + Repo.get_by(__MODULE__, id: id) + end + + def delete_by_id(id) do + with announcement when not is_nil(announcement) <- get_by_id(id), + {:ok, _} <- Repo.delete(announcement) do + :ok + else + _ -> + :error + end + end + + def read_by?(announcement, user) do + AnnouncementReadRelationship.exists?(user, announcement) + end + + def mark_read_by(announcement, user) do + AnnouncementReadRelationship.mark_read(user, announcement) + end + + def render_json(announcement, opts \\ []) do + extra_params = + case Keyword.fetch(opts, :for) do + {:ok, user} when not is_nil(user) -> + %{read: read_by?(announcement, user)} + + _ -> + %{} + end + + admin_extra_params = + case Keyword.fetch(opts, :admin) do + {:ok, true} -> + %{pleroma: %{raw_content: announcement.data["content"]}} + + _ -> + %{} + end + + base = %{ + id: announcement.id, + content: announcement.rendered["content"], + starts_at: announcement.starts_at, + ends_at: announcement.ends_at, + all_day: announcement.data["all_day"], + published_at: announcement.inserted_at, + updated_at: announcement.updated_at, + mentions: [], + statuses: [], + tags: [], + emojis: [], + reactions: [] + } + + base + |> Map.merge(extra_params) + |> Map.merge(admin_extra_params) + end + + # "visible" means: + # starts_at < time < ends_at + def list_all_visible_when(time) do + __MODULE__ + |> where([a], is_nil(a.starts_at) or a.starts_at < ^time) + |> where([a], is_nil(a.ends_at) or a.ends_at > ^time) + |> Repo.all() + end + + def list_all_visible do + list_all_visible_when(DateTime.now("Etc/UTC") |> elem(1)) + end +end diff --git a/lib/pleroma/announcement_read_relationship.ex b/lib/pleroma/announcement_read_relationship.ex new file mode 100644 index 000000000..9b64404ce --- /dev/null +++ b/lib/pleroma/announcement_read_relationship.ex @@ -0,0 +1,55 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.AnnouncementReadRelationship do + use Ecto.Schema + + import Ecto.Changeset + + alias FlakeId.Ecto.CompatType + alias Pleroma.Announcement + alias Pleroma.Repo + alias Pleroma.User + + @type t :: %__MODULE__{} + + schema "announcement_read_relationships" do + belongs_to(:user, User, type: CompatType) + belongs_to(:announcement, Announcement, type: CompatType) + + timestamps(updated_at: false) + end + + def mark_read(user, announcement) do + %__MODULE__{} + |> cast(%{user_id: user.id, announcement_id: announcement.id}, [:user_id, :announcement_id]) + |> validate_required([:user_id, :announcement_id]) + |> foreign_key_constraint(:user_id) + |> foreign_key_constraint(:announcement_id) + |> unique_constraint([:user_id, :announcement_id]) + |> Repo.insert() + end + + def mark_unread(user, announcement) do + with relationship <- get(user, announcement), + {:exists, true} <- {:exists, not is_nil(relationship)}, + {:ok, _} <- Repo.delete(relationship) do + :ok + else + {:exists, false} -> + :ok + + _ -> + :error + end + end + + def get(user, announcement) do + Repo.get_by(__MODULE__, user_id: user.id, announcement_id: announcement.id) + end + + def exists?(user, announcement) do + not is_nil(get(user, announcement)) + end +end diff --git a/lib/pleroma/web/admin_api/controllers/announcement_controller.ex b/lib/pleroma/web/admin_api/controllers/announcement_controller.ex new file mode 100644 index 000000000..6ad5fc12c --- /dev/null +++ b/lib/pleroma/web/admin_api/controllers/announcement_controller.ex @@ -0,0 +1,83 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.AnnouncementController do + use Pleroma.Web, :controller + + alias Pleroma.Announcement + alias Pleroma.Web.ControllerHelper + alias Pleroma.Web.Plugs.OAuthScopesPlug + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + plug(OAuthScopesPlug, %{scopes: ["admin:write"]} when action in [:create, :delete, :change]) + plug(OAuthScopesPlug, %{scopes: ["admin:read"]} when action in [:index, :show]) + action_fallback(Pleroma.Web.AdminAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.AnnouncementOperation + + defp default_limit, do: 20 + + def index(conn, params) do + limit = Map.get(params, :limit, default_limit()) + offset = Map.get(params, :offset, 0) + + announcements = Announcement.list_paginated(%{limit: limit, offset: offset}) + + render(conn, "index.json", announcements: announcements) + end + + def show(conn, %{id: id} = _params) do + announcement = Announcement.get_by_id(id) + + if is_nil(announcement) do + {:error, :not_found} + else + render(conn, "show.json", announcement: announcement) + end + end + + def create(%{body_params: params} = conn, _params) do + with {:ok, announcement} <- Announcement.add(change_params(params)) do + render(conn, "show.json", announcement: announcement) + else + _ -> + {:error, 400} + end + end + + def change_params(orig_params) do + data = + %{} + |> Pleroma.Maps.put_if_present("content", orig_params, &Map.fetch(&1, :content)) + |> Pleroma.Maps.put_if_present("all_day", orig_params, &Map.fetch(&1, :all_day)) + + orig_params + |> Map.merge(%{data: data}) + end + + def change(%{body_params: params} = conn, %{id: id} = _params) do + with announcement <- Announcement.get_by_id(id), + {:exists, true} <- {:exists, not is_nil(announcement)}, + {:ok, announcement} <- Announcement.update(announcement, change_params(params)) do + render(conn, "show.json", announcement: announcement) + else + {:exists, false} -> + {:error, :not_found} + + _ -> + {:error, 400} + end + end + + def delete(conn, %{id: id} = _params) do + case Announcement.delete_by_id(id) do + :ok -> + conn + |> ControllerHelper.json_response(:ok, %{}) + + _ -> + {:error, :not_found} + end + end +end diff --git a/lib/pleroma/web/admin_api/views/announcement_view.ex b/lib/pleroma/web/admin_api/views/announcement_view.ex new file mode 100644 index 000000000..a35bd60cf --- /dev/null +++ b/lib/pleroma/web/admin_api/views/announcement_view.ex @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.AnnouncementView do + use Pleroma.Web, :view + + def render("index.json", %{announcements: announcements}) do + render_many(announcements, __MODULE__, "show.json") + end + + def render("show.json", %{announcement: announcement}) do + Pleroma.Announcement.render_json(announcement, admin: true) + end +end diff --git a/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex b/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex new file mode 100644 index 000000000..58a039e72 --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/admin/announcement_operation.ex @@ -0,0 +1,165 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Admin.AnnouncementOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Announcement + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + import Pleroma.Web.ApiSpec.Helpers + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Retrieve a list of announcements", + operationId: "AdminAPI.AnnouncementController.index", + security: [%{"oAuth" => ["admin:read"]}], + parameters: [ + Operation.parameter( + :limit, + :query, + %Schema{type: :integer, minimum: 1}, + "the maximum number of announcements to return" + ), + Operation.parameter( + :offset, + :query, + %Schema{type: :integer, minimum: 0}, + "the offset of the first announcement to return" + ) + | admin_api_params() + ], + responses: %{ + 200 => Operation.response("Response", "application/json", list_of_announcements()), + 400 => Operation.response("Forbidden", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def show_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Display one announcement", + operationId: "AdminAPI.AnnouncementController.show", + security: [%{"oAuth" => ["admin:read"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + | admin_api_params() + ], + responses: %{ + 200 => Operation.response("Response", "application/json", Announcement), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def delete_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Delete one announcement", + operationId: "AdminAPI.AnnouncementController.delete", + security: [%{"oAuth" => ["admin:write"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + | admin_api_params() + ], + responses: %{ + 200 => Operation.response("Response", "application/json", %Schema{type: :object}), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def create_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Create one announcement", + operationId: "AdminAPI.AnnouncementController.create", + security: [%{"oAuth" => ["admin:write"]}], + requestBody: request_body("Parameters", create_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", Announcement), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def change_operation do + %Operation{ + tags: ["Announcement managment"], + summary: "Change one announcement", + operationId: "AdminAPI.AnnouncementController.change", + security: [%{"oAuth" => ["admin:write"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + | admin_api_params() + ], + requestBody: request_body("Parameters", change_request(), required: true), + responses: %{ + 200 => Operation.response("Response", "application/json", Announcement), + 400 => Operation.response("Bad Request", "application/json", ApiError), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + defp create_or_change_props do + %{ + content: %Schema{type: :string}, + starts_at: %Schema{type: :string, format: "date-time", nullable: true}, + ends_at: %Schema{type: :string, format: "date-time", nullable: true}, + all_day: %Schema{type: :boolean} + } + end + + def create_request do + %Schema{ + title: "AnnouncementCreateRequest", + type: :object, + required: [:content], + properties: create_or_change_props() + } + end + + def change_request do + %Schema{ + title: "AnnouncementChangeRequest", + type: :object, + properties: create_or_change_props() + } + end + + def list_of_announcements do + %Schema{ + type: :array, + items: Announcement + } + end +end diff --git a/lib/pleroma/web/api_spec/operations/announcement_operation.ex b/lib/pleroma/web/api_spec/operations/announcement_operation.ex new file mode 100644 index 000000000..71be0002a --- /dev/null +++ b/lib/pleroma/web/api_spec/operations/announcement_operation.ex @@ -0,0 +1,57 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.AnnouncementOperation do + alias OpenApiSpex.Operation + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.Announcement + alias Pleroma.Web.ApiSpec.Schemas.ApiError + + def open_api_operation(action) do + operation = String.to_existing_atom("#{action}_operation") + apply(__MODULE__, operation, []) + end + + def index_operation do + %Operation{ + tags: ["Announcement"], + summary: "Retrieve a list of announcements", + operationId: "MastodonAPI.AnnouncementController.index", + security: [%{"oAuth" => []}], + responses: %{ + 200 => Operation.response("Response", "application/json", list_of_announcements()), + 403 => Operation.response("Forbidden", "application/json", ApiError) + } + } + end + + def mark_read_operation do + %Operation{ + tags: ["Announcement"], + summary: "Mark one announcement as read", + operationId: "MastodonAPI.AnnouncementController.mark_read", + security: [%{"oAuth" => ["write:accounts"]}], + parameters: [ + Operation.parameter( + :id, + :path, + :string, + "announcement id" + ) + ], + responses: %{ + 200 => Operation.response("Response", "application/json", %Schema{type: :object}), + 403 => Operation.response("Forbidden", "application/json", ApiError), + 404 => Operation.response("Not Found", "application/json", ApiError) + } + } + end + + def list_of_announcements do + %Schema{ + type: :array, + items: Announcement + } + end +end diff --git a/lib/pleroma/web/api_spec/schemas/announcement.ex b/lib/pleroma/web/api_spec/schemas/announcement.ex new file mode 100644 index 000000000..67d129ef6 --- /dev/null +++ b/lib/pleroma/web/api_spec/schemas/announcement.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ApiSpec.Schemas.Announcement do + alias OpenApiSpex.Schema + alias Pleroma.Web.ApiSpec.Schemas.FlakeID + + require OpenApiSpex + + OpenApiSpex.schema(%{ + title: "Announcement", + description: "Response schema for an announcement", + type: :object, + properties: %{ + id: FlakeID, + content: %Schema{type: :string}, + starts_at: %Schema{ + type: :string, + format: "date-time", + nullable: true + }, + ends_at: %Schema{ + type: :string, + format: "date-time", + nullable: true + }, + all_day: %Schema{type: :boolean}, + published_at: %Schema{type: :string, format: "date-time"}, + updated_at: %Schema{type: :string, format: "date-time"}, + read: %Schema{type: :boolean}, + mentions: %Schema{type: :array}, + statuses: %Schema{type: :array}, + tags: %Schema{type: :array}, + emojis: %Schema{type: :array}, + reactions: %Schema{type: :array}, + pleroma: %Schema{ + type: :object, + properties: %{ + raw_content: %Schema{type: :string} + } + } + } + }) +end diff --git a/lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex b/lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex new file mode 100644 index 000000000..080af96d5 --- /dev/null +++ b/lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex @@ -0,0 +1,60 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.AnnouncementController do + use Pleroma.Web, :controller + + import Pleroma.Web.ControllerHelper, + only: [ + json_response: 3 + ] + + alias Pleroma.Announcement + alias Pleroma.Web.Plugs.OAuthScopesPlug + + plug(Pleroma.Web.ApiSpec.CastAndValidate) + + # Mastodon docs say this only requires a user token, no scopes needed + # As the op `|` requires at least one scope to be present, we use `&` here. + plug( + OAuthScopesPlug, + %{scopes: [], op: :&} + when action in [:index] + ) + + # Same as in MastodonAPI specs + plug( + OAuthScopesPlug, + %{scopes: ["write:accounts"]} + when action in [:mark_read] + ) + + action_fallback(Pleroma.Web.MastodonAPI.FallbackController) + + defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.AnnouncementOperation + + @doc "GET /api/v1/announcements" + def index(%{assigns: %{user: user}} = conn, _params) do + render(conn, "index.json", announcements: all_visible(), user: user) + end + + def index(conn, _params) do + render(conn, "index.json", announcements: all_visible(), user: nil) + end + + defp all_visible do + Announcement.list_all_visible() + end + + @doc "POST /api/v1/announcements/:id/dismiss" + def mark_read(%{assigns: %{user: user}} = conn, %{id: id} = _params) do + with announcement when not is_nil(announcement) <- Announcement.get_by_id(id), + {:ok, _} <- Announcement.mark_read_by(announcement, user) do + json_response(conn, :ok, %{}) + else + _ -> + {:error, :not_found} + end + end +end diff --git a/lib/pleroma/web/mastodon_api/views/announcement_view.ex b/lib/pleroma/web/mastodon_api/views/announcement_view.ex new file mode 100644 index 000000000..93fdfb1f1 --- /dev/null +++ b/lib/pleroma/web/mastodon_api/views/announcement_view.ex @@ -0,0 +1,15 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.AnnouncementView do + use Pleroma.Web, :view + + def render("index.json", %{announcements: announcements, user: user}) do + render_many(announcements, __MODULE__, "show.json", user: user) + end + + def render("show.json", %{announcement: announcement, user: user}) do + Pleroma.Announcement.render_json(announcement, for: user) + end +end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index b1817ef8b..f53a73895 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -235,6 +235,12 @@ defmodule Pleroma.Web.Router do post("/frontends/install", FrontendController, :install) post("/backups", AdminAPIController, :create_backup) + + get("/announcements", AnnouncementController, :index) + post("/announcements", AnnouncementController, :create) + get("/announcements/:id", AnnouncementController, :show) + patch("/announcements/:id", AnnouncementController, :change) + delete("/announcements/:id", AnnouncementController, :delete) end # AdminAPI: admins and mods (staff) can perform these actions (if enabled by config) @@ -581,6 +587,9 @@ defmodule Pleroma.Web.Router do get("/timelines/home", TimelineController, :home) get("/timelines/direct", TimelineController, :direct) get("/timelines/list/:list_id", TimelineController, :list) + + get("/announcements", AnnouncementController, :index) + post("/announcements/:id/dismiss", AnnouncementController, :mark_read) end scope "/api/web", Pleroma.Web do diff --git a/priv/repo/migrations/20220308012601_create_announcements.exs b/priv/repo/migrations/20220308012601_create_announcements.exs new file mode 100644 index 000000000..01c9ce041 --- /dev/null +++ b/priv/repo/migrations/20220308012601_create_announcements.exs @@ -0,0 +1,26 @@ +defmodule Pleroma.Repo.Migrations.CreateAnnouncements do + use Ecto.Migration + + def change do + create_if_not_exists table(:announcements, primary_key: false) do + add(:id, :uuid, primary_key: true) + add(:data, :map) + add(:starts_at, :naive_datetime) + add(:ends_at, :naive_datetime) + add(:rendered, :map) + + timestamps() + end + + create_if_not_exists table(:announcement_read_relationships) do + add(:user_id, references(:users, type: :uuid, on_delete: :delete_all)) + add(:announcement_id, references(:announcements, type: :uuid, on_delete: :delete_all)) + + timestamps(updated_at: false) + end + + create_if_not_exists( + unique_index(:announcement_read_relationships, [:user_id, :announcement_id]) + ) + end +end diff --git a/test/pleroma/announcement_read_relationship_test.exs b/test/pleroma/announcement_read_relationship_test.exs new file mode 100644 index 000000000..5fd4ffbef --- /dev/null +++ b/test/pleroma/announcement_read_relationship_test.exs @@ -0,0 +1,40 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.AnnouncementReadRelationshipTest do + alias Pleroma.AnnouncementReadRelationship + + use Pleroma.DataCase, async: true + + import Pleroma.Factory + + setup do + {:ok, user: insert(:user), announcement: insert(:announcement)} + end + + describe "mark_read/2" do + test "should insert relationship", %{user: user, announcement: announcement} do + {:ok, _} = AnnouncementReadRelationship.mark_read(user, announcement) + + assert AnnouncementReadRelationship.exists?(user, announcement) + end + end + + describe "mark_unread/2" do + test "should delete relationship", %{user: user, announcement: announcement} do + {:ok, _} = AnnouncementReadRelationship.mark_read(user, announcement) + + assert :ok = AnnouncementReadRelationship.mark_unread(user, announcement) + refute AnnouncementReadRelationship.exists?(user, announcement) + end + + test "should not fail if relationship does not exist", %{ + user: user, + announcement: announcement + } do + assert :ok = AnnouncementReadRelationship.mark_unread(user, announcement) + refute AnnouncementReadRelationship.exists?(user, announcement) + end + end +end diff --git a/test/pleroma/announcement_test.exs b/test/pleroma/announcement_test.exs new file mode 100644 index 000000000..a007c3718 --- /dev/null +++ b/test/pleroma/announcement_test.exs @@ -0,0 +1,98 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.AnnouncementTest do + alias Pleroma.Announcement + + use Pleroma.DataCase, async: true + + import Pleroma.Factory + + describe "list_all_visible_when/1" do + setup do: {:ok, time: NaiveDateTime.utc_now()} + + test "with no start or end time", %{time: time} do + _announcement = insert(:announcement) + + assert [_] = Announcement.list_all_visible_when(time) + end + + test "with start time before current", %{time: time} do + before_now = NaiveDateTime.add(time, -10, :second) + + _announcement = insert(:announcement, %{starts_at: before_now}) + + assert [_] = Announcement.list_all_visible_when(time) + end + + test "with start time after current", %{time: time} do + after_now = NaiveDateTime.add(time, 10, :second) + + _announcement = insert(:announcement, %{starts_at: after_now}) + + assert [] = Announcement.list_all_visible_when(time) + end + + test "with end time after current", %{time: time} do + after_now = NaiveDateTime.add(time, 10, :second) + + _announcement = insert(:announcement, %{ends_at: after_now}) + + assert [_] = Announcement.list_all_visible_when(time) + end + + test "with end time before current", %{time: time} do + before_now = NaiveDateTime.add(time, -10, :second) + + _announcement = insert(:announcement, %{ends_at: before_now}) + + assert [] = Announcement.list_all_visible_when(time) + end + + test "with both start and end time", %{time: time} do + before_now = NaiveDateTime.add(time, -10, :second) + after_now = NaiveDateTime.add(time, 10, :second) + + _announcement = insert(:announcement, %{starts_at: before_now, ends_at: after_now}) + + assert [_] = Announcement.list_all_visible_when(time) + end + + test "with both start and end time, current not in the range", %{time: time} do + before_now = NaiveDateTime.add(time, -10, :second) + after_now = NaiveDateTime.add(time, 10, :second) + + _announcement = insert(:announcement, %{starts_at: after_now, ends_at: before_now}) + + assert [] = Announcement.list_all_visible_when(time) + end + end + + describe "announcements formatting" do + test "it formats links" do + raw = "something on https://pleroma.social ." + announcement = insert(:announcement, %{data: %{"content" => raw}}) + + assert announcement.rendered["content"] =~ ~r( raw}}) + + assert announcement.rendered["content"] =~ ~r( raw}}) + + assert announcement.rendered["content"] =~ ~r( +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.AdminAPI.AnnouncementControllerTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + + setup do + admin = insert(:user, is_admin: true) + token = insert(:oauth_admin_token, user: admin) + + conn = + build_conn() + |> assign(:user, admin) + |> assign(:token, token) + + {:ok, %{admin: admin, token: token, conn: conn}} + end + + describe "GET /api/v1/pleroma/admin/announcements" do + test "it lists all announcements", %{conn: conn} do + %{id: id} = insert(:announcement) + + response = + conn + |> get("/api/v1/pleroma/admin/announcements") + |> json_response_and_validate_schema(:ok) + + assert [%{"id" => ^id}] = response + end + + test "it paginates announcements", %{conn: conn} do + _announcements = Enum.map(0..20, fn _ -> insert(:announcement) end) + + response = + conn + |> get("/api/v1/pleroma/admin/announcements") + |> json_response_and_validate_schema(:ok) + + assert length(response) == 20 + end + + test "it paginates announcements with custom params", %{conn: conn} do + announcements = Enum.map(0..20, fn _ -> insert(:announcement) end) + + response = + conn + |> get("/api/v1/pleroma/admin/announcements", limit: 5, offset: 7) + |> json_response_and_validate_schema(:ok) + + assert length(response) == 5 + assert Enum.at(response, 0)["id"] == Enum.at(announcements, 7).id + end + + test "it returns empty list with out-of-bounds offset", %{conn: conn} do + _announcements = Enum.map(0..20, fn _ -> insert(:announcement) end) + + response = + conn + |> get("/api/v1/pleroma/admin/announcements", offset: 21) + |> json_response_and_validate_schema(:ok) + + assert [] = response + end + + test "it rejects invalid pagination params", %{conn: conn} do + conn + |> get("/api/v1/pleroma/admin/announcements", limit: 0) + |> json_response_and_validate_schema(400) + + conn + |> get("/api/v1/pleroma/admin/announcements", limit: -1) + |> json_response_and_validate_schema(400) + + conn + |> get("/api/v1/pleroma/admin/announcements", offset: -1) + |> json_response_and_validate_schema(400) + end + end + + describe "GET /api/v1/pleroma/admin/announcements/:id" do + test "it displays one announcement", %{conn: conn} do + %{id: id} = insert(:announcement) + + response = + conn + |> get("/api/v1/pleroma/admin/announcements/#{id}") + |> json_response_and_validate_schema(:ok) + + assert %{"id" => ^id} = response + end + + test "it returns not found for non-existent id", %{conn: conn} do + %{id: id} = insert(:announcement) + + _response = + conn + |> get("/api/v1/pleroma/admin/announcements/#{id}xxx") + |> json_response_and_validate_schema(:not_found) + end + end + + describe "DELETE /api/v1/pleroma/admin/announcements/:id" do + test "it deletes specified announcement", %{conn: conn} do + %{id: id} = insert(:announcement) + + _response = + conn + |> delete("/api/v1/pleroma/admin/announcements/#{id}") + |> json_response_and_validate_schema(:ok) + end + + test "it returns not found for non-existent id", %{conn: conn} do + %{id: id} = insert(:announcement) + + _response = + conn + |> delete("/api/v1/pleroma/admin/announcements/#{id}xxx") + |> json_response_and_validate_schema(:not_found) + + assert %{id: ^id} = Pleroma.Announcement.get_by_id(id) + end + end + + describe "PATCH /api/v1/pleroma/admin/announcements/:id" do + test "it returns not found for non-existent id", %{conn: conn} do + %{id: id} = insert(:announcement) + + _response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/admin/announcements/#{id}xxx", %{}) + |> json_response_and_validate_schema(:not_found) + + assert %{id: ^id} = Pleroma.Announcement.get_by_id(id) + end + + test "it updates a field", %{conn: conn} do + %{id: id} = insert(:announcement) + + now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) + starts_at = NaiveDateTime.add(now, -10, :second) + + _response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/admin/announcements/#{id}", %{ + starts_at: NaiveDateTime.to_iso8601(starts_at) + }) + |> json_response_and_validate_schema(:ok) + + new = Pleroma.Announcement.get_by_id(id) + + assert NaiveDateTime.compare(new.starts_at, starts_at) == :eq + end + + test "it updates with time with utc timezone", %{conn: conn} do + %{id: id} = insert(:announcement) + + now = DateTime.now("Etc/UTC") |> elem(1) |> DateTime.truncate(:second) + starts_at = DateTime.add(now, -10, :second) + + _response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/admin/announcements/#{id}", %{ + starts_at: DateTime.to_iso8601(starts_at) + }) + |> json_response_and_validate_schema(:ok) + + new = Pleroma.Announcement.get_by_id(id) + + assert DateTime.compare(new.starts_at, starts_at) == :eq + end + + test "it updates a data field", %{conn: conn} do + %{id: id} = announcement = insert(:announcement, data: %{"all_day" => true}) + + assert announcement.data["all_day"] == true + + new_content = "new content" + + response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/admin/announcements/#{id}", %{ + content: new_content + }) + |> json_response_and_validate_schema(:ok) + + assert response["content"] == new_content + assert response["all_day"] == true + + new = Pleroma.Announcement.get_by_id(id) + + assert new.data["content"] == new_content + assert new.data["all_day"] == true + end + + test "it nullifies a nullable field", %{conn: conn} do + now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) + starts_at = NaiveDateTime.add(now, -10, :second) + + %{id: id} = insert(:announcement, starts_at: starts_at) + + response = + conn + |> put_req_header("content-type", "application/json") + |> patch("/api/v1/pleroma/admin/announcements/#{id}", %{ + starts_at: nil + }) + |> json_response_and_validate_schema(:ok) + + assert response["starts_at"] == nil + + new = Pleroma.Announcement.get_by_id(id) + + assert new.starts_at == nil + end + end + + describe "POST /api/v1/pleroma/admin/announcements" do + test "it creates an announcement", %{conn: conn} do + content = "test post announcement api" + + now = NaiveDateTime.utc_now() |> NaiveDateTime.truncate(:second) + starts_at = NaiveDateTime.add(now, -10, :second) + ends_at = NaiveDateTime.add(now, 10, :second) + + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/admin/announcements", %{ + "content" => content, + "starts_at" => NaiveDateTime.to_iso8601(starts_at), + "ends_at" => NaiveDateTime.to_iso8601(ends_at), + "all_day" => true + }) + |> json_response_and_validate_schema(:ok) + + assert %{"content" => ^content, "all_day" => true} = response + + announcement = Pleroma.Announcement.get_by_id(response["id"]) + + assert not is_nil(announcement) + + assert NaiveDateTime.compare(announcement.starts_at, starts_at) == :eq + assert NaiveDateTime.compare(announcement.ends_at, ends_at) == :eq + end + + test "creating with time with utc timezones", %{conn: conn} do + content = "test post announcement api" + + now = DateTime.now("Etc/UTC") |> elem(1) |> DateTime.truncate(:second) + starts_at = DateTime.add(now, -10, :second) + ends_at = DateTime.add(now, 10, :second) + + response = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/pleroma/admin/announcements", %{ + "content" => content, + "starts_at" => DateTime.to_iso8601(starts_at), + "ends_at" => DateTime.to_iso8601(ends_at), + "all_day" => true + }) + |> json_response_and_validate_schema(:ok) + + assert %{"content" => ^content, "all_day" => true} = response + + announcement = Pleroma.Announcement.get_by_id(response["id"]) + + assert not is_nil(announcement) + + assert DateTime.compare(announcement.starts_at, starts_at) == :eq + assert DateTime.compare(announcement.ends_at, ends_at) == :eq + end + end +end diff --git a/test/pleroma/web/mastodon_api/controllers/announcement_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/announcement_controller_test.exs new file mode 100644 index 000000000..60c9978c2 --- /dev/null +++ b/test/pleroma/web/mastodon_api/controllers/announcement_controller_test.exs @@ -0,0 +1,169 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.MastodonAPI.AnnouncementControllerTest do + use Pleroma.Web.ConnCase + + import Pleroma.Factory + + alias Pleroma.Announcement + alias Pleroma.AnnouncementReadRelationship + + describe "GET /api/v1/announcements" do + setup do + %{conn: conn} = oauth_access([]) + {:ok, conn: conn} + end + + test "it does not allow guests", %{conn: conn} do + _response = + conn + |> assign(:token, nil) + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:forbidden) + end + + test "it allows users with scopes" do + %{conn: conn} = oauth_access(["read:accounts"]) + + _response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + end + + test "it lists all announcements", %{conn: conn} do + %{id: id} = insert(:announcement) + + response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + + assert [%{"id" => ^id}] = response + end + + test "it returns time with utc timezone", %{conn: conn} do + start_time = + NaiveDateTime.utc_now() + |> NaiveDateTime.add(-999_999, :second) + |> NaiveDateTime.truncate(:second) + + end_time = + NaiveDateTime.utc_now() + |> NaiveDateTime.add(999_999, :second) + |> NaiveDateTime.truncate(:second) + + %{id: id} = insert(:announcement, %{starts_at: start_time, ends_at: end_time}) + + response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + + assert [%{"id" => ^id}] = [announcement] = response + + assert String.ends_with?(announcement["starts_at"], "Z") + assert String.ends_with?(announcement["ends_at"], "Z") + end + + test "it does not list announcements starting after current time", %{conn: conn} do + time = NaiveDateTime.utc_now() |> NaiveDateTime.add(999_999, :second) + insert(:announcement, starts_at: time) + + response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + + assert [] = response + end + + test "it does not list announcements ending before current time", %{conn: conn} do + time = NaiveDateTime.utc_now() |> NaiveDateTime.add(-999_999, :second) + insert(:announcement, ends_at: time) + + response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + + assert [] = response + end + + test "when authenticated, also expose read property", %{conn: conn} do + %{id: id} = insert(:announcement) + + response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + + assert [%{"id" => ^id, "read" => false}] = response + end + + test "when authenticated and announcement is read by user" do + %{id: id} = announcement = insert(:announcement) + user = insert(:user) + + AnnouncementReadRelationship.mark_read(user, announcement) + + %{conn: conn} = oauth_access(["read:accounts"], user: user) + + response = + conn + |> get("/api/v1/announcements") + |> json_response_and_validate_schema(:ok) + + assert [%{"id" => ^id, "read" => true}] = response + end + end + + describe "POST /api/v1/announcements/:id/dismiss" do + setup do: oauth_access(["write:accounts"]) + + test "it requires auth", %{conn: conn} do + %{id: id} = insert(:announcement) + + _response = + conn + |> assign(:token, nil) + |> post("/api/v1/announcements/#{id}/dismiss") + |> json_response_and_validate_schema(:forbidden) + end + + test "it requires write:accounts oauth scope" do + %{id: id} = insert(:announcement) + + %{conn: conn} = oauth_access(["read:accounts"]) + + _response = + conn + |> post("/api/v1/announcements/#{id}/dismiss") + |> json_response_and_validate_schema(:forbidden) + end + + test "it gives 404 for non-existent announcements", %{conn: conn} do + %{id: id} = insert(:announcement) + + _response = + conn + |> post("/api/v1/announcements/#{id}xxx/dismiss") + |> json_response_and_validate_schema(:not_found) + end + + test "it marks announcement as read", %{user: user, conn: conn} do + %{id: id} = announcement = insert(:announcement) + + refute Announcement.read_by?(announcement, user) + + _response = + conn + |> post("/api/v1/announcements/#{id}/dismiss") + |> json_response_and_validate_schema(:ok) + + assert Announcement.read_by?(announcement, user) + end + end +end diff --git a/test/support/factory.ex b/test/support/factory.ex index 4a78425ce..64d983663 100644 --- a/test/support/factory.ex +++ b/test/support/factory.ex @@ -627,4 +627,16 @@ def filter_factory do context: ["home"] } end + + def announcement_factory(params \\ %{}) do + data = Map.get(params, :data, %{}) + + {_, params} = Map.pop(params, :data) + + %Pleroma.Announcement{ + data: Map.merge(%{"content" => "test announcement", "all_day" => false}, data) + } + |> Map.merge(params) + |> Pleroma.Announcement.add_rendered_properties() + end end From 85e2e64c829e21dadd93edc196db010f757fcbbf Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Mon, 18 Jul 2022 15:21:27 +0100 Subject: [PATCH 06/82] fix resolution of GTS user keys --- lib/pleroma/signature.ex | 23 +++++++++++++++-------- test/pleroma/signature_test.exs | 5 +++++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/lib/pleroma/signature.ex b/lib/pleroma/signature.ex index 43ab569a4..a71a504b3 100644 --- a/lib/pleroma/signature.ex +++ b/lib/pleroma/signature.ex @@ -10,17 +10,14 @@ defmodule Pleroma.Signature do alias Pleroma.User alias Pleroma.Web.ActivityPub.ActivityPub + @known_suffixes ["/publickey", "/main-key"] + def key_id_to_actor_id(key_id) do uri = - URI.parse(key_id) + key_id + |> URI.parse() |> Map.put(:fragment, nil) - - uri = - if not is_nil(uri.path) and String.ends_with?(uri.path, "/publickey") do - Map.put(uri, :path, String.replace(uri.path, "/publickey", "")) - else - uri - end + |> remove_suffix(@known_suffixes) maybe_ap_id = URI.to_string(uri) @@ -36,6 +33,16 @@ def key_id_to_actor_id(key_id) do end end + defp remove_suffix(uri, [test | rest]) do + if not is_nil(uri.path) and String.ends_with?(uri.path, test) do + Map.put(uri, :path, String.replace(uri.path, test, "")) + else + remove_suffix(uri, rest) + end + end + + defp remove_suffix(uri, []), do: uri + def fetch_public_key(conn) do with %{"keyId" => kid} <- HTTPSignatures.signature_for_conn(conn), {:ok, actor_id} <- key_id_to_actor_id(kid), diff --git a/test/pleroma/signature_test.exs b/test/pleroma/signature_test.exs index 047c537e0..e3ae36b46 100644 --- a/test/pleroma/signature_test.exs +++ b/test/pleroma/signature_test.exs @@ -109,6 +109,11 @@ test "it properly deduces the actor id for mastodon and pleroma" do {:ok, "https://example.com/users/1234"} end + test "it deduces the actor id for gotoSocial" do + assert Signature.key_id_to_actor_id("https://example.com/users/1234/main-key") == + {:ok, "https://example.com/users/1234"} + end + test "it calls webfinger for 'acct:' accounts" do with_mock(Pleroma.Web.WebFinger, finger: fn _ -> %{"ap_id" => "https://gensokyo.2hu/users/raymoo"} end From f95f35a1ab0b65906d639b27e9427654862a7dce Mon Sep 17 00:00:00 2001 From: Sol Fisher Romanoff Date: Tue, 19 Jul 2022 12:36:09 +0300 Subject: [PATCH 07/82] doc: update repo link from docs to akkoma --- docs/mkdocs.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 925363e2c..c19439942 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -14,8 +14,8 @@ theme: extra_css: - css/extra.css -repo_name: 'AkkomaGang/docs' -repo_url: 'https://akkoma.dev/AkkomaGang/docs' +repo_name: 'AkkomaGang/akkoma' +repo_url: 'https://akkoma.dev/AkkomaGang/akkoma' extra: repo_icon: gitea From cf0ad02ea961ae8cb6cc4f960afaeead58ecd4af Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 19 Jul 2022 15:07:45 +0100 Subject: [PATCH 08/82] Remove scrobbling support --- lib/pleroma/web/activity_pub/activity_pub.ex | 20 ---- .../web/activity_pub/transmogrifier.ex | 33 +----- lib/pleroma/web/activity_pub/utils.ex | 15 --- .../web/activity_pub/views/object_view.ex | 2 +- lib/pleroma/web/api_spec.ex | 2 +- .../operations/pleroma_scrobble_operation.ex | 102 ------------------ lib/pleroma/web/common_api.ex | 6 -- lib/pleroma/web/common_api/activity_draft.ex | 24 ----- .../controllers/scrobble_controller.ex | 52 --------- .../web/pleroma_api/views/scrobble_view.ex | 37 ------- lib/pleroma/web/router.ex | 3 - .../web/activity_pub/activity_pub_test.exs | 36 ------- .../transmogrifier/audio_handling_test.exs | 33 ------ .../web/activity_pub/transmogrifier_test.exs | 14 --- test/pleroma/web/common_api_test.exs | 39 ------- .../controllers/scrobble_controller_test.exs | 60 ----------- .../pleroma_api/views/scrobble_view_test.exs | 20 ---- 17 files changed, 3 insertions(+), 495 deletions(-) delete mode 100644 lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex delete mode 100644 lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex delete mode 100644 lib/pleroma/web/pleroma_api/views/scrobble_view.ex delete mode 100644 test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs delete mode 100644 test/pleroma/web/pleroma_api/views/scrobble_view_test.exs diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 236181b07..3583f1626 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -318,26 +318,6 @@ defp maybe_schedule_poll_notifications(activity) do :ok end - @spec listen(map()) :: {:ok, Activity.t()} | {:error, any()} - def listen(%{to: to, actor: actor, context: context, object: object} = params) do - additional = params[:additional] || %{} - # only accept false as false value - local = !(params[:local] == false) - published = params[:published] - - listen_data = - make_listen_data( - %{to: to, actor: actor, published: published, context: context, object: object}, - additional - ) - - with {:ok, activity} <- insert(listen_data, local), - _ <- notify_and_stream(activity), - :ok <- maybe_federate(activity) do - {:ok, activity} - end - end - @spec unfollow(User.t(), User.t(), String.t() | nil, boolean()) :: {:ok, Activity.t()} | nil | {:error, any()} def unfollow(follower, followed, activity_id \\ nil, local \\ true) do diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index cf0c9a9e2..cf072f7ac 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -384,37 +384,6 @@ def handle_incoming(%{"id" => ""}, _options), do: :error def handle_incoming(%{"id" => id}, _options) when is_binary(id) and byte_size(id) < 8, do: :error - def handle_incoming( - %{"type" => "Listen", "object" => %{"type" => "Audio"} = object} = data, - options - ) do - actor = Containment.get_actor(data) - - data = - Map.put(data, "actor", actor) - |> fix_addressing - - with {:ok, %User{} = user} <- User.get_or_fetch_by_ap_id(data["actor"]) do - reply_depth = (options[:depth] || 0) + 1 - options = Keyword.put(options, :depth, reply_depth) - object = fix_object(object, options) - - params = %{ - to: data["to"], - object: object, - actor: user, - context: nil, - local: false, - published: data["published"], - additional: Map.take(data, ["cc", "id"]) - } - - ActivityPub.listen(params) - else - _e -> :error - end - end - @doc "Rewrite misskey likes into EmojiReacts" def handle_incoming( %{ @@ -695,7 +664,7 @@ def prepare_object(object) do # """ def prepare_outgoing(%{"type" => activity_type, "object" => object_id} = data) - when activity_type in ["Create", "Listen"] do + when activity_type in ["Create"] do object = object_id |> Object.normalize(fetch: false) diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 6a8360def..0e92deb31 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -713,21 +713,6 @@ def make_create_data(params, additional) do |> Map.merge(additional) end - #### Listen-related helpers - def make_listen_data(params, additional) do - published = params.published || make_date() - - %{ - "type" => "Listen", - "to" => params.to |> Enum.uniq(), - "actor" => params.actor.ap_id, - "object" => params.object, - "published" => published, - "context" => params.context - } - |> Map.merge(additional) - end - #### Flag-related helpers @spec make_flag_data(map(), map()) :: map() def make_flag_data(%{actor: actor, context: context, content: content} = params, additional) do diff --git a/lib/pleroma/web/activity_pub/views/object_view.ex b/lib/pleroma/web/activity_pub/views/object_view.ex index 8a3e4d77b..d9b59406c 100644 --- a/lib/pleroma/web/activity_pub/views/object_view.ex +++ b/lib/pleroma/web/activity_pub/views/object_view.ex @@ -16,7 +16,7 @@ def render("object.json", %{object: %Object{} = object}) do end def render("object.json", %{object: %Activity{data: %{"type" => activity_type}} = activity}) - when activity_type in ["Create", "Listen"] do + when activity_type in ["Create"] do base = Pleroma.Web.ActivityPub.Utils.make_json_ld_header() object = Object.normalize(activity, fetch: false) diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index 528cd9cf4..66ae7dcf8 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -79,7 +79,7 @@ def spec(opts \\ []) do "x-tagGroups": [ %{ "name" => "Accounts", - "tags" => ["Account actions", "Retrieve account information", "Scrobbles"] + "tags" => ["Account actions", "Retrieve account information"] }, %{ "name" => "Administration", diff --git a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex b/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex deleted file mode 100644 index 6a909fc85..000000000 --- a/lib/pleroma/web/api_spec/operations/pleroma_scrobble_operation.ex +++ /dev/null @@ -1,102 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.PleromaScrobbleOperation do - alias OpenApiSpex.Operation - alias OpenApiSpex.Reference - alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.Account - alias Pleroma.Web.ApiSpec.Schemas.VisibilityScope - - import Pleroma.Web.ApiSpec.Helpers - - def open_api_operation(action) do - operation = String.to_existing_atom("#{action}_operation") - apply(__MODULE__, operation, []) - end - - def create_operation do - %Operation{ - tags: ["Scrobbles"], - summary: "Creates a new Listen activity for an account", - security: [%{"oAuth" => ["write"]}], - operationId: "PleromaAPI.ScrobbleController.create", - requestBody: request_body("Parameters", create_request(), requried: true), - responses: %{ - 200 => Operation.response("Scrobble", "application/json", scrobble()) - } - } - end - - def index_operation do - %Operation{ - tags: ["Scrobbles"], - summary: "Requests a list of current and recent Listen activities for an account", - operationId: "PleromaAPI.ScrobbleController.index", - parameters: [ - %Reference{"$ref": "#/components/parameters/accountIdOrNickname"} | pagination_params() - ], - security: [%{"oAuth" => ["read"]}], - responses: %{ - 200 => - Operation.response("Array of Scrobble", "application/json", %Schema{ - type: :array, - items: scrobble() - }) - } - } - end - - defp create_request do - %Schema{ - type: :object, - required: [:title], - properties: %{ - title: %Schema{type: :string, description: "The title of the media playing"}, - album: %Schema{type: :string, description: "The album of the media playing"}, - artist: %Schema{type: :string, description: "The artist of the media playing"}, - length: %Schema{type: :integer, description: "The length of the media playing"}, - visibility: %Schema{ - allOf: [VisibilityScope], - default: "public", - description: "Scrobble visibility" - } - }, - example: %{ - "title" => "Some Title", - "artist" => "Some Artist", - "album" => "Some Album", - "length" => 180_000 - } - } - end - - defp scrobble do - %Schema{ - type: :object, - properties: %{ - id: %Schema{type: :string}, - account: Account, - title: %Schema{type: :string, description: "The title of the media playing"}, - album: %Schema{type: :string, description: "The album of the media playing"}, - artist: %Schema{type: :string, description: "The artist of the media playing"}, - length: %Schema{ - type: :integer, - description: "The length of the media playing", - nullable: true - }, - created_at: %Schema{type: :string, format: :"date-time"} - }, - example: %{ - "id" => "1234", - "account" => Account.schema().example, - "title" => "Some Title", - "artist" => "Some Artist", - "album" => "Some Album", - "length" => 180_000, - "created_at" => "2019-09-28T12:40:45.000Z" - } - } - end -end diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 856fa95b9..3c2e7ae86 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -388,12 +388,6 @@ def check_expiry_date(expiry_str) do |> check_expiry_date() end - def listen(user, data) do - with {:ok, draft} <- ActivityDraft.listen(user, data) do - ActivityPub.listen(draft.changes) - end - end - def post(user, %{status: _} = data) do with {:ok, draft} <- ActivityDraft.create(user, data) do ActivityPub.create(draft.changes, draft.preview?) diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index bd56b6e20..ea88213fb 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -64,30 +64,6 @@ def create(user, params) do |> validate() end - def listen(user, params) do - user - |> new(params) - |> visibility() - |> to_and_cc() - |> context() - |> listen_object() - |> with_valid(&changes/1) - |> validate() - end - - defp listen_object(draft) do - object = - draft.params - |> Map.take([:album, :artist, :title, :length]) - |> Map.new(fn {key, value} -> {to_string(key), value} end) - |> Map.put("type", "Audio") - |> Map.put("to", draft.to) - |> Map.put("cc", draft.cc) - |> Map.put("actor", draft.user.ap_id) - - %__MODULE__{draft | object: object} - end - defp put_params(draft, params) do params = Map.put_new(params, :in_reply_to_status_id, params[:in_reply_to_id]) %__MODULE__{draft | params: params} diff --git a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex b/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex deleted file mode 100644 index ca26d80ef..000000000 --- a/lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex +++ /dev/null @@ -1,52 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ScrobbleController do - use Pleroma.Web, :controller - - import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2] - - alias Pleroma.User - alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.Plugs.OAuthScopesPlug - - plug(Pleroma.Web.ApiSpec.CastAndValidate) - - plug( - OAuthScopesPlug, - %{scopes: ["read"], fallback: :proceed_unauthenticated} when action == :index - ) - - plug(OAuthScopesPlug, %{scopes: ["write"]} when action == :create) - - defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.PleromaScrobbleOperation - - def create(%{assigns: %{user: user}, body_params: params} = conn, _) do - with {:ok, activity} <- CommonAPI.listen(user, params) do - render(conn, "show.json", activity: activity, for: user) - else - {:error, message} -> - conn - |> put_status(:bad_request) - |> json(%{"error" => message}) - end - end - - def index(%{assigns: %{user: reading_user}} = conn, %{id: id} = params) do - with %User{} = user <- User.get_cached_by_nickname_or_id(id, for: reading_user) do - params = Map.put(params, :type, ["Listen"]) - - activities = ActivityPub.fetch_user_abstract_activities(user, reading_user, params) - - conn - |> add_link_headers(activities) - |> render("index.json", %{ - activities: activities, - for: reading_user, - as: :activity - }) - end - end -end diff --git a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex b/lib/pleroma/web/pleroma_api/views/scrobble_view.ex deleted file mode 100644 index 2bc069529..000000000 --- a/lib/pleroma/web/pleroma_api/views/scrobble_view.ex +++ /dev/null @@ -1,37 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ScrobbleView do - use Pleroma.Web, :view - - require Pleroma.Constants - - alias Pleroma.Activity - alias Pleroma.HTML - alias Pleroma.Object - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.CommonAPI.Utils - alias Pleroma.Web.MastodonAPI.AccountView - - def render("show.json", %{activity: %Activity{data: %{"type" => "Listen"}} = activity} = opts) do - object = Object.normalize(activity, fetch: false) - - user = CommonAPI.get_user(activity.data["actor"]) - created_at = Utils.to_masto_date(activity.data["published"]) - - %{ - id: activity.id, - account: AccountView.render("show.json", %{user: user, for: opts[:for]}), - created_at: created_at, - title: object.data["title"] |> HTML.strip_tags(), - artist: object.data["artist"] |> HTML.strip_tags(), - album: object.data["album"] |> HTML.strip_tags(), - length: object.data["length"] - } - end - - def render("index.json", opts) do - safe_render_many(opts.activities, __MODULE__, "show.json", opts) - end -end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index f53a73895..9974e3dee 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -448,8 +448,6 @@ defmodule Pleroma.Web.Router do get("/mascot", MascotController, :show) put("/mascot", MascotController, :update) - post("/scrobble", ScrobbleController, :create) - get("/backups", BackupController, :index) post("/backups", BackupController, :create) end @@ -471,7 +469,6 @@ defmodule Pleroma.Web.Router do scope "/api/v1/pleroma", Pleroma.Web.PleromaAPI do pipe_through(:api) - get("/accounts/:id/scrobbles", ScrobbleController, :index) get("/federation_status", InstancesController, :show) end diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index f85c4bbb8..964437906 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -543,42 +543,6 @@ test "adds an id to a given object if it lacks one and is a note and inserts it end end - describe "listen activities" do - test "does not increase user note count" do - user = insert(:user) - - {:ok, activity} = - ActivityPub.listen(%{ - to: ["https://www.w3.org/ns/activitystreams#Public"], - actor: user, - context: "", - object: %{ - "actor" => user.ap_id, - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "artist" => "lain", - "title" => "lain radio episode 1", - "length" => 180_000, - "type" => "Audio" - } - }) - - assert activity.actor == user.ap_id - - user = User.get_cached_by_id(user.id) - assert user.note_count == 0 - end - - test "can be fetched into a timeline" do - _listen_activity_1 = insert(:listen) - _listen_activity_2 = insert(:listen) - _listen_activity_3 = insert(:listen) - - timeline = ActivityPub.fetch_activities([], %{type: ["Listen"]}) - - assert length(timeline) == 3 - end - end - describe "create activities" do setup do [user: insert(:user)] diff --git a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs index a0942ce8b..0a1a965ca 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs @@ -12,39 +12,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.AudioHandlingTest do import Pleroma.Factory - test "it works for incoming listens" do - _user = insert(:user, ap_id: "http://mastodon.example.org/users/admin") - - data = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "cc" => [], - "type" => "Listen", - "id" => "http://mastodon.example.org/users/admin/listens/1234/activity", - "actor" => "http://mastodon.example.org/users/admin", - "object" => %{ - "type" => "Audio", - "to" => ["https://www.w3.org/ns/activitystreams#Public"], - "cc" => [], - "id" => "http://mastodon.example.org/users/admin/listens/1234", - "attributedTo" => "http://mastodon.example.org/users/admin", - "title" => "lain radio episode 1", - "artist" => "lain", - "album" => "lain radio", - "length" => 180_000 - } - } - - {:ok, %Activity{local: false} = activity} = Transmogrifier.handle_incoming(data) - - object = Object.normalize(activity, fetch: false) - - assert object.data["title"] == "lain radio episode 1" - assert object.data["artist"] == "lain" - assert object.data["album"] == "lain radio" - assert object.data["length"] == 180_000 - end - test "Funkwhale Audio object" do Tesla.Mock.mock(fn %{url: "https://channels.tests.funkwhale.audio/federation/actors/compositions"} -> diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index 06daf6a9f..3756fdee0 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -273,20 +273,6 @@ test "it strips BCC field" do assert is_nil(modified["bcc"]) end - test "it can handle Listen activities" do - listen_activity = insert(:listen) - - {:ok, modified} = Transmogrifier.prepare_outgoing(listen_activity.data) - - assert modified["type"] == "Listen" - - user = insert(:user) - - {:ok, activity} = CommonAPI.listen(user, %{"title" => "lain radio episode 1"}) - - {:ok, _modified} = Transmogrifier.prepare_outgoing(activity.data) - end - test "custom emoji urls are URI encoded" do # :dinosaur: filename has a space -> dino walking.gif user = insert(:user) diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 85a4a3a11..167909cfb 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -1331,45 +1331,6 @@ test "does not allow to vote twice" do end end - describe "listen/2" do - test "returns a valid activity" do - user = insert(:user) - - {:ok, activity} = - CommonAPI.listen(user, %{ - title: "lain radio episode 1", - album: "lain radio", - artist: "lain", - length: 180_000 - }) - - object = Object.normalize(activity, fetch: false) - - assert object.data["title"] == "lain radio episode 1" - - assert Visibility.get_visibility(activity) == "public" - end - - test "respects visibility=private" do - user = insert(:user) - - {:ok, activity} = - CommonAPI.listen(user, %{ - title: "lain radio episode 1", - album: "lain radio", - artist: "lain", - length: 180_000, - visibility: "private" - }) - - object = Object.normalize(activity, fetch: false) - - assert object.data["title"] == "lain radio episode 1" - - assert Visibility.get_visibility(activity) == "private" - end - end - describe "get_user/1" do test "gets user by ap_id" do user = insert(:user) diff --git a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs deleted file mode 100644 index d4546f442..000000000 --- a/test/pleroma/web/pleroma_api/controllers/scrobble_controller_test.exs +++ /dev/null @@ -1,60 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ScrobbleControllerTest do - use Pleroma.Web.ConnCase, async: true - - alias Pleroma.Web.CommonAPI - - describe "POST /api/v1/pleroma/scrobble" do - test "works correctly" do - %{conn: conn} = oauth_access(["write"]) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/scrobble", %{ - "title" => "lain radio episode 1", - "artist" => "lain", - "album" => "lain radio", - "length" => "180000" - }) - - assert %{"title" => "lain radio episode 1"} = json_response_and_validate_schema(conn, 200) - end - end - - describe "GET /api/v1/pleroma/accounts/:id/scrobbles" do - test "works correctly" do - %{user: user, conn: conn} = oauth_access(["read"]) - - {:ok, _activity} = - CommonAPI.listen(user, %{ - title: "lain radio episode 1", - artist: "lain", - album: "lain radio" - }) - - {:ok, _activity} = - CommonAPI.listen(user, %{ - title: "lain radio episode 2", - artist: "lain", - album: "lain radio" - }) - - {:ok, _activity} = - CommonAPI.listen(user, %{ - title: "lain radio episode 3", - artist: "lain", - album: "lain radio" - }) - - conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/scrobbles") - - result = json_response_and_validate_schema(conn, 200) - - assert length(result) == 3 - end - end -end diff --git a/test/pleroma/web/pleroma_api/views/scrobble_view_test.exs b/test/pleroma/web/pleroma_api/views/scrobble_view_test.exs deleted file mode 100644 index 382051f6f..000000000 --- a/test/pleroma/web/pleroma_api/views/scrobble_view_test.exs +++ /dev/null @@ -1,20 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ScrobbleViewTest do - use Pleroma.DataCase, async: true - - alias Pleroma.Web.PleromaAPI.ScrobbleView - - import Pleroma.Factory - - test "successfully renders a Listen activity (pleroma extension)" do - listen_activity = insert(:listen) - - status = ScrobbleView.render("show.json", activity: listen_activity) - - assert status.length == listen_activity.data["object"]["length"] - assert status.title == listen_activity.data["object"]["title"] - end -end From a2b384d572b4777409f41ade74a466a5e12e5531 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 19 Jul 2022 17:22:02 +0100 Subject: [PATCH 09/82] document scrobbling purge --- CHANGELOG.md | 5 ++++ docs/docs/development/API/pleroma_api.md | 32 ------------------------ 2 files changed, 5 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ae33be6d..a785508f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). +## [Unreleased] + +### Removed +- Scrobbling support + ## 2022.07 ### Added diff --git a/docs/docs/development/API/pleroma_api.md b/docs/docs/development/API/pleroma_api.md index 1c4c959f0..a34948878 100644 --- a/docs/docs/development/API/pleroma_api.md +++ b/docs/docs/development/API/pleroma_api.md @@ -576,38 +576,6 @@ The status posting endpoint takes an additional parameter, `in_reply_to_conversa * Response: the archive of the pack with a 200 status code, 403 if the pack is not set as shared, 404 if the pack does not exist -## `GET /api/v1/pleroma/accounts/:id/scrobbles` -### Requests a list of current and recent Listen activities for an account -* Method `GET` -* Authentication: not required -* Params: None -* Response: An array of media metadata entities. -* Example response: -```json -[ - { - "account": {...}, - "id": "1234", - "title": "Some Title", - "artist": "Some Artist", - "album": "Some Album", - "length": 180000, - "created_at": "2019-09-28T12:40:45.000Z" - } -] -``` - -## `POST /api/v1/pleroma/scrobble` -### Creates a new Listen activity for an account -* Method `POST` -* Authentication: required -* Params: - * `title`: the title of the media playing - * `album`: the album of the media playing [optional] - * `artist`: the artist of the media playing [optional] - * `length`: the length of the media playing [optional] -* Response: the newly created media metadata entity representing the Listen activity - # Emoji Reactions Emoji reactions work a lot like favourites do. They make it possible to react to a post with a single emoji character. To detect the presence of this feature, you can check `pleroma_emoji_reactions` entry in the features list of nodeinfo. From 8887788adbeb98c16b88ae5cdb1c5c414b4d592e Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Tue, 19 Jul 2022 13:29:33 -0400 Subject: [PATCH 10/82] Change Pleroma references to Akkoma in README --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 38ca76003..5debafaea 100644 --- a/README.md +++ b/README.md @@ -4,21 +4,21 @@ ## About -This is a fork of Pleroma, which is a microblogging server software that can federate (= exchange messages with) other servers that support ActivityPub. What that means is that you can host a server for yourself or your friends and stay in control of your online identity, but still exchange messages with people on larger servers. Pleroma will federate with all servers that implement ActivityPub, like Friendica, GNU Social, Hubzilla, Mastodon, Misskey, Peertube, and Pixelfed. +This is a fork of Pleroma, which is a microblogging server software that can federate (= exchange messages with) other servers that support ActivityPub. What that means is that you can host a server for yourself or your friends and stay in control of your online identity, but still exchange messages with people on larger servers. Akkoma will federate with all servers that implement ActivityPub, like Friendica, GNU Social, Hubzilla, Mastodon, Misskey, Peertube, and Pixelfed. Akkoma is written in Elixir and uses PostgresSQL for data storage. For clients it supports the [Mastodon client API](https://docs.joinmastodon.org/api/guidelines/) with Pleroma extensions (see the API section on ). -- [Client Applications for Pleroma](https://docs.akkoma.dev/stable/clients/) +- [Client Applications for Akkoma](https://docs.akkoma.dev/stable/clients/) ## Installation ### OTP releases (Recommended) -If you are running Linux (glibc or musl) on x86, the recommended way to install Pleroma is by using OTP releases. OTP releases are as close as you can get to binary releases with Erlang/Elixir. The release is self-contained, and provides everything needed to boot it. The installation instructions are available [here](https://docs.akkoma.dev/stable/installation/otp_en/). +If you are running Linux (glibc or musl) on x86, the recommended way to install Akkoma is by using OTP releases. OTP releases are as close as you can get to binary releases with Erlang/Elixir. The release is self-contained, and provides everything needed to boot it. The installation instructions are available [here](https://docs.akkoma.dev/stable/installation/otp_en/). ### From Source -If your platform is not supported, or you just want to be able to edit the source code easily, you may install Pleroma from source. +If your platform is not supported, or you just want to be able to edit the source code easily, you may install Akkoma from source. - [Alpine Linux](https://docs.akkoma.dev/stable/installation/alpine_linux_en/) - [Arch Linux](https://docs.akkoma.dev/stable/installation/arch_linux_en/) @@ -34,7 +34,7 @@ If your platform is not supported, or you just want to be able to edit the sourc While we don’t provide docker files, other people have written very good ones. Take a look at or . ### Compilation Troubleshooting -If you ever encounter compilation issues during the updating of Pleroma, you can try these commands and see if they fix things: +If you ever encounter compilation issues during the updating of Akkoma, you can try these commands and see if they fix things: - `mix deps.clean --all` - `mix local.rebar` From dc9f66749c85352e0d7761ae2b9b8663a3aa3e3a Mon Sep 17 00:00:00 2001 From: floatingghost Date: Wed, 20 Jul 2022 12:00:58 +0000 Subject: [PATCH 11/82] remove all endpoints marked as deprecated (#91) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/91 --- CHANGELOG.md | 7 + lib/pleroma/user.ex | 11 - .../web/api_spec/operations/chat_operation.ex | 22 -- .../operations/notification_operation.ex | 18 -- .../api_spec/operations/search_operation.ex | 76 ----- .../api_spec/operations/status_operation.ex | 28 -- lib/pleroma/web/auth/wrapper_authenticator.ex | 2 +- .../controllers/notification_controller.ex | 5 - .../controllers/search_controller.ex | 7 +- .../controllers/status_controller.ex | 13 - lib/pleroma/web/rich_media/parsers/ogp.ex | 10 - lib/pleroma/web/router.ex | 6 - .../notification_controller_test.exs | 17 -- .../controllers/search_controller_test.exs | 186 ------------ .../controllers/status_controller_test.exs | 81 ------ .../controllers/chat_controller_test.exs | 264 ++++++++---------- test/support/helpers.ex | 2 +- 17 files changed, 133 insertions(+), 622 deletions(-) delete mode 100644 lib/pleroma/web/rich_media/parsers/ogp.ex diff --git a/CHANGELOG.md b/CHANGELOG.md index a785508f4..3fe07f290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Removed - Scrobbling support + - `/api/v1/pleroma/scrobble` + - `/api/v1/pleroma/accounts/{id}/scrobbles` +- Deprecated endpoints + - `/api/v1/pleroma/chats` + - `/api/v1/notifications/dismiss` + - `/api/v1/search` + - `/api/v1/statuses/{id}/card` ## 2022.07 diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index b256c87e1..a9caec552 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -194,17 +194,6 @@ defmodule Pleroma.User do has_many(incoming_relation_source, through: [incoming_relation, :source]) end - # `:blocks` is deprecated (replaced with `blocked_users` relation) - field(:blocks, {:array, :string}, default: []) - # `:mutes` is deprecated (replaced with `muted_users` relation) - field(:mutes, {:array, :string}, default: []) - # `:muted_reblogs` is deprecated (replaced with `reblog_muted_users` relation) - field(:muted_reblogs, {:array, :string}, default: []) - # `:muted_notifications` is deprecated (replaced with `notification_muted_users` relation) - field(:muted_notifications, {:array, :string}, default: []) - # `:subscribers` is deprecated (replaced with `subscriber_users` relation) - field(:subscribers, {:array, :string}, default: []) - embeds_one( :multi_factor_authentication_settings, MFA.Settings, diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex index 23cb66392..31fd150de 100644 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ b/lib/pleroma/web/api_spec/operations/chat_operation.ex @@ -128,28 +128,6 @@ def create_operation do } end - def index_operation do - %Operation{ - tags: ["Chats"], - summary: "Retrieve list of chats (unpaginated)", - deprecated: true, - description: - "Deprecated due to no support for pagination. Using [/api/v2/pleroma/chats](#operation/ChatController.index2) instead is recommended.", - operationId: "ChatController.index", - parameters: [ - Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users") - ], - responses: %{ - 200 => Operation.response("The chats of the user", "application/json", chats_response()) - }, - security: [ - %{ - "oAuth" => ["read:chats"] - } - ] - } - end - def index2_operation do %Operation{ tags: ["Chats"], diff --git a/lib/pleroma/web/api_spec/operations/notification_operation.ex b/lib/pleroma/web/api_spec/operations/notification_operation.ex index e4ce42f1c..01a886de3 100644 --- a/lib/pleroma/web/api_spec/operations/notification_operation.ex +++ b/lib/pleroma/web/api_spec/operations/notification_operation.ex @@ -108,24 +108,6 @@ def dismiss_operation do } end - def dismiss_via_body_operation do - %Operation{ - tags: ["Notifications"], - summary: "Dismiss a single notification", - deprecated: true, - description: "Clear a single notification from the server.", - operationId: "NotificationController.dismiss_via_body", - requestBody: - request_body( - "Parameters", - %Schema{type: :object, properties: %{id: %Schema{type: :string}}}, - required: true - ), - security: [%{"oAuth" => ["write:notifications"]}], - responses: %{200 => empty_object_response()} - } - end - def destroy_multiple_operation do %Operation{ tags: ["Notifications"], diff --git a/lib/pleroma/web/api_spec/operations/search_operation.ex b/lib/pleroma/web/api_spec/operations/search_operation.ex index ff4fd0027..f90c54853 100644 --- a/lib/pleroma/web/api_spec/operations/search_operation.ex +++ b/lib/pleroma/web/api_spec/operations/search_operation.ex @@ -59,53 +59,6 @@ def account_search_operation do } end - def search_operation do - %Operation{ - tags: ["Search"], - summary: "Search results", - security: [%{"oAuth" => ["read:search"]}], - operationId: "SearchController.search", - deprecated: true, - parameters: [ - Operation.parameter( - :account_id, - :query, - FlakeID, - "If provided, statuses returned will be authored only by this account" - ), - Operation.parameter( - :type, - :query, - %Schema{type: :string, enum: ["accounts", "hashtags", "statuses"]}, - "Search type" - ), - Operation.parameter(:q, :query, %Schema{type: :string}, "The search query", required: true), - Operation.parameter( - :resolve, - :query, - %Schema{allOf: [BooleanLike], default: false}, - "Attempt WebFinger lookup" - ), - Operation.parameter( - :following, - :query, - %Schema{allOf: [BooleanLike], default: false}, - "Only include accounts that the user is following" - ), - Operation.parameter( - :offset, - :query, - %Schema{type: :integer}, - "Offset" - ), - with_relationships_param() | pagination_params() - ], - responses: %{ - 200 => Operation.response("Results", "application/json", results()) - } - } - end - def search2_operation do %Operation{ tags: ["Search"], @@ -176,33 +129,4 @@ defp results2 do } } end - - defp results do - %Schema{ - title: "SearchResults", - type: :object, - properties: %{ - accounts: %Schema{ - type: :array, - items: Account, - description: "Accounts which match the given query" - }, - statuses: %Schema{ - type: :array, - items: Status, - description: "Statuses which match the given query" - }, - hashtags: %Schema{ - type: :array, - items: %Schema{type: :string}, - description: "Hashtags which match the given query" - } - }, - example: %{ - "accounts" => [Account.schema().example], - "statuses" => [Status.schema().example], - "hashtags" => ["cofe"] - } - } - end end diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index 802fbef3e..c7df676c3 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -323,34 +323,6 @@ def unmute_conversation_operation do } end - def card_operation do - %Operation{ - tags: ["Retrieve status information"], - deprecated: true, - summary: "Preview card", - description: "Deprecated in favor of card property inlined on Status entity", - operationId: "StatusController.card", - parameters: [id_param()], - security: [%{"oAuth" => ["read:statuses"]}], - responses: %{ - 200 => - Operation.response("Card", "application/json", %Schema{ - type: :object, - nullable: true, - properties: %{ - type: %Schema{type: :string, enum: ["link", "photo", "video", "rich"]}, - provider_name: %Schema{type: :string, nullable: true}, - provider_url: %Schema{type: :string, format: :uri}, - url: %Schema{type: :string, format: :uri}, - image: %Schema{type: :string, nullable: true, format: :uri}, - title: %Schema{type: :string}, - description: %Schema{type: :string} - } - }) - } - } - end - def favourited_by_operation do %Operation{ tags: ["Retrieve status information"], diff --git a/lib/pleroma/web/auth/wrapper_authenticator.ex b/lib/pleroma/web/auth/wrapper_authenticator.ex index c67082f7b..b8450872b 100644 --- a/lib/pleroma/web/auth/wrapper_authenticator.ex +++ b/lib/pleroma/web/auth/wrapper_authenticator.ex @@ -30,7 +30,7 @@ def handle_error(plug, error), def auth_template do # Note: `config :pleroma, :auth_template, "..."` support is deprecated implementation().auth_template() || - Pleroma.Config.get([:auth, :auth_template], Pleroma.Config.get(:auth_template)) || + Pleroma.Config.get(:auth_template) || "show.html" end diff --git a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex index 002d6b2ce..ae4432e85 100644 --- a/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/notification_controller.ex @@ -98,11 +98,6 @@ def dismiss(%{assigns: %{user: user}} = conn, %{id: id} = _params) do end end - # POST /api/v1/notifications/dismiss (deprecated) - def dismiss_via_body(%{body_params: params} = conn, _) do - dismiss(conn, params) - end - # DELETE /api/v1/notifications/destroy_multiple def destroy_multiple(%{assigns: %{user: user}} = conn, %{ids: ids} = _params) do Notification.destroy_multiple(user, ids) diff --git a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex index e4acba226..bd12069c1 100644 --- a/lib/pleroma/web/mastodon_api/controllers/search_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/search_controller.ex @@ -25,7 +25,7 @@ defmodule Pleroma.Web.MastodonAPI.SearchController do # Note: on private instances auth is required (EnsurePublicOrAuthenticatedPlug is not skipped) - plug(RateLimiter, [name: :search] when action in [:search, :search2, :account_search]) + plug(RateLimiter, [name: :search] when action in [:search2, :account_search]) defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.SearchOperation @@ -42,7 +42,6 @@ def account_search(%{assigns: %{user: user}} = conn, %{q: query} = params) do end def search2(conn, params), do: do_search(:v2, conn, params) - def search(conn, params), do: do_search(:v1, conn, params) defp do_search(version, %{assigns: %{user: user}} = conn, %{q: query} = params) do query = String.trim(query) @@ -118,10 +117,6 @@ defp resource_search(:v2, "hashtags", query, options) do end) end - defp resource_search(:v1, "hashtags", query, options) do - prepare_tags(query, options) - end - defp prepare_tags(query, options) do tags = query diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index 60f4c44d7..9ab30742b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -37,7 +37,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do when action in [ :index, :show, - :card, :context ] ) @@ -315,18 +314,6 @@ def unmute_conversation(%{assigns: %{user: user}} = conn, %{id: id}) do end end - @doc "GET /api/v1/statuses/:id/card" - @deprecated "https://github.com/tootsuite/mastodon/pull/11213" - def card(%{assigns: %{user: user}} = conn, %{id: status_id}) do - with %Activity{} = activity <- Activity.get_by_id(status_id), - true <- Visibility.visible_for_user?(activity, user) do - data = Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - render(conn, "card.json", data) - else - _ -> render_error(conn, :not_found, "Record not found") - end - end - @doc "GET /api/v1/statuses/:id/favourited_by" def favourited_by(%{assigns: %{user: user}} = conn, %{id: id}) do with true <- Pleroma.Config.get([:instance, :show_reactions]), diff --git a/lib/pleroma/web/rich_media/parsers/ogp.ex b/lib/pleroma/web/rich_media/parsers/ogp.ex deleted file mode 100644 index d0edf1c88..000000000 --- a/lib/pleroma/web/rich_media/parsers/ogp.ex +++ /dev/null @@ -1,10 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.RichMedia.Parsers.OGP do - @deprecated "OGP parser is deprecated. Use TwitterCard instead." - def parse(_html, _data) do - %{} - end -end diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 9974e3dee..8a53f770e 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -428,7 +428,6 @@ defmodule Pleroma.Web.Router do pipe_through(:authenticated_api) post("/chats/by-account-id/:id", ChatController, :create) - get("/chats", ChatController, :index) get("/chats/:id", ChatController, :show) get("/chats/:id/messages", ChatController, :messages) post("/chats/:id/messages", ChatController, :post_chat_message) @@ -543,8 +542,6 @@ defmodule Pleroma.Web.Router do post("/notifications/:id/dismiss", NotificationController, :dismiss) post("/notifications/clear", NotificationController, :clear) delete("/notifications/destroy_multiple", NotificationController, :destroy_multiple) - # Deprecated: was removed in Mastodon v3, use `/notifications/:id/dismiss` instead - post("/notifications/dismiss", NotificationController, :dismiss_via_body) post("/polls/:id/votes", PollController, :vote) @@ -607,8 +604,6 @@ defmodule Pleroma.Web.Router do pipe_through(:api) get("/accounts/search", SearchController, :account_search) - get("/search", SearchController, :search) - get("/accounts/lookup", AccountController, :lookup) get("/accounts/:id/statuses", AccountController, :statuses) @@ -624,7 +619,6 @@ defmodule Pleroma.Web.Router do get("/statuses", StatusController, :index) get("/statuses/:id", StatusController, :show) get("/statuses/:id/context", StatusController, :context) - get("/statuses/:id/card", StatusController, :card) get("/statuses/:id/favourited_by", StatusController, :favourited_by) get("/statuses/:id/reblogged_by", StatusController, :reblogged_by) diff --git a/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs index d991f284f..650783587 100644 --- a/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs @@ -137,23 +137,6 @@ test "getting a single notification" do assert response == expected_response end - test "dismissing a single notification (deprecated endpoint)" do - %{user: user, conn: conn} = oauth_access(["write:notifications"]) - other_user = insert(:user) - - {:ok, activity} = CommonAPI.post(other_user, %{status: "hi @#{user.nickname}"}) - - {:ok, [notification]} = Notification.create_notifications(activity) - - conn = - conn - |> assign(:user, user) - |> put_req_header("content-type", "application/json") - |> post("/api/v1/notifications/dismiss", %{"id" => to_string(notification.id)}) - - assert %{} = json_response_and_validate_schema(conn, 200) - end - test "dismissing a single notification" do %{user: user, conn: conn} = oauth_access(["write:notifications"]) other_user = insert(:user) diff --git a/test/pleroma/web/mastodon_api/controllers/search_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/search_controller_test.exs index e31cd0291..fd2962196 100644 --- a/test/pleroma/web/mastodon_api/controllers/search_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/search_controller_test.exs @@ -5,7 +5,6 @@ defmodule Pleroma.Web.MastodonAPI.SearchControllerTest do use Pleroma.Web.ConnCase - alias Pleroma.Object alias Pleroma.Web.CommonAPI alias Pleroma.Web.Endpoint import Pleroma.Factory @@ -221,189 +220,4 @@ test "returns account if query contains a space", %{conn: conn} do assert length(results) == 1 end end - - describe ".search" do - test "it returns empty result if user or status search return undefined error", %{conn: conn} do - with_mocks [ - {Pleroma.User, [], [search: fn _q, _o -> raise "Oops" end]}, - {Pleroma.Activity, [], [search: fn _u, _q, _o -> raise "Oops" end]} - ] do - capture_log(fn -> - results = - conn - |> get("/api/v1/search?q=2hu") - |> json_response_and_validate_schema(200) - - assert results["accounts"] == [] - assert results["statuses"] == [] - end) =~ - "[error] Elixir.Pleroma.Web.MastodonAPI.SearchController search error: %RuntimeError{message: \"Oops\"}" - end - end - - test "search", %{conn: conn} do - user = insert(:user) - user_two = insert(:user, %{nickname: "shp@shitposter.club"}) - user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"}) - - {:ok, activity} = CommonAPI.post(user, %{status: "This is about 2hu"}) - - {:ok, _activity} = - CommonAPI.post(user, %{ - status: "This is about 2hu, but private", - visibility: "private" - }) - - {:ok, _} = CommonAPI.post(user_two, %{status: "This isn't"}) - - results = - conn - |> get("/api/v1/search?q=2hu") - |> json_response_and_validate_schema(200) - - [account | _] = results["accounts"] - assert account["id"] == to_string(user_three.id) - - assert results["hashtags"] == ["2hu"] - - [status] = results["statuses"] - assert status["id"] == to_string(activity.id) - end - - test "search fetches remote statuses and prefers them over other results", %{conn: conn} do - old_version = :persistent_term.get({Pleroma.Repo, :postgres_version}) - :persistent_term.put({Pleroma.Repo, :postgres_version}, 10.0) - on_exit(fn -> :persistent_term.put({Pleroma.Repo, :postgres_version}, old_version) end) - - capture_log(fn -> - {:ok, %{id: activity_id}} = - CommonAPI.post(insert(:user), %{ - status: "check out http://mastodon.example.org/@admin/99541947525187367" - }) - - results = - conn - |> get("/api/v1/search?q=http://mastodon.example.org/@admin/99541947525187367") - |> json_response_and_validate_schema(200) - - assert [ - %{"url" => "http://mastodon.example.org/@admin/99541947525187367"}, - %{"id" => ^activity_id} - ] = results["statuses"] - end) - end - - test "search doesn't show statuses that it shouldn't", %{conn: conn} do - {:ok, activity} = - CommonAPI.post(insert(:user), %{ - status: "This is about 2hu, but private", - visibility: "private" - }) - - capture_log(fn -> - q = Object.normalize(activity, fetch: false).data["id"] - - results = - conn - |> get("/api/v1/search?q=#{q}") - |> json_response_and_validate_schema(200) - - [] = results["statuses"] - end) - end - - test "search fetches remote accounts", %{conn: conn} do - user = insert(:user) - - query = URI.encode_query(%{q: " mike@osada.macgirvin.com ", resolve: true}) - - results = - conn - |> assign(:user, user) - |> assign(:token, insert(:oauth_token, user: user, scopes: ["read"])) - |> get("/api/v1/search?#{query}") - |> json_response_and_validate_schema(200) - - [account] = results["accounts"] - assert account["acct"] == "mike@osada.macgirvin.com" - end - - test "search doesn't fetch remote accounts if resolve is false", %{conn: conn} do - results = - conn - |> get("/api/v1/search?q=mike@osada.macgirvin.com&resolve=false") - |> json_response_and_validate_schema(200) - - assert [] == results["accounts"] - end - - test "search with limit and offset", %{conn: conn} do - user = insert(:user) - _user_two = insert(:user, %{nickname: "shp@shitposter.club"}) - _user_three = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"}) - - {:ok, _activity1} = CommonAPI.post(user, %{status: "This is about 2hu"}) - {:ok, _activity2} = CommonAPI.post(user, %{status: "This is also about 2hu"}) - - result = - conn - |> get("/api/v1/search?q=2hu&limit=1") - - assert results = json_response_and_validate_schema(result, 200) - assert [%{"id" => activity_id1}] = results["statuses"] - assert [_] = results["accounts"] - - results = - conn - |> get("/api/v1/search?q=2hu&limit=1&offset=1") - |> json_response_and_validate_schema(200) - - assert [%{"id" => activity_id2}] = results["statuses"] - assert [] = results["accounts"] - - assert activity_id1 != activity_id2 - end - - test "search returns results only for the given type", %{conn: conn} do - user = insert(:user) - _user_two = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"}) - - {:ok, _activity} = CommonAPI.post(user, %{status: "This is about 2hu"}) - - assert %{"statuses" => [_activity], "accounts" => [], "hashtags" => []} = - conn - |> get("/api/v1/search?q=2hu&type=statuses") - |> json_response_and_validate_schema(200) - - assert %{"statuses" => [], "accounts" => [_user_two], "hashtags" => []} = - conn - |> get("/api/v1/search?q=2hu&type=accounts") - |> json_response_and_validate_schema(200) - end - - test "search uses account_id to filter statuses by the author", %{conn: conn} do - user = insert(:user, %{nickname: "shp@shitposter.club"}) - user_two = insert(:user, %{nickname: "shp@heldscal.la", name: "I love 2hu"}) - - {:ok, activity1} = CommonAPI.post(user, %{status: "This is about 2hu"}) - {:ok, activity2} = CommonAPI.post(user_two, %{status: "This is also about 2hu"}) - - results = - conn - |> get("/api/v1/search?q=2hu&account_id=#{user.id}") - |> json_response_and_validate_schema(200) - - assert [%{"id" => activity_id1}] = results["statuses"] - assert activity_id1 == activity1.id - assert [_] = results["accounts"] - - results = - conn - |> get("/api/v1/search?q=2hu&account_id=#{user_two.id}") - |> json_response_and_validate_schema(200) - - assert [%{"id" => activity_id2}] = results["statuses"] - assert activity_id2 == activity2.id - end - end end diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index c5d204358..c9f3f66be 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1349,87 +1349,6 @@ test "on pin removes deletion job, on unpin reschedule deletion" do end end - describe "cards" do - setup do - clear_config([:rich_media, :enabled], true) - - oauth_access(["read:statuses"]) - end - - test "returns rich-media card", %{conn: conn, user: user} do - Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) - - {:ok, activity} = CommonAPI.post(user, %{status: "https://example.com/ogp"}) - - card_data = %{ - "image" => "http://ia.media-imdb.com/images/rock.jpg", - "provider_name" => "example.com", - "provider_url" => "https://example.com", - "title" => "The Rock", - "type" => "link", - "url" => "https://example.com/ogp", - "description" => - "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.", - "pleroma" => %{ - "opengraph" => %{ - "image" => "http://ia.media-imdb.com/images/rock.jpg", - "title" => "The Rock", - "type" => "video.movie", - "url" => "https://example.com/ogp", - "description" => - "Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer." - } - } - } - - response = - conn - |> get("/api/v1/statuses/#{activity.id}/card") - |> json_response_and_validate_schema(200) - - assert response == card_data - - # works with private posts - {:ok, activity} = - CommonAPI.post(user, %{status: "https://example.com/ogp", visibility: "direct"}) - - response_two = - conn - |> get("/api/v1/statuses/#{activity.id}/card") - |> json_response_and_validate_schema(200) - - assert response_two == card_data - end - - test "replaces missing description with an empty string", %{conn: conn, user: user} do - Tesla.Mock.mock_global(fn env -> apply(HttpRequestMock, :request, [env]) end) - - {:ok, activity} = CommonAPI.post(user, %{status: "https://example.com/ogp-missing-data"}) - - response = - conn - |> get("/api/v1/statuses/#{activity.id}/card") - |> json_response_and_validate_schema(:ok) - - assert response == %{ - "type" => "link", - "title" => "Pleroma", - "description" => "", - "image" => nil, - "provider_name" => "example.com", - "provider_url" => "https://example.com", - "url" => "https://example.com/ogp-missing-data", - "pleroma" => %{ - "opengraph" => %{ - "title" => "Pleroma", - "type" => "website", - "url" => "https://example.com/ogp-missing-data" - } - } - } - end - end - test "bookmarks" do bookmarks_uri = "/api/v1/bookmarks" diff --git a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs index a817a2dba..1114da242 100644 --- a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs @@ -307,165 +307,147 @@ test "it returns a chat", %{conn: conn, user: user} do end end - for tested_endpoint <- ["/api/v1/pleroma/chats", "/api/v2/pleroma/chats"] do - describe "GET #{tested_endpoint}" do - setup do: oauth_access(["read:chats"]) + describe "GET /api/v2/pleroma/chats" do + setup do: oauth_access(["read:chats"]) - test "it does not return chats with deleted users", %{conn: conn, user: user} do + test "it does not return chats with deleted users", %{conn: conn, user: user} do + recipient = insert(:user) + {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) + + Pleroma.Repo.delete(recipient) + User.invalidate_cache(recipient) + + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) + + assert length(result) == 0 + end + + test "it does not return chats with users you blocked", %{conn: conn, user: user} do + recipient = insert(:user) + + {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) + + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) + + assert length(result) == 1 + + User.block(user, recipient) + + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) + + assert length(result) == 0 + end + + test "it does not return chats with users you muted", %{conn: conn, user: user} do + recipient = insert(:user) + + {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) + + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) + + assert length(result) == 1 + + User.mute(user, recipient) + + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) + + assert length(result) == 0 + + result = + conn + |> get("/api/v2/pleroma/chats?with_muted=true") + |> json_response_and_validate_schema(200) + + assert length(result) == 1 + end + + test "it paginates chats", %{conn: conn, user: user} do + Enum.each(1..30, fn _ -> recipient = insert(:user) {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) + end) - Pleroma.Repo.delete(recipient) - User.invalidate_cache(recipient) + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) + assert length(result) == 20 + last_id = List.last(result)["id"] - assert length(result) == 0 - end + result = + conn + |> get("/api/v2/pleroma/chats?max_id=#{last_id}") + |> json_response_and_validate_schema(200) - test "it does not return chats with users you blocked", %{conn: conn, user: user} do - recipient = insert(:user) + assert length(result) == 10 + end - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) + test "it return a list of chats the current user is participating in, in descending order of updates", + %{conn: conn, user: user} do + har = insert(:user) + jafnhar = insert(:user) + tridi = insert(:user) - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) + {:ok, chat_1} = Chat.get_or_create(user.id, har.ap_id) + {:ok, chat_1} = time_travel(chat_1, -3) + {:ok, chat_2} = Chat.get_or_create(user.id, jafnhar.ap_id) + {:ok, _chat_2} = time_travel(chat_2, -2) + {:ok, chat_3} = Chat.get_or_create(user.id, tridi.ap_id) + {:ok, chat_3} = time_travel(chat_3, -1) - assert length(result) == 1 + # bump the second one + {:ok, chat_2} = Chat.bump_or_create(user.id, jafnhar.ap_id) - User.block(user, recipient) + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) + ids = Enum.map(result, & &1["id"]) - assert length(result) == 0 - end + assert ids == [ + chat_2.id |> to_string(), + chat_3.id |> to_string(), + chat_1.id |> to_string() + ] + end - test "it does not return chats with users you muted", %{conn: conn, user: user} do - recipient = insert(:user) + test "it is not affected by :restrict_unauthenticated setting (issue #1973)", %{ + conn: conn, + user: user + } do + clear_config([:restrict_unauthenticated, :profiles, :local], true) + clear_config([:restrict_unauthenticated, :profiles, :remote], true) - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) + user2 = insert(:user) + user3 = insert(:user, local: false) - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) + {:ok, _chat_12} = Chat.get_or_create(user.id, user2.ap_id) + {:ok, _chat_13} = Chat.get_or_create(user.id, user3.ap_id) - assert length(result) == 1 + result = + conn + |> get("/api/v2/pleroma/chats") + |> json_response_and_validate_schema(200) - User.mute(user, recipient) - - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) - - assert length(result) == 0 - - result = - conn - |> get("#{unquote(tested_endpoint)}?with_muted=true") - |> json_response_and_validate_schema(200) - - assert length(result) == 1 - end - - if tested_endpoint == "/api/v1/pleroma/chats" do - test "it returns all chats", %{conn: conn, user: user} do - Enum.each(1..30, fn _ -> - recipient = insert(:user) - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) - end) - - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) - - assert length(result) == 30 - end - else - test "it paginates chats", %{conn: conn, user: user} do - Enum.each(1..30, fn _ -> - recipient = insert(:user) - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) - end) - - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) - - assert length(result) == 20 - last_id = List.last(result)["id"] - - result = - conn - |> get(unquote(tested_endpoint) <> "?max_id=#{last_id}") - |> json_response_and_validate_schema(200) - - assert length(result) == 10 - end - end - - test "it return a list of chats the current user is participating in, in descending order of updates", - %{conn: conn, user: user} do - har = insert(:user) - jafnhar = insert(:user) - tridi = insert(:user) - - {:ok, chat_1} = Chat.get_or_create(user.id, har.ap_id) - {:ok, chat_1} = time_travel(chat_1, -3) - {:ok, chat_2} = Chat.get_or_create(user.id, jafnhar.ap_id) - {:ok, _chat_2} = time_travel(chat_2, -2) - {:ok, chat_3} = Chat.get_or_create(user.id, tridi.ap_id) - {:ok, chat_3} = time_travel(chat_3, -1) - - # bump the second one - {:ok, chat_2} = Chat.bump_or_create(user.id, jafnhar.ap_id) - - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) - - ids = Enum.map(result, & &1["id"]) - - assert ids == [ - chat_2.id |> to_string(), - chat_3.id |> to_string(), - chat_1.id |> to_string() - ] - end - - test "it is not affected by :restrict_unauthenticated setting (issue #1973)", %{ - conn: conn, - user: user - } do - clear_config([:restrict_unauthenticated, :profiles, :local], true) - clear_config([:restrict_unauthenticated, :profiles, :remote], true) - - user2 = insert(:user) - user3 = insert(:user, local: false) - - {:ok, _chat_12} = Chat.get_or_create(user.id, user2.ap_id) - {:ok, _chat_13} = Chat.get_or_create(user.id, user3.ap_id) - - result = - conn - |> get(unquote(tested_endpoint)) - |> json_response_and_validate_schema(200) - - account_ids = Enum.map(result, &get_in(&1, ["account", "id"])) - assert Enum.sort(account_ids) == Enum.sort([user2.id, user3.id]) - end + account_ids = Enum.map(result, &get_in(&1, ["account", "id"])) + assert Enum.sort(account_ids) == Enum.sort([user2.id, user3.id]) end end end diff --git a/test/support/helpers.ex b/test/support/helpers.ex index 34f1505d0..01eb4ad7f 100644 --- a/test/support/helpers.ex +++ b/test/support/helpers.ex @@ -42,7 +42,7 @@ defmacro clear_config(config_path, temp_setting) do # Displaying a warning to prevent unintentional clearing of all but one keys in section if Keyword.keyword?(temp_setting) and length(temp_setting) == 1 do Logger.warn( - "Please change `clear_config([section], key: value)` to `clear_config([section, key], value)`" + "Please change `clear_config([section], key: value)` to `clear_config([section, key], value) (#{inspect(config_path)} = #{inspect(temp_setting)})`" ) end From 729f45ccd243bd01db63949ba6f51033e718f9bf Mon Sep 17 00:00:00 2001 From: floatingghost Date: Wed, 20 Jul 2022 12:49:13 +0000 Subject: [PATCH 12/82] purge ldap authenticator (#92) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/92 --- CHANGELOG.md | 1 + config/config.exs | 12 +- config/description.exs | 98 ------------- docs/docs/configuration/cheatsheet.md | 22 --- docs/docs/installation/alpine_linux_en.md | 6 - lib/pleroma/user.ex | 28 ---- lib/pleroma/web/auth/ldap_authenticator.ex | 129 ----------------- mix.exs | 3 +- .../web/o_auth/ldap_authorization_test.exs | 135 ------------------ 9 files changed, 3 insertions(+), 431 deletions(-) delete mode 100644 lib/pleroma/web/auth/ldap_authenticator.ex delete mode 100644 test/pleroma/web/o_auth/ldap_authorization_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fe07f290..8546370e9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `/api/v1/notifications/dismiss` - `/api/v1/search` - `/api/v1/statuses/{id}/card` +- LDAP authenticator ## 2022.07 diff --git a/config/config.exs b/config/config.exs index 9186b011d..61b5a0317 100644 --- a/config/config.exs +++ b/config/config.exs @@ -511,6 +511,7 @@ "~", "about", "activities", + "akkoma", "api", "auth", "check_password", @@ -591,17 +592,6 @@ extra: true, validate_tld: :no_scheme -config :pleroma, :ldap, - enabled: System.get_env("LDAP_ENABLED") == "true", - host: System.get_env("LDAP_HOST") || "localhost", - port: String.to_integer(System.get_env("LDAP_PORT") || "389"), - ssl: System.get_env("LDAP_SSL") == "true", - sslopts: [], - tls: System.get_env("LDAP_TLS") == "true", - tlsopts: [], - base: System.get_env("LDAP_BASE") || "dc=example,dc=com", - uid: System.get_env("LDAP_UID") || "cn" - oauth_consumer_strategies = "OAUTH_CONSUMER_STRATEGIES" |> System.get_env() diff --git a/config/description.exs b/config/description.exs index 098a6f5b7..c67da64b5 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2158,104 +2158,6 @@ } ] }, - %{ - group: :pleroma, - key: :ldap, - label: "LDAP", - type: :group, - description: - "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <> - " will be verified by trying to authenticate (bind) to a LDAP server." <> - " If a user exists in the LDAP directory but there is no account with the same name yet on the" <> - " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.", - children: [ - %{ - key: :enabled, - type: :boolean, - description: "Enables LDAP authentication" - }, - %{ - key: :host, - type: :string, - description: "LDAP server hostname", - suggestions: ["localhosts"] - }, - %{ - key: :port, - type: :integer, - description: "LDAP port, e.g. 389 or 636", - suggestions: [389, 636] - }, - %{ - key: :ssl, - label: "SSL", - type: :boolean, - description: "Enable to use SSL, usually implies the port 636" - }, - %{ - key: :sslopts, - label: "SSL options", - type: :keyword, - description: "Additional SSL options", - suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer], - children: [ - %{ - key: :cacertfile, - type: :string, - description: "Path to file with PEM encoded cacerts", - suggestions: ["path/to/file/with/PEM/cacerts"] - }, - %{ - key: :verify, - type: :atom, - description: "Type of cert verification", - suggestions: [:verify_peer] - } - ] - }, - %{ - key: :tls, - label: "TLS", - type: :boolean, - description: "Enable to use STARTTLS, usually implies the port 389" - }, - %{ - key: :tlsopts, - label: "TLS options", - type: :keyword, - description: "Additional TLS options", - suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer], - children: [ - %{ - key: :cacertfile, - type: :string, - description: "Path to file with PEM encoded cacerts", - suggestions: ["path/to/file/with/PEM/cacerts"] - }, - %{ - key: :verify, - type: :atom, - description: "Type of cert verification", - suggestions: [:verify_peer] - } - ] - }, - %{ - key: :base, - type: :string, - description: "LDAP base, e.g. \"dc=example,dc=com\"", - suggestions: ["dc=example,dc=com"] - }, - %{ - key: :uid, - label: "UID", - type: :string, - description: - "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"", - suggestions: ["cn"] - } - ] - }, %{ group: :pleroma, key: :auth, diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index c7df00190..85381d67c 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -900,28 +900,6 @@ Authentication / authorization settings. ### Pleroma.Web.Auth.Authenticator * `Pleroma.Web.Auth.PleromaAuthenticator`: default database authenticator. -* `Pleroma.Web.Auth.LDAPAuthenticator`: LDAP authentication. - -### :ldap - -Use LDAP for user authentication. When a user logs in to the Akkoma -instance, the name and password will be verified by trying to authenticate -(bind) to an LDAP server. If a user exists in the LDAP directory but there -is no account with the same name yet on the Akkoma instance then a new -Akkoma account will be created with the same name as the LDAP user name. - -* `enabled`: enables LDAP authentication -* `host`: LDAP server hostname -* `port`: LDAP port, e.g. 389 or 636 -* `ssl`: true to use SSL, usually implies the port 636 -* `sslopts`: additional SSL options -* `tls`: true to start TLS, usually implies the port 389 -* `tlsopts`: additional TLS options -* `base`: LDAP base, e.g. "dc=example,dc=com" -* `uid`: LDAP attribute name to authenticate the user, e.g. when "cn", the filter will be "cn=username,base" - -Note, if your LDAP server is an Active Directory server the correct value is commonly `uid: "cn"`, but if you use an -OpenLDAP server the value may be `uid: "uid"`. ### :oauth2 (Akkoma as OAuth 2.0 provider settings) diff --git a/docs/docs/installation/alpine_linux_en.md b/docs/docs/installation/alpine_linux_en.md index f98998fb8..3be69af6e 100644 --- a/docs/docs/installation/alpine_linux_en.md +++ b/docs/docs/installation/alpine_linux_en.md @@ -41,12 +41,6 @@ doas apk add git build-base cmake file-dev doas apk add erlang elixir ``` -* Install `erlang-eldap` if you want to enable ldap authenticator - -```shell -doas apk add erlang-eldap -``` - ### Install PostgreSQL * Install Postgresql server: diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index a9caec552..9ff52c94f 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -663,34 +663,6 @@ def force_password_reset_async(user) do @spec force_password_reset(User.t()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def force_password_reset(user), do: update_password_reset_pending(user, true) - # Used to auto-register LDAP accounts which won't have a password hash stored locally - def register_changeset_ldap(struct, params = %{password: password}) - when is_nil(password) do - params = Map.put_new(params, :accepts_chat_messages, true) - - params = - if Map.has_key?(params, :email) do - Map.put_new(params, :email, params[:email]) - else - params - end - - struct - |> cast(params, [ - :name, - :nickname, - :email, - :accepts_chat_messages - ]) - |> validate_required([:name, :nickname]) - |> unique_constraint(:nickname) - |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) - |> validate_format(:nickname, local_nickname_regex()) - |> put_ap_id() - |> unique_constraint(:ap_id) - |> put_following_and_follower_and_featured_address() - end - def register_changeset(struct, params \\ %{}, opts \\ []) do bio_limit = Config.get([:instance, :user_bio_length], 5000) name_limit = Config.get([:instance, :user_name_length], 100) diff --git a/lib/pleroma/web/auth/ldap_authenticator.ex b/lib/pleroma/web/auth/ldap_authenticator.ex deleted file mode 100644 index f77e8d203..000000000 --- a/lib/pleroma/web/auth/ldap_authenticator.ex +++ /dev/null @@ -1,129 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Auth.LDAPAuthenticator do - alias Pleroma.User - - require Logger - - import Pleroma.Web.Auth.Helpers, only: [fetch_credentials: 1, fetch_user: 1] - - @behaviour Pleroma.Web.Auth.Authenticator - @base Pleroma.Web.Auth.PleromaAuthenticator - - @connection_timeout 10_000 - @search_timeout 10_000 - - defdelegate get_registration(conn), to: @base - defdelegate create_from_registration(conn, registration), to: @base - defdelegate handle_error(conn, error), to: @base - defdelegate auth_template, to: @base - defdelegate oauth_consumer_template, to: @base - - def get_user(%Plug.Conn{} = conn) do - with {:ldap, true} <- {:ldap, Pleroma.Config.get([:ldap, :enabled])}, - {:ok, {name, password}} <- fetch_credentials(conn), - %User{} = user <- ldap_user(name, password) do - {:ok, user} - else - {:ldap, _} -> - @base.get_user(conn) - - error -> - error - end - end - - defp ldap_user(name, password) do - ldap = Pleroma.Config.get(:ldap, []) - host = Keyword.get(ldap, :host, "localhost") - port = Keyword.get(ldap, :port, 389) - ssl = Keyword.get(ldap, :ssl, false) - sslopts = Keyword.get(ldap, :sslopts, []) - - options = - [{:port, port}, {:ssl, ssl}, {:timeout, @connection_timeout}] ++ - if sslopts != [], do: [{:sslopts, sslopts}], else: [] - - case :eldap.open([to_charlist(host)], options) do - {:ok, connection} -> - try do - if Keyword.get(ldap, :tls, false) do - :application.ensure_all_started(:ssl) - - case :eldap.start_tls( - connection, - Keyword.get(ldap, :tlsopts, []), - @connection_timeout - ) do - :ok -> - :ok - - error -> - Logger.error("Could not start TLS: #{inspect(error)}") - end - end - - bind_user(connection, ldap, name, password) - after - :eldap.close(connection) - end - - {:error, error} -> - Logger.error("Could not open LDAP connection: #{inspect(error)}") - {:error, {:ldap_connection_error, error}} - end - end - - defp bind_user(connection, ldap, name, password) do - uid = Keyword.get(ldap, :uid, "cn") - base = Keyword.get(ldap, :base) - - case :eldap.simple_bind(connection, "#{uid}=#{name},#{base}", password) do - :ok -> - case fetch_user(name) do - %User{} = user -> - user - - _ -> - register_user(connection, base, uid, name) - end - - error -> - error - end - end - - defp register_user(connection, base, uid, name) do - case :eldap.search(connection, [ - {:base, to_charlist(base)}, - {:filter, :eldap.equalityMatch(to_charlist(uid), to_charlist(name))}, - {:scope, :eldap.wholeSubtree()}, - {:timeout, @search_timeout} - ]) do - {:ok, {:eldap_search_result, [{:eldap_entry, _, attributes}], _}} -> - params = %{ - name: name, - nickname: name, - password: nil - } - - params = - case List.keyfind(attributes, 'mail', 0) do - {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail)) - _ -> params - end - - changeset = User.register_changeset_ldap(%User{}, params) - - case User.register(changeset) do - {:ok, user} -> user - error -> error - end - - error -> - error - end - end -end diff --git a/mix.exs b/mix.exs index 420ea2e24..a0eef4f1d 100644 --- a/mix.exs +++ b/mix.exs @@ -9,7 +9,6 @@ def project do elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), elixirc_options: [warnings_as_errors: warnings_as_errors()], - xref: [exclude: [:eldap]], start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps(), @@ -35,7 +34,7 @@ def project do releases: [ pleroma: [ include_executables_for: [:unix], - applications: [ex_syslogger: :load, syslog: :load, eldap: :transient], + applications: [ex_syslogger: :load, syslog: :load], steps: [:assemble, &put_otp_version/1, ©_files/1, ©_nginx_config/1], config_providers: [{Pleroma.Config.ReleaseRuntimeProvider, []}] ] diff --git a/test/pleroma/web/o_auth/ldap_authorization_test.exs b/test/pleroma/web/o_auth/ldap_authorization_test.exs deleted file mode 100644 index 61b9ce6b7..000000000 --- a/test/pleroma/web/o_auth/ldap_authorization_test.exs +++ /dev/null @@ -1,135 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.OAuth.LDAPAuthorizationTest do - use Pleroma.Web.ConnCase - alias Pleroma.Repo - alias Pleroma.Web.OAuth.Token - import Pleroma.Factory - import Mock - - @skip if !Code.ensure_loaded?(:eldap), do: :skip - - setup_all do: clear_config([:ldap, :enabled], true) - - setup_all do: clear_config(Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.LDAPAuthenticator) - - @tag @skip - test "authorizes the existing user using LDAP credentials" do - password = "testpassword" - user = insert(:user, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt(password)) - app = insert(:oauth_app, scopes: ["read", "write"]) - - host = Pleroma.Config.get([:ldap, :host]) |> to_charlist - port = Pleroma.Config.get([:ldap, :port]) - - with_mocks [ - {:eldap, [], - [ - open: fn [^host], [{:port, ^port}, {:ssl, false} | _] -> {:ok, self()} end, - simple_bind: fn _connection, _dn, ^password -> :ok end, - close: fn _connection -> - send(self(), :close_connection) - :ok - end - ]} - ] do - conn = - build_conn() - |> post("/oauth/token", %{ - "grant_type" => "password", - "username" => user.nickname, - "password" => password, - "client_id" => app.client_id, - "client_secret" => app.client_secret - }) - - assert %{"access_token" => token} = json_response(conn, 200) - - token = Repo.get_by(Token, token: token) - - assert token.user_id == user.id - assert_received :close_connection - end - end - - @tag @skip - test "creates a new user after successful LDAP authorization" do - password = "testpassword" - user = build(:user) - app = insert(:oauth_app, scopes: ["read", "write"]) - - host = Pleroma.Config.get([:ldap, :host]) |> to_charlist - port = Pleroma.Config.get([:ldap, :port]) - - with_mocks [ - {:eldap, [], - [ - open: fn [^host], [{:port, ^port}, {:ssl, false} | _] -> {:ok, self()} end, - simple_bind: fn _connection, _dn, ^password -> :ok end, - equalityMatch: fn _type, _value -> :ok end, - wholeSubtree: fn -> :ok end, - search: fn _connection, _options -> - {:ok, {:eldap_search_result, [{:eldap_entry, '', []}], []}} - end, - close: fn _connection -> - send(self(), :close_connection) - :ok - end - ]} - ] do - conn = - build_conn() - |> post("/oauth/token", %{ - "grant_type" => "password", - "username" => user.nickname, - "password" => password, - "client_id" => app.client_id, - "client_secret" => app.client_secret - }) - - assert %{"access_token" => token} = json_response(conn, 200) - - token = Repo.get_by(Token, token: token) |> Repo.preload(:user) - - assert token.user.nickname == user.nickname - assert_received :close_connection - end - end - - @tag @skip - test "disallow authorization for wrong LDAP credentials" do - password = "testpassword" - user = insert(:user, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt(password)) - app = insert(:oauth_app, scopes: ["read", "write"]) - - host = Pleroma.Config.get([:ldap, :host]) |> to_charlist - port = Pleroma.Config.get([:ldap, :port]) - - with_mocks [ - {:eldap, [], - [ - open: fn [^host], [{:port, ^port}, {:ssl, false} | _] -> {:ok, self()} end, - simple_bind: fn _connection, _dn, ^password -> {:error, :invalidCredentials} end, - close: fn _connection -> - send(self(), :close_connection) - :ok - end - ]} - ] do - conn = - build_conn() - |> post("/oauth/token", %{ - "grant_type" => "password", - "username" => user.nickname, - "password" => password, - "client_id" => app.client_id, - "client_secret" => app.client_secret - }) - - assert %{"error" => "Invalid credentials"} = json_response(conn, 400) - assert_received :close_connection - end - end -end From 3b8bf8464f0d9948383ab2e21b870265aa6f8422 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 20 Jul 2022 15:43:41 +0100 Subject: [PATCH 13/82] update features array --- lib/pleroma/web/mastodon_api/views/instance_view.ex | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index c36271654..d67f100a6 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -57,6 +57,7 @@ def render("show.json", _) do def features do [ "pleroma_api", + "akkoma_api", "mastodon_api", "mastodon_api_streaming", "polls", @@ -68,13 +69,6 @@ def features do if Config.get([:media_proxy, :enabled]) do "media_proxy" end, - # backwards compat - if Config.get([:shout, :enabled]) do - "chat" - end, - if Config.get([:shout, :enabled]) do - "shout" - end, if Config.get([:instance, :allow_relay]) do "relay" end, @@ -82,7 +76,6 @@ def features do "safe_dm_mentions" end, "pleroma_emoji_reactions", - "pleroma_chat_messages", if Config.get([:instance, :show_reactions]) do "exposable_reactions" end, From e35dced9c899ffa6d64bc94d6993a33c040988ed Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 20 Jul 2022 15:46:41 +0100 Subject: [PATCH 14/82] remove chat enabled feature --- test/pleroma/web/node_info_test.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pleroma/web/node_info_test.exs b/test/pleroma/web/node_info_test.exs index 9deceb1b5..6eb0a585a 100644 --- a/test/pleroma/web/node_info_test.exs +++ b/test/pleroma/web/node_info_test.exs @@ -133,6 +133,7 @@ test "it shows default features flags", %{conn: conn} do default_features = [ "pleroma_api", + "akkoma_api", "mastodon_api", "mastodon_api_streaming", "polls", @@ -140,8 +141,7 @@ test "it shows default features flags", %{conn: conn} do "shareable_emoji_packs", "multifetch", "pleroma_emoji_reactions", - "pleroma:api/v1/notifications:include_types_filter", - "pleroma_chat_messages" + "pleroma:api/v1/notifications:include_types_filter" ] assert MapSet.subset?( From 07ea4d73e12c65cf3fd5c194a8eb1f27900ed17f Mon Sep 17 00:00:00 2001 From: floatingghost Date: Wed, 20 Jul 2022 20:13:50 +0000 Subject: [PATCH 15/82] update mastofe paths (#95) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/95 --- CHANGELOG.md | 3 +++ config/config.exs | 5 +++-- config/description.exs | 6 +++++ .../web/templates/masto_fe/index.html.eex | 22 +++++++++---------- .../transmogrifier/audio_handling_test.exs | 2 -- 5 files changed, 23 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8546370e9..74b21f600 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] +### Fixed +- Updated mastoFE path, for the newer version + ### Removed - Scrobbling support - `/api/v1/pleroma/scrobble` diff --git a/config/config.exs b/config/config.exs index 61b5a0317..a7b38dbd0 100644 --- a/config/config.exs +++ b/config/config.exs @@ -710,6 +710,7 @@ config :pleroma, :frontends, primary: %{"name" => "pleroma-fe", "ref" => "stable"}, admin: %{"name" => "admin-fe", "ref" => "stable"}, + mastodon: %{"name" => "mastodon-fe", "ref" => "akkoma"}, swagger: %{ "name" => "swagger-ui", "ref" => "stable", @@ -728,9 +729,9 @@ "mastodon-fe" => %{ "name" => "mastodon-fe", "git" => "https://akkoma.dev/AkkomaGang/masto-fe", - "build_url" => "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/masto-fe.zip", + "build_url" => "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/masto-fe.zip", "build_dir" => "distribution", - "ref" => "develop" + "ref" => "akkoma" }, "admin-fe" => %{ "name" => "admin-fe", diff --git a/config/description.exs b/config/description.exs index c67da64b5..a4f115ce7 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2991,6 +2991,12 @@ description: "Admin frontend", children: installed_frontend_options }, + %{ + key: :mastodon, + type: :map, + description: "Mastodon frontend", + children: installed_frontend_options + }, %{ key: :swagger, type: :map, diff --git a/lib/pleroma/web/templates/masto_fe/index.html.eex b/lib/pleroma/web/templates/masto_fe/index.html.eex index 6f2b98957..dadf8f413 100644 --- a/lib/pleroma/web/templates/masto_fe/index.html.eex +++ b/lib/pleroma/web/templates/masto_fe/index.html.eex @@ -11,22 +11,22 @@ - - + + - - - - + + + + - - + + - - + + - +
diff --git a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs index 0a1a965ca..f8b56685b 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/audio_handling_test.exs @@ -10,8 +10,6 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.AudioHandlingTest do alias Pleroma.Object alias Pleroma.Web.ActivityPub.Transmogrifier - import Pleroma.Factory - test "Funkwhale Audio object" do Tesla.Mock.mock(fn %{url: "https://channels.tests.funkwhale.audio/federation/actors/compositions"} -> From 0f132b802dde7f217ecb07767e0d34e3edb517b7 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 21 Jul 2022 11:29:28 +0100 Subject: [PATCH 16/82] purge chat and shout endpoints --- CHANGELOG.md | 1 + config/config.exs | 8 +- config/description.exs | 52 +- docs/docs/configuration/cheatsheet.md | 9 - docs/docs/development/API/admin_api.md | 122 -- docs/docs/development/API/chats.md | 255 --- .../API/differences_in_mastoapi_responses.md | 20 +- docs/docs/development/API/nodeinfo.md | 10 +- docs/docs/development/ap_extensions.md | 37 - lib/pleroma/application.ex | 36 +- lib/pleroma/chat.ex | 97 -- lib/pleroma/chat/message_reference.ex | 117 -- lib/pleroma/config/deprecation_warnings.ex | 24 - lib/pleroma/config/transfer_task.ex | 1 - .../migration_helper/notification_backfill.ex | 12 +- lib/pleroma/moderation_log.ex | 21 - lib/pleroma/notification.ex | 12 +- lib/pleroma/user.ex | 17 +- lib/pleroma/user/welcome_chat_message.ex | 45 - lib/pleroma/web/activity_pub/activity_pub.ex | 18 +- lib/pleroma/web/activity_pub/builder.ex | 24 - .../web/activity_pub/object_validator.ex | 24 +- .../chat_message_validator.ex | 129 -- .../object_validators/common_fields.ex | 4 +- .../create_chat_message_validator.ex | 96 -- .../object_validators/delete_validator.ex | 1 - lib/pleroma/web/activity_pub/side_effects.ex | 47 - .../web/activity_pub/transmogrifier.ex | 5 +- .../web/activity_pub/views/user_view.ex | 9 +- .../controllers/admin_api_controller.ex | 20 - .../admin_api/controllers/chat_controller.ex | 85 - lib/pleroma/web/admin_api/views/chat_view.ex | 30 - lib/pleroma/web/api_spec.ex | 2 - .../api_spec/operations/account_operation.ex | 5 - .../operations/admin/chat_operation.ex | 96 -- .../web/api_spec/operations/chat_operation.ex | 361 ---- .../operations/notification_operation.ex | 2 - .../operations/subscription_operation.ex | 10 - .../api_spec/operations/timeline_operation.ex | 2 +- lib/pleroma/web/api_spec/schemas/account.ex | 5 - lib/pleroma/web/api_spec/schemas/chat.ex | 75 - .../web/api_spec/schemas/chat_message.ex | 77 - lib/pleroma/web/channels/user_socket.ex | 45 - lib/pleroma/web/common_api.ex | 52 - lib/pleroma/web/endpoint.ex | 1 - .../controllers/account_controller.ex | 8 +- .../web/mastodon_api/views/account_view.ex | 11 - .../web/mastodon_api/views/instance_view.ex | 1 - .../mastodon_api/views/notification_view.ex | 17 - .../controllers/chat_controller.ex | 188 -- .../views/chat/message_reference_view.ex | 63 - .../web/pleroma_api/views/chat_view.ex | 44 - lib/pleroma/web/push/impl.ex | 8 - lib/pleroma/web/push/subscription.ex | 2 +- lib/pleroma/web/router.ex | 21 - lib/pleroma/web/shout_channel.ex | 59 - lib/pleroma/web/streamer.ex | 16 +- lib/pleroma/web/views/streamer_view.ex | 23 - test/fixtures/mewmew_no_name.json | 1 - test/mix/tasks/pleroma/config_test.exs | 3 +- test/pleroma/chat/message_reference_test.exs | 29 - test/pleroma/chat_test.exs | 84 - .../config/deprecation_warnings_test.exs | 10 - test/pleroma/config/transfer_task_test.exs | 8 +- .../notification_backfill_test.exs | 6 +- .../migrations/rename_instance_chat_test.exs | 52 - .../user/welcome_chat_message_test.exs | 36 - test/pleroma/user_test.exs | 43 - .../web/activity_pub/activity_pub_test.exs | 7 - .../mrf/hellthread_policy_test.exs | 13 - .../chat_validation_test.exs | 212 --- .../web/activity_pub/side_effects_test.exs | 158 +- .../transmogrifier/chat_message_test.exs | 171 -- .../web/activity_pub/views/user_view_test.exs | 19 - .../controllers/admin_api_controller_test.exs | 50 - .../controllers/chat_controller_test.exs | 218 --- .../controllers/config_controller_test.exs | 1525 ----------------- test/pleroma/web/common_api_test.exs | 169 -- .../controllers/account_controller_test.exs | 1 - .../controllers/instance_controller_test.exs | 1 - .../notification_controller_test.exs | 21 - .../subscription_controller_test.exs | 5 - .../mastodon_api/update_credentials_test.exs | 7 - .../mastodon_api/views/account_view_test.exs | 6 +- .../views/notification_view_test.exs | 27 - .../controllers/chat_controller_test.exs | 453 ----- .../chat_message_reference_view_test.exs | 75 - .../web/pleroma_api/views/chat_view_test.exs | 49 - test/pleroma/web/push/impl_test.exs | 42 - test/pleroma/web/shout_channel_test.exs | 41 - test/pleroma/web/streamer_test.exs | 70 +- 91 files changed, 52 insertions(+), 6142 deletions(-) delete mode 100644 docs/docs/development/API/chats.md delete mode 100644 lib/pleroma/chat.ex delete mode 100644 lib/pleroma/chat/message_reference.ex delete mode 100644 lib/pleroma/user/welcome_chat_message.ex delete mode 100644 lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex delete mode 100644 lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex delete mode 100644 lib/pleroma/web/admin_api/controllers/chat_controller.ex delete mode 100644 lib/pleroma/web/admin_api/views/chat_view.ex delete mode 100644 lib/pleroma/web/api_spec/operations/admin/chat_operation.ex delete mode 100644 lib/pleroma/web/api_spec/operations/chat_operation.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/chat.ex delete mode 100644 lib/pleroma/web/api_spec/schemas/chat_message.ex delete mode 100644 lib/pleroma/web/channels/user_socket.ex delete mode 100644 lib/pleroma/web/pleroma_api/controllers/chat_controller.ex delete mode 100644 lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex delete mode 100644 lib/pleroma/web/pleroma_api/views/chat_view.ex delete mode 100644 lib/pleroma/web/shout_channel.ex delete mode 100644 test/pleroma/chat/message_reference_test.exs delete mode 100644 test/pleroma/chat_test.exs delete mode 100644 test/pleroma/repo/migrations/rename_instance_chat_test.exs delete mode 100644 test/pleroma/user/welcome_chat_message_test.exs delete mode 100644 test/pleroma/web/activity_pub/object_validators/chat_validation_test.exs delete mode 100644 test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs delete mode 100644 test/pleroma/web/admin_api/controllers/chat_controller_test.exs delete mode 100644 test/pleroma/web/admin_api/controllers/config_controller_test.exs delete mode 100644 test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs delete mode 100644 test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs delete mode 100644 test/pleroma/web/pleroma_api/views/chat_view_test.exs delete mode 100644 test/pleroma/web/shout_channel_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index 74b21f600..e3209cfcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `/api/v1/search` - `/api/v1/statuses/{id}/card` - LDAP authenticator +- Chats, they were half-baked. Just use PMs. ## 2022.07 diff --git a/config/config.exs b/config/config.exs index a7b38dbd0..21247bbe5 100644 --- a/config/config.exs +++ b/config/config.exs @@ -267,11 +267,6 @@ sender_nickname: nil, message: nil ], - chat_message: [ - enabled: false, - sender_nickname: nil, - message: nil - ], email: [ enabled: false, sender: nil, @@ -729,7 +724,8 @@ "mastodon-fe" => %{ "name" => "mastodon-fe", "git" => "https://akkoma.dev/AkkomaGang/masto-fe", - "build_url" => "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/masto-fe.zip", + "build_url" => + "https://akkoma-updates.s3-website.fr-par.scw.cloud/frontend/${ref}/masto-fe.zip", "build_dir" => "distribution", "ref" => "akkoma" }, diff --git a/config/description.exs b/config/description.exs index a4f115ce7..910953a91 100644 --- a/config/description.exs +++ b/config/description.exs @@ -946,7 +946,7 @@ key: :privileged_staff, type: :boolean, description: - "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" + "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses)" } ] }, @@ -984,35 +984,6 @@ } ] }, - %{ - key: :chat_message, - type: :keyword, - descpiption: "Chat message settings", - children: [ - %{ - key: :enabled, - type: :boolean, - description: "Enables sending a chat message to newly registered users" - }, - %{ - key: :message, - type: :string, - description: - "A message that will be sent to newly registered users as a chat message", - suggestions: [ - "Hello, welcome on board!" - ] - }, - %{ - key: :sender_nickname, - type: :string, - description: "The nickname of the local user that sends a welcome chat message", - suggestions: [ - "lain" - ] - } - ] - }, %{ key: :email, type: :keyword, @@ -2507,27 +2478,6 @@ } ] }, - %{ - group: :pleroma, - key: :shout, - type: :group, - description: "Pleroma shout settings", - children: [ - %{ - key: :enabled, - type: :boolean, - description: "Enables the backend Shoutbox chat feature." - }, - %{ - key: :limit, - type: :integer, - description: "Shout message character limit.", - suggestions: [ - 5_000 - ] - } - ] - }, %{ group: :pleroma, key: :http, diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index 85381d67c..fdbfb1a3e 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -8,11 +8,6 @@ For from source installations Akkoma configuration works by first importing the To add configuration to your config file, you can copy it from the base config. The latest version of it can be viewed [here](https://akkoma.dev/AkkomaGang/akkoma/src/branch/develop/config/config.exs). You can also use this file if you don't know how an option is supposed to be formatted. -## :shout - -* `enabled` - Enables the backend Shoutbox chat feature. Defaults to `true`. -* `limit` - Shout character limit. Defaults to `5_000` - ## :instance * `name`: The instance’s name. * `email`: Email used to reach an Administrator/Moderator of the instance. @@ -77,10 +72,6 @@ To add configuration to your config file, you can copy it from the base config. * `enabled`: Enables the send a direct message to a newly registered user. Defaults to `false`. * `sender_nickname`: The nickname of the local user that sends the welcome message. * `message`: A message that will be send to a newly registered users as a direct message. -* `chat_message`: - welcome message sent as a chat message. - * `enabled`: Enables the send a chat message to a newly registered user. Defaults to `false`. - * `sender_nickname`: The nickname of the local user that sends the welcome message. - * `message`: A message that will be send to a newly registered users as a chat message. * `email`: - welcome message sent as a email. * `enabled`: Enables the send a welcome email to a newly registered user. Defaults to `false`. * `sender`: The email address or tuple with `{nickname, email}` that will use as sender to the welcome email. diff --git a/docs/docs/development/API/admin_api.md b/docs/docs/development/API/admin_api.md index c46f83839..241e0b95c 100644 --- a/docs/docs/development/API/admin_api.md +++ b/docs/docs/development/API/admin_api.md @@ -1031,7 +1031,6 @@ Most of the settings will be applied in `runtime`, this means that you don't nee - `:hackney_pools` - `:connections_pool` - `:pools` - - `:chat` - partially settings inside these keys: - `:seconds_valid` in `Pleroma.Captcha` - `:proxy_remote` in `Pleroma.Upload` @@ -1411,127 +1410,6 @@ Loads json generated from `config/descriptions.exs`. ``` -## GET /api/v1/pleroma/admin/users/:nickname/chats - -### List a user's chats - -- Params: None - -- Response: - -```json -[ - { - "sender": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "receiver": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "id" : "1", - "unread" : 2, - "last_message" : {...}, // The last message in that chat - "updated_at": "2020-04-21T15:11:46.000Z" - } -] -``` - -## GET /api/v1/pleroma/admin/chats/:chat_id - -### View a single chat - -- Params: None - -- Response: - -```json -{ - "sender": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "receiver": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "id" : "1", - "unread" : 2, - "last_message" : {...}, // The last message in that chat - "updated_at": "2020-04-21T15:11:46.000Z" -} -``` - -## GET /api/v1/pleroma/admin/chats/:chat_id/messages - -### List the messages in a chat - -- Params: `max_id`, `min_id` - -- Response: - -```json -[ - { - "account_id": "someflakeid", - "chat_id": "1", - "content": "Check this out :firefox:", - "created_at": "2020-04-21T15:11:46.000Z", - "emojis": [ - { - "shortcode": "firefox", - "static_url": "https://dontbulling.me/emoji/Firefox.gif", - "url": "https://dontbulling.me/emoji/Firefox.gif", - "visible_in_picker": false - } - ], - "id": "13", - "unread": true - }, - { - "account_id": "someflakeid", - "chat_id": "1", - "content": "Whats' up?", - "created_at": "2020-04-21T15:06:45.000Z", - "emojis": [], - "id": "12", - "unread": false - } -] -``` - -## DELETE /api/v1/pleroma/admin/chats/:chat_id/messages/:message_id - -### Delete a single message - -- Params: None - -- Response: - -```json -{ - "account_id": "someflakeid", - "chat_id": "1", - "content": "Check this out :firefox:", - "created_at": "2020-04-21T15:11:46.000Z", - "emojis": [ - { - "shortcode": "firefox", - "static_url": "https://dontbulling.me/emoji/Firefox.gif", - "url": "https://dontbulling.me/emoji/Firefox.gif", - "visible_in_picker": false - } - ], - "id": "13", - "unread": false -} -``` - ## `GET /api/v1/pleroma/admin/instance_document/:document_name` ### Get an instance document diff --git a/docs/docs/development/API/chats.md b/docs/docs/development/API/chats.md deleted file mode 100644 index 69b214ab1..000000000 --- a/docs/docs/development/API/chats.md +++ /dev/null @@ -1,255 +0,0 @@ -# Chats - -Chats are a way to represent an IM-style conversation between two actors. They are not the same as direct messages and they are not `Status`es, even though they have a lot in common. - -## Why Chats? - -There are no 'visibility levels' in ActivityPub, their definition is purely a Mastodon convention. Direct Messaging between users on the fediverse has mostly been modeled by using ActivityPub addressing following Mastodon conventions on normal `Note` objects. In this case, a 'direct message' would be a message that has no followers addressed and also does not address the special public actor, but just the recipients in the `to` field. It would still be a `Note` and is presented with other `Note`s as a `Status` in the API. - -This is an awkward setup for a few reasons: - -- As DMs generally still follow the usual `Status` conventions, it is easy to accidentally pull somebody into a DM thread by mentioning them. (e.g. "I hate @badguy so much") -- It is possible to go from a publicly addressed `Status` to a DM reply, back to public, then to a 'followers only' reply, and so on. This can be become very confusing, as it is unclear which user can see which part of the conversation. -- The standard `Status` format of implicit addressing also leads to rather ugly results if you try to display the messages as a chat, because all the recipients are always mentioned by name in the message. -- As direct messages are posted with the same api call (and usually same frontend component) as public messages, accidentally making a public message private or vice versa can happen easily. Client bugs can also lead to this, accidentally making private messages public. - -As a measure to improve this situation, the `Conversation` concept and related Akkoma extensions were introduced. While it made it possible to work around a few of the issues, many of the problems remained and it didn't see much adoption because it was too complicated to use correctly. - -## Chats explained -For this reasons, Chats are a new and different entity, both in the API as well as in ActivityPub. A quick overview: - -- Chats are meant to represent an instant message conversation between two actors. For now these are only 1-on-1 conversations, but the other actor can be a group in the future. -- Chat messages have the ActivityPub type `ChatMessage`. They are not `Note`s. Servers that don't understand them will just drop them. -- The only addressing allowed in `ChatMessage`s is one single ActivityPub actor in the `to` field. -- There's always only one Chat between two actors. If you start chatting with someone and later start a 'new' Chat, the old Chat will be continued. -- `ChatMessage`s are posted with a different api, making it very hard to accidentally send a message to the wrong person. -- `ChatMessage`s don't show up in the existing timelines. -- Chats can never go from private to public. They are always private between the two actors. - -## Caveats - -- Chats are NOT E2E encrypted (yet). Security is still the same as email. - -## API - -In general, the way to send a `ChatMessage` is to first create a `Chat`, then post a message to that `Chat`. `Group`s will later be supported by making them a sub-type of `Account`. - -This is the overview of using the API. The API is also documented via OpenAPI, so you can view it and play with it by pointing SwaggerUI or a similar OpenAPI tool to `https://yourinstance.tld/api/openapi`. - -### Creating or getting a chat. - -To create or get an existing Chat for a certain recipient (identified by Account ID) -you can call: - -`POST /api/v1/pleroma/chats/by-account-id/:account_id` - -The account id is the normal FlakeId of the user -``` -POST /api/v1/pleroma/chats/by-account-id/someflakeid -``` - -If you already have the id of a chat, you can also use - -``` -GET /api/v1/pleroma/chats/:id -``` - -There will only ever be ONE Chat for you and a given recipient, so this call -will return the same Chat if you already have one with that user. - -Returned data: - -```json -{ - "account": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "id" : "1", - "unread" : 2, - "last_message" : {...}, // The last message in that chat - "updated_at": "2020-04-21T15:11:46.000Z" -} -``` - -### Marking a chat as read - -To mark a number of messages in a chat up to a certain message as read, you can use - -`POST /api/v1/pleroma/chats/:id/read` - - -Parameters: -- last_read_id: Given this id, all chat messages until this one will be marked as read. Required. - - -Returned data: - -```json -{ - "account": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "id" : "1", - "unread" : 0, - "updated_at": "2020-04-21T15:11:46.000Z" -} -``` - -### Marking a single chat message as read - -To set the `unread` property of a message to `false` - -`POST /api/v1/pleroma/chats/:id/messages/:message_id/read` - -Returned data: - -The modified chat message - -### Getting a list of Chats - -`GET /api/v1/pleroma/chats` - -This will return a list of chats that you have been involved in, sorted by their -last update (so new chats will be at the top). - -Parameters: - -- with_muted: Include chats from muted users (boolean). - -Returned data: - -```json -[ - { - "account": { - "id": "someflakeid", - "username": "somenick", - ... - }, - "id" : "1", - "unread" : 2, - "last_message" : {...}, // The last message in that chat - "updated_at": "2020-04-21T15:11:46.000Z" - } -] -``` - -The recipient of messages that are sent to this chat is given by their AP ID. -No pagination is implemented for now. - -### Getting the messages for a Chat - -For a given Chat id, you can get the associated messages with - -`GET /api/v1/pleroma/chats/:id/messages` - -This will return all messages, sorted by most recent to least recent. The usual -pagination options are implemented. - -Returned data: - -```json -[ - { - "account_id": "someflakeid", - "chat_id": "1", - "content": "Check this out :firefox:", - "created_at": "2020-04-21T15:11:46.000Z", - "emojis": [ - { - "shortcode": "firefox", - "static_url": "https://dontbulling.me/emoji/Firefox.gif", - "url": "https://dontbulling.me/emoji/Firefox.gif", - "visible_in_picker": false - } - ], - "id": "13", - "unread": true - }, - { - "account_id": "someflakeid", - "chat_id": "1", - "content": "Whats' up?", - "created_at": "2020-04-21T15:06:45.000Z", - "emojis": [], - "id": "12", - "unread": false, - "idempotency_key": "75442486-0874-440c-9db1-a7006c25a31f" - } -] -``` - -- idempotency_key: The copy of the `idempotency-key` HTTP request header that can be used for optimistic message sending. Included only during the first few minutes after the message creation. - -### Posting a chat message - -Posting a chat message for given Chat id works like this: - -`POST /api/v1/pleroma/chats/:id/messages` - -Parameters: -- content: The text content of the message. Optional if media is attached. -- media_id: The id of an upload that will be attached to the message. - -Currently, no formatting beyond basic escaping and emoji is implemented. - -Returned data: - -```json -{ - "account_id": "someflakeid", - "chat_id": "1", - "content": "Check this out :firefox:", - "created_at": "2020-04-21T15:11:46.000Z", - "emojis": [ - { - "shortcode": "firefox", - "static_url": "https://dontbulling.me/emoji/Firefox.gif", - "url": "https://dontbulling.me/emoji/Firefox.gif", - "visible_in_picker": false - } - ], - "id": "13", - "unread": false -} -``` - -### Deleting a chat message - -Deleting a chat message for given Chat id works like this: - -`DELETE /api/v1/pleroma/chats/:chat_id/messages/:message_id` - -Returned data is the deleted message. - -### Notifications - -There's a new `pleroma:chat_mention` notification, which has this form. It is not given out in the notifications endpoint by default, you need to explicitly request it with `include_types[]=pleroma:chat_mention`: - -```json -{ - "id": "someid", - "type": "pleroma:chat_mention", - "account": { ... } // User account of the sender, - "chat_message": { - "chat_id": "1", - "id": "10", - "content": "Hello", - "account_id": "someflakeid", - "unread": false - }, - "created_at": "somedate" -} -``` - -### Streaming - -There is an additional `user:pleroma_chat` stream. Incoming chat messages will make the current chat be sent to this `user` stream. The `event` of an incoming chat message is `pleroma:chat_update`. The payload is the updated chat with the incoming chat message in the `last_message` field. - -### Web Push - -If you want to receive push messages for this type, you'll need to add the `pleroma:chat_mention` type to your alerts in the push subscription. diff --git a/docs/docs/development/API/differences_in_mastoapi_responses.md b/docs/docs/development/API/differences_in_mastoapi_responses.md index 6130d716b..4465784bf 100644 --- a/docs/docs/development/API/differences_in_mastoapi_responses.md +++ b/docs/docs/development/API/differences_in_mastoapi_responses.md @@ -99,13 +99,11 @@ Has these additional fields under the `pleroma` object: - `hide_followers_count`: boolean, true when the user has follower stat hiding enabled - `hide_follows_count`: boolean, true when the user has follow stat hiding enabled - `settings_store`: A generic map of settings for frontends. Opaque to the backend. Only returned in `/api/v1/accounts/verify_credentials` and `/api/v1/accounts/update_credentials` -- `chat_token`: The token needed for Akkoma shoutbox. Only returned in `/api/v1/accounts/verify_credentials` - `deactivated`: boolean, true when the user is deactivated - `allow_following_move`: boolean, true when the user allows automatically follow moved following accounts - `unread_conversation_count`: The count of unread conversations. Only returned to the account owner. - `unread_notifications_count`: The count of unread notifications. Only returned to the account owner. - `notification_settings`: object, can be absent. See `/api/v1/pleroma/notification_settings` for the parameters/keys returned. -- `accepts_chat_messages`: boolean, but can be null if we don't have that information about a user - `favicon`: nullable URL string, Favicon image of the user's instance ### Source @@ -159,15 +157,6 @@ The `type` value is `pleroma:emoji_reaction`. Has these fields: - `account`: The account of the user who reacted - `status`: The status that was reacted on -### ChatMention Notification (not default) - -This notification has to be requested explicitly. - -The `type` value is `pleroma:chat_mention` - -- `account`: The account who sent the message -- `chat_message`: The chat message - ### Report Notification (not default) This notification has to be requested explicitly. @@ -182,7 +171,7 @@ The `type` value is `pleroma:report` Accepts additional parameters: - `exclude_visibilities`: will exclude the notifications for activities with the given visibilities. The parameter accepts an array of visibility types (`public`, `unlisted`, `private`, `direct`). Usage example: `GET /api/v1/notifications?exclude_visibilities[]=direct&exclude_visibilities[]=private`. -- `include_types`: will include the notifications for activities with the given types. The parameter accepts an array of types (`mention`, `follow`, `reblog`, `favourite`, `move`, `pleroma:emoji_reaction`, `pleroma:chat_mention`, `pleroma:report`). Usage example: `GET /api/v1/notifications?include_types[]=mention&include_types[]=reblog`. +- `include_types`: will include the notifications for activities with the given types. The parameter accepts an array of types (`mention`, `follow`, `reblog`, `favourite`, `move`, `pleroma:emoji_reaction`, `pleroma:report`). Usage example: `GET /api/v1/notifications?include_types[]=mention&include_types[]=reblog`. ## DELETE `/api/v1/notifications/destroy_multiple` @@ -240,7 +229,6 @@ Additional parameters can be added to the JSON body/Form data: - `pleroma_background_image` - sets the background image of the user. Can be set to "" (an empty string) to reset. - `discoverable` - if true, external services (search bots) etc. are allowed to index / list the account (regardless of this setting, user will still appear in regular search results). - `actor_type` - the type of this account. -- `accepts_chat_messages` - if false, this account will reject all chat messages. - `language` - user's preferred language for receiving emails (digest, confirmation, etc.) All images (avatar, banner and background) can be reset to the default by sending an empty string ("") instead of a file. @@ -300,7 +288,6 @@ Has these additional parameters (which are the same as in Akkoma-API): `GET /api/v1/instance` has additional fields - `max_toot_chars`: The maximum characters per post -- `chat_limit`: The maximum characters per chat message - `description_limit`: The maximum characters per image description - `poll_limits`: The limits of polls - `upload_limit`: The maximum upload file size @@ -321,7 +308,6 @@ Has these additional parameters (which are the same as in Akkoma-API): Permits these additional alert types: -- pleroma:chat_mention - pleroma:emoji_reaction ## Markers @@ -332,10 +318,6 @@ Has these additional fields under the `pleroma` object: ## Streaming -### Chats - -There is an additional `user:pleroma_chat` stream. Incoming chat messages will make the current chat be sent to this `user` stream. The `event` of an incoming chat message is `pleroma:chat_update`. The payload is the updated chat with the incoming chat message in the `last_message` field. - ### Remote timelines For viewing remote server timelines, there are `public:remote` and `public:remote:media` streams. Each of these accept a parameter like `?instance=lain.com`. diff --git a/docs/docs/development/API/nodeinfo.md b/docs/docs/development/API/nodeinfo.md index 30150ac47..08453cdc8 100644 --- a/docs/docs/development/API/nodeinfo.md +++ b/docs/docs/development/API/nodeinfo.md @@ -44,11 +44,8 @@ See also [the Nodeinfo standard](https://nodeinfo.diaspora.software/). "shareable_emoji_packs", "multifetch", "pleroma:api/v1/notifications:include_types_filter", - "chat", - "shout", "relay", - "pleroma_emoji_reactions", - "pleroma_chat_messages" + "pleroma_emoji_reactions" ], "federation":{ "enabled":true, @@ -204,11 +201,8 @@ See also [the Nodeinfo standard](https://nodeinfo.diaspora.software/). "shareable_emoji_packs", "multifetch", "pleroma:api/v1/notifications:include_types_filter", - "chat", - "shout", "relay", - "pleroma_emoji_reactions", - "pleroma_chat_messages" + "pleroma_emoji_reactions" ], "federation":{ "enabled":true, diff --git a/docs/docs/development/ap_extensions.md b/docs/docs/development/ap_extensions.md index 3d1caeb3e..bf9420272 100644 --- a/docs/docs/development/ap_extensions.md +++ b/docs/docs/development/ap_extensions.md @@ -26,40 +26,3 @@ Response: HTTP 201 Created with the object into the body, no `Location` header p The object given in the reponse should then be inserted into an Object's `attachment` field. -## ChatMessages - -`ChatMessage`s are the messages sent in 1-on-1 chats. They are similar to -`Note`s, but the addresing is done by having a single AP actor in the `to` -field. Addressing multiple actors is not allowed. These messages are always -private, there is no public version of them. They are created with a `Create` -activity. - -They are part of the `litepub` namespace as `http://litepub.social/ns#ChatMessage`. - -Example: - -```json -{ - "actor": "http://2hu.gensokyo/users/raymoo", - "id": "http://2hu.gensokyo/objects/1", - "object": { - "attributedTo": "http://2hu.gensokyo/users/raymoo", - "content": "You expected a cute girl? Too bad.", - "id": "http://2hu.gensokyo/objects/2", - "published": "2020-02-12T14:08:20Z", - "to": [ - "http://2hu.gensokyo/users/marisa" - ], - "type": "ChatMessage" - }, - "published": "2018-02-12T14:08:20Z", - "to": [ - "http://2hu.gensokyo/users/marisa" - ], - "type": "Create" -} -``` - -This setup does not prevent multi-user chats, but these will have to go through -a `Group`, which will be the recipient of the messages and then `Announce` them -to the users in the `Group`. diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 5801e930d..6bda2e1d9 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -77,8 +77,7 @@ def start(_type, _args) do ] ++ elasticsearch_children() ++ task_children(@mix_env) ++ - dont_run_in_test(@mix_env) ++ - shout_child(shout_enabled?()) + dont_run_in_test(@mix_env) # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html # for other strategies and supported options @@ -93,11 +92,16 @@ def start(_type, _args) do end opts = [strategy: :one_for_one, name: Pleroma.Supervisor, max_restarts: max_restarts] - result = Supervisor.start_link(children, opts) - set_postgres_server_version() - - result + with {:ok, data} <- Supervisor.start_link(children, opts) do + set_postgres_server_version() + {:ok, data} + else + e -> + Logger.error("Failed to start!") + Logger.error("#{inspect(e)}") + e + end end defp set_postgres_server_version do @@ -173,11 +177,7 @@ defp cachex_children do build_cachex("web_resp", limit: 2500), build_cachex("emoji_packs", expiration: emoji_packs_expiration(), limit: 10), build_cachex("failed_proxy_url", limit: 2500), - build_cachex("banned_urls", default_ttl: :timer.hours(24 * 30), limit: 5_000), - build_cachex("chat_message_id_idempotency_key", - expiration: chat_message_id_idempotency_key_expiration(), - limit: 500_000 - ) + build_cachex("banned_urls", default_ttl: :timer.hours(24 * 30), limit: 5_000) ] end @@ -187,9 +187,6 @@ defp emoji_packs_expiration, defp idempotency_expiration, do: expiration(default: :timer.seconds(6 * 60 * 60), interval: :timer.seconds(60)) - defp chat_message_id_idempotency_key_expiration, - do: expiration(default: :timer.minutes(2), interval: :timer.seconds(60)) - defp seconds_valid_interval, do: :timer.seconds(Config.get!([Pleroma.Captcha, :seconds_valid])) @@ -201,8 +198,6 @@ def build_cachex(type, opts), type: :worker } - defp shout_enabled?, do: Config.get([:shout, :enabled]) - defp dont_run_in_test(env) when env in [:test, :benchmark], do: [] defp dont_run_in_test(_) do @@ -222,15 +217,6 @@ defp background_migrators do ] end - defp shout_child(true) do - [ - Pleroma.Web.ShoutChannel.ShoutChannelState, - {Phoenix.PubSub, [name: Pleroma.PubSub, adapter: Phoenix.PubSub.PG2]} - ] - end - - defp shout_child(_), do: [] - defp task_children(:test) do [ %{ diff --git a/lib/pleroma/chat.ex b/lib/pleroma/chat.ex deleted file mode 100644 index bacff24b5..000000000 --- a/lib/pleroma/chat.ex +++ /dev/null @@ -1,97 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Chat do - use Ecto.Schema - - import Ecto.Changeset - import Ecto.Query - - alias Pleroma.Chat - alias Pleroma.Repo - alias Pleroma.User - - @moduledoc """ - Chat keeps a reference to ChatMessage conversations between a user and an recipient. The recipient can be a user (for now) or a group (not implemented yet). - - It is a helper only, to make it easy to display a list of chats with other people, ordered by last bump. The actual messages are retrieved by querying the recipients of the ChatMessages. - """ - - @type t :: %__MODULE__{} - @primary_key {:id, FlakeId.Ecto.CompatType, autogenerate: true} - - schema "chats" do - belongs_to(:user, User, type: FlakeId.Ecto.CompatType) - field(:recipient, :string) - - timestamps() - end - - def changeset(struct, params) do - struct - |> cast(params, [:user_id, :recipient]) - |> validate_change(:recipient, fn - :recipient, recipient -> - case User.get_cached_by_ap_id(recipient) do - nil -> [recipient: "must be an existing user"] - _ -> [] - end - end) - |> validate_required([:user_id, :recipient]) - |> unique_constraint(:user_id, name: :chats_user_id_recipient_index) - end - - @spec get_by_user_and_id(User.t(), FlakeId.Ecto.CompatType.t()) :: - {:ok, t()} | {:error, :not_found} - def get_by_user_and_id(%User{id: user_id}, id) do - from(c in __MODULE__, - where: c.id == ^id, - where: c.user_id == ^user_id - ) - |> Repo.find_resource() - end - - @spec get_by_id(FlakeId.Ecto.CompatType.t()) :: t() | nil - def get_by_id(id) do - Repo.get(__MODULE__, id) - end - - @spec get(FlakeId.Ecto.CompatType.t(), String.t()) :: t() | nil - def get(user_id, recipient) do - Repo.get_by(__MODULE__, user_id: user_id, recipient: recipient) - end - - @spec get_or_create(FlakeId.Ecto.CompatType.t(), String.t()) :: - {:ok, t()} | {:error, Ecto.Changeset.t()} - def get_or_create(user_id, recipient) do - %__MODULE__{} - |> changeset(%{user_id: user_id, recipient: recipient}) - |> Repo.insert( - # Need to set something, otherwise we get nothing back at all - on_conflict: [set: [recipient: recipient]], - returning: true, - conflict_target: [:user_id, :recipient] - ) - end - - @spec bump_or_create(FlakeId.Ecto.CompatType.t(), String.t()) :: - {:ok, t()} | {:error, Ecto.Changeset.t()} - def bump_or_create(user_id, recipient) do - %__MODULE__{} - |> changeset(%{user_id: user_id, recipient: recipient}) - |> Repo.insert( - on_conflict: [set: [updated_at: NaiveDateTime.utc_now()]], - returning: true, - conflict_target: [:user_id, :recipient] - ) - end - - @spec for_user_query(FlakeId.Ecto.CompatType.t()) :: Ecto.Query.t() - def for_user_query(user_id) do - from(c in Chat, - where: c.user_id == ^user_id, - order_by: [desc: c.updated_at] - ) - end -end diff --git a/lib/pleroma/chat/message_reference.ex b/lib/pleroma/chat/message_reference.ex deleted file mode 100644 index 89537d155..000000000 --- a/lib/pleroma/chat/message_reference.ex +++ /dev/null @@ -1,117 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Chat.MessageReference do - @moduledoc """ - A reference that builds a relation between an AP chat message that a user can see and whether it has been seen - by them, or should be displayed to them. Used to build the chat view that is presented to the user. - """ - - use Ecto.Schema - - alias Pleroma.Chat - alias Pleroma.Object - alias Pleroma.Repo - - import Ecto.Changeset - import Ecto.Query - - @primary_key {:id, FlakeId.Ecto.Type, autogenerate: true} - - schema "chat_message_references" do - belongs_to(:object, Object) - belongs_to(:chat, Chat, type: FlakeId.Ecto.CompatType) - - field(:unread, :boolean, default: true) - - timestamps() - end - - def changeset(struct, params) do - struct - |> cast(params, [:object_id, :chat_id, :unread]) - |> validate_required([:object_id, :chat_id, :unread]) - end - - def get_by_id(id) do - __MODULE__ - |> Repo.get(id) - |> Repo.preload(:object) - end - - def delete(cm_ref) do - cm_ref - |> Repo.delete() - end - - def delete_for_object(%{id: object_id}) do - from(cr in __MODULE__, - where: cr.object_id == ^object_id - ) - |> Repo.delete_all() - end - - def for_chat_and_object(%{id: chat_id}, %{id: object_id}) do - __MODULE__ - |> Repo.get_by(chat_id: chat_id, object_id: object_id) - |> Repo.preload(:object) - end - - def for_chat_query(chat) do - from(cr in __MODULE__, - where: cr.chat_id == ^chat.id, - order_by: [desc: :id], - preload: [:object] - ) - end - - def last_message_for_chat(chat) do - chat - |> for_chat_query() - |> limit(1) - |> Repo.one() - end - - def create(chat, object, unread) do - params = %{ - chat_id: chat.id, - object_id: object.id, - unread: unread - } - - %__MODULE__{} - |> changeset(params) - |> Repo.insert() - end - - def unread_count_for_chat(chat) do - chat - |> for_chat_query() - |> where([cmr], cmr.unread == true) - |> Repo.aggregate(:count) - end - - def mark_as_read(cm_ref) do - cm_ref - |> changeset(%{unread: false}) - |> Repo.update() - end - - def set_all_seen_for_chat(chat, last_read_id \\ nil) do - query = - chat - |> for_chat_query() - |> exclude(:order_by) - |> exclude(:preload) - |> where([cmr], cmr.unread == true) - - if last_read_id do - query - |> where([cmr], cmr.id <= ^last_read_id) - else - query - end - |> Repo.update_all(set: [unread: false]) - end -end diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 911357841..3675c5e4a 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -176,7 +176,6 @@ def warn do check_activity_expiration_config(), check_remote_ip_plug_name(), check_uploders_s3_public_endpoint(), - check_old_chat_shoutbox(), check_quarantined_instances_tuples(), check_transparency_exclusions_tuples(), check_simple_policy_tuples() @@ -308,27 +307,4 @@ def check_uploders_s3_public_endpoint do :ok end end - - @spec check_old_chat_shoutbox() :: :ok | nil - def check_old_chat_shoutbox do - instance_config = Pleroma.Config.get([:instance]) - chat_config = Pleroma.Config.get([:chat]) || [] - - use_old_config = - Keyword.has_key?(instance_config, :chat_limit) or - Keyword.has_key?(chat_config, :enabled) - - if use_old_config do - Logger.error(""" - !!!DEPRECATION WARNING!!! - Your config is using the old namespace for the Shoutbox configuration. You need to convert to the new namespace. e.g., - \n* `config :pleroma, :chat, enabled` and `config :pleroma, :instance, chat_limit` are now equal to: - \n* `config :pleroma, :shout, enabled` and `config :pleroma, :shout, limit` - """) - - :error - else - :ok - end - end end diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index 4676429ae..a4dc92ee0 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -15,7 +15,6 @@ defmodule Pleroma.Config.TransferTask do defp reboot_time_keys, do: [ - {:pleroma, :shout}, {:pleroma, Oban}, {:pleroma, :rate_limit}, {:pleroma, :markup}, diff --git a/lib/pleroma/migration_helper/notification_backfill.ex b/lib/pleroma/migration_helper/notification_backfill.ex index 62b710f82..75d20a402 100644 --- a/lib/pleroma/migration_helper/notification_backfill.ex +++ b/lib/pleroma/migration_helper/notification_backfill.ex @@ -3,7 +3,6 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.MigrationHelper.NotificationBackfill do - alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User @@ -79,14 +78,5 @@ defp type_from_activity(%{data: %{"type" => type}} = activity) do end end - defp type_from_activity_object(%{data: %{"type" => "Create", "object" => %{}}}), do: "mention" - - defp type_from_activity_object(%{data: %{"type" => "Create"}} = activity) do - object = Object.get_by_ap_id(activity.data["object"]) - - case object && object.data["type"] do - "ChatMessage" -> "pleroma:chat_mention" - _ -> "mention" - end - end + defp type_from_activity_object(%{data: %{"type" => "Create"}}), do: "mention" end diff --git a/lib/pleroma/moderation_log.ex b/lib/pleroma/moderation_log.ex index adb51d33a..7da8d0c63 100644 --- a/lib/pleroma/moderation_log.ex +++ b/lib/pleroma/moderation_log.ex @@ -237,17 +237,6 @@ def insert_log(%{actor: %User{}, action: action, target: target} = attrs) insert_log_entry_with_message(%ModerationLog{data: data}) end - def insert_log(%{actor: %User{} = actor, action: "chat_message_delete", subject_id: subject_id}) do - %ModerationLog{ - data: %{ - "actor" => %{"nickname" => actor.nickname}, - "action" => "chat_message_delete", - "subject_id" => subject_id - } - } - |> insert_log_entry_with_message() - end - @spec insert_log_entry_with_message(ModerationLog) :: {:ok, ModerationLog} | {:error, any} defp insert_log_entry_with_message(entry) do entry.data["message"] @@ -554,16 +543,6 @@ def get_log_entry_message(%ModerationLog{ "@#{actor_nickname} updated users: #{users_to_nicknames_string(subjects)}" end - def get_log_entry_message(%ModerationLog{ - data: %{ - "actor" => %{"nickname" => actor_nickname}, - "action" => "chat_message_delete", - "subject_id" => subject_id - } - }) do - "@#{actor_nickname} deleted chat message ##{subject_id}" - end - def get_log_entry_message(%ModerationLog{ data: %{ "actor" => %{"nickname" => actor_nickname}, diff --git a/lib/pleroma/notification.ex b/lib/pleroma/notification.ex index 2ab09495d..d8878338e 100644 --- a/lib/pleroma/notification.ex +++ b/lib/pleroma/notification.ex @@ -68,7 +68,6 @@ def unread_notifications_count(%User{id: user_id}) do follow_request mention move - pleroma:chat_mention pleroma:emoji_reaction pleroma:report reblog @@ -444,16 +443,7 @@ defp type_from_activity(%{data: %{"type" => type}} = activity) do end end - defp type_from_activity_object(%{data: %{"type" => "Create", "object" => %{}}}), do: "mention" - - defp type_from_activity_object(%{data: %{"type" => "Create"}} = activity) do - object = Object.get_by_ap_id(activity.data["object"]) - - case object && object.data["type"] do - "ChatMessage" -> "pleroma:chat_mention" - _ -> "mention" - end - end + defp type_from_activity_object(%{data: %{"type" => "Create"}}), do: "mention" # TODO move to sql, too. def create_notification(%Activity{} = activity, %User{} = user, opts \\ []) do diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9ff52c94f..d66283632 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -145,7 +145,6 @@ defmodule Pleroma.User do field(:also_known_as, {:array, ObjectValidators.ObjectID}, default: []) field(:inbox, :string) field(:shared_inbox, :string) - field(:accepts_chat_messages, :boolean, default: nil) field(:last_active_at, :naive_datetime) field(:disclose_client, :boolean, default: true) field(:pinned_objects, :map, default: %{}) @@ -455,7 +454,6 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do :invisible, :actor_type, :also_known_as, - :accepts_chat_messages, :pinned_objects ] ) @@ -516,7 +514,6 @@ def update_changeset(struct, params \\ %{}) do :pleroma_settings_store, :is_discoverable, :actor_type, - :accepts_chat_messages, :disclose_client ] ) @@ -667,7 +664,6 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do bio_limit = Config.get([:instance, :user_bio_length], 5000) name_limit = Config.get([:instance, :user_name_length], 100) reason_limit = Config.get([:instance, :registration_reason_length], 500) - params = Map.put_new(params, :accepts_chat_messages, true) confirmed? = if is_nil(opts[:confirmed]) do @@ -695,7 +691,6 @@ def register_changeset(struct, params \\ %{}, opts \\ []) do :password, :password_confirmation, :emoji, - :accepts_chat_messages, :registration_reason, :language ]) @@ -798,8 +793,7 @@ def post_register_action(%User{is_approved: true, is_confirmed: true} = user) do {:ok, user} <- set_cache(user), {:ok, _} <- maybe_send_registration_email(user), {:ok, _} <- maybe_send_welcome_email(user), - {:ok, _} <- maybe_send_welcome_message(user), - {:ok, _} <- maybe_send_welcome_chat_message(user) do + {:ok, _} <- maybe_send_welcome_message(user) do {:ok, user} end end @@ -833,15 +827,6 @@ defp maybe_send_welcome_message(user) do end end - defp maybe_send_welcome_chat_message(user) do - if User.WelcomeChatMessage.enabled?() do - User.WelcomeChatMessage.post_message(user) - {:ok, :enqueued} - else - {:ok, :noop} - end - end - defp maybe_send_welcome_email(%User{email: email} = user) when is_binary(email) do if User.WelcomeEmail.enabled?() do User.WelcomeEmail.send_email(user) diff --git a/lib/pleroma/user/welcome_chat_message.ex b/lib/pleroma/user/welcome_chat_message.ex deleted file mode 100644 index 0d6690e34..000000000 --- a/lib/pleroma/user/welcome_chat_message.ex +++ /dev/null @@ -1,45 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.User.WelcomeChatMessage do - alias Pleroma.Config - alias Pleroma.User - alias Pleroma.Web.CommonAPI - - @spec enabled?() :: boolean() - def enabled?, do: Config.get([:welcome, :chat_message, :enabled], false) - - @spec post_message(User.t()) :: {:ok, Pleroma.Activity.t() | nil} - def post_message(user) do - [:welcome, :chat_message, :sender_nickname] - |> Config.get(nil) - |> fetch_sender() - |> do_post(user, welcome_message()) - end - - defp do_post(%User{} = sender, recipient, message) - when is_binary(message) do - CommonAPI.post_chat_message( - sender, - recipient, - message - ) - end - - defp do_post(_sender, _recipient, _message), do: {:ok, nil} - - defp fetch_sender(nickname) when is_binary(nickname) do - with %User{local: true} = user <- User.get_cached_by_nickname(nickname) do - user - else - _ -> nil - end - end - - defp fetch_sender(_), do: nil - - defp welcome_message do - Config.get([:welcome, :chat_message, :message], nil) - end -end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 3583f1626..29055668b 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -97,7 +97,7 @@ defp increase_replies_count_if_reply(%{ defp increase_replies_count_if_reply(_create_data), do: :noop - @object_types ~w[ChatMessage Question Answer Audio Video Event Article Note Page] + @object_types ~w[Question Answer Audio Video Event Article Note Page] @impl true def persist(%{"type" => type} = object, meta) when type in @object_types do with {:ok, object} <- Object.create(object) do @@ -1188,18 +1188,6 @@ defp exclude_poll_votes(query, _) do end end - defp exclude_chat_messages(query, %{include_chat_messages: true}), do: query - - defp exclude_chat_messages(query, _) do - if has_named_binding?(query, :object) do - from([activity, object: o] in query, - where: fragment("not(?->>'type' = ?)", o.data, "ChatMessage") - ) - else - query - end - end - defp exclude_invisible_actors(query, %{invisible_actors: true}), do: query defp exclude_invisible_actors(query, _opts) do @@ -1340,7 +1328,6 @@ def fetch_activities_query(recipients, opts \\ %{}) do |> restrict_filtered(opts) |> Activity.restrict_deactivated_users() |> exclude_poll_votes(opts) - |> exclude_chat_messages(opts) |> exclude_invisible_actors(opts) |> exclude_visibility(opts) @@ -1462,8 +1449,6 @@ defp object_to_user_data(data) do end) is_locked = data["manuallyApprovesFollowers"] || false - capabilities = data["capabilities"] || %{} - accepts_chat_messages = capabilities["acceptsChatMessages"] data = Transmogrifier.maybe_fix_user_object(data) is_discoverable = data["discoverable"] || false invisible = data["invisible"] || false @@ -1507,7 +1492,6 @@ defp object_to_user_data(data) do public_key: public_key, inbox: data["inbox"], shared_inbox: shared_inbox, - accepts_chat_messages: accepts_chat_messages, pinned_objects: pinned_objects } diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 006e92bf4..8c51b8d63 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -183,30 +183,6 @@ defp add_in_reply_to(object, in_reply_to) do end end - def chat_message(actor, recipient, content, opts \\ []) do - basic = %{ - "id" => Utils.generate_object_id(), - "actor" => actor.ap_id, - "type" => "ChatMessage", - "to" => [recipient], - "content" => content, - "published" => DateTime.utc_now() |> DateTime.to_iso8601(), - "emoji" => Emoji.Formatter.get_emoji_map(content) - } - - case opts[:attachment] do - %Object{data: attachment_data} -> - { - :ok, - Map.put(basic, "attachment", attachment_data), - [] - } - - _ -> - {:ok, basic, []} - end - end - def answer(user, object, name) do {:ok, %{ diff --git a/lib/pleroma/web/activity_pub/object_validator.ex b/lib/pleroma/web/activity_pub/object_validator.ex index 187cd0cfd..283cd884c 100644 --- a/lib/pleroma/web/activity_pub/object_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validator.ex @@ -23,8 +23,6 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidator do alias Pleroma.Web.ActivityPub.ObjectValidators.ArticleNotePageValidator alias Pleroma.Web.ActivityPub.ObjectValidators.AudioVideoValidator alias Pleroma.Web.ActivityPub.ObjectValidators.BlockValidator - alias Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator - alias Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator alias Pleroma.Web.ActivityPub.ObjectValidators.CreateGenericValidator alias Pleroma.Web.ActivityPub.ObjectValidators.DeleteValidator alias Pleroma.Web.ActivityPub.ObjectValidators.EmojiReactValidator @@ -83,21 +81,6 @@ def validate(%{"type" => "Delete"} = object, meta) do end end - def validate( - %{"type" => "Create", "object" => %{"type" => "ChatMessage"} = object} = create_activity, - meta - ) do - with {:ok, object_data} <- cast_and_apply(object), - meta = Keyword.put(meta, :object_data, object_data |> stringify_keys), - {:ok, create_activity} <- - create_activity - |> CreateChatMessageValidator.cast_and_validate(meta) - |> Ecto.Changeset.apply_action(:insert) do - create_activity = stringify_keys(create_activity) - {:ok, create_activity, meta} - end - end - def validate( %{"type" => "Create", "object" => %{"type" => objtype} = object} = create_activity, meta @@ -143,7 +126,7 @@ def validate(%{"type" => type} = object, meta) def validate(%{"type" => type} = object, meta) when type in ~w[Accept Reject Follow Update Like EmojiReact Announce - ChatMessage Answer] do + Answer] do validator = case type do "Accept" -> AcceptRejectValidator @@ -153,7 +136,6 @@ def validate(%{"type" => type} = object, meta) "Like" -> LikeValidator "EmojiReact" -> EmojiReactValidator "Announce" -> AnnounceValidator - "ChatMessage" -> ChatMessageValidator "Answer" -> AnswerValidator end @@ -178,10 +160,6 @@ def validate(%{"type" => type} = object, meta) when type in ~w(Add Remove) do def validate(o, m), do: {:error, {:validator_not_set, {o, m}}} - def cast_and_apply(%{"type" => "ChatMessage"} = object) do - ChatMessageValidator.cast_and_apply(object) - end - def cast_and_apply(%{"type" => "Question"} = object) do QuestionValidator.cast_and_apply(object) end diff --git a/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex deleted file mode 100644 index b153156b0..000000000 --- a/lib/pleroma/web/activity_pub/object_validators/chat_message_validator.ex +++ /dev/null @@ -1,129 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatMessageValidator do - use Ecto.Schema - - alias Pleroma.EctoType.ActivityPub.ObjectValidators - alias Pleroma.User - alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator - - import Ecto.Changeset - import Pleroma.Web.ActivityPub.Transmogrifier, only: [fix_emoji: 1] - - @primary_key false - @derive Jason.Encoder - - embedded_schema do - field(:id, ObjectValidators.ObjectID, primary_key: true) - field(:to, ObjectValidators.Recipients, default: []) - field(:type, :string) - field(:content, ObjectValidators.SafeText) - field(:actor, ObjectValidators.ObjectID) - field(:published, ObjectValidators.DateTime) - field(:emoji, ObjectValidators.Emoji, default: %{}) - - embeds_one(:attachment, AttachmentValidator) - end - - def cast_and_apply(data) do - data - |> cast_data - |> apply_action(:insert) - end - - def cast_and_validate(data) do - data - |> cast_data() - |> validate_data() - end - - def cast_data(data) do - %__MODULE__{} - |> changeset(data) - end - - def fix(data) do - data - |> fix_emoji() - |> fix_attachment() - |> Map.put_new("actor", data["attributedTo"]) - end - - # Throws everything but the first one away - def fix_attachment(%{"attachment" => [attachment | _]} = data) do - data - |> Map.put("attachment", attachment) - end - - def fix_attachment(data), do: data - - def changeset(struct, data) do - data = fix(data) - - struct - |> cast(data, List.delete(__schema__(:fields), :attachment)) - |> cast_embed(:attachment) - end - - defp validate_data(data_cng) do - data_cng - |> validate_inclusion(:type, ["ChatMessage"]) - |> validate_required([:id, :actor, :to, :type, :published]) - |> validate_content_or_attachment() - |> validate_length(:to, is: 1) - |> validate_length(:content, max: Pleroma.Config.get([:instance, :remote_limit])) - |> validate_local_concern() - end - - def validate_content_or_attachment(cng) do - attachment = get_field(cng, :attachment) - - if attachment do - cng - else - cng - |> validate_required([:content]) - end - end - - @doc """ - Validates the following - - If both users are in our system - - If at least one of the users in this ChatMessage is a local user - - If the recipient is not blocking the actor - - If the recipient is explicitly not accepting chat messages - """ - def validate_local_concern(cng) do - with actor_ap <- get_field(cng, :actor), - {_, %User{} = actor} <- {:find_actor, User.get_cached_by_ap_id(actor_ap)}, - {_, %User{} = recipient} <- - {:find_recipient, User.get_cached_by_ap_id(get_field(cng, :to) |> hd())}, - {_, false} <- {:not_accepting_chats?, recipient.accepts_chat_messages == false}, - {_, false} <- {:blocking_actor?, User.blocks?(recipient, actor)}, - {_, true} <- {:local?, Enum.any?([actor, recipient], & &1.local)} do - cng - else - {:blocking_actor?, true} -> - cng - |> add_error(:actor, "actor is blocked by recipient") - - {:not_accepting_chats?, true} -> - cng - |> add_error(:to, "recipient does not accept chat messages") - - {:local?, false} -> - cng - |> add_error(:actor, "actor and recipient are both remote") - - {:find_actor, _} -> - cng - |> add_error(:actor, "can't find user") - - {:find_recipient, _} -> - cng - |> add_error(:to, "can't find user") - end - end -end diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex index 011cf66ca..37ec860dc 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex @@ -7,7 +7,7 @@ defmodule Pleroma.Web.ActivityPub.ObjectValidators.CommonFields do alias Pleroma.Web.ActivityPub.ObjectValidators.AttachmentValidator alias Pleroma.Web.ActivityPub.ObjectValidators.TagValidator - # Activities and Objects, except (Create)ChatMessage + # Activities and Objects defmacro message_fields do quote bind_quoted: binding() do field(:type, :string) @@ -38,7 +38,7 @@ defmacro object_fields do end end - # Basically objects that aren't ChatMessage and Answer + # Basically objects that aren't Answer defmacro status_object_fields do quote bind_quoted: binding() do # TODO: Remove actor on objects diff --git a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex b/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex deleted file mode 100644 index 6551f64ca..000000000 --- a/lib/pleroma/web/activity_pub/object_validators/create_chat_message_validator.ex +++ /dev/null @@ -1,96 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -# NOTES -# - Can probably be a generic create validator -# - doesn't embed, will only get the object id -defmodule Pleroma.Web.ActivityPub.ObjectValidators.CreateChatMessageValidator do - use Ecto.Schema - alias Pleroma.EctoType.ActivityPub.ObjectValidators - - alias Pleroma.Object - - import Ecto.Changeset - import Pleroma.Web.ActivityPub.ObjectValidators.CommonValidations - - @primary_key false - - embedded_schema do - quote do - unquote do - import Elixir.Pleroma.Web.ActivityPub.ObjectValidators.CommonFields - activity_fields() - end - end - - field(:id, ObjectValidators.ObjectID, primary_key: true) - field(:type, :string) - field(:to, ObjectValidators.Recipients, default: []) - end - - def cast_and_apply(data) do - data - |> cast_data - |> apply_action(:insert) - end - - def cast_data(data) do - cast(%__MODULE__{}, data, __schema__(:fields)) - end - - def cast_and_validate(data, meta \\ []) do - cast_data(data) - |> validate_data(meta) - end - - defp validate_data(cng, meta) do - cng - |> validate_required([:id, :actor, :to, :type, :object]) - |> validate_inclusion(:type, ["Create"]) - |> validate_actor_presence() - |> validate_recipients_match(meta) - |> validate_actors_match(meta) - |> validate_object_nonexistence() - end - - def validate_object_nonexistence(cng) do - cng - |> validate_change(:object, fn :object, object_id -> - if Object.get_cached_by_ap_id(object_id) do - [{:object, "The object to create already exists"}] - else - [] - end - end) - end - - def validate_actors_match(cng, meta) do - object_actor = meta[:object_data]["actor"] - - cng - |> validate_change(:actor, fn :actor, actor -> - if actor == object_actor do - [] - else - [{:actor, "Actor doesn't match with object actor"}] - end - end) - end - - def validate_recipients_match(cng, meta) do - object_recipients = meta[:object_data]["to"] || [] - - cng - |> validate_change(:to, fn :to, recipients -> - activity_set = MapSet.new(recipients) - object_set = MapSet.new(object_recipients) - - if MapSet.equal?(activity_set, object_set) do - [] - else - [{:to, "Recipients don't match with object recipients"}] - end - end) - end -end diff --git a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex index f0c99356e..a08e8ebe0 100644 --- a/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/delete_validator.ex @@ -48,7 +48,6 @@ def add_deleted_activity_id(cng) do Answer Article Audio - ChatMessage Event Note Page diff --git a/lib/pleroma/web/activity_pub/side_effects.ex b/lib/pleroma/web/activity_pub/side_effects.ex index e2371b693..439268470 100644 --- a/lib/pleroma/web/activity_pub/side_effects.ex +++ b/lib/pleroma/web/activity_pub/side_effects.ex @@ -10,8 +10,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do collection, and so on. """ alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference alias Pleroma.FollowingRelationship alias Pleroma.Notification alias Pleroma.Object @@ -27,7 +25,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffects do require Logger - @cachex Pleroma.Config.get([:cachex, :provider], Cachex) @logger Pleroma.Config.get([:side_effects, :logger], Logger) @behaviour Pleroma.Web.ActivityPub.SideEffects.Handling @@ -306,8 +303,6 @@ def handle(%{data: %{"type" => "Delete", "object" => deleted_object}} = object, Object.decrease_replies_count(in_reply_to) end - MessageReference.delete_for_object(deleted_object) - ap_streamer().stream_out(object) ap_streamer().stream_out_participations(deleted_object, user) :ok @@ -400,41 +395,6 @@ def handle(object, meta) do {:ok, object, meta} end - def handle_object_creation(%{"type" => "ChatMessage"} = object, _activity, meta) do - with {:ok, object, meta} <- Pipeline.common_pipeline(object, meta) do - actor = User.get_cached_by_ap_id(object.data["actor"]) - recipient = User.get_cached_by_ap_id(hd(object.data["to"])) - - streamables = - [[actor, recipient], [recipient, actor]] - |> Enum.uniq() - |> Enum.map(fn [user, other_user] -> - if user.local do - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - {:ok, cm_ref} = MessageReference.create(chat, object, user.ap_id != actor.ap_id) - - @cachex.put( - :chat_message_id_idempotency_key_cache, - cm_ref.id, - meta[:idempotency_key] - ) - - { - ["user", "user:pleroma_chat"], - {user, %{cm_ref | chat: chat, object: object}} - } - end - end) - |> Enum.filter(& &1) - - meta = - meta - |> add_streamables(streamables) - - {:ok, object, meta} - end - end - def handle_object_creation(%{"type" => "Question"} = object, activity, meta) do with {:ok, object, meta} <- Pipeline.common_pipeline(object, meta) do PollWorker.schedule_poll_end(activity) @@ -533,13 +493,6 @@ defp send_streamables(meta) do meta end - defp add_streamables(meta, streamables) do - existing = Keyword.get(meta, :streamables, []) - - meta - |> Keyword.put(:streamables, streamables ++ existing) - end - defp add_notifications(meta, notifications) do existing = Keyword.get(meta, :notifications, []) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index cf072f7ac..115dfc470 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -416,7 +416,7 @@ def handle_incoming( %{"type" => "Create", "object" => %{"type" => objtype, "id" => obj_id}} = data, options ) - when objtype in ~w{Question Answer ChatMessage Audio Video Event Article Note Page} do + when objtype in ~w{Question Answer Audio Video Event Article Note Page} do fetch_options = Keyword.put(options, :depth, (options[:depth] || 0) + 1) object = @@ -846,9 +846,6 @@ def add_attributed_to(object) do Map.put(object, "attributedTo", attributed_to) end - # TODO: Revisit this - def prepare_attachments(%{"type" => "ChatMessage"} = object), do: object - def prepare_attachments(object) do attachments = object diff --git a/lib/pleroma/web/activity_pub/views/user_view.ex b/lib/pleroma/web/activity_pub/views/user_view.ex index 344da19d3..760515f34 100644 --- a/lib/pleroma/web/activity_pub/views/user_view.ex +++ b/lib/pleroma/web/activity_pub/views/user_view.ex @@ -83,14 +83,7 @@ def render("user.json", %{user: user}) do fields = Enum.map(user.fields, &Map.put(&1, "type", "PropertyValue")) - capabilities = - if is_boolean(user.accepts_chat_messages) do - %{ - "acceptsChatMessages" => user.accepts_chat_messages - } - else - %{} - end + capabilities = %{} %{ "id" => user.ap_id, diff --git a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex index 50aa294f0..1d7ac78a0 100644 --- a/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/admin_api_controller.ex @@ -52,12 +52,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do when action in [:list_user_statuses] ) - plug( - OAuthScopesPlug, - %{scopes: ["admin:read:chats"]} - when action in [:list_user_chats] - ) - plug( OAuthScopesPlug, %{scopes: ["admin:read"]} @@ -106,20 +100,6 @@ def list_user_statuses(%{assigns: %{user: admin}} = conn, %{"nickname" => nickna end end - def list_user_chats(%{assigns: %{user: admin}} = conn, %{"nickname" => nickname} = _params) do - with %User{id: user_id} <- User.get_cached_by_nickname_or_id(nickname, for: admin) do - chats = - Pleroma.Chat.for_user_query(user_id) - |> Pleroma.Repo.all() - - conn - |> put_view(AdminAPI.ChatView) - |> render("index.json", chats: chats) - else - _ -> {:error, :not_found} - end - end - def tag_users(%{assigns: %{user: admin}} = conn, %{"nicknames" => nicknames, "tags" => tags}) do with {:ok, _} <- User.tag(nicknames, tags) do ModerationLog.insert_log(%{ diff --git a/lib/pleroma/web/admin_api/controllers/chat_controller.ex b/lib/pleroma/web/admin_api/controllers/chat_controller.ex deleted file mode 100644 index ff20c8604..000000000 --- a/lib/pleroma/web/admin_api/controllers/chat_controller.ex +++ /dev/null @@ -1,85 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.AdminAPI.ChatController do - use Pleroma.Web, :controller - - alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.ModerationLog - alias Pleroma.Pagination - alias Pleroma.Web.AdminAPI - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView - alias Pleroma.Web.Plugs.OAuthScopesPlug - - require Logger - - plug(Pleroma.Web.ApiSpec.CastAndValidate) - - plug( - OAuthScopesPlug, - %{scopes: ["admin:read:chats"]} when action in [:show, :messages] - ) - - plug( - OAuthScopesPlug, - %{scopes: ["admin:write:chats"]} when action in [:delete_message] - ) - - action_fallback(Pleroma.Web.AdminAPI.FallbackController) - - defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ChatOperation - - def delete_message(%{assigns: %{user: user}} = conn, %{ - message_id: message_id, - id: chat_id - }) do - with %MessageReference{object: %{data: %{"id" => object_ap_id}}} = cm_ref <- - MessageReference.get_by_id(message_id), - ^chat_id <- to_string(cm_ref.chat_id), - %Activity{id: activity_id} <- Activity.get_create_by_object_ap_id(object_ap_id), - {:ok, _} <- CommonAPI.delete(activity_id, user) do - ModerationLog.insert_log(%{ - action: "chat_message_delete", - actor: user, - subject_id: message_id - }) - - conn - |> put_view(MessageReferenceView) - |> render("show.json", chat_message_reference: cm_ref) - else - _e -> - {:error, :could_not_delete} - end - end - - def messages(conn, %{id: id} = params) do - with %Chat{} = chat <- Chat.get_by_id(id) do - cm_refs = - chat - |> MessageReference.for_chat_query() - |> Pagination.fetch_paginated(params) - - conn - |> put_view(MessageReferenceView) - |> render("index.json", chat_message_references: cm_refs) - else - _ -> - conn - |> put_status(:not_found) - |> json(%{error: "not found"}) - end - end - - def show(conn, %{id: id}) do - with %Chat{} = chat <- Chat.get_by_id(id) do - conn - |> put_view(AdminAPI.ChatView) - |> render("show.json", chat: chat) - end - end -end diff --git a/lib/pleroma/web/admin_api/views/chat_view.ex b/lib/pleroma/web/admin_api/views/chat_view.ex deleted file mode 100644 index 2a2015ad1..000000000 --- a/lib/pleroma/web/admin_api/views/chat_view.ex +++ /dev/null @@ -1,30 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.AdminAPI.ChatView do - use Pleroma.Web, :view - - alias Pleroma.Chat - alias Pleroma.User - alias Pleroma.Web.MastodonAPI - alias Pleroma.Web.PleromaAPI - - def render("index.json", %{chats: chats} = opts) do - render_many(chats, __MODULE__, "show.json", Map.delete(opts, :chats)) - end - - def render("show.json", %{chat: %Chat{user_id: user_id}} = opts) do - user = User.get_by_id(user_id) - sender = MastodonAPI.AccountView.render("show.json", user: user, skip_visibility_check: true) - - serialized_chat = PleromaAPI.ChatView.render("show.json", opts) - - serialized_chat - |> Map.put(:sender, sender) - |> Map.put(:receiver, serialized_chat[:account]) - |> Map.delete(:account) - end - - def render(view, opts), do: PleromaAPI.ChatView.render(view, opts) -end diff --git a/lib/pleroma/web/api_spec.ex b/lib/pleroma/web/api_spec.ex index 66ae7dcf8..8ac5c8b94 100644 --- a/lib/pleroma/web/api_spec.ex +++ b/lib/pleroma/web/api_spec.ex @@ -84,7 +84,6 @@ def spec(opts \\ []) do %{ "name" => "Administration", "tags" => [ - "Chat administration", "Emoji pack administration", "Frontend managment", "Instance configuration", @@ -114,7 +113,6 @@ def spec(opts \\ []) do ] }, %{"name" => "Instance", "tags" => ["Custom emojis"]}, - %{"name" => "Messaging", "tags" => ["Chats", "Conversations"]}, %{ "name" => "Statuses", "tags" => [ diff --git a/lib/pleroma/web/api_spec/operations/account_operation.ex b/lib/pleroma/web/api_spec/operations/account_operation.ex index bdbae9b74..b1f4932ee 100644 --- a/lib/pleroma/web/api_spec/operations/account_operation.ex +++ b/lib/pleroma/web/api_spec/operations/account_operation.ex @@ -595,11 +595,6 @@ defp update_credentials_request do nullable: true, description: "Whether manual approval of follow requests is required." }, - accepts_chat_messages: %Schema{ - allOf: [BooleanLike], - nullable: true, - description: "Whether the user accepts receiving chat messages." - }, fields_attributes: %Schema{ nullable: true, oneOf: [ diff --git a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex b/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex deleted file mode 100644 index 57906445e..000000000 --- a/lib/pleroma/web/api_spec/operations/admin/chat_operation.ex +++ /dev/null @@ -1,96 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Admin.ChatOperation do - alias OpenApiSpex.Operation - alias Pleroma.Web.ApiSpec.Schemas.Chat - alias Pleroma.Web.ApiSpec.Schemas.ChatMessage - - import Pleroma.Web.ApiSpec.Helpers - - def open_api_operation(action) do - operation = String.to_existing_atom("#{action}_operation") - apply(__MODULE__, operation, []) - end - - def delete_message_operation do - %Operation{ - tags: ["Chat administration"], - summary: "Delete an individual chat message", - operationId: "AdminAPI.ChatController.delete_message", - parameters: [ - Operation.parameter(:id, :path, :string, "The ID of the Chat"), - Operation.parameter(:message_id, :path, :string, "The ID of the message") - ], - responses: %{ - 200 => - Operation.response( - "The deleted ChatMessage", - "application/json", - ChatMessage - ) - }, - security: [ - %{ - "oAuth" => ["admin:write:chats"] - } - ] - } - end - - def messages_operation do - %Operation{ - tags: ["Chat administration"], - summary: "Get chat's messages", - operationId: "AdminAPI.ChatController.messages", - parameters: - [Operation.parameter(:id, :path, :string, "The ID of the Chat")] ++ - pagination_params(), - responses: %{ - 200 => - Operation.response( - "The messages in the chat", - "application/json", - Pleroma.Web.ApiSpec.ChatOperation.chat_messages_response() - ) - }, - security: [ - %{ - "oAuth" => ["admin:read:chats"] - } - ] - } - end - - def show_operation do - %Operation{ - tags: ["Chat administration"], - summary: "Create a chat", - operationId: "AdminAPI.ChatController.show", - parameters: [ - Operation.parameter( - :id, - :path, - :string, - "The id of the chat", - required: true, - example: "1234" - ) - ], - responses: %{ - 200 => - Operation.response( - "The existing chat", - "application/json", - Chat - ) - }, - security: [ - %{ - "oAuth" => ["admin:read"] - } - ] - } - end -end diff --git a/lib/pleroma/web/api_spec/operations/chat_operation.ex b/lib/pleroma/web/api_spec/operations/chat_operation.ex deleted file mode 100644 index 31fd150de..000000000 --- a/lib/pleroma/web/api_spec/operations/chat_operation.ex +++ /dev/null @@ -1,361 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.ChatOperation do - alias OpenApiSpex.Operation - alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.ApiError - alias Pleroma.Web.ApiSpec.Schemas.BooleanLike - alias Pleroma.Web.ApiSpec.Schemas.Chat - alias Pleroma.Web.ApiSpec.Schemas.ChatMessage - - import Pleroma.Web.ApiSpec.Helpers - - @spec open_api_operation(atom) :: Operation.t() - def open_api_operation(action) do - operation = String.to_existing_atom("#{action}_operation") - apply(__MODULE__, operation, []) - end - - def mark_as_read_operation do - %Operation{ - tags: ["Chats"], - summary: "Mark all messages in the chat as read", - operationId: "ChatController.mark_as_read", - parameters: [Operation.parameter(:id, :path, :string, "The ID of the Chat")], - requestBody: request_body("Parameters", mark_as_read()), - responses: %{ - 200 => - Operation.response( - "The updated chat", - "application/json", - Chat - ) - }, - security: [ - %{ - "oAuth" => ["write:chats"] - } - ] - } - end - - def mark_message_as_read_operation do - %Operation{ - tags: ["Chats"], - summary: "Mark a message as read", - operationId: "ChatController.mark_message_as_read", - parameters: [ - Operation.parameter(:id, :path, :string, "The ID of the Chat"), - Operation.parameter(:message_id, :path, :string, "The ID of the message") - ], - responses: %{ - 200 => - Operation.response( - "The read ChatMessage", - "application/json", - ChatMessage - ) - }, - security: [ - %{ - "oAuth" => ["write:chats"] - } - ] - } - end - - def show_operation do - %Operation{ - tags: ["Chats"], - summary: "Retrieve a chat", - operationId: "ChatController.show", - parameters: [ - Operation.parameter( - :id, - :path, - :string, - "The id of the chat", - required: true, - example: "1234" - ) - ], - responses: %{ - 200 => - Operation.response( - "The existing chat", - "application/json", - Chat - ) - }, - security: [ - %{ - "oAuth" => ["read"] - } - ] - } - end - - def create_operation do - %Operation{ - tags: ["Chats"], - summary: "Create a chat", - operationId: "ChatController.create", - parameters: [ - Operation.parameter( - :id, - :path, - :string, - "The account id of the recipient of this chat", - required: true, - example: "someflakeid" - ) - ], - responses: %{ - 200 => - Operation.response( - "The created or existing chat", - "application/json", - Chat - ) - }, - security: [ - %{ - "oAuth" => ["write:chats"] - } - ] - } - end - - def index2_operation do - %Operation{ - tags: ["Chats"], - summary: "Retrieve list of chats", - operationId: "ChatController.index2", - parameters: [ - Operation.parameter(:with_muted, :query, BooleanLike, "Include chats from muted users") - | pagination_params() - ], - responses: %{ - 200 => Operation.response("The chats of the user", "application/json", chats_response()) - }, - security: [ - %{ - "oAuth" => ["read:chats"] - } - ] - } - end - - def messages_operation do - %Operation{ - tags: ["Chats"], - summary: "Retrieve chat's messages", - operationId: "ChatController.messages", - parameters: - [Operation.parameter(:id, :path, :string, "The ID of the Chat")] ++ - pagination_params(), - responses: %{ - 200 => - Operation.response( - "The messages in the chat", - "application/json", - chat_messages_response() - ), - 404 => Operation.response("Not Found", "application/json", ApiError) - }, - security: [ - %{ - "oAuth" => ["read:chats"] - } - ] - } - end - - def post_chat_message_operation do - %Operation{ - tags: ["Chats"], - summary: "Post a message to the chat", - operationId: "ChatController.post_chat_message", - parameters: [ - Operation.parameter(:id, :path, :string, "The ID of the Chat") - ], - requestBody: request_body("Parameters", chat_message_create()), - responses: %{ - 200 => - Operation.response( - "The newly created ChatMessage", - "application/json", - ChatMessage - ), - 400 => Operation.response("Bad Request", "application/json", ApiError), - 422 => Operation.response("MRF Rejection", "application/json", ApiError) - }, - security: [ - %{ - "oAuth" => ["write:chats"] - } - ] - } - end - - def delete_message_operation do - %Operation{ - tags: ["Chats"], - summary: "Delete message", - operationId: "ChatController.delete_message", - parameters: [ - Operation.parameter(:id, :path, :string, "The ID of the Chat"), - Operation.parameter(:message_id, :path, :string, "The ID of the message") - ], - responses: %{ - 200 => - Operation.response( - "The deleted ChatMessage", - "application/json", - ChatMessage - ) - }, - security: [ - %{ - "oAuth" => ["write:chats"] - } - ] - } - end - - def chats_response do - %Schema{ - title: "ChatsResponse", - description: "Response schema for multiple Chats", - type: :array, - items: Chat, - example: [ - %{ - "account" => %{ - "pleroma" => %{ - "is_admin" => false, - "is_confirmed" => true, - "hide_followers_count" => false, - "is_moderator" => false, - "hide_favorites" => true, - "ap_id" => "https://dontbulling.me/users/lain", - "hide_follows_count" => false, - "hide_follows" => false, - "background_image" => nil, - "skip_thread_containment" => false, - "hide_followers" => false, - "relationship" => %{}, - "tags" => [] - }, - "avatar" => - "https://dontbulling.me/media/065a4dd3c6740dab13ff9c71ec7d240bb9f8be9205c9e7467fb2202117da1e32.jpg", - "following_count" => 0, - "header_static" => "https://originalpatchou.li/images/banner.png", - "source" => %{ - "sensitive" => false, - "note" => "lain", - "pleroma" => %{ - "discoverable" => false, - "actor_type" => "Person" - }, - "fields" => [] - }, - "statuses_count" => 1, - "locked" => false, - "created_at" => "2020-04-16T13:40:15.000Z", - "display_name" => "lain", - "fields" => [], - "acct" => "lain@dontbulling.me", - "id" => "9u6Qw6TAZANpqokMkK", - "emojis" => [], - "avatar_static" => - "https://dontbulling.me/media/065a4dd3c6740dab13ff9c71ec7d240bb9f8be9205c9e7467fb2202117da1e32.jpg", - "username" => "lain", - "followers_count" => 0, - "header" => "https://originalpatchou.li/images/banner.png", - "bot" => false, - "note" => "lain", - "url" => "https://dontbulling.me/users/lain" - }, - "id" => "1", - "unread" => 2 - } - ] - } - end - - def chat_messages_response do - %Schema{ - title: "ChatMessagesResponse", - description: "Response schema for multiple ChatMessages", - type: :array, - items: ChatMessage, - example: [ - %{ - "emojis" => [ - %{ - "static_url" => "https://dontbulling.me/emoji/Firefox.gif", - "visible_in_picker" => false, - "shortcode" => "firefox", - "url" => "https://dontbulling.me/emoji/Firefox.gif" - } - ], - "created_at" => "2020-04-21T15:11:46.000Z", - "content" => "Check this out :firefox:", - "id" => "13", - "chat_id" => "1", - "account_id" => "someflakeid", - "unread" => false - }, - %{ - "account_id" => "someflakeid", - "content" => "Whats' up?", - "id" => "12", - "chat_id" => "1", - "emojis" => [], - "created_at" => "2020-04-21T15:06:45.000Z", - "unread" => false - } - ] - } - end - - def chat_message_create do - %Schema{ - title: "ChatMessageCreateRequest", - description: "POST body for creating an chat message", - type: :object, - properties: %{ - content: %Schema{ - type: :string, - description: "The content of your message. Optional if media_id is present" - }, - media_id: %Schema{type: :string, description: "The id of an upload"} - }, - example: %{ - "content" => "Hey wanna buy feet pics?", - "media_id" => "134234" - } - } - end - - def mark_as_read do - %Schema{ - title: "MarkAsReadRequest", - description: "POST body for marking a number of chat messages as read", - type: :object, - required: [:last_read_id], - properties: %{ - last_read_id: %Schema{ - type: :string, - description: "The content of your message." - } - }, - example: %{ - "last_read_id" => "abcdef12456" - } - } - end -end diff --git a/lib/pleroma/web/api_spec/operations/notification_operation.ex b/lib/pleroma/web/api_spec/operations/notification_operation.ex index 01a886de3..b4a20e5e5 100644 --- a/lib/pleroma/web/api_spec/operations/notification_operation.ex +++ b/lib/pleroma/web/api_spec/operations/notification_operation.ex @@ -174,7 +174,6 @@ defp notification_type do "reblog", "mention", "pleroma:emoji_reaction", - "pleroma:chat_mention", "pleroma:report", "move", "follow_request", @@ -190,7 +189,6 @@ defp notification_type do - `poll` - A poll you have voted in or created has ended - `move` - Someone moved their account - `pleroma:emoji_reaction` - Someone reacted with emoji to your status - - `pleroma:chat_mention` - Someone mentioned you in a chat message - `pleroma:report` - Someone was reported """ } diff --git a/lib/pleroma/web/api_spec/operations/subscription_operation.ex b/lib/pleroma/web/api_spec/operations/subscription_operation.ex index 60a7fb3b0..a0cf76c32 100644 --- a/lib/pleroma/web/api_spec/operations/subscription_operation.ex +++ b/lib/pleroma/web/api_spec/operations/subscription_operation.ex @@ -142,11 +142,6 @@ defp create_request do nullable: true, description: "Receive poll notifications?" }, - "pleroma:chat_mention": %Schema{ - allOf: [BooleanLike], - nullable: true, - description: "Receive chat notifications?" - }, "pleroma:emoji_reaction": %Schema{ allOf: [BooleanLike], nullable: true, @@ -216,11 +211,6 @@ defp update_request do nullable: true, description: "Receive poll notifications?" }, - "pleroma:chat_mention": %Schema{ - allOf: [BooleanLike], - nullable: true, - description: "Receive chat notifications?" - }, "pleroma:emoji_reaction": %Schema{ allOf: [BooleanLike], nullable: true, diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex index 24d792916..d375c76b8 100644 --- a/lib/pleroma/web/api_spec/operations/timeline_operation.ex +++ b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -43,7 +43,7 @@ def direct_operation do tags: ["Timelines"], summary: "Direct timeline", description: - "View statuses with a “direct” scope addressed to the account. Using this endpoint is discouraged, please use [conversations](#tag/Conversations) or [chats](#tag/Chats).", + "View statuses with a “direct” scope addressed to the account. Using this endpoint is discouraged, please use [conversations](#tag/Conversations).", parameters: [with_muted_param() | pagination_params()], security: [%{"oAuth" => ["read:statuses"]}], operationId: "TimelineController.direct", diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index 548e70544..5d3ac9cd0 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -47,7 +47,6 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do description: "whether the user allows automatically follow moved following accounts" }, background_image: %Schema{type: :string, nullable: true, format: :uri}, - chat_token: %Schema{type: :string}, is_confirmed: %Schema{ type: :boolean, description: @@ -102,7 +101,6 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do description: "A generic map of settings for frontends. Opaque to the backend. Only returned in `verify_credentials` and `update_credentials`" }, - accepts_chat_messages: %Schema{type: :boolean, nullable: true}, favicon: %Schema{ type: :string, format: :uri, @@ -175,9 +173,6 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do "is_admin" => false, "is_moderator" => false, "skip_thread_containment" => false, - "accepts_chat_messages" => true, - "chat_token" => - "SFMyNTY.g3QAAAACZAAEZGF0YW0AAAASOXRLaTNlc2JHN09RZ1oyOTIwZAAGc2lnbmVkbgYARNplS3EB.Mb_Iaqew2bN1I1o79B_iP7encmVCpTKC4OtHZRxdjKc", "unread_conversation_count" => 0, "tags" => [], "notification_settings" => %{ diff --git a/lib/pleroma/web/api_spec/schemas/chat.ex b/lib/pleroma/web/api_spec/schemas/chat.ex deleted file mode 100644 index 4afed910d..000000000 --- a/lib/pleroma/web/api_spec/schemas/chat.ex +++ /dev/null @@ -1,75 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.Chat do - alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.ChatMessage - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "Chat", - description: "Response schema for a Chat", - type: :object, - properties: %{ - id: %Schema{type: :string}, - account: %Schema{type: :object}, - unread: %Schema{type: :integer}, - last_message: ChatMessage, - updated_at: %Schema{type: :string, format: :"date-time"} - }, - example: %{ - "account" => %{ - "pleroma" => %{ - "is_admin" => false, - "is_confirmed" => true, - "hide_followers_count" => false, - "is_moderator" => false, - "hide_favorites" => true, - "ap_id" => "https://dontbulling.me/users/lain", - "hide_follows_count" => false, - "hide_follows" => false, - "background_image" => nil, - "skip_thread_containment" => false, - "hide_followers" => false, - "relationship" => %{}, - "tags" => [] - }, - "avatar" => - "https://dontbulling.me/media/065a4dd3c6740dab13ff9c71ec7d240bb9f8be9205c9e7467fb2202117da1e32.jpg", - "following_count" => 0, - "header_static" => "https://originalpatchou.li/images/banner.png", - "source" => %{ - "sensitive" => false, - "note" => "lain", - "pleroma" => %{ - "discoverable" => false, - "actor_type" => "Person" - }, - "fields" => [] - }, - "statuses_count" => 1, - "is_locked" => false, - "created_at" => "2020-04-16T13:40:15.000Z", - "display_name" => "lain", - "fields" => [], - "acct" => "lain@dontbulling.me", - "id" => "9u6Qw6TAZANpqokMkK", - "emojis" => [], - "avatar_static" => - "https://dontbulling.me/media/065a4dd3c6740dab13ff9c71ec7d240bb9f8be9205c9e7467fb2202117da1e32.jpg", - "username" => "lain", - "followers_count" => 0, - "header" => "https://originalpatchou.li/images/banner.png", - "bot" => false, - "note" => "lain", - "url" => "https://dontbulling.me/users/lain" - }, - "id" => "1", - "unread" => 2, - "last_message" => ChatMessage.schema().example(), - "updated_at" => "2020-04-21T15:06:45.000Z" - } - }) -end diff --git a/lib/pleroma/web/api_spec/schemas/chat_message.ex b/lib/pleroma/web/api_spec/schemas/chat_message.ex deleted file mode 100644 index 348fe95f8..000000000 --- a/lib/pleroma/web/api_spec/schemas/chat_message.ex +++ /dev/null @@ -1,77 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ApiSpec.Schemas.ChatMessage do - alias OpenApiSpex.Schema - alias Pleroma.Web.ApiSpec.Schemas.Emoji - - require OpenApiSpex - - OpenApiSpex.schema(%{ - title: "ChatMessage", - description: "Response schema for a ChatMessage", - nullable: true, - type: :object, - properties: %{ - id: %Schema{type: :string}, - account_id: %Schema{type: :string, description: "The Mastodon API id of the actor"}, - chat_id: %Schema{type: :string}, - content: %Schema{type: :string, nullable: true}, - created_at: %Schema{type: :string, format: :"date-time"}, - emojis: %Schema{type: :array, items: Emoji}, - attachment: %Schema{type: :object, nullable: true}, - card: %Schema{ - type: :object, - nullable: true, - description: "Preview card for links included within status content", - required: [:url, :title, :description, :type], - properties: %{ - type: %Schema{ - type: :string, - enum: ["link", "photo", "video", "rich"], - description: "The type of the preview card" - }, - provider_name: %Schema{ - type: :string, - nullable: true, - description: "The provider of the original resource" - }, - provider_url: %Schema{ - type: :string, - format: :uri, - description: "A link to the provider of the original resource" - }, - url: %Schema{type: :string, format: :uri, description: "Location of linked resource"}, - image: %Schema{ - type: :string, - nullable: true, - format: :uri, - description: "Preview thumbnail" - }, - title: %Schema{type: :string, description: "Title of linked resource"}, - description: %Schema{type: :string, description: "Description of preview"} - } - }, - unread: %Schema{type: :boolean, description: "Whether a message has been marked as read."} - }, - example: %{ - "account_id" => "someflakeid", - "chat_id" => "1", - "content" => "hey you again", - "created_at" => "2020-04-21T15:06:45.000Z", - "card" => nil, - "emojis" => [ - %{ - "static_url" => "https://dontbulling.me/emoji/Firefox.gif", - "visible_in_picker" => false, - "shortcode" => "firefox", - "url" => "https://dontbulling.me/emoji/Firefox.gif" - } - ], - "id" => "14", - "attachment" => nil, - "unread" => false - } - }) -end diff --git a/lib/pleroma/web/channels/user_socket.ex b/lib/pleroma/web/channels/user_socket.ex deleted file mode 100644 index 043206835..000000000 --- a/lib/pleroma/web/channels/user_socket.ex +++ /dev/null @@ -1,45 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.UserSocket do - use Phoenix.Socket - alias Pleroma.User - - ## Channels - # channel "room:*", Pleroma.Web.RoomChannel - channel("chat:*", Pleroma.Web.ShoutChannel) - - # Socket params are passed from the client and can - # be used to verify and authenticate a user. After - # verification, you can put default assigns into - # the socket that will be set for all channels, ie - # - # {:ok, assign(socket, :user_id, verified_user_id)} - # - # To deny connection, return `:error`. - # - # See `Phoenix.Token` documentation for examples in - # performing token verification on connect. - def connect(%{"token" => token}, socket) do - with true <- Pleroma.Config.get([:shout, :enabled]), - {:ok, user_id} <- Phoenix.Token.verify(socket, "user socket", token, max_age: 84_600), - %User{} = user <- Pleroma.User.get_cached_by_id(user_id) do - {:ok, assign(socket, :user_name, user.nickname)} - else - _e -> :error - end - end - - # Socket id's are topics that allow you to identify all sockets for a given user: - # - # def id(socket), do: "user_socket:#{socket.assigns.user_id}" - # - # Would allow you to broadcast a "disconnect" event and terminate - # all active sockets and channels for a given user: - # - # Pleroma.Web.Endpoint.broadcast("user_socket:#{user.id}", "disconnect", %{}) - # - # Returning `nil` makes this socket anonymous. - def id(_socket), do: nil -end diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 3c2e7ae86..8ab50cf2b 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -5,7 +5,6 @@ defmodule Pleroma.Web.CommonAPI do alias Pleroma.Activity alias Pleroma.Conversation.Participation - alias Pleroma.Formatter alias Pleroma.Object alias Pleroma.ThreadMute alias Pleroma.User @@ -30,57 +29,6 @@ def block(blocker, blocked) do end end - def post_chat_message(%User{} = user, %User{} = recipient, content, opts \\ []) do - with maybe_attachment <- opts[:media_id] && Object.get_by_id(opts[:media_id]), - :ok <- validate_chat_content_length(content, !!maybe_attachment), - {_, {:ok, chat_message_data, _meta}} <- - {:build_object, - Builder.chat_message( - user, - recipient.ap_id, - content |> format_chat_content, - attachment: maybe_attachment - )}, - {_, {:ok, create_activity_data, _meta}} <- - {:build_create_activity, Builder.create(user, chat_message_data, [recipient.ap_id])}, - {_, {:ok, %Activity{} = activity, _meta}} <- - {:common_pipeline, - Pipeline.common_pipeline(create_activity_data, - local: true, - idempotency_key: opts[:idempotency_key] - )} do - {:ok, activity} - else - {:common_pipeline, {:reject, _} = e} -> e - e -> e - end - end - - defp format_chat_content(nil), do: nil - - defp format_chat_content(content) do - {text, _, _} = - content - |> Formatter.html_escape("text/plain") - |> Formatter.linkify() - |> (fn {text, mentions, tags} -> - {String.replace(text, ~r/\r?\n/, "
"), mentions, tags} - end).() - - text - end - - defp validate_chat_content_length(_, true), do: :ok - defp validate_chat_content_length(nil, false), do: {:error, :no_content} - - defp validate_chat_content_length(content, _) do - if String.length(content) <= Pleroma.Config.get([:instance, :chat_limit]) do - :ok - else - {:error, :content_too_long} - end - end - def unblock(blocker, blocked) do with {_, %Activity{} = block} <- {:fetch_block, Utils.fetch_latest_block(blocker, blocked)}, {:ok, unblock_data, _} <- Builder.undo(blocker, block), diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 62a6459b1..2e7e9692e 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -9,7 +9,6 @@ defmodule Pleroma.Web.Endpoint do alias Pleroma.Config - socket("/socket", Pleroma.Web.UserSocket) socket("/live", Phoenix.LiveView.Socket) plug(Pleroma.Web.Plugs.SetLocalePlug) diff --git a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex index 83cebbb96..ed7fb802a 100644 --- a/lib/pleroma/web/mastodon_api/controllers/account_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/account_controller.ex @@ -153,13 +153,10 @@ defp validate_email_param(_) do @doc "GET /api/v1/accounts/verify_credentials" def verify_credentials(%{assigns: %{user: user}} = conn, _) do - chat_token = Phoenix.Token.sign(conn, "user socket", user.id) - render(conn, "show.json", user: user, for: user, - with_pleroma_settings: true, - with_chat_token: chat_token + with_pleroma_settings: true ) end @@ -188,8 +185,7 @@ def update_credentials(%{assigns: %{user: user}, body_params: params} = conn, _p :show_role, :skip_thread_containment, :allow_following_move, - :also_known_as, - :accepts_chat_messages + :also_known_as ] |> Enum.reduce(%{}, fn key, acc -> Maps.put_if_present(acc, key, params[key], &{:ok, Params.truthy_param?(&1)}) diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index 4b15b1635..06acf0a26 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -289,7 +289,6 @@ defp do_render("show.json", %{user: user} = opts) do relationship: relationship, skip_thread_containment: user.skip_thread_containment, background_image: image_url(user.background) |> MediaProxy.url(), - accepts_chat_messages: user.accepts_chat_messages, favicon: favicon } } @@ -297,7 +296,6 @@ defp do_render("show.json", %{user: user} = opts) do |> maybe_put_settings(user, opts[:for], opts) |> maybe_put_notification_settings(user, opts[:for]) |> maybe_put_settings_store(user, opts[:for], opts) - |> maybe_put_chat_token(user, opts[:for], opts) |> maybe_put_activation_status(user, opts[:for]) |> maybe_put_follow_requests_count(user, opts[:for]) |> maybe_put_allow_following_move(user, opts[:for]) @@ -350,15 +348,6 @@ defp maybe_put_settings_store(data, %User{} = user, %User{}, %{ defp maybe_put_settings_store(data, _, _, _), do: data - defp maybe_put_chat_token(data, %User{id: id}, %User{id: id}, %{ - with_chat_token: token - }) do - data - |> Kernel.put_in([:pleroma, :chat_token], token) - end - - defp maybe_put_chat_token(data, _, _, _), do: data - defp maybe_put_role(data, %User{show_role: true} = user, _) do data |> Kernel.put_in([:pleroma, :is_admin], user.is_admin) diff --git a/lib/pleroma/web/mastodon_api/views/instance_view.ex b/lib/pleroma/web/mastodon_api/views/instance_view.ex index d67f100a6..4cfa8d85c 100644 --- a/lib/pleroma/web/mastodon_api/views/instance_view.ex +++ b/lib/pleroma/web/mastodon_api/views/instance_view.ex @@ -37,7 +37,6 @@ def render("show.json", _) do background_upload_limit: Keyword.get(instance, :background_upload_limit), banner_upload_limit: Keyword.get(instance, :banner_upload_limit), background_image: Pleroma.Web.Endpoint.url() <> Keyword.get(instance, :background_image), - shout_limit: Config.get([:shout, :limit]), description_limit: Keyword.get(instance, :description_limit), pleroma: %{ metadata: %{ diff --git a/lib/pleroma/web/mastodon_api/views/notification_view.ex b/lib/pleroma/web/mastodon_api/views/notification_view.ex index bb156799e..83914a275 100644 --- a/lib/pleroma/web/mastodon_api/views/notification_view.ex +++ b/lib/pleroma/web/mastodon_api/views/notification_view.ex @@ -6,9 +6,7 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do use Pleroma.Web, :view alias Pleroma.Activity - alias Pleroma.Chat.MessageReference alias Pleroma.Notification - alias Pleroma.Object alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.AdminAPI.Report @@ -18,7 +16,6 @@ defmodule Pleroma.Web.MastodonAPI.NotificationView do alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.NotificationView alias Pleroma.Web.MastodonAPI.StatusView - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView @parent_types ~w{Like Announce EmojiReact} @@ -121,9 +118,6 @@ def render( |> put_status(parent_activity_fn.(), reading_user, status_render_opts) |> put_emoji(activity) - "pleroma:chat_mention" -> - put_chat_message(response, activity, reading_user, status_render_opts) - "pleroma:report" -> put_report(response, activity) @@ -144,17 +138,6 @@ defp put_emoji(response, activity) do |> Map.put(:emoji_url, MediaProxy.url(Pleroma.Emoji.emoji_url(activity.data))) end - defp put_chat_message(response, activity, reading_user, opts) do - object = Object.normalize(activity, fetch: false) - author = User.get_cached_by_ap_id(object.data["actor"]) - chat = Pleroma.Chat.get(reading_user.id, author.ap_id) - cm_ref = MessageReference.for_chat_and_object(chat, object) - render_opts = Map.merge(opts, %{for: reading_user, chat_message_reference: cm_ref}) - chat_message_render = MessageReferenceView.render("show.json", render_opts) - - Map.put(response, :chat_message, chat_message_render) - end - defp put_status(response, activity, reading_user, opts) do status_render_opts = Map.merge(opts, %{activity: activity, for: reading_user}) status_render = StatusView.render("show.json", status_render_opts) diff --git a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex b/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex deleted file mode 100644 index 669d50132..000000000 --- a/lib/pleroma/web/pleroma_api/controllers/chat_controller.ex +++ /dev/null @@ -1,188 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.PleromaAPI.ChatController do - use Pleroma.Web, :controller - - import Pleroma.Web.ControllerHelper, only: [add_link_headers: 2] - - alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.Object - alias Pleroma.Pagination - alias Pleroma.Repo - alias Pleroma.User - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView - alias Pleroma.Web.Plugs.OAuthScopesPlug - - import Ecto.Query - - action_fallback(Pleroma.Web.MastodonAPI.FallbackController) - - plug( - OAuthScopesPlug, - %{scopes: ["write:chats"]} - when action in [ - :post_chat_message, - :create, - :mark_as_read, - :mark_message_as_read, - :delete_message - ] - ) - - plug( - OAuthScopesPlug, - %{scopes: ["read:chats"]} when action in [:messages, :index, :index2, :show] - ) - - plug(Pleroma.Web.ApiSpec.CastAndValidate) - - defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.ChatOperation - - def delete_message(%{assigns: %{user: %{id: user_id} = user}} = conn, %{ - message_id: message_id, - id: chat_id - }) do - with %MessageReference{} = cm_ref <- - MessageReference.get_by_id(message_id), - ^chat_id <- to_string(cm_ref.chat_id), - %Chat{user_id: ^user_id} <- Chat.get_by_id(chat_id), - {:ok, _} <- remove_or_delete(cm_ref, user) do - conn - |> put_view(MessageReferenceView) - |> render("show.json", chat_message_reference: cm_ref) - else - _e -> - {:error, :could_not_delete} - end - end - - defp remove_or_delete( - %{object: %{data: %{"actor" => actor, "id" => id}}}, - %{ap_id: actor} = user - ) do - with %Activity{} = activity <- Activity.get_create_by_object_ap_id(id) do - CommonAPI.delete(activity.id, user) - end - end - - defp remove_or_delete(cm_ref, _), do: MessageReference.delete(cm_ref) - - def post_chat_message( - %{body_params: params, assigns: %{user: user}} = conn, - %{id: id} - ) do - with {:ok, chat} <- Chat.get_by_user_and_id(user, id), - %User{} = recipient <- User.get_cached_by_ap_id(chat.recipient), - {:ok, activity} <- - CommonAPI.post_chat_message(user, recipient, params[:content], - media_id: params[:media_id], - idempotency_key: idempotency_key(conn) - ), - message <- Object.normalize(activity, fetch: false), - cm_ref <- MessageReference.for_chat_and_object(chat, message) do - conn - |> put_view(MessageReferenceView) - |> render("show.json", chat_message_reference: cm_ref) - else - {:reject, message} -> - conn - |> put_status(:unprocessable_entity) - |> json(%{error: message}) - - {:error, message} -> - conn - |> put_status(:bad_request) - |> json(%{error: message}) - end - end - - def mark_message_as_read( - %{assigns: %{user: %{id: user_id}}} = conn, - %{id: chat_id, message_id: message_id} - ) do - with %MessageReference{} = cm_ref <- MessageReference.get_by_id(message_id), - ^chat_id <- to_string(cm_ref.chat_id), - %Chat{user_id: ^user_id} <- Chat.get_by_id(chat_id), - {:ok, cm_ref} <- MessageReference.mark_as_read(cm_ref) do - conn - |> put_view(MessageReferenceView) - |> render("show.json", chat_message_reference: cm_ref) - end - end - - def mark_as_read( - %{body_params: %{last_read_id: last_read_id}, assigns: %{user: user}} = conn, - %{id: id} - ) do - with {:ok, chat} <- Chat.get_by_user_and_id(user, id), - {_n, _} <- MessageReference.set_all_seen_for_chat(chat, last_read_id) do - render(conn, "show.json", chat: chat) - end - end - - def messages(%{assigns: %{user: user}} = conn, %{id: id} = params) do - with {:ok, chat} <- Chat.get_by_user_and_id(user, id) do - chat_message_refs = - chat - |> MessageReference.for_chat_query() - |> Pagination.fetch_paginated(params) - - conn - |> add_link_headers(chat_message_refs) - |> put_view(MessageReferenceView) - |> render("index.json", chat_message_references: chat_message_refs) - end - end - - def index(%{assigns: %{user: user}} = conn, params) do - chats = - index_query(user, params) - |> Repo.all() - - render(conn, "index.json", chats: chats) - end - - def index2(%{assigns: %{user: user}} = conn, params) do - chats = - index_query(user, params) - |> Pagination.fetch_paginated(params) - - conn - |> add_link_headers(chats) - |> render("index.json", chats: chats) - end - - defp index_query(%{id: user_id} = user, params) do - exclude_users = - User.cached_blocked_users_ap_ids(user) ++ - if params[:with_muted], do: [], else: User.cached_muted_users_ap_ids(user) - - user_id - |> Chat.for_user_query() - |> where([c], c.recipient not in ^exclude_users) - end - - def create(%{assigns: %{user: user}} = conn, %{id: id}) do - with %User{ap_id: recipient} <- User.get_cached_by_id(id), - {:ok, %Chat{} = chat} <- Chat.get_or_create(user.id, recipient) do - render(conn, "show.json", chat: chat) - end - end - - def show(%{assigns: %{user: user}} = conn, %{id: id}) do - with {:ok, chat} <- Chat.get_by_user_and_id(user, id) do - render(conn, "show.json", chat: chat) - end - end - - defp idempotency_key(conn) do - case get_req_header(conn, "idempotency-key") do - [key] -> key - _ -> nil - end - end -end diff --git a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex deleted file mode 100644 index 2e4355992..000000000 --- a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex +++ /dev/null @@ -1,63 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do - use Pleroma.Web, :view - - alias Pleroma.Maps - alias Pleroma.User - alias Pleroma.Web.CommonAPI.Utils - alias Pleroma.Web.MastodonAPI.StatusView - - @cachex Pleroma.Config.get([:cachex, :provider], Cachex) - - def render( - "show.json", - %{ - chat_message_reference: %{ - id: id, - object: %{data: chat_message} = object, - chat_id: chat_id, - unread: unread - } - } - ) do - %{ - id: id |> to_string(), - content: chat_message["content"], - chat_id: chat_id |> to_string(), - account_id: User.get_cached_by_ap_id(chat_message["actor"]).id, - created_at: Utils.to_masto_date(chat_message["published"]), - emojis: StatusView.build_emojis(chat_message["emoji"]), - attachment: - chat_message["attachment"] && - StatusView.render("attachment.json", attachment: chat_message["attachment"]), - unread: unread, - card: - StatusView.render( - "card.json", - Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object) - ) - } - |> put_idempotency_key() - end - - def render("index.json", opts) do - render_many( - opts[:chat_message_references], - __MODULE__, - "show.json", - Map.put(opts, :as, :chat_message_reference) - ) - end - - defp put_idempotency_key(data) do - with {:ok, idempotency_key} <- @cachex.get(:chat_message_id_idempotency_key_cache, data.id) do - data - |> Maps.put_if_present(:idempotency_key, idempotency_key) - else - _ -> data - end - end -end diff --git a/lib/pleroma/web/pleroma_api/views/chat_view.ex b/lib/pleroma/web/pleroma_api/views/chat_view.ex deleted file mode 100644 index 3794818a7..000000000 --- a/lib/pleroma/web/pleroma_api/views/chat_view.ex +++ /dev/null @@ -1,44 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ChatView do - use Pleroma.Web, :view - - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.User - alias Pleroma.Web.CommonAPI.Utils - alias Pleroma.Web.MastodonAPI.AccountView - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView - - def render("show.json", %{chat: %Chat{} = chat} = opts) do - recipient = User.get_cached_by_ap_id(chat.recipient) - last_message = opts[:last_message] || MessageReference.last_message_for_chat(chat) - account_view_opts = account_view_opts(opts, recipient) - - %{ - id: chat.id |> to_string(), - account: AccountView.render("show.json", account_view_opts), - unread: MessageReference.unread_count_for_chat(chat), - last_message: - last_message && - MessageReferenceView.render("show.json", chat_message_reference: last_message), - updated_at: Utils.to_masto_date(chat.updated_at) - } - end - - def render("index.json", %{chats: chats} = opts) do - render_many(chats, __MODULE__, "show.json", Map.delete(opts, :chats)) - end - - defp account_view_opts(opts, recipient) do - account_view_opts = Map.put(opts, :user, recipient) - - if Map.has_key?(account_view_opts, :for) do - account_view_opts - else - Map.put(account_view_opts, :skip_visibility_check, true) - end - end -end diff --git a/lib/pleroma/web/push/impl.ex b/lib/pleroma/web/push/impl.ex index 28e13ef9c..c30a39e94 100644 --- a/lib/pleroma/web/push/impl.ex +++ b/lib/pleroma/web/push/impl.ex @@ -124,13 +124,6 @@ def build_content(notification, actor, object, mastodon_type) do def format_body(activity, actor, object, mastodon_type \\ nil) - def format_body(_activity, actor, %{data: %{"type" => "ChatMessage"} = data}, _) do - case data["content"] do - nil -> "@#{actor.nickname}: (Attachment)" - content -> "@#{actor.nickname}: #{Utils.scrub_html_and_truncate(content, 80)}" - end - end - def format_body( %{activity: %{data: %{"type" => "Create"}}}, actor, @@ -187,7 +180,6 @@ def format_title(%{type: type}, mastodon_type) do "follow_request" -> "New Follow Request" "reblog" -> "New Repeat" "favourite" -> "New Favorite" - "pleroma:chat_mention" -> "New Chat Message" "pleroma:emoji_reaction" -> "New Reaction" type -> "New #{String.capitalize(type || "event")}" end diff --git a/lib/pleroma/web/push/subscription.ex b/lib/pleroma/web/push/subscription.ex index 35bf2e223..b063b103f 100644 --- a/lib/pleroma/web/push/subscription.ex +++ b/lib/pleroma/web/push/subscription.ex @@ -26,7 +26,7 @@ defmodule Pleroma.Web.Push.Subscription do end # credo:disable-for-next-line Credo.Check.Readability.MaxLineLength - @supported_alert_types ~w[follow favourite mention reblog poll pleroma:chat_mention pleroma:emoji_reaction]a + @supported_alert_types ~w[follow favourite mention reblog poll pleroma:emoji_reaction]a defp alerts(%{data: %{alerts: alerts}}) do alerts = Map.take(alerts, @supported_alert_types) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index 8a53f770e..d413835bb 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -253,12 +253,8 @@ defmodule Pleroma.Web.Router do patch("/users/:nickname/credentials", AdminAPIController, :update_user_credentials) get("/users/:nickname/statuses", AdminAPIController, :list_user_statuses) - get("/users/:nickname/chats", AdminAPIController, :list_user_chats) get("/statuses", StatusController, :index) - - get("/chats/:id", ChatController, :show) - get("/chats/:id/messages", ChatController, :messages) end # AdminAPI: admins and mods (staff) can perform these actions @@ -298,8 +294,6 @@ defmodule Pleroma.Web.Router do post("/reload_emoji", AdminAPIController, :reload_emoji) get("/stats", AdminAPIController, :stats) - - delete("/chats/:id/messages/:message_id", ChatController, :delete_message) end scope "/api/v1/pleroma/emoji", Pleroma.Web.PleromaAPI do @@ -427,14 +421,6 @@ defmodule Pleroma.Web.Router do scope [] do pipe_through(:authenticated_api) - post("/chats/by-account-id/:id", ChatController, :create) - get("/chats/:id", ChatController, :show) - get("/chats/:id/messages", ChatController, :messages) - post("/chats/:id/messages", ChatController, :post_chat_message) - delete("/chats/:id/messages/:message_id", ChatController, :delete_message) - post("/chats/:id/read", ChatController, :mark_as_read) - post("/chats/:id/messages/:message_id/read", ChatController, :mark_message_as_read) - get("/conversations/:id/statuses", ConversationController, :statuses) get("/conversations/:id", ConversationController, :show) post("/conversations/read", ConversationController, :mark_as_read) @@ -471,13 +457,6 @@ defmodule Pleroma.Web.Router do get("/federation_status", InstancesController, :show) end - scope "/api/v2/pleroma", Pleroma.Web.PleromaAPI do - scope [] do - pipe_through(:authenticated_api) - get("/chats", ChatController, :index2) - end - end - scope "/api/v1", Pleroma.Web.MastodonAPI do pipe_through(:authenticated_api) diff --git a/lib/pleroma/web/shout_channel.ex b/lib/pleroma/web/shout_channel.ex deleted file mode 100644 index 17caecb1a..000000000 --- a/lib/pleroma/web/shout_channel.ex +++ /dev/null @@ -1,59 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ShoutChannel do - use Phoenix.Channel - - alias Pleroma.User - alias Pleroma.Web.MastodonAPI.AccountView - alias Pleroma.Web.ShoutChannel.ShoutChannelState - - def join("chat:public", _message, socket) do - send(self(), :after_join) - {:ok, socket} - end - - def handle_info(:after_join, socket) do - push(socket, "messages", %{messages: ShoutChannelState.messages()}) - {:noreply, socket} - end - - def handle_in("new_msg", %{"text" => text}, %{assigns: %{user_name: user_name}} = socket) do - text = String.trim(text) - - if String.length(text) in 1..Pleroma.Config.get([:shout, :limit]) do - author = User.get_cached_by_nickname(user_name) - author_json = AccountView.render("show.json", user: author, skip_visibility_check: true) - - message = ShoutChannelState.add_message(%{text: text, author: author_json}) - - broadcast!(socket, "new_msg", message) - end - - {:noreply, socket} - end -end - -defmodule Pleroma.Web.ShoutChannel.ShoutChannelState do - use Agent - - @max_messages 20 - - def start_link(_) do - Agent.start_link(fn -> %{max_id: 1, messages: []} end, name: __MODULE__) - end - - def add_message(message) do - Agent.get_and_update(__MODULE__, fn state -> - id = state[:max_id] + 1 - message = Map.put(message, "id", id) - messages = [message | state[:messages]] |> Enum.take(@max_messages) - {message, %{max_id: id, messages: messages}} - end) - end - - def messages do - Agent.get(__MODULE__, fn state -> state[:messages] |> Enum.reverse() end) - end -end diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex index fc3bbb130..9a4ac1317 100644 --- a/lib/pleroma/web/streamer.ex +++ b/lib/pleroma/web/streamer.ex @@ -6,7 +6,6 @@ defmodule Pleroma.Web.Streamer do require Logger alias Pleroma.Activity - alias Pleroma.Chat.MessageReference alias Pleroma.Config alias Pleroma.Conversation.Participation alias Pleroma.Notification @@ -25,7 +24,7 @@ defmodule Pleroma.Web.Streamer do def registry, do: @registry @public_streams ["public", "public:local", "public:media", "public:local:media"] - @user_streams ["user", "user:notification", "direct", "user:pleroma_chat"] + @user_streams ["user", "user:notification", "direct"] @doc "Expands and authorizes a stream, and registers the process for streaming." @spec get_topic_and_add_socket( @@ -241,19 +240,6 @@ defp do_stream(topic, %Notification{} = item) end) end - defp do_stream(topic, {user, %MessageReference{} = cm_ref}) - when topic in ["user", "user:pleroma_chat"] do - topic = "#{topic}:#{user.id}" - - text = StreamerView.render("chat_update.json", %{chat_message_reference: cm_ref}) - - Registry.dispatch(@registry, topic, fn list -> - Enum.each(list, fn {pid, _auth} -> - send(pid, {:text, text}) - end) - end) - end - defp do_stream("user", item) do Logger.debug("Trying to push to users") diff --git a/lib/pleroma/web/views/streamer_view.ex b/lib/pleroma/web/views/streamer_view.ex index 7706035e9..de2e4d1e9 100644 --- a/lib/pleroma/web/views/streamer_view.ex +++ b/lib/pleroma/web/views/streamer_view.ex @@ -51,29 +51,6 @@ def render("update.json", %Activity{} = activity) do |> Jason.encode!() end - def render("chat_update.json", %{chat_message_reference: cm_ref}) do - # Explicitly giving the cmr for the object here, so we don't accidentally - # send a later 'last_message' that was inserted between inserting this and - # streaming it out - # - # It also contains the chat with a cache of the correct unread count - Logger.debug("Trying to stream out #{inspect(cm_ref)}") - - representation = - Pleroma.Web.PleromaAPI.ChatView.render( - "show.json", - %{last_message: cm_ref, chat: cm_ref.chat} - ) - - %{ - event: "pleroma:chat_update", - payload: - representation - |> Jason.encode!() - } - |> Jason.encode!() - end - def render("follow_relationships_update.json", item) do %{ event: "pleroma:follow_relationships_update", diff --git a/test/fixtures/mewmew_no_name.json b/test/fixtures/mewmew_no_name.json index 532d4cf70..08e245254 100644 --- a/test/fixtures/mewmew_no_name.json +++ b/test/fixtures/mewmew_no_name.json @@ -8,7 +8,6 @@ ], "attachment" : [], "capabilities" : { - "acceptsChatMessages" : true }, "discoverable" : false, "endpoints" : { diff --git a/test/mix/tasks/pleroma/config_test.exs b/test/mix/tasks/pleroma/config_test.exs index 2b8252db7..d5e038bee 100644 --- a/test/mix/tasks/pleroma/config_test.exs +++ b/test/mix/tasks/pleroma/config_test.exs @@ -129,7 +129,6 @@ test "load a settings with large values and pass to file", %{temp_file: temp_fil notify_email: "noreply@example.com", description: "A Pleroma instance, an alternative fediverse server", limit: 5_000, - chat_limit: 5_000, remote_limit: 100_000, upload_limit: 16_000_000, avatar_upload_limit: 2_000_000, @@ -189,7 +188,7 @@ test "load a settings with large values and pass to file", %{temp_file: temp_fil {:ok, file} = File.read(temp_file) assert file == - "import Config\n\nconfig :pleroma, :instance,\n name: \"Pleroma\",\n email: \"example@example.com\",\n notify_email: \"noreply@example.com\",\n description: \"A Pleroma instance, an alternative fediverse server\",\n limit: 5000,\n chat_limit: 5000,\n remote_limit: 100_000,\n upload_limit: 16_000_000,\n avatar_upload_limit: 2_000_000,\n background_upload_limit: 4_000_000,\n banner_upload_limit: 4_000_000,\n poll_limits: %{\n max_expiration: 31_536_000,\n max_option_chars: 200,\n max_options: 20,\n min_expiration: 0\n },\n registrations_open: true,\n federating: true,\n federation_incoming_replies_max_depth: 100,\n federation_reachability_timeout_days: 7,\n federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n allow_relay: true,\n public: true,\n quarantined_instances: [],\n managed_config: true,\n static_dir: \"instance/static/\",\n allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n autofollowed_nicknames: [],\n max_pinned_statuses: 1,\n attachment_links: false,\n max_report_comment_size: 1000,\n safe_dm_mentions: false,\n healthcheck: false,\n remote_post_retention_days: 90,\n skip_thread_containment: true,\n limit_to_local_content: :unauthenticated,\n user_bio_length: 5000,\n user_name_length: 100,\n max_account_fields: 10,\n max_remote_account_fields: 20,\n account_field_name_length: 512,\n account_field_value_length: 2048,\n external_user_synchronization: true,\n extended_nickname_format: true,\n multi_factor_authentication: [\n totp: [digits: 6, period: 30],\n backup_codes: [number: 2, length: 6]\n ]\n" + "import Config\n\nconfig :pleroma, :instance,\n name: \"Pleroma\",\n email: \"example@example.com\",\n notify_email: \"noreply@example.com\",\n description: \"A Pleroma instance, an alternative fediverse server\",\n limit: 5000,\n remote_limit: 100_000,\n upload_limit: 16_000_000,\n avatar_upload_limit: 2_000_000,\n background_upload_limit: 4_000_000,\n banner_upload_limit: 4_000_000,\n poll_limits: %{\n max_expiration: 31_536_000,\n max_option_chars: 200,\n max_options: 20,\n min_expiration: 0\n },\n registrations_open: true,\n federating: true,\n federation_incoming_replies_max_depth: 100,\n federation_reachability_timeout_days: 7,\n federation_publisher_modules: [Pleroma.Web.ActivityPub.Publisher],\n allow_relay: true,\n public: true,\n quarantined_instances: [],\n managed_config: true,\n static_dir: \"instance/static/\",\n allowed_post_formats: [\"text/plain\", \"text/html\", \"text/markdown\", \"text/bbcode\"],\n autofollowed_nicknames: [],\n max_pinned_statuses: 1,\n attachment_links: false,\n max_report_comment_size: 1000,\n safe_dm_mentions: false,\n healthcheck: false,\n remote_post_retention_days: 90,\n skip_thread_containment: true,\n limit_to_local_content: :unauthenticated,\n user_bio_length: 5000,\n user_name_length: 100,\n max_account_fields: 10,\n max_remote_account_fields: 20,\n account_field_name_length: 512,\n account_field_value_length: 2048,\n external_user_synchronization: true,\n extended_nickname_format: true,\n multi_factor_authentication: [\n totp: [digits: 6, period: 30],\n backup_codes: [number: 2, length: 6]\n ]\n" end end diff --git a/test/pleroma/chat/message_reference_test.exs b/test/pleroma/chat/message_reference_test.exs deleted file mode 100644 index c8db3b450..000000000 --- a/test/pleroma/chat/message_reference_test.exs +++ /dev/null @@ -1,29 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Chat.MessageReferenceTest do - use Pleroma.DataCase, async: true - - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.Web.CommonAPI - - import Pleroma.Factory - - describe "messages" do - test "it returns the last message in a chat" do - user = insert(:user) - recipient = insert(:user) - - {:ok, _message_1} = CommonAPI.post_chat_message(user, recipient, "hey") - {:ok, _message_2} = CommonAPI.post_chat_message(recipient, user, "ho") - - {:ok, chat} = Chat.get_or_create(user.id, recipient.ap_id) - - message = MessageReference.last_message_for_chat(chat) - - assert message.object.data["content"] == "ho" - end - end -end diff --git a/test/pleroma/chat_test.exs b/test/pleroma/chat_test.exs deleted file mode 100644 index a5fd1e02e..000000000 --- a/test/pleroma/chat_test.exs +++ /dev/null @@ -1,84 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.ChatTest do - use Pleroma.DataCase, async: true - - alias Pleroma.Chat - - import Pleroma.Factory - - describe "creation and getting" do - test "it only works if the recipient is a valid user (for now)" do - user = insert(:user) - - assert {:error, _chat} = Chat.bump_or_create(user.id, "http://some/nonexisting/account") - assert {:error, _chat} = Chat.get_or_create(user.id, "http://some/nonexisting/account") - end - - test "it creates a chat for a user and recipient" do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - - assert chat.id - end - - test "deleting the user deletes the chat" do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - - Repo.delete(user) - - refute Chat.get_by_id(chat.id) - end - - test "deleting the recipient deletes the chat" do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - - Repo.delete(other_user) - - refute Chat.get_by_id(chat.id) - end - - test "it returns and bumps a chat for a user and recipient if it already exists" do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - {:ok, chat_two} = Chat.bump_or_create(user.id, other_user.ap_id) - - assert chat.id == chat_two.id - end - - test "it returns a chat for a user and recipient if it already exists" do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - {:ok, chat_two} = Chat.get_or_create(user.id, other_user.ap_id) - - assert chat.id == chat_two.id - end - - test "a returning chat will have an updated `update_at` field" do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.bump_or_create(user.id, other_user.ap_id) - {:ok, chat} = time_travel(chat, -2) - - {:ok, chat_two} = Chat.bump_or_create(user.id, other_user.ap_id) - - assert chat.id == chat_two.id - assert chat.updated_at != chat_two.updated_at - end - end -end diff --git a/test/pleroma/config/deprecation_warnings_test.exs b/test/pleroma/config/deprecation_warnings_test.exs index 12597506b..053e28207 100644 --- a/test/pleroma/config/deprecation_warnings_test.exs +++ b/test/pleroma/config/deprecation_warnings_test.exs @@ -279,14 +279,4 @@ test "check_uploders_s3_public_endpoint/0" do end) =~ "Your config is using the old setting for controlling the URL of media uploaded to your S3 bucket." end - - test "check_old_chat_shoutbox/0" do - clear_config([:instance, :chat_limit], 1_000) - clear_config([:chat, :enabled], true) - - assert capture_log(fn -> - DeprecationWarnings.check_old_chat_shoutbox() - end) =~ - "Your config is using the old namespace for the Shoutbox configuration." - end end diff --git a/test/pleroma/config/transfer_task_test.exs b/test/pleroma/config/transfer_task_test.exs index 9e3f11f1a..c56f20ec5 100644 --- a/test/pleroma/config/transfer_task_test.exs +++ b/test/pleroma/config/transfer_task_test.exs @@ -95,8 +95,8 @@ test "don't restart if no reboot time settings were changed" do @tag :erratic test "on reboot time key" do - clear_config(:shout) - insert(:config, key: :shout, value: [enabled: false]) + clear_config([:pleroma, :rate_limit]) + insert(:config, key: {:pleroma, :rate_limit}, value: [enabled: false]) assert capture_log(fn -> TransferTask.start_link([]) end) =~ "pleroma restarted" end @@ -109,10 +109,10 @@ test "on reboot time subkey" do @tag :erratic test "don't restart pleroma on reboot time key and subkey if there is false flag" do - clear_config(:shout) + clear_config([:pleroma, :rate_limit]) clear_config(Pleroma.Captcha) - insert(:config, key: :shout, value: [enabled: false]) + insert(:config, key: {:pleroma, :rate_limit}, value: [enabled: false]) insert(:config, key: Pleroma.Captcha, value: [seconds_valid: 60]) refute String.contains?( diff --git a/test/pleroma/migration_helper/notification_backfill_test.exs b/test/pleroma/migration_helper/notification_backfill_test.exs index fd253b530..eca060800 100644 --- a/test/pleroma/migration_helper/notification_backfill_test.exs +++ b/test/pleroma/migration_helper/notification_backfill_test.exs @@ -19,7 +19,6 @@ test "it fills in missing notification types" do other_user = insert(:user) {:ok, post} = CommonAPI.post(user, %{status: "yeah, @#{other_user.nickname}"}) - {:ok, chat} = CommonAPI.post_chat_message(user, other_user, "yo") {:ok, react} = CommonAPI.react_with_emoji(post.id, other_user, "☕") {:ok, like} = CommonAPI.favorite(other_user, post.id) {:ok, react_2} = CommonAPI.react_with_emoji(post.id, other_user, "☕") @@ -33,7 +32,7 @@ test "it fills in missing notification types" do |> Activity.change(%{data: data}) |> Repo.update() - assert {5, nil} = Repo.update_all(Notification, set: [type: nil]) + assert {4, nil} = Repo.update_all(Notification, set: [type: nil]) NotificationBackfill.fill_in_notification_types() @@ -48,9 +47,6 @@ test "it fills in missing notification types" do assert %{type: "pleroma:emoji_reaction"} = Repo.get_by(Notification, user_id: user.id, activity_id: react_2.id) - - assert %{type: "pleroma:chat_mention"} = - Repo.get_by(Notification, user_id: other_user.id, activity_id: chat.id) end end end diff --git a/test/pleroma/repo/migrations/rename_instance_chat_test.exs b/test/pleroma/repo/migrations/rename_instance_chat_test.exs deleted file mode 100644 index acd45600c..000000000 --- a/test/pleroma/repo/migrations/rename_instance_chat_test.exs +++ /dev/null @@ -1,52 +0,0 @@ -defmodule Pleroma.Repo.Migrations.RenameInstanceChatTest do - use Pleroma.DataCase - import Pleroma.Factory - import Pleroma.Tests.Helpers - alias Pleroma.ConfigDB - - setup do: clear_config([:instance]) - setup do: clear_config([:chat]) - setup_all do: require_migration("20200806175913_rename_instance_chat") - - describe "up/0" do - test "migrates chat settings to shout", %{migration: migration} do - insert(:config, group: :pleroma, key: :instance, value: [chat_limit: 6000]) - insert(:config, group: :pleroma, key: :chat, value: [enabled: true]) - - assert migration.up() == :ok - - assert ConfigDB.get_by_params(%{group: :pleroma, key: :chat}) == nil - assert ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) == nil - - assert ConfigDB.get_by_params(%{group: :pleroma, key: :shout}).value == [ - limit: 6000, - enabled: true - ] - end - - test "does nothing when chat settings are not set", %{migration: migration} do - assert migration.up() == :noop - assert ConfigDB.get_by_params(%{group: :pleroma, key: :chat}) == nil - assert ConfigDB.get_by_params(%{group: :pleroma, key: :shout}) == nil - end - end - - describe "down/0" do - test "migrates shout settings back to instance and chat", %{migration: migration} do - insert(:config, group: :pleroma, key: :shout, value: [limit: 42, enabled: true]) - - assert migration.down() == :ok - - assert ConfigDB.get_by_params(%{group: :pleroma, key: :chat}).value == [enabled: true] - assert ConfigDB.get_by_params(%{group: :pleroma, key: :instance}).value == [chat_limit: 42] - assert ConfigDB.get_by_params(%{group: :pleroma, key: :shout}) == nil - end - - test "does nothing when shout settings are not set", %{migration: migration} do - assert migration.down() == :noop - assert ConfigDB.get_by_params(%{group: :pleroma, key: :chat}) == nil - assert ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) == nil - assert ConfigDB.get_by_params(%{group: :pleroma, key: :shout}) == nil - end - end -end diff --git a/test/pleroma/user/welcome_chat_message_test.exs b/test/pleroma/user/welcome_chat_message_test.exs deleted file mode 100644 index 42a45fa19..000000000 --- a/test/pleroma/user/welcome_chat_message_test.exs +++ /dev/null @@ -1,36 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.User.WelcomeChatMessageTest do - use Pleroma.DataCase - - alias Pleroma.User.WelcomeChatMessage - - import Pleroma.Factory - - setup do: clear_config([:welcome]) - - describe "post_message/1" do - test "send a chat welcome message" do - welcome_user = insert(:user, name: "mewmew") - user = insert(:user) - - clear_config([:welcome, :chat_message, :enabled], true) - clear_config([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) - - clear_config( - [:welcome, :chat_message, :message], - "Hello, welcome to Blob/Cat!" - ) - - {:ok, %Pleroma.Activity{} = activity} = WelcomeChatMessage.post_message(user) - - assert user.ap_id in activity.recipients - assert Pleroma.Object.normalize(activity, fetch: false).data["type"] == "ChatMessage" - - assert Pleroma.Object.normalize(activity, fetch: false).data["content"] == - "Hello, welcome to Blob/Cat!" - end - end -end diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index 8486987fd..dee76f676 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -443,22 +443,6 @@ test "it sends a welcome message if it is set" do assert activity.actor == welcome_user.ap_id end - test "it sends a welcome chat message if it is set" do - welcome_user = insert(:user) - clear_config([:welcome, :chat_message, :enabled], true) - clear_config([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) - clear_config([:welcome, :chat_message, :message], "Hello, this is a chat message") - - cng = User.register_changeset(%User{}, @full_user_data) - {:ok, registered_user} = User.register(cng) - ObanHelpers.perform_all() - - activity = Repo.one(Pleroma.Activity) - assert registered_user.ap_id in activity.recipients - assert Object.normalize(activity, fetch: false).data["content"] =~ "chat message" - assert activity.actor == welcome_user.ap_id - end - setup do: clear_config(:mrf_simple, media_removal: [], @@ -480,24 +464,6 @@ test "it sends a welcome chat message if it is set" do ] ) - test "it sends a welcome chat message when Simple policy applied to local instance" do - clear_config([:mrf_simple, :media_nsfw], [{"localhost", ""}]) - - welcome_user = insert(:user) - clear_config([:welcome, :chat_message, :enabled], true) - clear_config([:welcome, :chat_message, :sender_nickname], welcome_user.nickname) - clear_config([:welcome, :chat_message, :message], "Hello, this is a chat message") - - cng = User.register_changeset(%User{}, @full_user_data) - {:ok, registered_user} = User.register(cng) - ObanHelpers.perform_all() - - activity = Repo.one(Pleroma.Activity) - assert registered_user.ap_id in activity.recipients - assert Object.normalize(activity, fetch: false).data["content"] =~ "chat message" - assert activity.actor == welcome_user.ap_id - end - test "it sends a welcome email message if it is set" do welcome_user = insert(:user) clear_config([:welcome, :email, :enabled], true) @@ -665,15 +631,6 @@ test "it sets the password_hash and ap_id" do assert changeset.changes.follower_address == "#{changeset.changes.ap_id}/followers" end - test "it sets the 'accepts_chat_messages' set to true" do - changeset = User.register_changeset(%User{}, @full_user_data) - assert changeset.valid? - - {:ok, user} = Repo.insert(changeset) - - assert user.accepts_chat_messages - end - test "it creates a confirmed user" do changeset = User.register_changeset(%User{}, @full_user_data) assert changeset.valid? diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 964437906..a5f971bbb 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -186,13 +186,6 @@ test "it returns a user that is invisible" do assert User.invisible?(user) end - test "it returns a user that accepts chat messages" do - user_id = "http://mastodon.example.org/users/admin" - {:ok, user} = ActivityPub.make_user_from_ap_id(user_id) - - assert user.accepts_chat_messages - end - test "works for guppe actors" do user_id = "https://gup.pe/u/bernie2020" diff --git a/test/pleroma/web/activity_pub/mrf/hellthread_policy_test.exs b/test/pleroma/web/activity_pub/mrf/hellthread_policy_test.exs index 439672479..a88e1fa2e 100644 --- a/test/pleroma/web/activity_pub/mrf/hellthread_policy_test.exs +++ b/test/pleroma/web/activity_pub/mrf/hellthread_policy_test.exs @@ -8,8 +8,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do import Pleroma.Web.ActivityPub.MRF.HellthreadPolicy - alias Pleroma.Web.CommonAPI - setup do user = insert(:user) @@ -33,17 +31,6 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do setup do: clear_config(:mrf_hellthread) - test "doesn't die on chat messages" do - clear_config([:mrf_hellthread], %{delist_threshold: 2, reject_threshold: 0}) - - user = insert(:user) - other_user = insert(:user) - - {:ok, activity} = CommonAPI.post_chat_message(user, other_user, "moin") - - assert {:ok, _} = filter(activity.data) - end - describe "reject" do test "rejects the message if the recipient count is above reject_threshold", %{ message: message diff --git a/test/pleroma/web/activity_pub/object_validators/chat_validation_test.exs b/test/pleroma/web/activity_pub/object_validators/chat_validation_test.exs deleted file mode 100644 index def2a10b4..000000000 --- a/test/pleroma/web/activity_pub/object_validators/chat_validation_test.exs +++ /dev/null @@ -1,212 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ActivityPub.ObjectValidators.ChatValidationTest do - use Pleroma.DataCase - alias Pleroma.Object - alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.ActivityPub.Builder - alias Pleroma.Web.ActivityPub.ObjectValidator - alias Pleroma.Web.CommonAPI - - import Pleroma.Factory - - describe "chat message create activities" do - test "it is invalid if the object already exists" do - user = insert(:user) - recipient = insert(:user) - {:ok, activity} = CommonAPI.post_chat_message(user, recipient, "hey") - object = Object.normalize(activity, fetch: false) - - {:ok, create_data, _} = Builder.create(user, object.data, [recipient.ap_id]) - - {:error, cng} = ObjectValidator.validate(create_data, []) - - assert {:object, {"The object to create already exists", []}} in cng.errors - end - - test "it is invalid if the object data has a different `to` or `actor` field" do - user = insert(:user) - recipient = insert(:user) - {:ok, object_data, _} = Builder.chat_message(recipient, user.ap_id, "Hey") - - {:ok, create_data, _} = Builder.create(user, object_data, [recipient.ap_id]) - - {:error, cng} = ObjectValidator.validate(create_data, []) - - assert {:to, {"Recipients don't match with object recipients", []}} in cng.errors - assert {:actor, {"Actor doesn't match with object actor", []}} in cng.errors - end - end - - describe "chat messages" do - setup do - clear_config([:instance, :remote_limit]) - user = insert(:user) - recipient = insert(:user, local: false) - - {:ok, valid_chat_message, _} = Builder.chat_message(user, recipient.ap_id, "hey :firefox:") - - %{user: user, recipient: recipient, valid_chat_message: valid_chat_message} - end - - test "let's through some basic html", %{user: user, recipient: recipient} do - {:ok, valid_chat_message, _} = - Builder.chat_message( - user, - recipient.ap_id, - "hey example " - ) - - assert {:ok, object, _meta} = ObjectValidator.validate(valid_chat_message, []) - - assert object["content"] == - "hey example alert('uguu')" - end - - test "validates for a basic object we build", %{valid_chat_message: valid_chat_message} do - assert {:ok, object, _meta} = ObjectValidator.validate(valid_chat_message, []) - - assert valid_chat_message == object - assert match?(%{"firefox" => _}, object["emoji"]) - end - - test "validates for a basic object with an attachment", %{ - valid_chat_message: valid_chat_message, - user: user - } do - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) - - valid_chat_message = - valid_chat_message - |> Map.put("attachment", attachment.data) - - assert {:ok, object, _meta} = ObjectValidator.validate(valid_chat_message, []) - - assert object["attachment"] - end - - test "validates for a basic object with an attachment in an array", %{ - valid_chat_message: valid_chat_message, - user: user - } do - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) - - valid_chat_message = - valid_chat_message - |> Map.put("attachment", [attachment.data]) - - assert {:ok, object, _meta} = ObjectValidator.validate(valid_chat_message, []) - - assert object["attachment"] - end - - test "validates for a basic object with an attachment but without content", %{ - valid_chat_message: valid_chat_message, - user: user - } do - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, attachment} = ActivityPub.upload(file, actor: user.ap_id) - - valid_chat_message = - valid_chat_message - |> Map.put("attachment", attachment.data) - |> Map.delete("content") - - assert {:ok, object, _meta} = ObjectValidator.validate(valid_chat_message, []) - - assert object["attachment"] - end - - test "does not validate if the message has no content", %{ - valid_chat_message: valid_chat_message - } do - contentless = - valid_chat_message - |> Map.delete("content") - - refute match?({:ok, _object, _meta}, ObjectValidator.validate(contentless, [])) - end - - test "does not validate if the message is longer than the remote_limit", %{ - valid_chat_message: valid_chat_message - } do - clear_config([:instance, :remote_limit], 2) - refute match?({:ok, _object, _meta}, ObjectValidator.validate(valid_chat_message, [])) - end - - test "does not validate if the recipient is blocking the actor", %{ - valid_chat_message: valid_chat_message, - user: user, - recipient: recipient - } do - Pleroma.User.block(recipient, user) - refute match?({:ok, _object, _meta}, ObjectValidator.validate(valid_chat_message, [])) - end - - test "does not validate if the recipient is not accepting chat messages", %{ - valid_chat_message: valid_chat_message, - recipient: recipient - } do - recipient - |> Ecto.Changeset.change(%{accepts_chat_messages: false}) - |> Pleroma.Repo.update!() - - refute match?({:ok, _object, _meta}, ObjectValidator.validate(valid_chat_message, [])) - end - - test "does not validate if the actor or the recipient is not in our system", %{ - valid_chat_message: valid_chat_message - } do - chat_message = - valid_chat_message - |> Map.put("actor", "https://raymoo.com/raymoo") - - {:error, _} = ObjectValidator.validate(chat_message, []) - - chat_message = - valid_chat_message - |> Map.put("to", ["https://raymoo.com/raymoo"]) - - {:error, _} = ObjectValidator.validate(chat_message, []) - end - - test "does not validate for a message with multiple recipients", %{ - valid_chat_message: valid_chat_message, - user: user, - recipient: recipient - } do - chat_message = - valid_chat_message - |> Map.put("to", [user.ap_id, recipient.ap_id]) - - assert {:error, _} = ObjectValidator.validate(chat_message, []) - end - - test "does not validate if it doesn't concern local users" do - user = insert(:user, local: false) - recipient = insert(:user, local: false) - - {:ok, valid_chat_message, _} = Builder.chat_message(user, recipient.ap_id, "hey") - assert {:error, _} = ObjectValidator.validate(valid_chat_message, []) - end - end -end diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs index 82d43555f..e542c06f5 100644 --- a/test/pleroma/web/activity_pub/side_effects_test.exs +++ b/test/pleroma/web/activity_pub/side_effects_test.exs @@ -7,8 +7,6 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do use Pleroma.DataCase alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo @@ -17,6 +15,7 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Builder alias Pleroma.Web.ActivityPub.SideEffects + alias Pleroma.Web.ActivityPub.Utils alias Pleroma.Web.CommonAPI import Mock @@ -27,15 +26,22 @@ test "it streams out notifications and streams" do author = insert(:user, local: true) recipient = insert(:user, local: true) - {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey") + {:ok, note_data, _meta} = + Builder.note(%Pleroma.Web.CommonAPI.ActivityDraft{ + user: author, + to: [recipient.ap_id], + mentions: [recipient], + content_html: "hey", + extra: %{"id" => Utils.generate_object_id()} + }) {:ok, create_activity_data, _meta} = - Builder.create(author, chat_message_data["id"], [recipient.ap_id]) + Builder.create(author, note_data["id"], [recipient.ap_id]) {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) {:ok, _create_activity, meta} = - SideEffects.handle(create_activity, local: false, object_data: chat_message_data) + SideEffects.handle(create_activity, local: false, object_data: note_data) assert [notification] = meta[:notifications] @@ -58,7 +64,6 @@ test "it streams out notifications and streams" do SideEffects.handle_after_transaction(meta) assert called(Pleroma.Web.Streamer.stream(["user", "user:notification"], notification)) - assert called(Pleroma.Web.Streamer.stream(["user", "user:pleroma_chat"], :_)) assert called(Pleroma.Web.Push.send(notification)) end end @@ -336,147 +341,6 @@ test "creates a notification", %{like: like, poster: poster} do end end - describe "creation of ChatMessages" do - test "notifies the recipient" do - author = insert(:user, local: false) - recipient = insert(:user, local: true) - - {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey") - - {:ok, create_activity_data, _meta} = - Builder.create(author, chat_message_data["id"], [recipient.ap_id]) - - {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) - - {:ok, _create_activity, _meta} = - SideEffects.handle(create_activity, local: false, object_data: chat_message_data) - - assert Repo.get_by(Notification, user_id: recipient.id, activity_id: create_activity.id) - end - - test "it streams the created ChatMessage" do - author = insert(:user, local: true) - recipient = insert(:user, local: true) - - {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey") - - {:ok, create_activity_data, _meta} = - Builder.create(author, chat_message_data["id"], [recipient.ap_id]) - - {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) - - {:ok, _create_activity, meta} = - SideEffects.handle(create_activity, local: false, object_data: chat_message_data) - - assert [_, _] = meta[:streamables] - end - - test "it creates a Chat and MessageReferences for the local users and bumps the unread count, except for the author" do - author = insert(:user, local: true) - recipient = insert(:user, local: true) - - {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey") - - {:ok, create_activity_data, _meta} = - Builder.create(author, chat_message_data["id"], [recipient.ap_id]) - - {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) - - with_mocks([ - { - Pleroma.Web.Streamer, - [], - [ - stream: fn _, _ -> nil end - ] - }, - { - Pleroma.Web.Push, - [], - [ - send: fn _ -> nil end - ] - } - ]) do - {:ok, _create_activity, meta} = - SideEffects.handle(create_activity, local: false, object_data: chat_message_data) - - # The notification gets created - assert [notification] = meta[:notifications] - assert notification.activity_id == create_activity.id - - # But it is not sent out - refute called(Pleroma.Web.Streamer.stream(["user", "user:notification"], notification)) - refute called(Pleroma.Web.Push.send(notification)) - - # Same for the user chat stream - assert [{topics, _}, _] = meta[:streamables] - assert topics == ["user", "user:pleroma_chat"] - refute called(Pleroma.Web.Streamer.stream(["user", "user:pleroma_chat"], :_)) - - chat = Chat.get(author.id, recipient.ap_id) - - [cm_ref] = MessageReference.for_chat_query(chat) |> Repo.all() - - assert cm_ref.object.data["content"] == "hey" - assert cm_ref.unread == false - - chat = Chat.get(recipient.id, author.ap_id) - - [cm_ref] = MessageReference.for_chat_query(chat) |> Repo.all() - - assert cm_ref.object.data["content"] == "hey" - assert cm_ref.unread == true - end - end - - test "it creates a Chat for the local users and bumps the unread count" do - author = insert(:user, local: false) - recipient = insert(:user, local: true) - - {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey") - - {:ok, create_activity_data, _meta} = - Builder.create(author, chat_message_data["id"], [recipient.ap_id]) - - {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) - - {:ok, _create_activity, _meta} = - SideEffects.handle(create_activity, local: false, object_data: chat_message_data) - - # An object is created - assert Object.get_by_ap_id(chat_message_data["id"]) - - # The remote user won't get a chat - chat = Chat.get(author.id, recipient.ap_id) - refute chat - - # The local user will get a chat - chat = Chat.get(recipient.id, author.ap_id) - assert chat - - author = insert(:user, local: true) - recipient = insert(:user, local: true) - - {:ok, chat_message_data, _meta} = Builder.chat_message(author, recipient.ap_id, "hey") - - {:ok, create_activity_data, _meta} = - Builder.create(author, chat_message_data["id"], [recipient.ap_id]) - - {:ok, create_activity, _meta} = ActivityPub.persist(create_activity_data, local: false) - - {:ok, _create_activity, _meta} = - SideEffects.handle(create_activity, local: false, object_data: chat_message_data) - - # Both users are local and get the chat - chat = Chat.get(author.id, recipient.ap_id) - assert chat - - chat = Chat.get(recipient.id, author.ap_id) - assert chat - end - end - describe "announce objects" do setup do poster = insert(:user) diff --git a/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs b/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs deleted file mode 100644 index 958675835..000000000 --- a/test/pleroma/web/activity_pub/transmogrifier/chat_message_test.exs +++ /dev/null @@ -1,171 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ActivityPub.Transmogrifier.ChatMessageTest do - use Pleroma.DataCase - - import Pleroma.Factory - - alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Object - alias Pleroma.Web.ActivityPub.Transmogrifier - - describe "handle_incoming" do - test "handles chonks with attachment" do - data = %{ - "@context" => "https://www.w3.org/ns/activitystreams", - "actor" => "https://honk.tedunangst.com/u/tedu", - "id" => "https://honk.tedunangst.com/u/tedu/honk/x6gt8X8PcyGkQcXxzg1T", - "object" => %{ - "attachment" => [ - %{ - "mediaType" => "image/jpeg", - "name" => "298p3RG7j27tfsZ9RQ.jpg", - "summary" => "298p3RG7j27tfsZ9RQ.jpg", - "type" => "Document", - "url" => "https://honk.tedunangst.com/d/298p3RG7j27tfsZ9RQ.jpg" - } - ], - "attributedTo" => "https://honk.tedunangst.com/u/tedu", - "content" => "", - "id" => "https://honk.tedunangst.com/u/tedu/chonk/26L4wl5yCbn4dr4y1b", - "published" => "2020-05-18T01:13:03Z", - "to" => [ - "https://dontbulling.me/users/lain" - ], - "type" => "ChatMessage" - }, - "published" => "2020-05-18T01:13:03Z", - "to" => [ - "https://dontbulling.me/users/lain" - ], - "type" => "Create" - } - - _user = insert(:user, ap_id: data["actor"]) - _user = insert(:user, ap_id: hd(data["to"])) - - assert {:ok, _activity} = Transmogrifier.handle_incoming(data) - end - - test "it rejects messages that don't contain content" do - data = - File.read!("test/fixtures/create-chat-message.json") - |> Jason.decode!() - - object = - data["object"] - |> Map.delete("content") - - data = - data - |> Map.put("object", object) - - _author = - insert(:user, ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now()) - - _recipient = - insert(:user, - ap_id: List.first(data["to"]), - local: true, - last_refreshed_at: DateTime.utc_now() - ) - - {:error, _} = Transmogrifier.handle_incoming(data) - end - - test "it rejects messages that don't concern local users" do - data = - File.read!("test/fixtures/create-chat-message.json") - |> Jason.decode!() - - _author = - insert(:user, ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now()) - - _recipient = - insert(:user, - ap_id: List.first(data["to"]), - local: false, - last_refreshed_at: DateTime.utc_now() - ) - - {:error, _} = Transmogrifier.handle_incoming(data) - end - - test "it rejects messages where the `to` field of activity and object don't match" do - data = - File.read!("test/fixtures/create-chat-message.json") - |> Jason.decode!() - - author = insert(:user, ap_id: data["actor"]) - _recipient = insert(:user, ap_id: List.first(data["to"])) - - data = - data - |> Map.put("to", author.ap_id) - - assert match?({:error, _}, Transmogrifier.handle_incoming(data)) - refute Object.get_by_ap_id(data["object"]["id"]) - end - - test "it fetches the actor if they aren't in our system" do - Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end) - - data = - File.read!("test/fixtures/create-chat-message.json") - |> Jason.decode!() - |> Map.put("actor", "http://mastodon.example.org/users/admin") - |> put_in(["object", "actor"], "http://mastodon.example.org/users/admin") - - _recipient = insert(:user, ap_id: List.first(data["to"]), local: true) - - {:ok, %Activity{} = _activity} = Transmogrifier.handle_incoming(data) - end - - test "it doesn't work for deactivated users" do - data = - File.read!("test/fixtures/create-chat-message.json") - |> Jason.decode!() - - _author = - insert(:user, - ap_id: data["actor"], - local: false, - last_refreshed_at: DateTime.utc_now(), - is_active: false - ) - - _recipient = insert(:user, ap_id: List.first(data["to"]), local: true) - - assert {:error, _} = Transmogrifier.handle_incoming(data) - end - - test "it inserts it and creates a chat" do - data = - File.read!("test/fixtures/create-chat-message.json") - |> Jason.decode!() - - author = - insert(:user, ap_id: data["actor"], local: false, last_refreshed_at: DateTime.utc_now()) - - recipient = insert(:user, ap_id: List.first(data["to"]), local: true) - - {:ok, %Activity{} = activity} = Transmogrifier.handle_incoming(data) - assert activity.local == false - - assert activity.actor == author.ap_id - assert activity.recipients == [recipient.ap_id, author.ap_id] - - %Object{} = object = Object.get_by_ap_id(activity.data["object"]) - - assert object - assert object.data["content"] == "You expected a cute girl? Too bad. alert('XSS')" - assert match?(%{"firefox" => _}, object.data["emoji"]) - - refute Chat.get(author.id, recipient.ap_id) - assert Chat.get(recipient.id, author.ap_id) - end - end -end diff --git a/test/pleroma/web/activity_pub/views/user_view_test.exs b/test/pleroma/web/activity_pub/views/user_view_test.exs index f2de4d332..e49cb99d3 100644 --- a/test/pleroma/web/activity_pub/views/user_view_test.exs +++ b/test/pleroma/web/activity_pub/views/user_view_test.exs @@ -164,23 +164,4 @@ test "sets correct totalItems when follows are hidden but the follow counter is assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user}) end end - - describe "acceptsChatMessages" do - test "it returns this value if it is set" do - true_user = insert(:user, accepts_chat_messages: true) - false_user = insert(:user, accepts_chat_messages: false) - nil_user = insert(:user, accepts_chat_messages: nil) - - assert %{"capabilities" => %{"acceptsChatMessages" => true}} = - UserView.render("user.json", user: true_user) - - assert %{"capabilities" => %{"acceptsChatMessages" => false}} = - UserView.render("user.json", user: false_user) - - refute Map.has_key?( - UserView.render("user.json", user: nil_user)["capabilities"], - "acceptsChatMessages" - ) - end - end end diff --git a/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs b/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs index f8cd103c6..d74e0281c 100644 --- a/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs +++ b/test/pleroma/web/admin_api/controllers/admin_api_controller_test.exs @@ -419,56 +419,6 @@ test "excludes reblogs by default", %{conn: conn, user: user} do end end - describe "GET /api/pleroma/admin/users/:nickname/chats" do - setup do - user = insert(:user) - recipients = insert_list(3, :user) - - Enum.each(recipients, fn recipient -> - CommonAPI.post_chat_message(user, recipient, "yo") - end) - - %{user: user} - end - - test "renders user's chats", %{conn: conn, user: user} do - conn = get(conn, "/api/pleroma/admin/users/#{user.nickname}/chats") - - assert json_response(conn, 200) |> length() == 3 - end - end - - describe "GET /api/pleroma/admin/users/:nickname/chats unauthorized" do - setup do - user = insert(:user) - recipient = insert(:user) - CommonAPI.post_chat_message(user, recipient, "yo") - %{conn: conn} = oauth_access(["read:chats"]) - %{conn: conn, user: user} - end - - test "returns 403", %{conn: conn, user: user} do - conn - |> get("/api/pleroma/admin/users/#{user.nickname}/chats") - |> json_response(403) - end - end - - describe "GET /api/pleroma/admin/users/:nickname/chats unauthenticated" do - setup do - user = insert(:user) - recipient = insert(:user) - CommonAPI.post_chat_message(user, recipient, "yo") - %{conn: build_conn(), user: user} - end - - test "returns 403", %{conn: conn, user: user} do - conn - |> get("/api/pleroma/admin/users/#{user.nickname}/chats") - |> json_response(403) - end - end - describe "GET /api/pleroma/admin/moderation_log" do setup do moderator = insert(:user, is_moderator: true) diff --git a/test/pleroma/web/admin_api/controllers/chat_controller_test.exs b/test/pleroma/web/admin_api/controllers/chat_controller_test.exs deleted file mode 100644 index 0e8f7beef..000000000 --- a/test/pleroma/web/admin_api/controllers/chat_controller_test.exs +++ /dev/null @@ -1,218 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.AdminAPI.ChatControllerTest do - use Pleroma.Web.ConnCase, async: true - - import Pleroma.Factory - - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.ModerationLog - alias Pleroma.Object - alias Pleroma.Repo - alias Pleroma.Web.CommonAPI - - defp admin_setup do - admin = insert(:user, is_admin: true) - token = insert(:oauth_admin_token, user: admin) - - conn = - build_conn() - |> assign(:user, admin) - |> assign(:token, token) - - {:ok, %{admin: admin, token: token, conn: conn}} - end - - describe "DELETE /api/pleroma/admin/chats/:id/messages/:message_id" do - setup do: admin_setup() - - test "it deletes a message from the chat", %{conn: conn, admin: admin} do - user = insert(:user) - recipient = insert(:user) - - {:ok, message} = - CommonAPI.post_chat_message(user, recipient, "Hello darkness my old friend") - - object = Object.normalize(message, fetch: false) - - chat = Chat.get(user.id, recipient.ap_id) - recipient_chat = Chat.get(recipient.id, user.ap_id) - - cm_ref = MessageReference.for_chat_and_object(chat, object) - recipient_cm_ref = MessageReference.for_chat_and_object(recipient_chat, object) - - result = - conn - |> put_req_header("content-type", "application/json") - |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") - |> json_response_and_validate_schema(200) - - log_entry = Repo.one(ModerationLog) - - assert ModerationLog.get_log_entry_message(log_entry) == - "@#{admin.nickname} deleted chat message ##{cm_ref.id}" - - assert result["id"] == cm_ref.id - refute MessageReference.get_by_id(cm_ref.id) - refute MessageReference.get_by_id(recipient_cm_ref.id) - assert %{data: %{"type" => "Tombstone"}} = Object.get_by_id(object.id) - end - end - - describe "GET /api/pleroma/admin/chats/:id/messages" do - setup do: admin_setup() - - test "it paginates", %{conn: conn} do - user = insert(:user) - recipient = insert(:user) - - Enum.each(1..30, fn _ -> - {:ok, _} = CommonAPI.post_chat_message(user, recipient, "hey") - end) - - chat = Chat.get(user.id, recipient.ap_id) - - result = - conn - |> get("/api/pleroma/admin/chats/#{chat.id}/messages") - |> json_response_and_validate_schema(200) - - assert length(result) == 20 - - result = - conn - |> get("/api/pleroma/admin/chats/#{chat.id}/messages?max_id=#{List.last(result)["id"]}") - |> json_response_and_validate_schema(200) - - assert length(result) == 10 - end - - test "it returns the messages for a given chat", %{conn: conn} do - user = insert(:user) - other_user = insert(:user) - third_user = insert(:user) - - {:ok, _} = CommonAPI.post_chat_message(user, other_user, "hey") - {:ok, _} = CommonAPI.post_chat_message(user, third_user, "hey") - {:ok, _} = CommonAPI.post_chat_message(user, other_user, "how are you?") - {:ok, _} = CommonAPI.post_chat_message(other_user, user, "fine, how about you?") - - chat = Chat.get(user.id, other_user.ap_id) - - result = - conn - |> get("/api/pleroma/admin/chats/#{chat.id}/messages") - |> json_response_and_validate_schema(200) - - result - |> Enum.each(fn message -> - assert message["chat_id"] == chat.id |> to_string() - end) - - assert length(result) == 3 - end - end - - describe "GET /api/pleroma/admin/chats/:id" do - setup do: admin_setup() - - test "it returns a chat", %{conn: conn} do - user = insert(:user) - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - - result = - conn - |> get("/api/pleroma/admin/chats/#{chat.id}") - |> json_response_and_validate_schema(200) - - assert result["id"] == to_string(chat.id) - assert %{} = result["sender"] - assert %{} = result["receiver"] - refute result["account"] - end - end - - describe "unauthorized chat moderation" do - setup do - user = insert(:user) - recipient = insert(:user) - - {:ok, message} = CommonAPI.post_chat_message(user, recipient, "Yo") - object = Object.normalize(message, fetch: false) - chat = Chat.get(user.id, recipient.ap_id) - cm_ref = MessageReference.for_chat_and_object(chat, object) - - %{conn: conn} = oauth_access(["read:chats", "write:chats"]) - %{conn: conn, chat: chat, cm_ref: cm_ref} - end - - test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{ - conn: conn, - chat: chat, - cm_ref: cm_ref - } do - conn - |> put_req_header("content-type", "application/json") - |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") - |> json_response(403) - - assert MessageReference.get_by_id(cm_ref.id) == cm_ref - end - - test "GET /api/pleroma/admin/chats/:id/messages", %{conn: conn, chat: chat} do - conn - |> get("/api/pleroma/admin/chats/#{chat.id}/messages") - |> json_response(403) - end - - test "GET /api/pleroma/admin/chats/:id", %{conn: conn, chat: chat} do - conn - |> get("/api/pleroma/admin/chats/#{chat.id}") - |> json_response(403) - end - end - - describe "unauthenticated chat moderation" do - setup do - user = insert(:user) - recipient = insert(:user) - - {:ok, message} = CommonAPI.post_chat_message(user, recipient, "Yo") - object = Object.normalize(message, fetch: false) - chat = Chat.get(user.id, recipient.ap_id) - cm_ref = MessageReference.for_chat_and_object(chat, object) - - %{conn: build_conn(), chat: chat, cm_ref: cm_ref} - end - - test "DELETE /api/pleroma/admin/chats/:id/messages/:message_id", %{ - conn: conn, - chat: chat, - cm_ref: cm_ref - } do - conn - |> put_req_header("content-type", "application/json") - |> delete("/api/pleroma/admin/chats/#{chat.id}/messages/#{cm_ref.id}") - |> json_response(403) - - assert MessageReference.get_by_id(cm_ref.id) == cm_ref - end - - test "GET /api/pleroma/admin/chats/:id/messages", %{conn: conn, chat: chat} do - conn - |> get("/api/pleroma/admin/chats/#{chat.id}/messages") - |> json_response(403) - end - - test "GET /api/pleroma/admin/chats/:id", %{conn: conn, chat: chat} do - conn - |> get("/api/pleroma/admin/chats/#{chat.id}") - |> json_response(403) - end - end -end diff --git a/test/pleroma/web/admin_api/controllers/config_controller_test.exs b/test/pleroma/web/admin_api/controllers/config_controller_test.exs deleted file mode 100644 index 9c9e8513c..000000000 --- a/test/pleroma/web/admin_api/controllers/config_controller_test.exs +++ /dev/null @@ -1,1525 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.AdminAPI.ConfigControllerTest do - use Pleroma.Web.ConnCase - - import ExUnit.CaptureLog - import Pleroma.Factory - - alias Pleroma.ConfigDB - - setup do - admin = insert(:user, is_admin: true) - token = insert(:oauth_admin_token, user: admin) - - conn = - build_conn() - |> assign(:user, admin) - |> assign(:token, token) - - {:ok, %{admin: admin, token: token, conn: conn}} - end - - describe "GET /api/pleroma/admin/config" do - setup do: clear_config(:configurable_from_database, true) - - test "when configuration from database is off", %{conn: conn} do - clear_config(:configurable_from_database, false) - conn = get(conn, "/api/pleroma/admin/config") - - assert json_response_and_validate_schema(conn, 400) == - %{ - "error" => "You must enable configurable_from_database in your config file." - } - end - - test "with settings only in db", %{conn: conn} do - config1 = insert(:config) - config2 = insert(:config) - - conn = get(conn, "/api/pleroma/admin/config?only_db=true") - - %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => key1, - "value" => _ - }, - %{ - "group" => ":pleroma", - "key" => key2, - "value" => _ - } - ] - } = json_response_and_validate_schema(conn, 200) - - assert key1 == inspect(config1.key) - assert key2 == inspect(config2.key) - end - - test "db is added to settings that are in db", %{conn: conn} do - _config = insert(:config, key: ":instance", value: [name: "Some name"]) - - %{"configs" => configs} = - conn - |> get("/api/pleroma/admin/config") - |> json_response_and_validate_schema(200) - - [instance_config] = - Enum.filter(configs, fn %{"group" => group, "key" => key} -> - group == ":pleroma" and key == ":instance" - end) - - assert instance_config["db"] == [":name"] - end - - test "merged default setting with db settings", %{conn: conn} do - config1 = insert(:config) - config2 = insert(:config) - - config3 = - insert(:config, - value: [k1: :v1, k2: :v2] - ) - - %{"configs" => configs} = - conn - |> get("/api/pleroma/admin/config") - |> json_response_and_validate_schema(200) - - assert length(configs) > 3 - - saved_configs = [config1, config2, config3] - keys = Enum.map(saved_configs, &inspect(&1.key)) - - received_configs = - Enum.filter(configs, fn %{"group" => group, "key" => key} -> - group == ":pleroma" and key in keys - end) - - assert length(received_configs) == 3 - - db_keys = - config3.value - |> Keyword.keys() - |> ConfigDB.to_json_types() - - keys = Enum.map(saved_configs -- [config3], &inspect(&1.key)) - - values = Enum.map(saved_configs, &ConfigDB.to_json_types(&1.value)) - - mapset_keys = MapSet.new(keys ++ db_keys) - - Enum.each(received_configs, fn %{"value" => value, "db" => db} -> - db = MapSet.new(db) - assert MapSet.subset?(db, mapset_keys) - - assert value in values - end) - end - - test "subkeys with full update right merge", %{conn: conn} do - insert(:config, - key: ":emoji", - value: [groups: [a: 1, b: 2], key: [a: 1]] - ) - - insert(:config, - key: ":assets", - value: [mascots: [a: 1, b: 2], key: [a: 1]] - ) - - %{"configs" => configs} = - conn - |> get("/api/pleroma/admin/config") - |> json_response_and_validate_schema(200) - - vals = - Enum.filter(configs, fn %{"group" => group, "key" => key} -> - group == ":pleroma" and key in [":emoji", ":assets"] - end) - - emoji = Enum.find(vals, fn %{"key" => key} -> key == ":emoji" end) - assets = Enum.find(vals, fn %{"key" => key} -> key == ":assets" end) - - emoji_val = ConfigDB.to_elixir_types(emoji["value"]) - assets_val = ConfigDB.to_elixir_types(assets["value"]) - - assert emoji_val[:groups] == [a: 1, b: 2] - assert assets_val[:mascots] == [a: 1, b: 2] - end - - test "with valid `admin_token` query parameter, skips OAuth scopes check" do - clear_config([:admin_token], "password123") - - build_conn() - |> get("/api/pleroma/admin/config?admin_token=password123") - |> json_response_and_validate_schema(200) - end - end - - test "POST /api/pleroma/admin/config with configdb disabled", %{conn: conn} do - clear_config(:configurable_from_database, false) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{"configs" => []}) - - assert json_response_and_validate_schema(conn, 400) == - %{"error" => "You must enable configurable_from_database in your config file."} - end - - describe "POST /api/pleroma/admin/config" do - setup do - http = Application.get_env(:pleroma, :http) - - on_exit(fn -> - Application.delete_env(:pleroma, :key1) - Application.delete_env(:pleroma, :key2) - Application.delete_env(:pleroma, :key3) - Application.delete_env(:pleroma, :key4) - Application.delete_env(:pleroma, :keyaa1) - Application.delete_env(:pleroma, :keyaa2) - Application.delete_env(:pleroma, Pleroma.Web.Endpoint.NotReal) - Application.delete_env(:pleroma, Pleroma.Captcha.NotReal) - Application.put_env(:pleroma, :http, http) - Application.put_env(:tesla, :adapter, Tesla.Mock) - Restarter.Pleroma.refresh() - end) - end - - setup do: clear_config(:configurable_from_database, true) - - @tag capture_log: true - test "create new config setting in db", %{conn: conn} do - ueberauth = Application.get_env(:ueberauth, Ueberauth) - on_exit(fn -> Application.put_env(:ueberauth, Ueberauth, ueberauth) end) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":pleroma", key: ":key1", value: "value1"}, - %{ - group: ":ueberauth", - key: "Ueberauth", - value: [%{"tuple" => [":consumer_secret", "aaaa"]}] - }, - %{ - group: ":pleroma", - key: ":key2", - value: %{ - ":nested_1" => "nested_value1", - ":nested_2" => [ - %{":nested_22" => "nested_value222"}, - %{":nested_33" => %{":nested_44" => "nested_444"}} - ] - } - }, - %{ - group: ":pleroma", - key: ":key3", - value: [ - %{"nested_3" => ":nested_3", "nested_33" => "nested_33"}, - %{"nested_4" => true} - ] - }, - %{ - group: ":pleroma", - key: ":key4", - value: %{":nested_5" => ":upload", "endpoint" => "https://example.com"} - }, - %{ - group: ":idna", - key: ":key5", - value: %{"tuple" => ["string", "Pleroma.Captcha.NotReal", []]} - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => "value1", - "db" => [":key1"] - }, - %{ - "group" => ":ueberauth", - "key" => "Ueberauth", - "value" => [%{"tuple" => [":consumer_secret", "aaaa"]}], - "db" => [":consumer_secret"] - }, - %{ - "group" => ":pleroma", - "key" => ":key2", - "value" => %{ - ":nested_1" => "nested_value1", - ":nested_2" => [ - %{":nested_22" => "nested_value222"}, - %{":nested_33" => %{":nested_44" => "nested_444"}} - ] - }, - "db" => [":key2"] - }, - %{ - "group" => ":pleroma", - "key" => ":key3", - "value" => [ - %{"nested_3" => ":nested_3", "nested_33" => "nested_33"}, - %{"nested_4" => true} - ], - "db" => [":key3"] - }, - %{ - "group" => ":pleroma", - "key" => ":key4", - "value" => %{"endpoint" => "https://example.com", ":nested_5" => ":upload"}, - "db" => [":key4"] - }, - %{ - "group" => ":idna", - "key" => ":key5", - "value" => %{"tuple" => ["string", "Pleroma.Captcha.NotReal", []]}, - "db" => [":key5"] - } - ], - "need_reboot" => false - } - - assert Application.get_env(:pleroma, :key1) == "value1" - - assert Application.get_env(:pleroma, :key2) == %{ - nested_1: "nested_value1", - nested_2: [ - %{nested_22: "nested_value222"}, - %{nested_33: %{nested_44: "nested_444"}} - ] - } - - assert Application.get_env(:pleroma, :key3) == [ - %{"nested_3" => :nested_3, "nested_33" => "nested_33"}, - %{"nested_4" => true} - ] - - assert Application.get_env(:pleroma, :key4) == %{ - "endpoint" => "https://example.com", - nested_5: :upload - } - - assert Application.get_env(:idna, :key5) == {"string", Pleroma.Captcha.NotReal, []} - end - - test "save configs setting without explicit key", %{conn: conn} do - level = Application.get_env(:quack, :level) - meta = Application.get_env(:quack, :meta) - webhook_url = Application.get_env(:quack, :webhook_url) - - on_exit(fn -> - Application.put_env(:quack, :level, level) - Application.put_env(:quack, :meta, meta) - Application.put_env(:quack, :webhook_url, webhook_url) - end) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":quack", - key: ":level", - value: ":info" - }, - %{ - group: ":quack", - key: ":meta", - value: [":none"] - }, - %{ - group: ":quack", - key: ":webhook_url", - value: "https://hooks.slack.com/services/KEY" - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":quack", - "key" => ":level", - "value" => ":info", - "db" => [":level"] - }, - %{ - "group" => ":quack", - "key" => ":meta", - "value" => [":none"], - "db" => [":meta"] - }, - %{ - "group" => ":quack", - "key" => ":webhook_url", - "value" => "https://hooks.slack.com/services/KEY", - "db" => [":webhook_url"] - } - ], - "need_reboot" => false - } - - assert Application.get_env(:quack, :level) == :info - assert Application.get_env(:quack, :meta) == [:none] - assert Application.get_env(:quack, :webhook_url) == "https://hooks.slack.com/services/KEY" - end - - test "saving config with partial update", %{conn: conn} do - insert(:config, key: ":key1", value: :erlang.term_to_binary(key1: 1, key2: 2)) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":pleroma", key: ":key1", value: [%{"tuple" => [":key3", 3]}]} - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{"tuple" => [":key1", 1]}, - %{"tuple" => [":key2", 2]}, - %{"tuple" => [":key3", 3]} - ], - "db" => [":key1", ":key2", ":key3"] - } - ], - "need_reboot" => false - } - end - - test "saving config which need pleroma reboot", %{conn: conn} do - clear_config([:shout, :enabled], true) - - assert conn - |> put_req_header("content-type", "application/json") - |> post( - "/api/pleroma/admin/config", - %{ - configs: [ - %{group: ":pleroma", key: ":shout", value: [%{"tuple" => [":enabled", true]}]} - ] - } - ) - |> json_response_and_validate_schema(200) == %{ - "configs" => [ - %{ - "db" => [":enabled"], - "group" => ":pleroma", - "key" => ":shout", - "value" => [%{"tuple" => [":enabled", true]}] - } - ], - "need_reboot" => true - } - - configs = - conn - |> get("/api/pleroma/admin/config") - |> json_response_and_validate_schema(200) - - assert configs["need_reboot"] - - capture_log(fn -> - assert conn |> get("/api/pleroma/admin/restart") |> json_response(200) == - %{} - end) =~ "pleroma restarted" - - configs = - conn - |> get("/api/pleroma/admin/config") - |> json_response_and_validate_schema(200) - - assert configs["need_reboot"] == false - end - - test "update setting which need reboot, don't change reboot flag until reboot", %{conn: conn} do - clear_config([:shout, :enabled], true) - - assert conn - |> put_req_header("content-type", "application/json") - |> post( - "/api/pleroma/admin/config", - %{ - configs: [ - %{group: ":pleroma", key: ":shout", value: [%{"tuple" => [":enabled", true]}]} - ] - } - ) - |> json_response_and_validate_schema(200) == %{ - "configs" => [ - %{ - "db" => [":enabled"], - "group" => ":pleroma", - "key" => ":shout", - "value" => [%{"tuple" => [":enabled", true]}] - } - ], - "need_reboot" => true - } - - assert conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":pleroma", key: ":key1", value: [%{"tuple" => [":key3", 3]}]} - ] - }) - |> json_response_and_validate_schema(200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{"tuple" => [":key3", 3]} - ], - "db" => [":key3"] - } - ], - "need_reboot" => true - } - - capture_log(fn -> - assert conn |> get("/api/pleroma/admin/restart") |> json_response(200) == - %{} - end) =~ "pleroma restarted" - - configs = - conn - |> get("/api/pleroma/admin/config") - |> json_response_and_validate_schema(200) - - assert configs["need_reboot"] == false - end - - test "saving config with nested merge", %{conn: conn} do - insert(:config, key: :key1, value: [key1: 1, key2: [k1: 1, k2: 2]]) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: ":key1", - value: [ - %{"tuple" => [":key3", 3]}, - %{ - "tuple" => [ - ":key2", - [ - %{"tuple" => [":k2", 1]}, - %{"tuple" => [":k3", 3]} - ] - ] - } - ] - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{"tuple" => [":key1", 1]}, - %{"tuple" => [":key3", 3]}, - %{ - "tuple" => [ - ":key2", - [ - %{"tuple" => [":k1", 1]}, - %{"tuple" => [":k2", 1]}, - %{"tuple" => [":k3", 3]} - ] - ] - } - ], - "db" => [":key1", ":key3", ":key2"] - } - ], - "need_reboot" => false - } - end - - test "saving special atoms", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{ - "tuple" => [ - ":ssl_options", - [%{"tuple" => [":versions", [":tlsv1", ":tlsv1.1", ":tlsv1.2"]]}] - ] - } - ] - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{ - "tuple" => [ - ":ssl_options", - [%{"tuple" => [":versions", [":tlsv1", ":tlsv1.1", ":tlsv1.2"]]}] - ] - } - ], - "db" => [":ssl_options"] - } - ], - "need_reboot" => false - } - - assert Application.get_env(:pleroma, :key1) == [ - ssl_options: [versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"]] - ] - end - - test "saving full setting if value is in full_key_update list", %{conn: conn} do - backends = Application.get_env(:logger, :backends) - on_exit(fn -> Application.put_env(:logger, :backends, backends) end) - - insert(:config, - group: :logger, - key: :backends, - value: [] - ) - - Pleroma.Config.TransferTask.load_and_update_env([], false) - - assert Application.get_env(:logger, :backends) == [] - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":logger", - key: ":backends", - value: [":console"] - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":logger", - "key" => ":backends", - "value" => [ - ":console" - ], - "db" => [":backends"] - } - ], - "need_reboot" => false - } - - assert Application.get_env(:logger, :backends) == [ - :console - ] - end - - test "saving full setting if value is not keyword", %{conn: conn} do - insert(:config, - group: :tesla, - key: :adapter, - value: Tesla.Adapter.Hackey - ) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":tesla", key: ":adapter", value: "Tesla.Adapter.Httpc"} - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":tesla", - "key" => ":adapter", - "value" => "Tesla.Adapter.Httpc", - "db" => [":adapter"] - } - ], - "need_reboot" => false - } - end - - test "update config setting & delete with fallback to default value", %{ - conn: conn, - admin: admin, - token: token - } do - ueberauth = Application.get_env(:ueberauth, Ueberauth) - insert(:config, key: :keyaa1) - insert(:config, key: :keyaa2) - - config3 = - insert(:config, - group: :ueberauth, - key: Ueberauth - ) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":pleroma", key: ":keyaa1", value: "another_value"}, - %{group: ":pleroma", key: ":keyaa2", value: "another_value"} - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":keyaa1", - "value" => "another_value", - "db" => [":keyaa1"] - }, - %{ - "group" => ":pleroma", - "key" => ":keyaa2", - "value" => "another_value", - "db" => [":keyaa2"] - } - ], - "need_reboot" => false - } - - assert Application.get_env(:pleroma, :keyaa1) == "another_value" - assert Application.get_env(:pleroma, :keyaa2) == "another_value" - assert Application.get_env(:ueberauth, Ueberauth) == config3.value - - conn = - build_conn() - |> assign(:user, admin) - |> assign(:token, token) - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":pleroma", key: ":keyaa2", delete: true}, - %{ - group: ":ueberauth", - key: "Ueberauth", - delete: true - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [], - "need_reboot" => false - } - - assert Application.get_env(:ueberauth, Ueberauth) == ueberauth - refute Keyword.has_key?(Application.get_all_env(:pleroma), :keyaa2) - end - - test "common config example", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - "group" => ":pleroma", - "key" => "Pleroma.Captcha.NotReal", - "value" => [ - %{"tuple" => [":enabled", false]}, - %{"tuple" => [":method", "Pleroma.Captcha.Kocaptcha"]}, - %{"tuple" => [":seconds_valid", 60]}, - %{"tuple" => [":path", ""]}, - %{"tuple" => [":key1", nil]}, - %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}, - %{"tuple" => [":regex1", "~r/https:\/\/example.com/"]}, - %{"tuple" => [":regex2", "~r/https:\/\/example.com/u"]}, - %{"tuple" => [":regex3", "~r/https:\/\/example.com/i"]}, - %{"tuple" => [":regex4", "~r/https:\/\/example.com/s"]}, - %{"tuple" => [":name", "Pleroma"]} - ] - } - ] - }) - - assert Config.get([Pleroma.Captcha.NotReal, :name]) == "Pleroma" - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => "Pleroma.Captcha.NotReal", - "value" => [ - %{"tuple" => [":enabled", false]}, - %{"tuple" => [":method", "Pleroma.Captcha.Kocaptcha"]}, - %{"tuple" => [":seconds_valid", 60]}, - %{"tuple" => [":path", ""]}, - %{"tuple" => [":key1", nil]}, - %{"tuple" => [":partial_chain", "&:hackney_connect.partial_chain/1"]}, - %{"tuple" => [":regex1", "~r/https:\\/\\/example.com/"]}, - %{"tuple" => [":regex2", "~r/https:\\/\\/example.com/u"]}, - %{"tuple" => [":regex3", "~r/https:\\/\\/example.com/i"]}, - %{"tuple" => [":regex4", "~r/https:\\/\\/example.com/s"]}, - %{"tuple" => [":name", "Pleroma"]} - ], - "db" => [ - ":enabled", - ":method", - ":seconds_valid", - ":path", - ":key1", - ":partial_chain", - ":regex1", - ":regex2", - ":regex3", - ":regex4", - ":name" - ] - } - ], - "need_reboot" => false - } - end - - test "tuples with more than two values", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - "group" => ":pleroma", - "key" => "Pleroma.Web.Endpoint.NotReal", - "value" => [ - %{ - "tuple" => [ - ":http", - [ - %{ - "tuple" => [ - ":key2", - [ - %{ - "tuple" => [ - ":_", - [ - %{ - "tuple" => [ - "/api/v1/streaming", - "Pleroma.Web.MastodonAPI.WebsocketHandler", - [] - ] - }, - %{ - "tuple" => [ - "/websocket", - "Phoenix.Endpoint.CowboyWebSocket", - %{ - "tuple" => [ - "Phoenix.Transports.WebSocket", - %{ - "tuple" => [ - "Pleroma.Web.Endpoint", - "Pleroma.Web.UserSocket", - [] - ] - } - ] - } - ] - }, - %{ - "tuple" => [ - ":_", - "Phoenix.Endpoint.Cowboy2Handler", - %{"tuple" => ["Pleroma.Web.Endpoint", []]} - ] - } - ] - ] - } - ] - ] - } - ] - ] - } - ] - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => "Pleroma.Web.Endpoint.NotReal", - "value" => [ - %{ - "tuple" => [ - ":http", - [ - %{ - "tuple" => [ - ":key2", - [ - %{ - "tuple" => [ - ":_", - [ - %{ - "tuple" => [ - "/api/v1/streaming", - "Pleroma.Web.MastodonAPI.WebsocketHandler", - [] - ] - }, - %{ - "tuple" => [ - "/websocket", - "Phoenix.Endpoint.CowboyWebSocket", - %{ - "tuple" => [ - "Phoenix.Transports.WebSocket", - %{ - "tuple" => [ - "Pleroma.Web.Endpoint", - "Pleroma.Web.UserSocket", - [] - ] - } - ] - } - ] - }, - %{ - "tuple" => [ - ":_", - "Phoenix.Endpoint.Cowboy2Handler", - %{"tuple" => ["Pleroma.Web.Endpoint", []]} - ] - } - ] - ] - } - ] - ] - } - ] - ] - } - ], - "db" => [":http"] - } - ], - "need_reboot" => false - } - end - - test "settings with nesting map", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{"tuple" => [":key2", "some_val"]}, - %{ - "tuple" => [ - ":key3", - %{ - ":max_options" => 20, - ":max_option_chars" => 200, - ":min_expiration" => 0, - ":max_expiration" => 31_536_000, - "nested" => %{ - ":max_options" => 20, - ":max_option_chars" => 200, - ":min_expiration" => 0, - ":max_expiration" => 31_536_000 - } - } - ] - } - ] - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == - %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => [ - %{"tuple" => [":key2", "some_val"]}, - %{ - "tuple" => [ - ":key3", - %{ - ":max_expiration" => 31_536_000, - ":max_option_chars" => 200, - ":max_options" => 20, - ":min_expiration" => 0, - "nested" => %{ - ":max_expiration" => 31_536_000, - ":max_option_chars" => 200, - ":max_options" => 20, - ":min_expiration" => 0 - } - } - ] - } - ], - "db" => [":key2", ":key3"] - } - ], - "need_reboot" => false - } - end - - test "value as map", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => %{"key" => "some_val"} - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == - %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":key1", - "value" => %{"key" => "some_val"}, - "db" => [":key1"] - } - ], - "need_reboot" => false - } - end - - test "queues key as atom", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - "group" => ":oban", - "key" => ":queues", - "value" => [ - %{"tuple" => [":federator_incoming", 50]}, - %{"tuple" => [":federator_outgoing", 50]}, - %{"tuple" => [":web_push", 50]}, - %{"tuple" => [":mailer", 10]}, - %{"tuple" => [":transmogrifier", 20]}, - %{"tuple" => [":scheduled_activities", 10]}, - %{"tuple" => [":background", 5]} - ] - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":oban", - "key" => ":queues", - "value" => [ - %{"tuple" => [":federator_incoming", 50]}, - %{"tuple" => [":federator_outgoing", 50]}, - %{"tuple" => [":web_push", 50]}, - %{"tuple" => [":mailer", 10]}, - %{"tuple" => [":transmogrifier", 20]}, - %{"tuple" => [":scheduled_activities", 10]}, - %{"tuple" => [":background", 5]} - ], - "db" => [ - ":federator_incoming", - ":federator_outgoing", - ":web_push", - ":mailer", - ":transmogrifier", - ":scheduled_activities", - ":background" - ] - } - ], - "need_reboot" => false - } - end - - test "delete part of settings by atom subkeys", %{conn: conn} do - insert(:config, - key: :keyaa1, - value: [subkey1: "val1", subkey2: "val2", subkey3: "val3"] - ) - - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: ":keyaa1", - subkeys: [":subkey1", ":subkey3"], - delete: true - } - ] - }) - - assert json_response_and_validate_schema(conn, 200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":keyaa1", - "value" => [%{"tuple" => [":subkey2", "val2"]}], - "db" => [":subkey2"] - } - ], - "need_reboot" => false - } - end - - test "proxy tuple localhost", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: ":http", - value: [ - %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "localhost", 1234]}]} - ] - } - ] - }) - - assert %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":http", - "value" => value, - "db" => db - } - ] - } = json_response_and_validate_schema(conn, 200) - - assert %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "localhost", 1234]}]} in value - assert ":proxy_url" in db - end - - test "proxy tuple domain", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: ":http", - value: [ - %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "domain.com", 1234]}]} - ] - } - ] - }) - - assert %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":http", - "value" => value, - "db" => db - } - ] - } = json_response_and_validate_schema(conn, 200) - - assert %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "domain.com", 1234]}]} in value - assert ":proxy_url" in db - end - - test "proxy tuple ip", %{conn: conn} do - conn = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: ":http", - value: [ - %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "127.0.0.1", 1234]}]} - ] - } - ] - }) - - assert %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => ":http", - "value" => value, - "db" => db - } - ] - } = json_response_and_validate_schema(conn, 200) - - assert %{"tuple" => [":proxy_url", %{"tuple" => [":socks5", "127.0.0.1", 1234]}]} in value - assert ":proxy_url" in db - end - - @tag capture_log: true - test "doesn't set keys not in the whitelist", %{conn: conn} do - clear_config(:database_config_whitelist, [ - {:pleroma, :key1}, - {:pleroma, :key2}, - {:pleroma, Pleroma.Captcha.NotReal}, - {:not_real} - ]) - - conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{group: ":pleroma", key: ":key1", value: "value1"}, - %{group: ":pleroma", key: ":key2", value: "value2"}, - %{group: ":pleroma", key: ":key3", value: "value3"}, - %{group: ":pleroma", key: "Pleroma.Web.Endpoint.NotReal", value: "value4"}, - %{group: ":pleroma", key: "Pleroma.Captcha.NotReal", value: "value5"}, - %{group: ":not_real", key: ":anything", value: "value6"} - ] - }) - - assert Application.get_env(:pleroma, :key1) == "value1" - assert Application.get_env(:pleroma, :key2) == "value2" - assert Application.get_env(:pleroma, :key3) == nil - assert Application.get_env(:pleroma, Pleroma.Web.Endpoint.NotReal) == nil - assert Application.get_env(:pleroma, Pleroma.Captcha.NotReal) == "value5" - assert Application.get_env(:not_real, :anything) == "value6" - end - - test "args for Pleroma.Upload.Filter.Mogrify with custom tuples", %{conn: conn} do - clear_config(Pleroma.Upload.Filter.Mogrify) - - assert conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: "Pleroma.Upload.Filter.Mogrify", - value: [ - %{"tuple" => [":args", ["auto-orient", "strip"]]} - ] - } - ] - }) - |> json_response_and_validate_schema(200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => "Pleroma.Upload.Filter.Mogrify", - "value" => [ - %{"tuple" => [":args", ["auto-orient", "strip"]]} - ], - "db" => [":args"] - } - ], - "need_reboot" => false - } - - assert Config.get(Pleroma.Upload.Filter.Mogrify) == [args: ["auto-orient", "strip"]] - - assert conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{ - configs: [ - %{ - group: ":pleroma", - key: "Pleroma.Upload.Filter.Mogrify", - value: [ - %{ - "tuple" => [ - ":args", - [ - "auto-orient", - "strip", - "{\"implode\", \"1\"}", - "{\"resize\", \"3840x1080>\"}" - ] - ] - } - ] - } - ] - }) - |> json_response(200) == %{ - "configs" => [ - %{ - "group" => ":pleroma", - "key" => "Pleroma.Upload.Filter.Mogrify", - "value" => [ - %{ - "tuple" => [ - ":args", - [ - "auto-orient", - "strip", - "{\"implode\", \"1\"}", - "{\"resize\", \"3840x1080>\"}" - ] - ] - } - ], - "db" => [":args"] - } - ], - "need_reboot" => false - } - - assert Config.get(Pleroma.Upload.Filter.Mogrify) == [ - args: ["auto-orient", "strip", {"implode", "1"}, {"resize", "3840x1080>"}] - ] - end - - test "enables the welcome messages", %{conn: conn} do - clear_config([:welcome]) - - params = %{ - "group" => ":pleroma", - "key" => ":welcome", - "value" => [ - %{ - "tuple" => [ - ":direct_message", - [ - %{"tuple" => [":enabled", true]}, - %{"tuple" => [":message", "Welcome to Pleroma!"]}, - %{"tuple" => [":sender_nickname", "pleroma"]} - ] - ] - }, - %{ - "tuple" => [ - ":chat_message", - [ - %{"tuple" => [":enabled", true]}, - %{"tuple" => [":message", "Welcome to Pleroma!"]}, - %{"tuple" => [":sender_nickname", "pleroma"]} - ] - ] - }, - %{ - "tuple" => [ - ":email", - [ - %{"tuple" => [":enabled", true]}, - %{"tuple" => [":sender", %{"tuple" => ["pleroma@dev.dev", "Pleroma"]}]}, - %{"tuple" => [":subject", "Welcome to <%= instance_name %>!"]}, - %{"tuple" => [":html", "Welcome to <%= instance_name %>!"]}, - %{"tuple" => [":text", "Welcome to <%= instance_name %>!"]} - ] - ] - } - ] - } - - refute Pleroma.User.WelcomeEmail.enabled?() - refute Pleroma.User.WelcomeMessage.enabled?() - refute Pleroma.User.WelcomeChatMessage.enabled?() - - res = - assert conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{"configs" => [params]}) - |> json_response_and_validate_schema(200) - - assert Pleroma.User.WelcomeEmail.enabled?() - assert Pleroma.User.WelcomeMessage.enabled?() - assert Pleroma.User.WelcomeChatMessage.enabled?() - - assert res == %{ - "configs" => [ - %{ - "db" => [":direct_message", ":chat_message", ":email"], - "group" => ":pleroma", - "key" => ":welcome", - "value" => params["value"] - } - ], - "need_reboot" => false - } - end - - test "custom instance thumbnail", %{conn: conn} do - clear_config([:instance]) - - params = %{ - "group" => ":pleroma", - "key" => ":instance", - "value" => [ - %{ - "tuple" => [ - ":instance_thumbnail", - "https://example.com/media/new_thumbnail.jpg" - ] - } - ] - } - - assert conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{"configs" => [params]}) - |> json_response_and_validate_schema(200) == - %{ - "configs" => [ - %{ - "db" => [":instance_thumbnail"], - "group" => ":pleroma", - "key" => ":instance", - "value" => params["value"] - } - ], - "need_reboot" => false - } - - assert conn - |> get("/api/v1/instance") - |> json_response_and_validate_schema(200) - |> Map.take(["thumbnail"]) == - %{"thumbnail" => "https://example.com/media/new_thumbnail.jpg"} - end - - test "Concurrent Limiter", %{conn: conn} do - clear_config([ConcurrentLimiter]) - - params = %{ - "group" => ":pleroma", - "key" => "ConcurrentLimiter", - "value" => [ - %{ - "tuple" => [ - "Pleroma.Web.RichMedia.Helpers", - [ - %{"tuple" => [":max_running", 6]}, - %{"tuple" => [":max_waiting", 6]} - ] - ] - }, - %{ - "tuple" => [ - "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy", - [ - %{"tuple" => [":max_running", 7]}, - %{"tuple" => [":max_waiting", 7]} - ] - ] - } - ] - } - - assert conn - |> put_req_header("content-type", "application/json") - |> post("/api/pleroma/admin/config", %{"configs" => [params]}) - |> json_response_and_validate_schema(200) - end - end - - describe "GET /api/pleroma/admin/config/descriptions" do - test "structure", %{conn: conn} do - conn = get(conn, "/api/pleroma/admin/config/descriptions") - - assert [child | _others] = json_response_and_validate_schema(conn, 200) - - assert child["children"] - assert child["key"] - assert String.starts_with?(child["group"], ":") - assert child["description"] - end - - test "filters by database configuration whitelist", %{conn: conn} do - clear_config(:database_config_whitelist, [ - {:pleroma, :instance}, - {:pleroma, :activitypub}, - {:pleroma, Pleroma.Upload} - ]) - - conn = get(conn, "/api/pleroma/admin/config/descriptions") - - children = json_response_and_validate_schema(conn, 200) - - assert length(children) == 3 - - assert Enum.count(children, fn c -> c["group"] == ":pleroma" end) == 3 - - instance = Enum.find(children, fn c -> c["key"] == ":instance" end) - assert instance["children"] - - activitypub = Enum.find(children, fn c -> c["key"] == ":activitypub" end) - assert activitypub["children"] - - web_endpoint = Enum.find(children, fn c -> c["key"] == "Pleroma.Upload" end) - assert web_endpoint["children"] - end - end -end diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 167909cfb..09b09fb14 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -7,13 +7,11 @@ defmodule Pleroma.Web.CommonAPITest do use Pleroma.DataCase alias Pleroma.Activity - alias Pleroma.Chat alias Pleroma.Conversation.Participation alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo alias Pleroma.User - alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.ActivityPub.Transmogrifier alias Pleroma.Web.ActivityPub.Visibility alias Pleroma.Web.AdminAPI.AccountView @@ -106,173 +104,6 @@ test "it blocks and does not federate if outgoing blocks are disabled", %{ end end - describe "posting chat messages" do - setup do: clear_config([:instance, :chat_limit]) - - test "it posts a self-chat" do - author = insert(:user) - recipient = author - - {:ok, activity} = - CommonAPI.post_chat_message( - author, - recipient, - "remember to buy milk when milk truk arive" - ) - - assert activity.data["type"] == "Create" - end - - test "it posts a chat message without content but with an attachment" do - author = insert(:user) - recipient = insert(:user) - - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, upload} = ActivityPub.upload(file, actor: author.ap_id) - - with_mocks([ - { - Pleroma.Web.Streamer, - [], - [ - stream: fn _, _ -> - nil - end - ] - }, - { - Pleroma.Web.Push, - [], - [ - send: fn _ -> nil end - ] - } - ]) do - {:ok, activity} = - CommonAPI.post_chat_message( - author, - recipient, - nil, - media_id: upload.id - ) - - notification = - Notification.for_user_and_activity(recipient, activity) - |> Repo.preload(:activity) - - assert called(Pleroma.Web.Push.send(notification)) - assert called(Pleroma.Web.Streamer.stream(["user", "user:notification"], notification)) - assert called(Pleroma.Web.Streamer.stream(["user", "user:pleroma_chat"], :_)) - - assert activity - end - end - - test "it adds html newlines" do - author = insert(:user) - recipient = insert(:user) - - other_user = insert(:user) - - {:ok, activity} = - CommonAPI.post_chat_message( - author, - recipient, - "uguu\nuguuu" - ) - - assert other_user.ap_id not in activity.recipients - - object = Object.normalize(activity, fetch: false) - - assert object.data["content"] == "uguu
uguuu" - end - - test "it linkifies" do - author = insert(:user) - recipient = insert(:user) - - other_user = insert(:user) - - {:ok, activity} = - CommonAPI.post_chat_message( - author, - recipient, - "https://example.org is the site of @#{other_user.nickname} #2hu" - ) - - assert other_user.ap_id not in activity.recipients - - object = Object.normalize(activity, fetch: false) - - assert object.data["content"] == - "https://example.org is the site of @#{other_user.nickname} #2hu" - end - - test "it posts a chat message" do - author = insert(:user) - recipient = insert(:user) - - {:ok, activity} = - CommonAPI.post_chat_message( - author, - recipient, - "a test message :firefox:" - ) - - assert activity.data["type"] == "Create" - assert activity.local - object = Object.normalize(activity, fetch: false) - - assert object.data["type"] == "ChatMessage" - assert object.data["to"] == [recipient.ap_id] - - assert object.data["content"] == - "a test message <script>alert('uuu')</script> :firefox:" - - assert object.data["emoji"] == %{ - "firefox" => "http://localhost:4001/emoji/Firefox.gif" - } - - assert Chat.get(author.id, recipient.ap_id) - assert Chat.get(recipient.id, author.ap_id) - - assert :ok == Pleroma.Web.Federator.perform(:publish, activity) - end - - test "it reject messages over the local limit" do - clear_config([:instance, :chat_limit], 2) - - author = insert(:user) - recipient = insert(:user) - - {:error, message} = - CommonAPI.post_chat_message( - author, - recipient, - "123" - ) - - assert message == :content_too_long - end - - test "it reject messages via MRF" do - clear_config([:mrf_keyword, :reject], ["GNO"]) - clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy]) - - author = insert(:user) - recipient = insert(:user) - - assert {:reject, "[KeywordPolicy] Matches with rejected keyword"} == - CommonAPI.post_chat_message(author, recipient, "GNO/Linux") - end - end - describe "unblocking" do test "it works even without an existing block activity" do blocked = insert(:user) diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index de38a9798..402c71e77 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -1683,7 +1683,6 @@ test "verify_credentials" do response = json_response_and_validate_schema(conn, 200) assert %{"id" => id, "source" => %{"privacy" => "public"}} = response - assert response["pleroma"]["chat_token"] assert response["pleroma"]["unread_notifications_count"] == 6 assert id == to_string(user.id) end diff --git a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs index e76cbc75b..90801a90a 100644 --- a/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/instance_controller_test.exs @@ -38,7 +38,6 @@ test "get instance information", %{conn: conn} do "background_upload_limit" => _, "banner_upload_limit" => _, "background_image" => from_config_background, - "shout_limit" => _, "description_limit" => _ } = result diff --git a/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs index 650783587..f463bfae1 100644 --- a/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/notification_controller_test.exs @@ -52,27 +52,6 @@ test "list of notifications" do assert response == expected_response end - test "by default, does not contain pleroma:chat_mention" do - %{user: user, conn: conn} = oauth_access(["read:notifications"]) - other_user = insert(:user) - - {:ok, _activity} = CommonAPI.post_chat_message(other_user, user, "hey") - - result = - conn - |> get("/api/v1/notifications") - |> json_response_and_validate_schema(200) - - assert [] == result - - result = - conn - |> get("/api/v1/notifications?include_types[]=pleroma:chat_mention") - |> json_response_and_validate_schema(200) - - assert [_] = result - end - test "by default, does not contain pleroma:report" do %{user: user, conn: conn} = oauth_access(["read:notifications"]) other_user = insert(:user) diff --git a/test/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs index 5a3f93d2d..1335656b4 100644 --- a/test/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/subscription_controller_test.exs @@ -113,7 +113,6 @@ test "successful creation", %{conn: conn} do "favourite" => true, "follow" => true, "reblog" => true, - "pleroma:chat_mention" => true, "pleroma:emoji_reaction" => true } }, @@ -129,7 +128,6 @@ test "successful creation", %{conn: conn} do "favourite" => true, "follow" => true, "reblog" => true, - "pleroma:chat_mention" => true, "pleroma:emoji_reaction" => true }, "endpoint" => subscription.endpoint, @@ -185,7 +183,6 @@ test "returns a user subsciption", %{conn: conn, user: user, token: token} do "favourite" => true, "follow" => true, "reblog" => true, - "pleroma:chat_mention" => true, "pleroma:emoji_reaction" => true } } @@ -204,7 +201,6 @@ test "returns updated subsciption", %{conn: conn, subscription: subscription} do "favourite" => false, "follow" => false, "reblog" => false, - "pleroma:chat_mention" => false, "pleroma:emoji_reaction" => false } } @@ -217,7 +213,6 @@ test "returns updated subsciption", %{conn: conn, subscription: subscription} do "favourite" => false, "follow" => false, "reblog" => false, - "pleroma:chat_mention" => false, "pleroma:emoji_reaction" => false }, "endpoint" => "https://example.com/example/1234", diff --git a/test/pleroma/web/mastodon_api/update_credentials_test.exs b/test/pleroma/web/mastodon_api/update_credentials_test.exs index 0f423cce8..606467fa9 100644 --- a/test/pleroma/web/mastodon_api/update_credentials_test.exs +++ b/test/pleroma/web/mastodon_api/update_credentials_test.exs @@ -104,13 +104,6 @@ test "updates the user's locking status", %{conn: conn} do assert user_data["locked"] == true end - test "updates the user's chat acceptance status", %{conn: conn} do - conn = patch(conn, "/api/v1/accounts/update_credentials", %{accepts_chat_messages: "false"}) - - assert user_data = json_response_and_validate_schema(conn, 200) - assert user_data["pleroma"]["accepts_chat_messages"] == false - end - test "updates the user's allow_following_move", %{user: user, conn: conn} do assert user.allow_following_move == true diff --git a/test/pleroma/web/mastodon_api/views/account_view_test.exs b/test/pleroma/web/mastodon_api/views/account_view_test.exs index c23ffb966..8db887137 100644 --- a/test/pleroma/web/mastodon_api/views/account_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/account_view_test.exs @@ -91,8 +91,7 @@ test "Represent a user account" do hide_followers_count: false, hide_follows_count: false, relationship: %{}, - skip_thread_containment: false, - accepts_chat_messages: nil + skip_thread_containment: false } } @@ -193,8 +192,7 @@ test "Represent a Service(bot) account" do hide_followers_count: false, hide_follows_count: false, relationship: %{}, - skip_thread_containment: false, - accepts_chat_messages: nil + skip_thread_containment: false } } diff --git a/test/pleroma/web/mastodon_api/views/notification_view_test.exs b/test/pleroma/web/mastodon_api/views/notification_view_test.exs index a22c9df1d..803b1f438 100644 --- a/test/pleroma/web/mastodon_api/views/notification_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/notification_view_test.exs @@ -6,8 +6,6 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do use Pleroma.DataCase alias Pleroma.Activity - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference alias Pleroma.Notification alias Pleroma.Object alias Pleroma.Repo @@ -22,7 +20,6 @@ defmodule Pleroma.Web.MastodonAPI.NotificationViewTest do alias Pleroma.Web.MastodonAPI.NotificationView alias Pleroma.Web.MastodonAPI.StatusView alias Pleroma.Web.MediaProxy - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView import Pleroma.Factory defp test_notifications_rendering(notifications, user, expected_result) do @@ -40,30 +37,6 @@ defp test_notifications_rendering(notifications, user, expected_result) do assert expected_result == result end - test "ChatMessage notification" do - user = insert(:user) - recipient = insert(:user) - {:ok, activity} = CommonAPI.post_chat_message(user, recipient, "what's up my dude") - - {:ok, [notification]} = Notification.create_notifications(activity) - - object = Object.normalize(activity, fetch: false) - chat = Chat.get(recipient.id, user.ap_id) - - cm_ref = MessageReference.for_chat_and_object(chat, object) - - expected = %{ - id: to_string(notification.id), - pleroma: %{is_seen: false, is_muted: false}, - type: "pleroma:chat_mention", - account: AccountView.render("show.json", %{user: user, for: recipient}), - chat_message: MessageReferenceView.render("show.json", %{chat_message_reference: cm_ref}), - created_at: Utils.to_masto_date(notification.inserted_at) - } - - test_notifications_rendering([notification], recipient, [expected]) - end - test "Mention notification" do user = insert(:user) mentioned_user = insert(:user) diff --git a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs deleted file mode 100644 index 1114da242..000000000 --- a/test/pleroma/web/pleroma_api/controllers/chat_controller_test.exs +++ /dev/null @@ -1,453 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only -defmodule Pleroma.Web.PleromaAPI.ChatControllerTest do - use Pleroma.Web.ConnCase - - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.Object - alias Pleroma.User - alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.CommonAPI - - import Pleroma.Factory - - describe "POST /api/v1/pleroma/chats/:id/messages/:message_id/read" do - setup do: oauth_access(["write:chats"]) - - test "it marks one message as read", %{conn: conn, user: user} do - other_user = insert(:user) - - {:ok, create} = CommonAPI.post_chat_message(other_user, user, "sup") - {:ok, _create} = CommonAPI.post_chat_message(other_user, user, "sup part 2") - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - object = Object.normalize(create, fetch: false) - cm_ref = MessageReference.for_chat_and_object(chat, object) - - assert cm_ref.unread == true - - result = - conn - |> post("/api/v1/pleroma/chats/#{chat.id}/messages/#{cm_ref.id}/read") - |> json_response_and_validate_schema(200) - - assert result["unread"] == false - - cm_ref = MessageReference.for_chat_and_object(chat, object) - - assert cm_ref.unread == false - end - end - - describe "POST /api/v1/pleroma/chats/:id/read" do - setup do: oauth_access(["write:chats"]) - - test "given a `last_read_id`, it marks everything until then as read", %{ - conn: conn, - user: user - } do - other_user = insert(:user) - - {:ok, create} = CommonAPI.post_chat_message(other_user, user, "sup") - {:ok, _create} = CommonAPI.post_chat_message(other_user, user, "sup part 2") - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - object = Object.normalize(create, fetch: false) - cm_ref = MessageReference.for_chat_and_object(chat, object) - - assert cm_ref.unread == true - - result = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/chats/#{chat.id}/read", %{"last_read_id" => cm_ref.id}) - |> json_response_and_validate_schema(200) - - assert result["unread"] == 1 - - cm_ref = MessageReference.for_chat_and_object(chat, object) - - assert cm_ref.unread == false - end - end - - describe "POST /api/v1/pleroma/chats/:id/messages" do - setup do: oauth_access(["write:chats"]) - - test "it posts a message to the chat", %{conn: conn, user: user} do - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - - result = - conn - |> put_req_header("content-type", "application/json") - |> put_req_header("idempotency-key", "123") - |> post("/api/v1/pleroma/chats/#{chat.id}/messages", %{"content" => "Hallo!!"}) - |> json_response_and_validate_schema(200) - - assert result["content"] == "Hallo!!" - assert result["chat_id"] == chat.id |> to_string() - assert result["idempotency_key"] == "123" - end - - test "it fails if there is no content", %{conn: conn, user: user} do - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - - result = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/chats/#{chat.id}/messages") - |> json_response_and_validate_schema(400) - - assert %{"error" => "no_content"} == result - end - - test "it works with an attachment", %{conn: conn, user: user} do - clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) - clear_config([Pleroma.Uploaders.Local, :uploads], "uploads") - - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id) - - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - - result = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/chats/#{chat.id}/messages", %{ - "media_id" => to_string(upload.id) - }) - |> json_response_and_validate_schema(200) - - assert result["attachment"] - end - - test "gets MRF reason when rejected", %{conn: conn, user: user} do - clear_config([:mrf_keyword, :reject], ["GNO"]) - clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.KeywordPolicy]) - - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - - result = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/pleroma/chats/#{chat.id}/messages", %{"content" => "GNO/Linux"}) - |> json_response_and_validate_schema(422) - - assert %{"error" => "[KeywordPolicy] Matches with rejected keyword"} == result - end - end - - describe "DELETE /api/v1/pleroma/chats/:id/messages/:message_id" do - setup do: oauth_access(["write:chats"]) - - test "it deletes a message from the chat", %{conn: conn, user: user} do - recipient = insert(:user) - - {:ok, message} = - CommonAPI.post_chat_message(user, recipient, "Hello darkness my old friend") - - {:ok, other_message} = CommonAPI.post_chat_message(recipient, user, "nico nico ni") - - object = Object.normalize(message, fetch: false) - - chat = Chat.get(user.id, recipient.ap_id) - - cm_ref = MessageReference.for_chat_and_object(chat, object) - - # Deleting your own message removes the message and the reference - result = - conn - |> put_req_header("content-type", "application/json") - |> delete("/api/v1/pleroma/chats/#{chat.id}/messages/#{cm_ref.id}") - |> json_response_and_validate_schema(200) - - assert result["id"] == cm_ref.id - refute MessageReference.get_by_id(cm_ref.id) - assert %{data: %{"type" => "Tombstone"}} = Object.get_by_id(object.id) - - # Deleting other people's messages just removes the reference - object = Object.normalize(other_message, fetch: false) - cm_ref = MessageReference.for_chat_and_object(chat, object) - - result = - conn - |> put_req_header("content-type", "application/json") - |> delete("/api/v1/pleroma/chats/#{chat.id}/messages/#{cm_ref.id}") - |> json_response_and_validate_schema(200) - - assert result["id"] == cm_ref.id - refute MessageReference.get_by_id(cm_ref.id) - assert Object.get_by_id(object.id) - end - end - - describe "GET /api/v1/pleroma/chats/:id/messages" do - setup do: oauth_access(["read:chats"]) - - test "it paginates", %{conn: conn, user: user} do - recipient = insert(:user) - - Enum.each(1..30, fn _ -> - {:ok, _} = CommonAPI.post_chat_message(user, recipient, "hey") - end) - - chat = Chat.get(user.id, recipient.ap_id) - - response = get(conn, "/api/v1/pleroma/chats/#{chat.id}/messages") - result = json_response_and_validate_schema(response, 200) - - [next, prev] = get_resp_header(response, "link") |> hd() |> String.split(", ") - api_endpoint = "/api/v1/pleroma/chats/" - - assert String.match?( - next, - ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*; rel=\"next\"$) - ) - - assert String.match?( - prev, - ~r(#{api_endpoint}.*/messages\?limit=\d+&min_id=.*; rel=\"prev\"$) - ) - - assert length(result) == 20 - - response = - get(conn, "/api/v1/pleroma/chats/#{chat.id}/messages?max_id=#{List.last(result)["id"]}") - - result = json_response_and_validate_schema(response, 200) - [next, prev] = get_resp_header(response, "link") |> hd() |> String.split(", ") - - assert String.match?( - next, - ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*; rel=\"next\"$) - ) - - assert String.match?( - prev, - ~r(#{api_endpoint}.*/messages\?limit=\d+&max_id=.*&min_id=.*; rel=\"prev\"$) - ) - - assert length(result) == 10 - end - - test "it returns the messages for a given chat", %{conn: conn, user: user} do - other_user = insert(:user) - third_user = insert(:user) - - {:ok, _} = CommonAPI.post_chat_message(user, other_user, "hey") - {:ok, _} = CommonAPI.post_chat_message(user, third_user, "hey") - {:ok, _} = CommonAPI.post_chat_message(user, other_user, "how are you?") - {:ok, _} = CommonAPI.post_chat_message(other_user, user, "fine, how about you?") - - chat = Chat.get(user.id, other_user.ap_id) - - result = - conn - |> get("/api/v1/pleroma/chats/#{chat.id}/messages") - |> json_response_and_validate_schema(200) - - result - |> Enum.each(fn message -> - assert message["chat_id"] == chat.id |> to_string() - end) - - assert length(result) == 3 - - # Trying to get the chat of a different user - other_user_chat = Chat.get(other_user.id, user.ap_id) - - conn - |> get("/api/v1/pleroma/chats/#{other_user_chat.id}/messages") - |> json_response_and_validate_schema(404) - end - end - - describe "POST /api/v1/pleroma/chats/by-account-id/:id" do - setup do: oauth_access(["write:chats"]) - - test "it creates or returns a chat", %{conn: conn} do - other_user = insert(:user) - - result = - conn - |> post("/api/v1/pleroma/chats/by-account-id/#{other_user.id}") - |> json_response_and_validate_schema(200) - - assert result["id"] - end - end - - describe "GET /api/v1/pleroma/chats/:id" do - setup do: oauth_access(["read:chats"]) - - test "it returns a chat", %{conn: conn, user: user} do - other_user = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, other_user.ap_id) - - result = - conn - |> get("/api/v1/pleroma/chats/#{chat.id}") - |> json_response_and_validate_schema(200) - - assert result["id"] == to_string(chat.id) - end - end - - describe "GET /api/v2/pleroma/chats" do - setup do: oauth_access(["read:chats"]) - - test "it does not return chats with deleted users", %{conn: conn, user: user} do - recipient = insert(:user) - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) - - Pleroma.Repo.delete(recipient) - User.invalidate_cache(recipient) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - assert length(result) == 0 - end - - test "it does not return chats with users you blocked", %{conn: conn, user: user} do - recipient = insert(:user) - - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - assert length(result) == 1 - - User.block(user, recipient) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - assert length(result) == 0 - end - - test "it does not return chats with users you muted", %{conn: conn, user: user} do - recipient = insert(:user) - - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - assert length(result) == 1 - - User.mute(user, recipient) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - assert length(result) == 0 - - result = - conn - |> get("/api/v2/pleroma/chats?with_muted=true") - |> json_response_and_validate_schema(200) - - assert length(result) == 1 - end - - test "it paginates chats", %{conn: conn, user: user} do - Enum.each(1..30, fn _ -> - recipient = insert(:user) - {:ok, _} = Chat.get_or_create(user.id, recipient.ap_id) - end) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - assert length(result) == 20 - last_id = List.last(result)["id"] - - result = - conn - |> get("/api/v2/pleroma/chats?max_id=#{last_id}") - |> json_response_and_validate_schema(200) - - assert length(result) == 10 - end - - test "it return a list of chats the current user is participating in, in descending order of updates", - %{conn: conn, user: user} do - har = insert(:user) - jafnhar = insert(:user) - tridi = insert(:user) - - {:ok, chat_1} = Chat.get_or_create(user.id, har.ap_id) - {:ok, chat_1} = time_travel(chat_1, -3) - {:ok, chat_2} = Chat.get_or_create(user.id, jafnhar.ap_id) - {:ok, _chat_2} = time_travel(chat_2, -2) - {:ok, chat_3} = Chat.get_or_create(user.id, tridi.ap_id) - {:ok, chat_3} = time_travel(chat_3, -1) - - # bump the second one - {:ok, chat_2} = Chat.bump_or_create(user.id, jafnhar.ap_id) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - ids = Enum.map(result, & &1["id"]) - - assert ids == [ - chat_2.id |> to_string(), - chat_3.id |> to_string(), - chat_1.id |> to_string() - ] - end - - test "it is not affected by :restrict_unauthenticated setting (issue #1973)", %{ - conn: conn, - user: user - } do - clear_config([:restrict_unauthenticated, :profiles, :local], true) - clear_config([:restrict_unauthenticated, :profiles, :remote], true) - - user2 = insert(:user) - user3 = insert(:user, local: false) - - {:ok, _chat_12} = Chat.get_or_create(user.id, user2.ap_id) - {:ok, _chat_13} = Chat.get_or_create(user.id, user3.ap_id) - - result = - conn - |> get("/api/v2/pleroma/chats") - |> json_response_and_validate_schema(200) - - account_ids = Enum.map(result, &get_in(&1, ["account", "id"])) - assert Enum.sort(account_ids) == Enum.sort([user2.id, user3.id]) - end - end -end diff --git a/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs b/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs deleted file mode 100644 index 6deaa2102..000000000 --- a/test/pleroma/web/pleroma_api/views/chat_message_reference_view_test.exs +++ /dev/null @@ -1,75 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ChatMessageReferenceViewTest do - use Pleroma.DataCase - - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.Object - alias Pleroma.Web.ActivityPub.ActivityPub - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView - - import Pleroma.Factory - - test "it displays a chat message" do - user = insert(:user) - recipient = insert(:user) - - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id) - - {:ok, activity} = - CommonAPI.post_chat_message(user, recipient, "kippis :firefox:", idempotency_key: "123") - - chat = Chat.get(user.id, recipient.ap_id) - - object = Object.normalize(activity, fetch: false) - - cm_ref = MessageReference.for_chat_and_object(chat, object) - - chat_message = MessageReferenceView.render("show.json", chat_message_reference: cm_ref) - - assert chat_message[:id] == cm_ref.id - assert chat_message[:content] == "kippis :firefox:" - assert chat_message[:account_id] == user.id - assert chat_message[:chat_id] - assert chat_message[:created_at] - assert chat_message[:unread] == false - assert match?([%{shortcode: "firefox"}], chat_message[:emojis]) - assert chat_message[:idempotency_key] == "123" - - clear_config([:rich_media, :enabled], true) - - Tesla.Mock.mock_global(fn - %{url: "https://example.com/ogp"} -> - %Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")} - end) - - {:ok, activity} = - CommonAPI.post_chat_message(recipient, user, "gkgkgk https://example.com/ogp", - media_id: upload.id - ) - - object = Object.normalize(activity, fetch: false) - - cm_ref = MessageReference.for_chat_and_object(chat, object) - - chat_message_two = MessageReferenceView.render("show.json", chat_message_reference: cm_ref) - - assert chat_message_two[:id] == cm_ref.id - assert chat_message_two[:content] == object.data["content"] - assert chat_message_two[:account_id] == recipient.id - assert chat_message_two[:chat_id] == chat_message[:chat_id] - assert chat_message_two[:attachment] - assert chat_message_two[:unread] == true - assert chat_message_two[:card] - end -end diff --git a/test/pleroma/web/pleroma_api/views/chat_view_test.exs b/test/pleroma/web/pleroma_api/views/chat_view_test.exs deleted file mode 100644 index 5456c2de0..000000000 --- a/test/pleroma/web/pleroma_api/views/chat_view_test.exs +++ /dev/null @@ -1,49 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.PleromaAPI.ChatViewTest do - use Pleroma.DataCase, async: true - - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference - alias Pleroma.Object - alias Pleroma.Web.CommonAPI - alias Pleroma.Web.CommonAPI.Utils - alias Pleroma.Web.MastodonAPI.AccountView - alias Pleroma.Web.PleromaAPI.Chat.MessageReferenceView - alias Pleroma.Web.PleromaAPI.ChatView - - import Pleroma.Factory - - test "it represents a chat" do - user = insert(:user) - recipient = insert(:user) - - {:ok, chat} = Chat.get_or_create(user.id, recipient.ap_id) - - represented_chat = ChatView.render("show.json", chat: chat) - - assert represented_chat == %{ - id: "#{chat.id}", - account: - AccountView.render("show.json", user: recipient, skip_visibility_check: true), - unread: 0, - last_message: nil, - updated_at: Utils.to_masto_date(chat.updated_at) - } - - {:ok, chat_message_creation} = CommonAPI.post_chat_message(user, recipient, "hello") - - chat_message = Object.normalize(chat_message_creation, fetch: false) - - {:ok, chat} = Chat.get_or_create(user.id, recipient.ap_id) - - represented_chat = ChatView.render("show.json", chat: chat) - - cm_ref = MessageReference.for_chat_and_object(chat, chat_message) - - assert represented_chat[:last_message] == - MessageReferenceView.render("show.json", chat_message_reference: cm_ref) - end -end diff --git a/test/pleroma/web/push/impl_test.exs b/test/pleroma/web/push/impl_test.exs index b3ca1a337..9100433ae 100644 --- a/test/pleroma/web/push/impl_test.exs +++ b/test/pleroma/web/push/impl_test.exs @@ -7,10 +7,8 @@ defmodule Pleroma.Web.Push.ImplTest do import Pleroma.Factory - alias Pleroma.Notification alias Pleroma.Object alias Pleroma.User - alias Pleroma.Web.ActivityPub.ActivityPub alias Pleroma.Web.CommonAPI alias Pleroma.Web.Push.Impl alias Pleroma.Web.Push.Subscription @@ -216,46 +214,6 @@ test "renders title for create activity with direct visibility" do end describe "build_content/3" do - test "builds content for chat messages" do - user = insert(:user) - recipient = insert(:user) - - {:ok, chat} = CommonAPI.post_chat_message(user, recipient, "hey") - object = Object.normalize(chat, fetch: false) - [notification] = Notification.for_user(recipient) - - res = Impl.build_content(notification, user, object) - - assert res == %{ - body: "@#{user.nickname}: hey", - title: "New Chat Message" - } - end - - test "builds content for chat messages with no content" do - user = insert(:user) - recipient = insert(:user) - - file = %Plug.Upload{ - content_type: "image/jpeg", - path: Path.absname("test/fixtures/image.jpg"), - filename: "an_image.jpg" - } - - {:ok, upload} = ActivityPub.upload(file, actor: user.ap_id) - - {:ok, chat} = CommonAPI.post_chat_message(user, recipient, nil, media_id: upload.id) - object = Object.normalize(chat, fetch: false) - [notification] = Notification.for_user(recipient) - - res = Impl.build_content(notification, user, object) - - assert res == %{ - body: "@#{user.nickname}: (Attachment)", - title: "New Chat Message" - } - end - test "hides contents of notifications when option enabled" do user = insert(:user, nickname: "Bob") diff --git a/test/pleroma/web/shout_channel_test.exs b/test/pleroma/web/shout_channel_test.exs deleted file mode 100644 index 5c86efe9f..000000000 --- a/test/pleroma/web/shout_channel_test.exs +++ /dev/null @@ -1,41 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.ShoutChannelTest do - use Pleroma.Web.ChannelCase - alias Pleroma.Web.ShoutChannel - alias Pleroma.Web.UserSocket - - import Pleroma.Factory - - setup do - user = insert(:user) - - {:ok, _, socket} = - socket(UserSocket, "", %{user_name: user.nickname}) - |> subscribe_and_join(ShoutChannel, "chat:public") - - {:ok, socket: socket} - end - - test "it broadcasts a message", %{socket: socket} do - push(socket, "new_msg", %{"text" => "why is tenshi eating a corndog so cute?"}) - assert_broadcast("new_msg", %{text: "why is tenshi eating a corndog so cute?"}) - end - - describe "message lengths" do - setup do: clear_config([:shout, :limit]) - - test "it ignores messages of length zero", %{socket: socket} do - push(socket, "new_msg", %{"text" => ""}) - refute_broadcast("new_msg", %{text: ""}) - end - - test "it ignores messages above a certain length", %{socket: socket} do - clear_config([:shout, :limit], 2) - push(socket, "new_msg", %{"text" => "123"}) - refute_broadcast("new_msg", %{text: "123"}) - end - end -end diff --git a/test/pleroma/web/streamer_test.exs b/test/pleroma/web/streamer_test.exs index b2941a62c..841db0e91 100644 --- a/test/pleroma/web/streamer_test.exs +++ b/test/pleroma/web/streamer_test.exs @@ -7,15 +7,11 @@ defmodule Pleroma.Web.StreamerTest do import Pleroma.Factory - alias Pleroma.Chat - alias Pleroma.Chat.MessageReference alias Pleroma.Conversation.Participation alias Pleroma.List - alias Pleroma.Object alias Pleroma.User alias Pleroma.Web.CommonAPI alias Pleroma.Web.Streamer - alias Pleroma.Web.StreamerView @moduletag needs_streamer: true, capture_log: true @@ -80,20 +76,16 @@ test "allows user streams (with proper OAuth token scopes)", %{ expected_user_topic = "user:#{user.id}" expected_notification_topic = "user:notification:#{user.id}" expected_direct_topic = "direct:#{user.id}" - expected_pleroma_chat_topic = "user:pleroma_chat:#{user.id}" for valid_user_token <- [read_oauth_token, read_statuses_token] do assert {:ok, ^expected_user_topic} = Streamer.get_topic("user", user, valid_user_token) assert {:ok, ^expected_direct_topic} = Streamer.get_topic("direct", user, valid_user_token) - - assert {:ok, ^expected_pleroma_chat_topic} = - Streamer.get_topic("user:pleroma_chat", user, valid_user_token) end for invalid_user_token <- [read_notifications_token, badly_scoped_token], - user_topic <- ["user", "direct", "user:pleroma_chat"] do + user_topic <- ["user", "direct"] do assert {:error, :unauthorized} = Streamer.get_topic(user_topic, user, invalid_user_token) end @@ -257,66 +249,6 @@ test "it sends notify to in the 'user:notification' stream", %{ refute Streamer.filtered_by_user?(user, notify) end - test "it sends chat messages to the 'user:pleroma_chat' stream", %{ - user: user, - token: oauth_token - } do - other_user = insert(:user) - - {:ok, create_activity} = - CommonAPI.post_chat_message(other_user, user, "hey cirno", idempotency_key: "123") - - object = Object.normalize(create_activity, fetch: false) - chat = Chat.get(user.id, other_user.ap_id) - cm_ref = MessageReference.for_chat_and_object(chat, object) - cm_ref = %{cm_ref | chat: chat, object: object} - - Streamer.get_topic_and_add_socket("user:pleroma_chat", user, oauth_token) - Streamer.stream("user:pleroma_chat", {user, cm_ref}) - - text = StreamerView.render("chat_update.json", %{chat_message_reference: cm_ref}) - - assert text =~ "hey cirno" - assert_receive {:text, ^text} - end - - test "it sends chat messages to the 'user' stream", %{user: user, token: oauth_token} do - other_user = insert(:user) - - {:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey cirno") - object = Object.normalize(create_activity, fetch: false) - chat = Chat.get(user.id, other_user.ap_id) - cm_ref = MessageReference.for_chat_and_object(chat, object) - cm_ref = %{cm_ref | chat: chat, object: object} - - Streamer.get_topic_and_add_socket("user", user, oauth_token) - Streamer.stream("user", {user, cm_ref}) - - text = StreamerView.render("chat_update.json", %{chat_message_reference: cm_ref}) - - assert text =~ "hey cirno" - assert_receive {:text, ^text} - end - - test "it sends chat message notifications to the 'user:notification' stream", %{ - user: user, - token: oauth_token - } do - other_user = insert(:user) - - {:ok, create_activity} = CommonAPI.post_chat_message(other_user, user, "hey") - - notify = - Repo.get_by(Pleroma.Notification, user_id: user.id, activity_id: create_activity.id) - |> Repo.preload(:activity) - - Streamer.get_topic_and_add_socket("user:notification", user, oauth_token) - Streamer.stream("user:notification", notify) - - assert_receive {:render_with_user, _, _, ^notify} - refute Streamer.filtered_by_user?(user, notify) - end - test "it doesn't send notify to the 'user:notification' stream when a user is blocked", %{ user: user, token: oauth_token From 0c542e58aa708000af50bc3c6aafc6480e017454 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Thu, 21 Jul 2022 11:32:17 +0000 Subject: [PATCH 17/82] Remove instrumentors (#98) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/98 --- .woodpecker/.release.yml | 8 +-- CHANGELOG.md | 1 + config/config.exs | 7 -- config/description.exs | 37 ---------- lib/pleroma/application.ex | 24 ------- lib/pleroma/config/transfer_task.ex | 3 +- lib/pleroma/repo.ex | 2 - lib/pleroma/web/endpoint.ex | 41 ----------- mix.exs | 12 ---- .../web/endpoint/metrics_exporter_test.exs | 69 ------------------- 10 files changed, 6 insertions(+), 198 deletions(-) delete mode 100644 test/pleroma/web/endpoint/metrics_exporter_test.exs diff --git a/.woodpecker/.release.yml b/.woodpecker/.release.yml index 18f206a6b..535cdd65b 100644 --- a/.woodpecker/.release.yml +++ b/.woodpecker/.release.yml @@ -37,8 +37,8 @@ pipeline: - *tag-build - mix deps.get --only prod - mix release --path release - - zip akkoma-${tag}.zip -r release - - rclone copyto akkoma-${tag}.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-${tag}.zip + - zip akkoma-amd64.zip -r release + - rclone copyto akkoma-amd64.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-amd64.zip musl: image: elixir:1.13-alpine @@ -55,5 +55,5 @@ pipeline: - *tag-build - mix deps.get --only prod - mix release --path release - - zip akkoma-${tag}.zip -r release - - rclone copyto akkoma-${tag}.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-${tag}-musl.zip + - zip akkoma-amd64.zip -r release + - rclone copyto akkoma-amd64.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-amd64-musl.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index e3209cfcc..22644b03c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `/api/v1/statuses/{id}/card` - LDAP authenticator - Chats, they were half-baked. Just use PMs. +- Prometheus, it causes massive slowdown ## 2022.07 diff --git a/config/config.exs b/config/config.exs index 21247bbe5..0f0daf796 100644 --- a/config/config.exs +++ b/config/config.exs @@ -623,13 +623,6 @@ config :pleroma, Pleroma.Emails.NewUsersDigestEmail, enabled: false -config :prometheus, Pleroma.Web.Endpoint.MetricsExporter, - enabled: false, - auth: false, - ip_whitelist: [], - path: "/api/pleroma/app_metrics", - format: :text - config :pleroma, Pleroma.ScheduledActivity, daily_user_limit: 25, total_user_limit: 300, diff --git a/config/description.exs b/config/description.exs index 910953a91..1eb0a4161 100644 --- a/config/description.exs +++ b/config/description.exs @@ -3024,43 +3024,6 @@ } ] }, - %{ - group: :prometheus, - key: Pleroma.Web.Endpoint.MetricsExporter, - type: :group, - description: "Prometheus app metrics endpoint configuration", - children: [ - %{ - key: :enabled, - type: :boolean, - description: "[Pleroma extension] Enables app metrics endpoint." - }, - %{ - key: :ip_whitelist, - label: "IP Whitelist", - type: [{:list, :string}, {:list, :charlist}, {:list, :tuple}], - description: "Restrict access of app metrics endpoint to the specified IP addresses." - }, - %{ - key: :auth, - type: [:boolean, :tuple], - description: "Enables HTTP Basic Auth for app metrics endpoint.", - suggestion: [false, {:basic, "myusername", "mypassword"}] - }, - %{ - key: :path, - type: :string, - description: "App metrics endpoint URI path.", - suggestions: ["/api/pleroma/app_metrics"] - }, - %{ - key: :format, - type: :atom, - description: "App metrics endpoint output format.", - suggestions: [:text, :protobuf] - } - ] - }, %{ group: :pleroma, key: ConcurrentLimiter, diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 6bda2e1d9..e29bf3ca3 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -53,7 +53,6 @@ def start(_type, _args) do Config.DeprecationWarnings.warn() Pleroma.Web.Plugs.HTTPSecurityPlug.warn_if_disabled() Pleroma.ApplicationRequirements.verify!() - setup_instrumenters() load_custom_modules() Pleroma.Docs.JSON.compile() limiters_setup() @@ -143,29 +142,6 @@ def load_custom_modules do end end - defp setup_instrumenters do - require Prometheus.Registry - - if Application.get_env(:prometheus, Pleroma.Repo.Instrumenter) do - :ok = - :telemetry.attach( - "prometheus-ecto", - [:pleroma, :repo, :query], - &Pleroma.Repo.Instrumenter.handle_event/4, - %{} - ) - - Pleroma.Repo.Instrumenter.setup() - end - - Pleroma.Web.Endpoint.MetricsExporter.setup() - Pleroma.Web.Endpoint.PipelineInstrumenter.setup() - - # Note: disabled until prometheus-phx is integrated into prometheus-phoenix: - # Pleroma.Web.Endpoint.Instrumenter.setup() - PrometheusPhx.setup() - end - defp cachex_children do [ build_cachex("used_captcha", ttl_interval: seconds_valid_interval()), diff --git a/lib/pleroma/config/transfer_task.ex b/lib/pleroma/config/transfer_task.ex index a4dc92ee0..6a3184e6c 100644 --- a/lib/pleroma/config/transfer_task.ex +++ b/lib/pleroma/config/transfer_task.ex @@ -50,8 +50,7 @@ def load_and_update_env(deleted_settings \\ [], restart_pleroma? \\ true) do started_applications = Application.started_applications() - # TODO: some problem with prometheus after restart! - reject = [nil, :prometheus, :postgrex] + reject = [nil, :postgrex] reject = if restart_pleroma? do diff --git a/lib/pleroma/repo.ex b/lib/pleroma/repo.ex index 61b64ed3e..1fca0fccb 100644 --- a/lib/pleroma/repo.ex +++ b/lib/pleroma/repo.ex @@ -11,8 +11,6 @@ defmodule Pleroma.Repo do import Ecto.Query require Logger - defmodule Instrumenter, do: use(Prometheus.EctoInstrumenter) - @doc """ Dynamically loads the repository url from the DATABASE_URL environment variable. diff --git a/lib/pleroma/web/endpoint.ex b/lib/pleroma/web/endpoint.ex index 2e7e9692e..6dd66a424 100644 --- a/lib/pleroma/web/endpoint.ex +++ b/lib/pleroma/web/endpoint.ex @@ -161,47 +161,6 @@ defmodule Pleroma.Web.Endpoint do plug(Pleroma.Web.Plugs.RemoteIp) - defmodule Instrumenter do - use Prometheus.PhoenixInstrumenter - end - - defmodule PipelineInstrumenter do - use Prometheus.PlugPipelineInstrumenter - end - - defmodule MetricsExporter do - use Prometheus.PlugExporter - end - - defmodule MetricsExporterCaller do - @behaviour Plug - - def init(opts), do: opts - - def call(conn, opts) do - prometheus_config = Application.get_env(:prometheus, MetricsExporter, []) - ip_whitelist = List.wrap(prometheus_config[:ip_whitelist]) - - cond do - !prometheus_config[:enabled] -> - conn - - ip_whitelist != [] and - !Enum.find(ip_whitelist, fn ip -> - Pleroma.Helpers.InetHelper.parse_address(ip) == {:ok, conn.remote_ip} - end) -> - conn - - true -> - MetricsExporter.call(conn, opts) - end - end - end - - plug(PipelineInstrumenter) - - plug(MetricsExporterCaller) - plug(Pleroma.Web.Router) @doc """ diff --git a/mix.exs b/mix.exs index a0eef4f1d..1e1c06b7b 100644 --- a/mix.exs +++ b/mix.exs @@ -163,18 +163,6 @@ defp deps do {:http_signatures, "~> 0.1.1"}, {:telemetry, "~> 0.3"}, {:poolboy, "~> 1.5"}, - {:prometheus, "~> 4.6"}, - {:prometheus_ex, - git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", - ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", - override: true}, - {:prometheus_plugs, "~> 1.1"}, - {:prometheus_phoenix, "~> 1.3"}, - # Note: once `prometheus_phx` is integrated into `prometheus_phoenix`, remove the former: - {:prometheus_phx, - git: "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", - branch: "no-logging"}, - {:prometheus_ecto, "~> 1.4"}, {:recon, "~> 2.5"}, {:quack, "~> 0.1.1"}, {:joken, "~> 2.0"}, diff --git a/test/pleroma/web/endpoint/metrics_exporter_test.exs b/test/pleroma/web/endpoint/metrics_exporter_test.exs deleted file mode 100644 index 376e82149..000000000 --- a/test/pleroma/web/endpoint/metrics_exporter_test.exs +++ /dev/null @@ -1,69 +0,0 @@ -# Pleroma: A lightweight social networking server -# Copyright © 2017-2021 Pleroma Authors -# SPDX-License-Identifier: AGPL-3.0-only - -defmodule Pleroma.Web.Endpoint.MetricsExporterTest do - # Modifies AppEnv, has to stay synchronous - use Pleroma.Web.ConnCase - - alias Pleroma.Web.Endpoint.MetricsExporter - - defp config do - Application.get_env(:prometheus, MetricsExporter) - end - - describe "with default config" do - test "does NOT expose app metrics", %{conn: conn} do - conn - |> get(config()[:path]) - |> json_response(404) - end - end - - describe "when enabled" do - setup do - initial_config = config() - on_exit(fn -> Application.put_env(:prometheus, MetricsExporter, initial_config) end) - - Application.put_env( - :prometheus, - MetricsExporter, - Keyword.put(initial_config, :enabled, true) - ) - end - - test "serves app metrics", %{conn: conn} do - conn = get(conn, config()[:path]) - assert response = response(conn, 200) - - for metric <- [ - "http_requests_total", - "http_request_duration_microseconds", - "phoenix_controller_call_duration", - "telemetry_scrape_duration", - "erlang_vm_memory_atom_bytes_total" - ] do - assert response =~ ~r/#{metric}/ - end - end - - test "when IP whitelist configured, " <> - "serves app metrics only if client IP is whitelisted", - %{conn: conn} do - Application.put_env( - :prometheus, - MetricsExporter, - Keyword.put(config(), :ip_whitelist, ["127.127.127.127", {1, 1, 1, 1}, '255.255.255.255']) - ) - - conn - |> get(config()[:path]) - |> json_response(404) - - conn - |> Map.put(:remote_ip, {127, 127, 127, 127}) - |> get(config()[:path]) - |> response(200) - end - end -end From 26830387ac899dc106e899ee50e78649e8c6f15e Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 21 Jul 2022 12:39:53 +0100 Subject: [PATCH 18/82] prune lockfile --- mix.lock | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/mix.lock b/mix.lock index 49c620a32..2d3c9f33e 100644 --- a/mix.lock +++ b/mix.lock @@ -1,8 +1,5 @@ %{ - "accept": {:hex, :accept, "0.3.5", "b33b127abca7cc948bbe6caa4c263369abf1347cfa9d8e699c6d214660f10cd1", [:rebar3], [], "hexpm", "11b18c220bcc2eab63b5470c038ef10eb6783bcb1fcdb11aa4137defa5ac1bb8"}, "base62": {:hex, :base62, "1.2.2", "85c6627eb609317b70f555294045895ffaaeb1758666ab9ef9ca38865b11e629", [:mix], [{:custom_base, "~> 0.2.1", [hex: :custom_base, repo: "hexpm", optional: false]}], "hexpm", "d41336bda8eaa5be197f1e4592400513ee60518e5b9f4dcf38f4b4dae6f377bb"}, - "base64url": {:hex, :base64url, "0.0.1", "36a90125f5948e3afd7be97662a1504b934dd5dac78451ca6e9abf85a10286be", [:rebar], [], "hexpm"}, - "bbcode": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/bbcode.git", "f2d267675e9a7e1ad1ea9beb4cc23382762b66c2", [ref: "v0.2.0"]}, "bbcode_pleroma": {:hex, :bbcode_pleroma, "0.2.0", "d36f5bca6e2f62261c45be30fa9b92725c0655ad45c99025cb1c3e28e25803ef", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "19851074419a5fedb4ef49e1f01b30df504bb5dbb6d6adfc135238063bebd1c3"}, "bcrypt_elixir": {:hex, :bcrypt_elixir, "2.3.1", "5114d780459a04f2b4aeef52307de23de961b69e13a5cd98a911e39fda13f420", [:make, :mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "42182d5f46764def15bf9af83739e3bf4ad22661b1c34fc3e88558efced07279"}, "benchee": {:hex, :benchee, "1.1.0", "f3a43817209a92a1fade36ef36b86e1052627fd8934a8b937ac9ab3a76c43062", [:mix], [{:deep_merge, "~> 1.0", [hex: :deep_merge, repo: "hexpm", optional: false]}, {:statistex, "~> 1.0", [hex: :statistex, repo: "hexpm", optional: false]}], "hexpm", "7da57d545003165a012b587077f6ba90b89210fd88074ce3c60ce239eb5e6d93"}, @@ -21,7 +18,6 @@ "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.3.1", "ebd1a1d7aff97f27c66654e78ece187abdc646992714164380d8a041eda16754", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "3a6efd3366130eab84ca372cbd4a7d3c3a97bdfcfb4911233b035d117063f0af"}, "cowlib": {:hex, :cowlib, "2.11.0", "0b9ff9c346629256c42ebe1eeb769a83c6cb771a6ee5960bd110ab0b9b872063", [:make, :rebar3], [], "hexpm", "2b3e9da0b21c4565751a6d4901c20d1b4cc25cbb7fd50d91d2ab6dd287bc86a9"}, "credo": {:hex, :credo, "1.6.5", "330ca591c12244ab95498d8f47994c493064b2689febf1236d43d596b4f2261d", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2.8", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "101de53e6907397c3246ccd2cc9b9f0d3fc0b7805b8e1c1c3d818471fc85bafd"}, - "crontab": {:hex, :crontab, "1.1.8", "2ce0e74777dfcadb28a1debbea707e58b879e6aa0ffbf9c9bb540887bce43617", [:mix], [{:ecto, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm"}, "crypt": {:git, "https://github.com/msantos/crypt.git", "f75cd55325e33cbea198fb41fe41871392f8fb76", [ref: "f75cd55325e33cbea198fb41fe41871392f8fb76"]}, "custom_base": {:hex, :custom_base, "0.2.1", "4a832a42ea0552299d81652aa0b1f775d462175293e99dfbe4d7dbaab785a706", [:mix], [], "hexpm", "8df019facc5ec9603e94f7270f1ac73ddf339f56ade76a721eaa57c1493ba463"}, "db_connection": {:hex, :db_connection, "2.4.2", "f92e79aff2375299a16bcb069a14ee8615c3414863a6fef93156aee8e86c2ff3", [:mix], [{:connection, "~> 1.0", [hex: :connection, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4fe53ca91b99f55ea249693a0229356a08f4d1a7931d8ffa79289b145fe83668"}, @@ -34,13 +30,9 @@ "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_psql_extras": {:hex, :ecto_psql_extras, "0.7.4", "5d43fd088d39a158c860b17e8d210669587f63ec89ea122a4654861c8c6e2db4", [:mix], [{:ecto_sql, "~> 3.4", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:postgrex, ">= 0.15.7", [hex: :postgrex, repo: "hexpm", optional: false]}, {:table_rex, "~> 3.1.1", [hex: :table_rex, repo: "hexpm", optional: false]}], "hexpm", "311db02f1b772e3d0dc7f56a05044b5e1499d78ed6abf38885e1ca70059449e5"}, "ecto_sql": {:hex, :ecto_sql, "3.8.3", "a7d22c624202546a39d615ed7a6b784580391e65723f2d24f65941b4dd73d471", [:mix], [{:db_connection, "~> 2.5 or ~> 2.4.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.8.4", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0 or ~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "348cb17fb9e6daf6f251a87049eafcb57805e2892e5e6a0f5dea0985d367329b"}, - "eimp": {:hex, :eimp, "1.0.14", "fc297f0c7e2700457a95a60c7010a5f1dcb768a083b6d53f49cd94ab95a28f22", [:rebar3], [{:p1_utils, "1.0.18", [hex: :p1_utils, repo: "hexpm", optional: false]}], "hexpm", "501133f3112079b92d9e22da8b88bf4f0e13d4d67ae9c15c42c30bd25ceb83b6"}, "elasticsearch": {:git, "https://akkoma.dev/AkkomaGang/elasticsearch-elixir.git", "6cd946f75f6ab9042521a009d1d32d29a90113ca", [ref: "main"]}, - "elastix": {:hex, :elastix, "0.10.0", "7567da885677ba9deffc20063db5f3ca8cd10f23cff1ab3ed9c52b7063b7e340", [:mix], [{:httpoison, "~> 1.4", [hex: :httpoison, repo: "hexpm", optional: false]}, {:poison, "~> 3.0 or ~> 4.0", [hex: :poison, repo: "hexpm", optional: true]}, {:retry, "~> 0.8", [hex: :retry, repo: "hexpm", optional: false]}], "hexpm", "5fb342ce068b20f7845f5dd198c2dc80d967deafaa940a6e51b846db82696d1d"}, "elixir_make": {:hex, :elixir_make, "0.6.3", "bc07d53221216838d79e03a8019d0839786703129599e9619f4ab74c8c096eac", [:mix], [], "hexpm", "f5cbd651c5678bcaabdbb7857658ee106b12509cd976c2c2fca99688e1daf716"}, - "esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"}, "eternal": {:hex, :eternal, "1.2.2", "d1641c86368de99375b98d183042dd6c2b234262b8d08dfd72b9eeaafc2a1abd", [:mix], [], "hexpm", "2c9fe32b9c3726703ba5e1d43a1d255a4f3f2d8f8f9bc19f094c7cb1a7a9e782"}, - "ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"}, "ex_aws": {:hex, :ex_aws, "2.1.9", "dc4865ecc20a05190a34a0ac5213e3e5e2b0a75a0c2835e923ae7bfeac5e3c31", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 3.0", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "3e6c776703c9076001fbe1f7c049535f042cb2afa0d2cbd3b47cbc4e92ac0d10"}, "ex_aws_s3": {:hex, :ex_aws_s3, "2.3.3", "61412e524616ea31d3f31675d8bc4c73f277e367dee0ae8245610446f9b778aa", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0044f0b6f9ce925666021eafd630de64c2b3404d79c85245cc7c8a9a32d7f104"}, "ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"}, @@ -55,14 +47,11 @@ "flake_id": {:hex, :flake_id, "0.1.0", "7716b086d2e405d09b647121a166498a0d93d1a623bead243e1f74216079ccb3", [:mix], [{:base62, "~> 1.2", [hex: :base62, repo: "hexpm", optional: false]}, {:ecto, ">= 2.0.0", [hex: :ecto, repo: "hexpm", optional: true]}], "hexpm", "31fc8090fde1acd267c07c36ea7365b8604055f897d3a53dd967658c691bd827"}, "floki": {:hex, :floki, "0.33.1", "f20f1eb471e726342b45ccb68edb9486729e7df94da403936ea94a794f072781", [:mix], [{:html_entities, "~> 0.5.0", [hex: :html_entities, repo: "hexpm", optional: false]}], "hexpm", "461035fd125f13fdf30f243c85a0b1e50afbec876cbf1ceefe6fddd2e6d712c6"}, "gen_smtp": {:hex, :gen_smtp, "0.15.0", "9f51960c17769b26833b50df0b96123605a8024738b62db747fece14eb2fbfcc", [:rebar3], [], "hexpm", "29bd14a88030980849c7ed2447b8db6d6c9278a28b11a44cafe41b791205440f"}, - "gen_stage": {:hex, :gen_stage, "0.14.3", "d0c66f1c87faa301c1a85a809a3ee9097a4264b2edf7644bf5c123237ef732bf", [:mix], [], "hexpm"}, - "gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"}, "gettext": {:git, "https://github.com/tusooa/gettext.git", "72fb2496b6c5280ed911bdc3756890e7f38a4808", [ref: "72fb2496b6c5280ed911bdc3756890e7f38a4808"]}, "gun": {:hex, :gun, "2.0.0-rc.2", "7c489a32dedccb77b6e82d1f3c5a7dadfbfa004ec14e322cdb5e579c438632d2", [:make, :rebar3], [{:cowlib, "2.11.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "6b9d1eae146410d727140dbf8b404b9631302ecc2066d1d12f22097ad7d254fc"}, "hackney": {:hex, :hackney, "1.18.1", "f48bf88f521f2a229fc7bae88cf4f85adc9cd9bcf23b5dc8eb6a1788c662c4f6", [:rebar3], [{:certifi, "~>2.9.0", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "~>6.1.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "~>1.0.0", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:parse_trans, "3.3.1", [hex: :parse_trans, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "~>1.1.0", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}, {:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a4ecdaff44297e9b5894ae499e9a070ea1888c84afdd1fd9b7b2bc384950128e"}, "hpax": {:hex, :hpax, "0.1.1", "2396c313683ada39e98c20a75a82911592b47e5c24391363343bde74f82396ca", [:mix], [], "hexpm", "0ae7d5a0b04a8a60caf7a39fcf3ec476f35cc2cc16c05abea730d3ce6ac6c826"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, - "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"}, "http_signatures": {:hex, :http_signatures, "0.1.1", "ca7ebc1b61542b163644c8c3b1f0e0f41037d35f2395940d3c6c7deceab41fd8", [:mix], [], "hexpm", "cc3b8a007322cc7b624c0c15eec49ee58ac977254ff529a3c482f681465942a3"}, "httpoison": {:hex, :httpoison, "1.8.1", "df030d96de89dad2e9983f92b0c506a642d4b1f4a819c96ff77d12796189c63e", [:mix], [{:hackney, "~> 1.17", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "35156a6d678d6d516b9229e208942c405cf21232edd632327ecfaf4fd03e79e0"}, "idna": {:hex, :idna, "6.1.1", "8a63070e9f7d0c62eb9d9fcb360a7de382448200fbbd1b106cc96d3d8099df8d", [:rebar3], [{:unicode_util_compat, "~>0.7.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "92376eb7894412ed19ac475e4a86f7b413c1b9fbb5bd16dccd57934157944cea"}, @@ -71,7 +60,6 @@ "joken": {:hex, :joken, "2.5.0", "09be497d804b8115eb6f07615cef2e60c2a1008fb89dc0aef0d4c4b4609b99aa", [:mix], [{:jose, "~> 1.11.2", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "22b25c89617c5ed8ca7b31026340a25ea0f9ca7160f9706b79be9ed81fdf74e7"}, "jose": {:hex, :jose, "1.11.2", "f4c018ccf4fdce22c71e44d471f15f723cb3efab5d909ab2ba202b5bf35557b3", [:mix, :rebar3], [], "hexpm", "98143fbc48d55f3a18daba82d34fe48959d44538e9697c08f34200fa5f0947d2"}, "jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"}, - "libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"}, "linkify": {:git, "https://akkoma.dev/AkkomaGang/linkify.git", "2567e2c1073fa371fd26fd66dfa5bc77b6919c16", [branch: "bugfix/line-ending-buffer"]}, "majic": {:hex, :majic, "1.0.0", "37e50648db5f5c2ff0c9fb46454d034d11596c03683807b9fb3850676ffdaab3", [:make, :mix], [{:elixir_make, "~> 0.6.1", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 0.2", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "7905858f76650d49695f14ea55cd9aaaee0c6654fa391671d4cf305c275a0a9e"}, "makeup": {:hex, :makeup, "1.1.0", "6b67c8bc2882a6b6a445859952a602afc1a41c2e08379ca057c0f525366fc3ca", [:mix], [{:nimble_parsec, "~> 1.2.2 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "0a45ed501f4a8897f580eabf99a2e5234ea3e75a4373c8a52824f6e873be57a6"}, @@ -82,20 +70,15 @@ "mime": {:hex, :mime, "1.6.0", "dabde576a497cef4bbdd60aceee8160e02a6c89250d6c0b29e56c0dfb00db3d2", [:mix], [], "hexpm", "31a1a8613f8321143dde1dafc36006a17d28d02bdfecb9e95a880fa7aabd19a7"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, "mint": {:hex, :mint, "1.4.2", "50330223429a6e1260b2ca5415f69b0ab086141bc76dc2fbf34d7c389a6675b2", [:mix], [{:castore, "~> 0.1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "ce75a5bbcc59b4d7d8d70f8b2fc284b1751ffb35c7b6a6302b5192f8ab4ddd80"}, - "mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"}, "mock": {:hex, :mock, "0.3.7", "75b3bbf1466d7e486ea2052a73c6e062c6256fb429d6797999ab02fa32f29e03", [:mix], [{:meck, "~> 0.9.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "4da49a4609e41fd99b7836945c26f373623ea968cfb6282742bcb94440cf7e5c"}, "mogrify": {:hex, :mogrify, "0.9.2", "b360984adea7dd6a55f18028e6327973c58de7f548fdb86c9859848aa904d5b0", [:mix], [], "hexpm", "c18d10fd70ca20e2585301616c89f6e4f7159d92efc9cc8ee579e00c886f699d"}, "mox": {:hex, :mox, "1.0.2", "dc2057289ac478b35760ba74165b4b3f402f68803dd5aecd3bfd19c183815d64", [:mix], [], "hexpm", "f9864921b3aaf763c8741b5b8e6f908f44566f1e427b2630e89e9a73b981fef2"}, - "myhtmlex": {:git, "https://git.pleroma.social/pleroma/myhtmlex.git", "ad0097e2f61d4953bfef20fb6abddf23b87111e6", [ref: "ad0097e2f61d4953bfef20fb6abddf23b87111e6", submodules: true]}, "nimble_options": {:hex, :nimble_options, "0.4.0", "c89babbab52221a24b8d1ff9e7d838be70f0d871be823165c94dd3418eea728f", [:mix], [], "hexpm", "e6701c1af326a11eea9634a3b1c62b475339ace9456c1a23ec3bc9a847bca02d"}, "nimble_parsec": {:hex, :nimble_parsec, "1.2.3", "244836e6e3f1200c7f30cb56733fd808744eca61fd182f731eac4af635cc6d0b", [:mix], [], "hexpm", "c8d789e39b9131acf7b99291e93dae60ab48ef14a7ee9d58c6964f59efb570b0"}, "nimble_pool": {:hex, :nimble_pool, "0.2.6", "91f2f4c357da4c4a0a548286c84a3a28004f68f05609b4534526871a22053cde", [:mix], [], "hexpm", "1c715055095d3f2705c4e236c18b618420a35490da94149ff8b580a2144f653f"}, - "nodex": {:git, "https://git.pleroma.social/pleroma/nodex", "cb6730f943cfc6aad674c92161be23a8411f15d1", [ref: "cb6730f943cfc6aad674c92161be23a8411f15d1"]}, "oban": {:hex, :oban, "2.12.1", "f604d7e6a8be9fda4a9b0f6cebbd633deba569f85dbff70c4d25d99a6f023177", [:mix], [{:ecto_sql, "~> 3.6", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.16", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "9b1844c2b74e0d788b73e5144b0c9d5674cb775eae29d88a36f3c3b48d42d058"}, "open_api_spex": {:hex, :open_api_spex, "3.10.0", "94e9521ad525b3fcf6dc77da7c45f87fdac24756d4de588cb0816b413e7c1844", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:poison, "~> 3.1", [hex: :poison, repo: "hexpm", optional: true]}], "hexpm", "2dbb2bde3d2b821f06936e8dfaf3284331186556291946d84eeba3750ac28765"}, - "p1_utils": {:hex, :p1_utils, "1.0.18", "3fe224de5b2e190d730a3c5da9d6e8540c96484cf4b4692921d1e28f0c32b01c", [:rebar3], [], "hexpm", "1fc8773a71a15553b179c986b22fbeead19b28fe486c332d4929700ffeb71f88"}, "parse_trans": {:hex, :parse_trans, "3.3.1", "16328ab840cc09919bd10dab29e431da3af9e9e7e7e6f0089dd5a2d2820011d8", [:rebar3], [], "hexpm", "07cd9577885f56362d414e8c4c4e6bdf10d43a8767abb92d24cbe8b24c54888b"}, - "pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"}, "phoenix": {:hex, :phoenix, "1.6.11", "29f3c0fd12fa1fc4d4b05e341578e55bc78d96ea83a022587a7e276884d397e4", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 1.0", [hex: :phoenix_view, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1664e34f80c25ea4918fbadd957f491225ef601c0e00b4e644b1a772864bfbc2"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.4.0", "0672ed4e4808b3fbed494dded89958e22fb882de47a97634c0b13e7b0b5f7720", [:mix], [{:ecto, "~> 3.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 3.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "09864e558ed31ee00bd48fcc1d4fc58ae9678c9e81649075431e69dbabb43cc1"}, "phoenix_html": {:hex, :phoenix_html, "3.2.0", "1c1219d4b6cb22ac72f12f73dc5fad6c7563104d083f711c3fcd8551a1f4ae11", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "36ec97ba56d25c0136ef1992c37957e4246b649d620958a1f9fa86165f8bc54f"}, @@ -112,18 +95,10 @@ "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"}, "postgrex": {:hex, :postgrex, "0.16.3", "fac79a81a9a234b11c44235a4494d8565303fa4b9147acf57e48978a074971db", [:mix], [{:connection, "~> 1.1", [hex: :connection, repo: "hexpm", optional: false]}, {:db_connection, "~> 2.1", [hex: :db_connection, repo: "hexpm", optional: false]}, {:decimal, "~> 1.5 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:table, "~> 0.1.0", [hex: :table, repo: "hexpm", optional: true]}], "hexpm", "aeaae1d2d1322da4e5fe90d241b0a564ce03a3add09d7270fb85362166194590"}, "pot": {:hex, :pot, "1.0.2", "13abb849139fdc04ab8154986abbcb63bdee5de6ed2ba7e1713527e33df923dd", [:rebar3], [], "hexpm", "78fe127f5a4f5f919d6ea5a2a671827bd53eb9d37e5b4128c0ad3df99856c2e0"}, - "prometheus": {:hex, :prometheus, "4.8.2", "b88f24279dd7a1f512cb090595ff6c88b50aad0a6b394a4c4983725723dcd834", [:mix, :rebar3], [{:quantile_estimator, "~> 0.2.1", [hex: :quantile_estimator, repo: "hexpm", optional: false]}], "hexpm", "c3abd6521e52cec4f0d8eca603cf214dfc84d8a27aa85946639f1424b8554d98"}, - "prometheus_ecto": {:hex, :prometheus_ecto, "1.4.3", "3dd4da1812b8e0dbee81ea58bb3b62ed7588f2eae0c9e97e434c46807ff82311", [:mix], [{:ecto, "~> 2.0 or ~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "8d66289f77f913b37eda81fd287340c17e61a447549deb28efc254532b2bed82"}, - "prometheus_ex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus.ex.git", "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5", [ref: "a4e9beb3c1c479d14b352fd9d6dd7b1f6d7deee5"]}, - "prometheus_phoenix": {:hex, :prometheus_phoenix, "1.3.0", "c4b527e0b3a9ef1af26bdcfbfad3998f37795b9185d475ca610fe4388fdd3bb5", [:mix], [{:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.3 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}], "hexpm", "c4d1404ac4e9d3d963da601db2a7d8ea31194f0017057fabf0cfb9bf5a6c8c75"}, - "prometheus_phx": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/prometheus-phx.git", "9cd8f248c9381ffedc799905050abce194a97514", [branch: "no-logging"]}, - "prometheus_plugs": {:hex, :prometheus_plugs, "1.1.5", "25933d48f8af3a5941dd7b621c889749894d8a1082a6ff7c67cc99dec26377c5", [:mix], [{:accept, "~> 0.1", [hex: :accept, repo: "hexpm", optional: false]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}, {:prometheus_ex, "~> 1.1 or ~> 2.0 or ~> 3.0", [hex: :prometheus_ex, repo: "hexpm", optional: false]}, {:prometheus_process_collector, "~> 1.1", [hex: :prometheus_process_collector, repo: "hexpm", optional: true]}], "hexpm", "0273a6483ccb936d79ca19b0ab629aef0dba958697c94782bb728b920dfc6a79"}, "quack": {:hex, :quack, "0.1.1", "cca7b4da1a233757fdb44b3334fce80c94785b3ad5a602053b7a002b5a8967bf", [:mix], [{:poison, ">= 1.0.0", [hex: :poison, repo: "hexpm", optional: false]}, {:tesla, "~> 1.2.0", [hex: :tesla, repo: "hexpm", optional: false]}], "hexpm", "d736bfa7444112eb840027bb887832a0e403a4a3437f48028c3b29a2dbbd2543"}, - "quantile_estimator": {:hex, :quantile_estimator, "0.2.1", "ef50a361f11b5f26b5f16d0696e46a9e4661756492c981f7b2229ef42ff1cd15", [:rebar3], [], "hexpm", "282a8a323ca2a845c9e6f787d166348f776c1d4a41ede63046d72d422e3da946"}, "ranch": {:hex, :ranch, "1.8.0", "8c7a100a139fd57f17327b6413e4167ac559fbc04ca7448e9be9057311597a1d", [:make, :rebar3], [], "hexpm", "49fbcfd3682fab1f5d109351b61257676da1a2fdbe295904176d5e521a2ddfe5"}, "recon": {:hex, :recon, "2.5.2", "cba53fa8db83ad968c9a652e09c3ed7ddcc4da434f27c3eaa9ca47ffb2b1ff03", [:mix, :rebar3], [], "hexpm", "2c7523c8dee91dff41f6b3d63cba2bd49eb6d2fe5bf1eec0df7f87eb5e230e1c"}, "remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]}, - "retry": {:hex, :retry, "0.15.0", "ba6aaeba92905a396c18c299a07e638947b2ba781e914f803202bc1b9ae867c3", [:mix], [], "hexpm", "93d3310bce78c0a30cc94610684340a14adfc9136856a3f662e4d9ce6013c784"}, "search_parser": {:git, "https://github.com/FloatingGhost/pleroma-contrib-search-parser.git", "08971a81e68686f9ac465cfb6661d51c5e4e1e7f", [ref: "08971a81e68686f9ac465cfb6661d51c5e4e1e7f"]}, "sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, From cb6e7359af353bb19262ac94b92b41a62819523e Mon Sep 17 00:00:00 2001 From: floatingghost Date: Fri, 22 Jul 2022 14:55:38 +0000 Subject: [PATCH 19/82] add bubble timeline (#100) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/100 --- config/config.exs | 3 +- config/description.exs | 6 +++ lib/pleroma/web/activity_pub/activity_pub.ex | 7 +++ .../api_spec/operations/timeline_operation.ex | 20 +++++++ .../controllers/timeline_controller.ex | 30 ++++++++++- .../web/mastodon_api/websocket_handler.ex | 5 ++ lib/pleroma/web/router.ex | 1 + .../controllers/timeline_controller_test.exs | 53 +++++++++++++++++++ 8 files changed, 123 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index 0f0daf796..cfe207dcc 100644 --- a/config/config.exs +++ b/config/config.exs @@ -259,7 +259,8 @@ show_reactions: true, password_reset_token_validity: 60 * 60 * 24, profile_directory: true, - privileged_staff: false + privileged_staff: false, + local_bubble: [] config :pleroma, :welcome, direct_message: [ diff --git a/config/description.exs b/config/description.exs index 1eb0a4161..f7e3c714f 100644 --- a/config/description.exs +++ b/config/description.exs @@ -947,6 +947,12 @@ type: :boolean, description: "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses)" + }, + %{ + key: :local_bubble, + type: {:list, :string}, + description: + "List of instances that make up your local bubble (closely-related instances). Used to populate the 'bubble' timeline (domain only)." } ] }, diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 29055668b..3e58864c8 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1154,6 +1154,13 @@ defp restrict_instance(query, %{instance: instance}) when is_binary(instance) do ) end + defp restrict_instance(query, %{instance: instance}) when is_list(instance) do + from( + activity in query, + where: fragment("split_part(actor::text, '/'::text, 3) = ANY(?)", ^instance) + ) + end + defp restrict_instance(query, _), do: query defp restrict_filtered(query, %{user: %User{} = user}) do diff --git a/lib/pleroma/web/api_spec/operations/timeline_operation.ex b/lib/pleroma/web/api_spec/operations/timeline_operation.ex index d375c76b8..3eb6f700b 100644 --- a/lib/pleroma/web/api_spec/operations/timeline_operation.ex +++ b/lib/pleroma/web/api_spec/operations/timeline_operation.ex @@ -75,6 +75,26 @@ def public_operation do } end + def bubble_operation do + %Operation{ + tags: ["Timelines"], + summary: "Bubble timeline", + security: [%{"oAuth" => ["read:statuses"]}], + parameters: [ + only_media_param(), + remote_param(), + with_muted_param(), + exclude_visibilities_param(), + reply_visibility_param() | pagination_params() + ], + operationId: "TimelineController.bubble", + responses: %{ + 200 => Operation.response("Array of Status", "application/json", array_of_statuses()), + 401 => Operation.response("Error", "application/json", ApiError) + } + } + end + def hashtag_operation do %Operation{ tags: ["Timelines"], diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 10c279893..620026374 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -26,8 +26,9 @@ defmodule Pleroma.Web.MastodonAPI.TimelineController do plug(RateLimiter, [name: :timeline, bucket_name: :home_timeline] when action == :home) plug(RateLimiter, [name: :timeline, bucket_name: :hashtag_timeline] when action == :hashtag) plug(RateLimiter, [name: :timeline, bucket_name: :list_timeline] when action == :list) + plug(RateLimiter, [name: :timeline, bucket_name: :bubble_timeline] when action == :bubble) - plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct]) + plug(OAuthScopesPlug, %{scopes: ["read:statuses"]} when action in [:home, :direct, :bubble]) plug(OAuthScopesPlug, %{scopes: ["read:lists"]} when action == :list) plug( @@ -125,6 +126,33 @@ def public(%{assigns: %{user: user}} = conn, params) do end end + # GET /api/v1/timelines/bubble + def bubble(%{assigns: %{user: user}} = conn, params) do + bubble_instances = Config.get([:instance, :local_bubble], []) + + if is_nil(user) do + fail_on_bad_auth(conn) + else + activities = + params + |> Map.put(:type, ["Create"]) + |> Map.put(:blocking_user, user) + |> Map.put(:muting_user, user) + |> Map.put(:reply_filtering_user, user) + |> Map.put(:instance, bubble_instances) + |> ActivityPub.fetch_public_activities() + + conn + |> add_link_headers(activities) + |> render("index.json", + activities: activities, + for: user, + as: :activity, + with_muted: Map.get(params, :with_muted, false) + ) + end + end + defp fail_on_bad_auth(conn) do render_error(conn, :unauthorized, "authorization required for timeline view") end diff --git a/lib/pleroma/web/mastodon_api/websocket_handler.ex b/lib/pleroma/web/mastodon_api/websocket_handler.ex index b978167b6..861a7ce3e 100644 --- a/lib/pleroma/web/mastodon_api/websocket_handler.ex +++ b/lib/pleroma/web/mastodon_api/websocket_handler.ex @@ -65,6 +65,11 @@ def websocket_handle(:pong, state) do # We only receive pings for now def websocket_handle(:ping, state), do: {:ok, state} + def websocket_handle({:text, "ping"}, state) do + if state.timer, do: Process.cancel_timer(state.timer) + {:reply, {:text, "pong"}, %{state | timer: timer()}} + end + def websocket_handle(frame, state) do Logger.error("#{__MODULE__} received frame: #{inspect(frame)}") {:ok, state} diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index d413835bb..a0310bbb5 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -560,6 +560,7 @@ defmodule Pleroma.Web.Router do get("/timelines/home", TimelineController, :home) get("/timelines/direct", TimelineController, :direct) get("/timelines/list/:list_id", TimelineController, :list) + get("/timelines/bubble", TimelineController, :bubble) get("/announcements", AnnouncementController, :index) post("/announcements/:id/dismiss", AnnouncementController, :mark_read) diff --git a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs index 187982d92..7ef08f258 100644 --- a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs @@ -994,6 +994,59 @@ test "with `%{local: true, federated: false}`, forbids unauthenticated access to end end + describe "bubble" do + setup do: oauth_access(["read:statuses"]) + + test "it returns nothing if no bubble is configured", %{user: user, conn: conn} do + clear_config([:instance, :local_bubble], []) + {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"}) + + conn = get(conn, "/api/v1/timelines/bubble") + + assert [] = json_response_and_validate_schema(conn, :ok) + end + + test "filtering", %{conn: conn, user: user} do + clear_config([:instance, :local_bubble], []) + local_user = insert(:user) + remote_user = insert(:user, %{ap_id: "https://example.com/users/remote_user"}) + {:ok, user, local_user} = User.follow(user, local_user) + {:ok, _user, remote_user} = User.follow(user, remote_user) + + {:ok, local_activity} = CommonAPI.post(local_user, %{status: "Status"}) + remote_activity = create_remote_activity(remote_user) + + resp = + conn + |> get("/api/v1/timelines/bubble") + |> json_response_and_validate_schema(200) + |> Enum.map(& &1["id"]) + + assert Enum.empty?(resp) + + clear_config([:instance, :local_bubble], ["localhost:4001"]) + + one_instance = + conn + |> get("/api/v1/timelines/bubble") + |> json_response_and_validate_schema(200) + |> Enum.map(& &1["id"]) + + assert local_activity.id in one_instance + + clear_config([:instance, :local_bubble], ["localhost:4001", "example.com"]) + + two_instances = + conn + |> get("/api/v1/timelines/bubble") + |> json_response_and_validate_schema(200) + |> Enum.map(& &1["id"]) + + assert local_activity.id in two_instances + assert remote_activity.id in two_instances + end + end + defp create_remote_activity(user) do obj = insert(:note, %{ From 4c479926869f6c020c4ef1e22a90d3c17d90bd69 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Sat, 23 Jul 2022 18:58:45 +0000 Subject: [PATCH 20/82] bugfix/follow-state (#104) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/104 --- lib/mix/tasks/pleroma/user.ex | 32 ++++++++++++++++++++++++++++ lib/pleroma/user.ex | 8 ++++++- test/pleroma/web/common_api_test.exs | 16 +++++++++++--- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index f8c6d5781..8972d4cfb 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -487,6 +487,38 @@ def run(["list"]) do |> Stream.run() end + def run(["fix_follow_state", local_user, remote_user]) do + start_pleroma() + + with {:local, %User{} = local} <- {:local, User.get_by_nickname(local_user)}, + {:remote, %User{} = remote} <- {:remote, User.get_by_nickname(remote_user)}, + {:follow_data, %{data: %{"state" => request_state}}} <- + {:follow_data, Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(local, remote)} do + calculated_state = User.following?(local, remote) + + shell_info( + "Request state is #{request_state}, vs calculated state of following=#{calculated_state}" + ) + + if calculated_state == false && request_state == "accept" do + shell_info("Discrepancy found, fixing") + Pleroma.Web.CommonAPI.reject_follow_request(local, remote) + shell_info("Relationship fixed") + else + shell_info("No discrepancy found") + end + else + {:local, _} -> + shell_error("No local user #{local_user}") + + {:remote, _} -> + shell_error("No remote user #{remote_user}") + + {:follow_data, _} -> + shell_error("No follow data for #{local_user} and #{remote_user}") + end + end + defp set_moderator(user, value) do {:ok, user} = user diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index d66283632..9a56261a7 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -1448,13 +1448,19 @@ def block(%User{} = blocker, %User{} = blocked) do blocker end - # clear any requested follows as well + # clear any requested follows from both sides as well blocked = case CommonAPI.reject_follow_request(blocked, blocker) do {:ok, %User{} = updated_blocked} -> updated_blocked nil -> blocked end + blocker = + case CommonAPI.reject_follow_request(blocker, blocked) do + {:ok, %User{} = updated_blocker} -> updated_blocker + nil -> blocker + end + unsubscribe(blocked, blocker) unfollowing_blocked = Config.get([:activitypub, :unfollow_blocked], true) diff --git a/test/pleroma/web/common_api_test.exs b/test/pleroma/web/common_api_test.exs index 09b09fb14..fa751bf60 100644 --- a/test/pleroma/web/common_api_test.exs +++ b/test/pleroma/web/common_api_test.exs @@ -61,9 +61,11 @@ test "it posts a poll" do describe "blocking" do setup do blocker = insert(:user) - blocked = insert(:user) - User.follow(blocker, blocked) - User.follow(blocked, blocker) + blocked = insert(:user, local: false) + CommonAPI.follow(blocker, blocked) + CommonAPI.follow(blocked, blocker) + CommonAPI.accept_follow_request(blocker, blocked) + CommonAPI.accept_follow_request(blocked, blocked) %{blocker: blocker, blocked: blocked} end @@ -72,6 +74,9 @@ test "it blocks and federates", %{blocker: blocker, blocked: blocked} do with_mock Pleroma.Web.Federator, publish: fn _ -> nil end do + assert User.get_follow_state(blocker, blocked) == :follow_accept + refute is_nil(Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(blocker, blocked)) + assert {:ok, block} = CommonAPI.block(blocker, blocked) assert block.local @@ -79,6 +84,11 @@ test "it blocks and federates", %{blocker: blocker, blocked: blocked} do refute User.following?(blocker, blocked) refute User.following?(blocked, blocker) + refute User.get_follow_state(blocker, blocked) + + assert %{data: %{"state" => "reject"}} = + Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(blocker, blocked) + assert called(Pleroma.Web.Federator.publish(block)) end end From 8e94cbcac7828f3db153794ffb2ae9c5f4741629 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sat, 23 Jul 2022 20:00:38 +0100 Subject: [PATCH 21/82] bump version for release --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 1e1c06b7b..61521f72e 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.0.0"), + version: version("3.0.1"), elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), From c4e9c4bc95c5012a6d33fa4a69d613c672fd130d Mon Sep 17 00:00:00 2001 From: floatingghost Date: Sun, 24 Jul 2022 16:42:43 +0000 Subject: [PATCH 22/82] extend custom runtime system (#108) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/108 --- CHANGELOG.md | 5 ++++- docs/docs/configuration/cheatsheet.md | 17 ++++++++++++++++- lib/pleroma/utils.ex | 15 ++++++++++++++- test/fixtures/runtime_modules/first.ex | 2 ++ test/fixtures/runtime_modules/nope.exs | 1 + test/fixtures/runtime_modules/subdir/second.ex | 2 ++ test/pleroma/utils_test.exs | 7 +++++++ 7 files changed, 46 insertions(+), 3 deletions(-) create mode 100644 test/fixtures/runtime_modules/first.ex create mode 100644 test/fixtures/runtime_modules/nope.exs create mode 100644 test/fixtures/runtime_modules/subdir/second.ex diff --git a/CHANGELOG.md b/CHANGELOG.md index 22644b03c..d6dd4dd4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [Unreleased] +### Added +- extended runtime module support, see config cheatsheet + ### Fixed - Updated mastoFE path, for the newer version @@ -18,7 +21,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `/api/v1/notifications/dismiss` - `/api/v1/search` - `/api/v1/statuses/{id}/card` -- LDAP authenticator +- LDAP authenticator (use the akkoma-contrib-authenticator-ldap runtime module) - Chats, they were half-baked. Just use PMs. - Prometheus, it causes massive slowdown diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index fdbfb1a3e..7b0934fcf 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -1012,7 +1012,22 @@ config :pleroma, Pleroma.Formatter, ## Custom Runtime Modules (`:modules`) -* `runtime_dir`: A path to custom Elixir modules (such as MRF policies). +* `runtime_dir`: A path to custom Elixir modules, such as MRF policies or + custom authenticators. These modules will be loaded on boot, and can be + contained in subdirectories. It is advised to use version-controlled + subdirectories to make management of them a bit easier. Note that only + files with the extension `.ex` will be loaded. + +```elixir +config :pleroma, :modules, runtime_dir: "instance/modules" +``` + +### Adding a module + +```bash +cd instance/modules/ +git clone +``` ## :configurable_from_database diff --git a/lib/pleroma/utils.ex b/lib/pleroma/utils.ex index a446d3ae6..bd9939c9f 100644 --- a/lib/pleroma/utils.ex +++ b/lib/pleroma/utils.ex @@ -14,10 +14,23 @@ defmodule Pleroma.Utils do @repo_timeout Pleroma.Config.get([Pleroma.Repo, :timeout], 15_000) def compile_dir(dir) when is_binary(dir) do + dir + |> elixir_files() + |> Kernel.ParallelCompiler.compile() + end + + defp elixir_files(dir) when is_binary(dir) do dir |> File.ls!() |> Enum.map(&Path.join(dir, &1)) - |> Kernel.ParallelCompiler.compile() + |> Enum.flat_map(fn path -> + if File.dir?(path) do + elixir_files(path) + else + [path] + end + end) + |> Enum.filter(fn path -> String.ends_with?(path, ".ex") end) end @doc """ diff --git a/test/fixtures/runtime_modules/first.ex b/test/fixtures/runtime_modules/first.ex new file mode 100644 index 000000000..2b663a1b0 --- /dev/null +++ b/test/fixtures/runtime_modules/first.ex @@ -0,0 +1,2 @@ +defmodule DynamicModule.First do +end diff --git a/test/fixtures/runtime_modules/nope.exs b/test/fixtures/runtime_modules/nope.exs new file mode 100644 index 000000000..8fe676af6 --- /dev/null +++ b/test/fixtures/runtime_modules/nope.exs @@ -0,0 +1 @@ +def thisisnotloaded diff --git a/test/fixtures/runtime_modules/subdir/second.ex b/test/fixtures/runtime_modules/subdir/second.ex new file mode 100644 index 000000000..22dc046c6 --- /dev/null +++ b/test/fixtures/runtime_modules/subdir/second.ex @@ -0,0 +1,2 @@ +defmodule DynamicModule.Second do +end diff --git a/test/pleroma/utils_test.exs b/test/pleroma/utils_test.exs index c593a9490..e21573679 100644 --- a/test/pleroma/utils_test.exs +++ b/test/pleroma/utils_test.exs @@ -12,4 +12,11 @@ test "returns unique temporary directory" do File.rm_rf(path) end end + + describe "compile_dir/1" do + test "recursively compiles directories" do + {:ok, [DynamicModule.First, DynamicModule.Second], []} = + Pleroma.Utils.compile_dir("test/fixtures/runtime_modules") + end + end end From 516d1555584f218b0798ed67acec39c126967102 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 24 Jul 2022 17:56:48 +0100 Subject: [PATCH 23/82] open up functions in user --- lib/pleroma/user.ex | 6 +++--- mix.exs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 9a56261a7..275ad9506 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -730,12 +730,12 @@ def maybe_validate_required_email(changeset, _) do end end - defp put_ap_id(changeset) do + def put_ap_id(changeset) do ap_id = ap_id(%User{nickname: get_field(changeset, :nickname)}) put_change(changeset, :ap_id, ap_id) end - defp put_following_and_follower_and_featured_address(changeset) do + def put_following_and_follower_and_featured_address(changeset) do user = %User{nickname: get_field(changeset, :nickname)} followers = ap_followers(user) following = ap_following(user) @@ -2041,7 +2041,7 @@ defp normalize_tags(tags) do |> Enum.map(&String.downcase/1) end - defp local_nickname_regex do + def local_nickname_regex do if Config.get([:instance, :extended_nickname_format]) do @extended_local_nickname_regex else diff --git a/mix.exs b/mix.exs index 61521f72e..ff54c79b4 100644 --- a/mix.exs +++ b/mix.exs @@ -34,7 +34,7 @@ def project do releases: [ pleroma: [ include_executables_for: [:unix], - applications: [ex_syslogger: :load, syslog: :load], + applications: [ex_syslogger: :load, syslog: :load, eldap: :transient], steps: [:assemble, &put_otp_version/1, ©_files/1, ©_nginx_config/1], config_providers: [{Pleroma.Config.ReleaseRuntimeProvider, []}] ] From 1419eee5dfe1f3d76c28ab7c6f3cb24ba652fef2 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 25 Jul 2022 16:30:06 +0000 Subject: [PATCH 24/82] Quote posting (#113) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/113 --- CHANGELOG.md | 1 + config/config.exs | 2 + docs/docs/administration/CLI_tasks/user.md | 25 +++++ lib/pleroma/activity.ex | 6 ++ lib/pleroma/web/activity_pub/builder.ex | 11 +++ .../activity_pub/mrf/inline_quote_policy.ex | 71 ++++++++++++++ .../article_note_page_validator.ex | 1 + .../object_validators/common_fields.ex | 1 + .../web/activity_pub/transmogrifier.ex | 44 +++++++++ .../api_spec/operations/status_operation.ex | 5 + lib/pleroma/web/api_spec/schemas/status.ex | 37 +++++++ lib/pleroma/web/common_api.ex | 4 + lib/pleroma/web/common_api/activity_draft.ex | 25 +++++ .../web/mastodon_api/views/status_view.ex | 19 ++++ priv/static/schemas/litepub-0.1.jsonld | 4 + test/fixtures/fedibird/quote.json | 73 ++++++++++++++ test/fixtures/misskey/quote.json | 50 ++++++++++ .../quote_post/fedibird_quote_post.json | 52 ++++++++++ .../quote_post/fedibird_quote_uri.json | 54 ++++++++++ .../quote_post/misskey_quote_post.json | 46 +++++++++ test/fixtures/quoted_status.json | 38 +++++++ .../pleroma/web/activity_pub/builder_test.exs | 7 +- .../mrf/inline_quote_policy_test.exs | 56 +++++++++++ .../article_note_page_validator_test.exs | 56 +++++++++++ .../controllers/filter_controller_test.exs | 12 ++- .../controllers/status_controller_test.exs | 98 +++++++++++++++++++ .../mastodon_api/views/status_view_test.exs | 28 +++++- 27 files changed, 819 insertions(+), 7 deletions(-) create mode 100644 lib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex create mode 100644 test/fixtures/fedibird/quote.json create mode 100644 test/fixtures/misskey/quote.json create mode 100644 test/fixtures/quote_post/fedibird_quote_post.json create mode 100644 test/fixtures/quote_post/fedibird_quote_uri.json create mode 100644 test/fixtures/quote_post/misskey_quote_post.json create mode 100644 test/fixtures/quoted_status.json create mode 100644 test/pleroma/web/activity_pub/mrf/inline_quote_policy_test.exs diff --git a/CHANGELOG.md b/CHANGELOG.md index d6dd4dd4c..4982a3191 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Added - extended runtime module support, see config cheatsheet +- quote posting; quotes are limited to public posts ### Fixed - Updated mastoFE path, for the newer version diff --git a/config/config.exs b/config/config.exs index cfe207dcc..bac167c29 100644 --- a/config/config.exs +++ b/config/config.exs @@ -407,6 +407,8 @@ accept: [], reject: [] +config :pleroma, :mrf_inline_quote, prefix: "RE" + # threshold of 7 days config :pleroma, :mrf_object_age, threshold: 604_800, diff --git a/docs/docs/administration/CLI_tasks/user.md b/docs/docs/administration/CLI_tasks/user.md index 0d19b5622..b7a60751d 100644 --- a/docs/docs/administration/CLI_tasks/user.md +++ b/docs/docs/administration/CLI_tasks/user.md @@ -300,3 +300,28 @@ ```sh mix pleroma.user unconfirm_all ``` + +## Fix following state + +Sometimes the system can get into a situation where +it think you're already following someone and won't send a request +to the remote instance, or won't let you unfollow someone. This +bug was fixed, but in case you encounter these weird states: + +=== "OTP" + + ```sh + ./bin/pleroma_ctl user fix_follow_state localuser remoteuser@example.com + ``` + +=== "From Source" + + ```sh + mix pleroma.user fix_follow_state localuser remoteuser@example.com + ``` + +The first argument is the local user's nickname - if you are `myuser@myinstance`, this should be `myuser`. + +The second is the remote user, consisting of both nickname AND domain. + +If you are a weird follow state situation and cannot resolve it with the above, you may need to co-operate with the remote admin to clear the state their side too - they should provide the arguments *backwards*, i.e `fix_follow_state remote local`. diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index abfe778d2..01c9df53b 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -292,6 +292,12 @@ def get_in_reply_to_activity(%Activity{} = activity) do get_in_reply_to_activity_from_object(Object.normalize(activity, fetch: false)) end + def get_quoted_activity_from_object(%Object{data: %{"quoteUri" => ap_id}}) do + get_create_by_object_ap_id_with_object(ap_id) + end + + def get_quoted_activity_from_object(_), do: nil + def normalize(%Activity{data: %{"id" => ap_id}}), do: get_by_ap_id_with_object(ap_id) def normalize(%{"id" => ap_id}), do: get_by_ap_id_with_object(ap_id) def normalize(ap_id) when is_binary(ap_id), do: get_by_ap_id_with_object(ap_id) diff --git a/lib/pleroma/web/activity_pub/builder.ex b/lib/pleroma/web/activity_pub/builder.ex index 8c51b8d63..97ceaf08e 100644 --- a/lib/pleroma/web/activity_pub/builder.ex +++ b/lib/pleroma/web/activity_pub/builder.ex @@ -168,6 +168,7 @@ def note(%ActivityDraft{} = draft) do "tag" => Keyword.values(draft.tags) |> Enum.uniq() } |> add_in_reply_to(draft.in_reply_to) + |> add_quote(draft.quote) |> Map.merge(draft.extra) {:ok, data, []} @@ -183,6 +184,16 @@ defp add_in_reply_to(object, in_reply_to) do end end + defp add_quote(object, nil), do: object + + defp add_quote(object, quote) do + with %Object{} = quote_object <- Object.normalize(quote, fetch: false) do + Map.put(object, "quoteUri", quote_object.data["id"]) + else + _ -> object + end + end + def answer(user, object, name) do {:ok, %{ diff --git a/lib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex b/lib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex new file mode 100644 index 000000000..20432410b --- /dev/null +++ b/lib/pleroma/web/activity_pub/mrf/inline_quote_policy.ex @@ -0,0 +1,71 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy do + @moduledoc "Force a quote line into the message content." + @behaviour Pleroma.Web.ActivityPub.MRF.Policy + + defp build_inline_quote(prefix, url) do + "

#{prefix}: #{url}
" + end + + defp has_inline_quote?(content, quote_url) do + cond do + # Does the quote URL exist in the content? + content =~ quote_url -> true + # Does the content already have a .quote-inline span? + content =~ "" -> true + # No inline quote found + true -> false + end + end + + defp filter_object(%{"quoteUri" => quote_url} = object) do + content = object["content"] || "" + + if has_inline_quote?(content, quote_url) do + object + else + prefix = Pleroma.Config.get([:mrf_inline_quote, :prefix]) + + content = + if String.ends_with?(content, "

") do + String.trim_trailing(content, "

") <> build_inline_quote(prefix, quote_url) <> "

" + else + content <> build_inline_quote(prefix, quote_url) + end + + Map.put(object, "content", content) + end + end + + @impl true + def filter(%{"object" => %{"quoteUri" => _} = object} = activity) do + {:ok, Map.put(activity, "object", filter_object(object))} + end + + @impl true + def filter(object), do: {:ok, object} + + @impl true + def describe, do: {:ok, %{}} + + @impl true + def config_description do + %{ + key: :mrf_inline_quote, + related_policy: "Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy", + label: "MRF Inline Quote", + description: "Force quote post URLs inline", + children: [ + %{ + key: :prefix, + type: :string, + description: "Prefix before the link", + suggestions: ["RE", "QT", "RT", "RN"] + } + ] + } + end +end diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index 5e377c294..a0724ca55 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -156,6 +156,7 @@ defp fix(data) do |> fix_replies() |> fix_source() |> fix_misskey_content() + |> Transmogrifier.fix_quote_url() |> Transmogrifier.fix_attachments() |> Transmogrifier.fix_emoji() |> Transmogrifier.fix_content_map() diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex index 37ec860dc..1eaf572b9 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex @@ -59,6 +59,7 @@ defmacro status_object_fields do field(:like_count, :integer, default: 0) field(:announcement_count, :integer, default: 0) field(:inReplyTo, ObjectValidators.ObjectID) + field(:quoteUri, ObjectValidators.ObjectID) field(:url, ObjectValidators.Uri) field(:likes, {:array, ObjectValidators.ObjectID}, default: []) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 115dfc470..b6ee24ee6 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -598,6 +598,12 @@ def set_reply_to_uri(%{"inReplyTo" => in_reply_to} = object) when is_binary(in_r def set_reply_to_uri(obj), do: obj + def set_quote_url(%{"quoteUri" => quote} = object) when is_binary(quote) do + Map.put(object, "quoteUrl", quote) + end + + def set_quote_url(obj), do: obj + @doc """ Serialized Mastodon-compatible `replies` collection containing _self-replies_. Based on Mastodon's ActivityPub::NoteSerializer#replies. @@ -652,6 +658,7 @@ def prepare_object(object) do |> prepare_attachments |> set_conversation |> set_reply_to_uri + |> set_quote_url() |> set_replies |> strip_internal_fields |> strip_internal_tags @@ -879,6 +886,43 @@ defp strip_internal_tags(%{"tag" => tags} = object) do defp strip_internal_tags(object), do: object + def fix_quote_url(object, options \\ []) + + def fix_quote_url(%{"quoteUri" => quote_url} = object, options) + when not is_nil(quote_url) do + with {:ok, quoted_object} <- get_obj_helper(quote_url, options), + %Activity{} <- Activity.get_create_by_object_ap_id(quoted_object.data["id"]) do + Map.put(object, "quoteUri", quoted_object.data["id"]) + else + e -> + Logger.warn("Couldn't fetch #{inspect(quote_url)}, error: #{inspect(e)}") + object + end + end + + # Soapbox + def fix_quote_url(%{"quoteUrl" => quote_url} = object, options) do + object + |> Map.put("quoteUri", quote_url) + |> fix_quote_url(options) + end + + # Old Fedibird (bug) + # https://github.com/fedibird/mastodon/issues/9 + def fix_quote_url(%{"quoteURL" => quote_url} = object, options) do + object + |> Map.put("quoteUri", quote_url) + |> fix_quote_url(options) + end + + def fix_quote_url(%{"_misskey_quote" => quote_url} = object, options) do + object + |> Map.put("quoteUri", quote_url) + |> fix_quote_url(options) + end + + def fix_quote_url(object, _), do: object + def perform(:user_upgrade, user) do # we pass a fake user so that the followers collection is stripped away old_follower_address = User.ap_followers(%User{nickname: user.nickname}) diff --git a/lib/pleroma/web/api_spec/operations/status_operation.ex b/lib/pleroma/web/api_spec/operations/status_operation.ex index c7df676c3..a5da8b58e 100644 --- a/lib/pleroma/web/api_spec/operations/status_operation.ex +++ b/lib/pleroma/web/api_spec/operations/status_operation.ex @@ -496,6 +496,11 @@ defp create_request do type: :string, description: "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`." + }, + quote_id: %Schema{ + nullable: true, + type: :string, + description: "Will quote a given status." } }, example: %{ diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index 3caab0f00..60db8ad6f 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -133,6 +133,16 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do type: :boolean, description: "Have you pinned this status? Only appears if the status is pinnable." }, + quote_id: %Schema{ + type: :string, + description: "ID of the status being quoted", + nullable: true + }, + quote: %Schema{ + allOf: [%OpenApiSpex.Reference{"$ref": "#/components/schemas/Status"}], + nullable: true, + description: "Quoted status (if any)" + }, pleroma: %Schema{ type: :object, properties: %{ @@ -204,6 +214,33 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do } } }, + akkoma: %Schema{ + type: :object, + properties: %{ + source: %Schema{ + nullable: true, + oneOf: [ + %Schema{type: :string, example: 'plaintext content'}, + %Schema{ + type: :object, + properties: %{ + content: %Schema{ + type: :string, + description: "The source content of the status", + nullable: true + }, + mediaType: %Schema{ + type: :string, + description: "The source MIME type of the status", + example: "text/plain", + nullable: true + } + } + } + ] + } + } + }, poll: %Schema{allOf: [Poll], nullable: true, description: "The poll attached to the status"}, reblog: %Schema{ allOf: [%OpenApiSpex.Reference{"$ref": "#/components/schemas/Status"}], diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 8ab50cf2b..bc5e26cf7 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -319,6 +319,10 @@ def get_replied_to_visibility(activity) do end end + def get_quoted_visibility(nil), do: nil + + def get_quoted_visibility(activity), do: get_replied_to_visibility(activity) + def check_expiry_date({:ok, nil} = res), do: res def check_expiry_date({:ok, in_seconds}) do diff --git a/lib/pleroma/web/common_api/activity_draft.ex b/lib/pleroma/web/common_api/activity_draft.ex index ea88213fb..767b2bf0f 100644 --- a/lib/pleroma/web/common_api/activity_draft.ex +++ b/lib/pleroma/web/common_api/activity_draft.ex @@ -22,6 +22,8 @@ defmodule Pleroma.Web.CommonAPI.ActivityDraft do attachments: [], in_reply_to: nil, in_reply_to_conversation: nil, + quote_id: nil, + quote: nil, visibility: nil, expires_at: nil, extra: nil, @@ -54,6 +56,7 @@ def create(user, params) do |> with_valid(&in_reply_to/1) |> with_valid(&in_reply_to_conversation/1) |> with_valid(&visibility/1) + |> with_valid("e_id/1) |> content() |> with_valid(&to_and_cc/1) |> with_valid(&context/1) @@ -108,6 +111,28 @@ defp in_reply_to_conversation(draft) do %__MODULE__{draft | in_reply_to_conversation: in_reply_to_conversation} end + defp quote_id(%{params: %{quote_id: ""}} = draft), do: draft + + defp quote_id(%{params: %{quote_id: id}} = draft) when is_binary(id) do + with {:activity, %Activity{} = quote} <- {:activity, Activity.get_by_id(id)}, + visibility <- CommonAPI.get_quoted_visibility(quote), + {:visibility, true} <- {:visibility, visibility in ["public", "unlisted"]} do + %__MODULE__{draft | quote: Activity.get_by_id(id)} + else + {:activity, _} -> + add_error(draft, dgettext("errors", "You can't quote a status that doesn't exist")) + + {:visibility, false} -> + add_error(draft, dgettext("errors", "You can only quote public or unlisted statuses")) + end + end + + defp quote_id(%{params: %{quote_id: %Activity{} = quote}} = draft) do + %__MODULE__{draft | quote: quote} + end + + defp quote_id(draft), do: draft + defp visibility(%{params: params} = draft) do case CommonAPI.get_visibility(params, draft.in_reply_to, draft.in_reply_to_conversation) do {visibility, "direct"} when visibility != "direct" -> diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index c0f467592..cf4ea51e0 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -329,6 +329,8 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} {pinned?, pinned_at} = pin_data(object, user) + quote = Activity.get_quoted_activity_from_object(object) + %{ id: to_string(activity.id), uri: object.data["id"], @@ -363,6 +365,8 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} application: build_application(object.data["generator"]), language: nil, emojis: build_emojis(object.data["emoji"]), + quote_id: if(quote, do: quote.id, else: nil), + quote: maybe_render_quote(quote, opts), pleroma: %{ local: activity.local, conversation_id: get_context_id(activity), @@ -604,4 +608,19 @@ defp build_image_url(%URI{} = image_url_data, %URI{} = page_url_data) do end defp build_image_url(_, _), do: nil + + defp maybe_render_quote(nil, _), do: nil + + defp maybe_render_quote(quote, opts) do + if opts[:do_not_recurse] || !visible_for_user?(quote, opts[:for]) do + nil + else + opts = + opts + |> Map.put(:activity, quote) + |> Map.put(:do_not_recurse, true) + + render("show.json", opts) + end + end end diff --git a/priv/static/schemas/litepub-0.1.jsonld b/priv/static/schemas/litepub-0.1.jsonld index e7722cf72..d2b62ba77 100644 --- a/priv/static/schemas/litepub-0.1.jsonld +++ b/priv/static/schemas/litepub-0.1.jsonld @@ -17,6 +17,8 @@ "ostatus": "http://ostatus.org#", "schema": "http://schema.org#", "toot": "http://joinmastodon.org/ns#", + "misskey": "https://misskey-hub.net/ns#", + "fedibird": "http://fedibird.com/ns#", "value": "schema:value", "sensitive": "as:sensitive", "litepub": "http://litepub.social/ns#", @@ -26,6 +28,8 @@ "@id": "litepub:listMessage", "@type": "@id" }, + "quoteUrl": "as:quoteUrl", + "quoteUri": "fedibird:quoteUri", "oauthRegistrationEndpoint": { "@id": "litepub:oauthRegistrationEndpoint", "@type": "@id" diff --git a/test/fixtures/fedibird/quote.json b/test/fixtures/fedibird/quote.json new file mode 100644 index 000000000..a43cc31e5 --- /dev/null +++ b/test/fixtures/fedibird/quote.json @@ -0,0 +1,73 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "conversation": "ostatus:conversation", + "sensitive": "as:sensitive", + "toot": "http://joinmastodon.org/ns#", + "votersCount": "toot:votersCount", + "fedibird": "http://fedibird.com/ns#", + "quoteUri": "fedibird:quoteUri", + "expiry": "fedibird:expiry", + "references": { + "@id": "fedibird:references", + "@type": "@id" + }, + "emojiReactions": { + "@id": "fedibird:emojiReactions", + "@type": "@id" + } + } + ], + "id": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674", + "type": "Note", + "summary": null, + "inReplyTo": null, + "published": "2022-07-25T11:12:26Z", + "url": "https://fedibird.com/@akkoma_ap_integration_tester/108707679228362674", + "attributedTo": "https://fedibird.com/users/akkoma_ap_integration_tester", + "to": [ + "https://fedibird.com/users/akkoma_ap_integration_tester/followers" + ], + "cc": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "sensitive": false, + "atomUri": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674", + "inReplyToAtomUri": null, + "conversation": "tag:fedibird.com,2022-07-25:objectId=108707679228389900:objectType=Conversation", + "context": "https://fedibird.com/contexts/108707679228389900", + "quoteUri": "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924", + "_misskey_quote": "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924", + "_misskey_content": "public quote", + "content": "

public quote
QT: https://example.com/objects/24d9f2e1-32d2-4bd5-bdf2-8ea61d3fb5e8
[参照]

", + "contentMap": { + "ja": "

public quote
QT: https://example.com/objects/24d9f2e1-32d2-4bd5-bdf2-8ea61d3fb5e8
[参照]

" + }, + "attachment": [], + "tag": [], + "replies": { + "id": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674/replies", + "type": "Collection", + "first": { + "type": "CollectionPage", + "next": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674/replies?only_other_accounts=true&page=true", + "partOf": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674/replies", + "items": [] + } + }, + "references": { + "id": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674/references", + "type": "Collection", + "first": { + "type": "CollectionPage", + "partOf": "https://fedibird.com/users/akkoma_ap_integration_tester/statuses/108707679228362674/references", + "items": [ + "https://example.com/objects/24d9f2e1-32d2-4bd5-bdf2-8ea61d3fb5e8" + ] + } + } +} diff --git a/test/fixtures/misskey/quote.json b/test/fixtures/misskey/quote.json new file mode 100644 index 000000000..487461020 --- /dev/null +++ b/test/fixtures/misskey/quote.json @@ -0,0 +1,50 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey-hub.net/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "id": "https://misskey.io/notes/934gok3482", + "type": "Note", + "attributedTo": "https://misskey.io/users/93492q0ip0", + "summary": null, + "content": "

i quompt u

RE:
https://example.com/objects/30c543fb-a165-40dd-87fd-4e249ec5a40b

", + "_misskey_content": "i quompt u", + "source": { + "content": "i quompt u", + "mediaType": "text/x.misskeymarkdown" + }, + "_misskey_quote": "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924", + "quoteUrl": "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924", + "published": "2022-07-25T15:21:48.208Z", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://misskey.io/users/93492q0ip0/followers" + ], + "inReplyTo": null, + "attachment": [], + "sensitive": false, + "tag": [] +} diff --git a/test/fixtures/quote_post/fedibird_quote_post.json b/test/fixtures/quote_post/fedibird_quote_post.json new file mode 100644 index 000000000..ebf383356 --- /dev/null +++ b/test/fixtures/quote_post/fedibird_quote_post.json @@ -0,0 +1,52 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "conversation": "ostatus:conversation", + "sensitive": "as:sensitive", + "toot": "http://joinmastodon.org/ns#", + "votersCount": "toot:votersCount", + "expiry": "toot:expiry" + } + ], + "id": "https://fedibird.com/users/noellabo/statuses/107663670404015196", + "type": "Note", + "summary": null, + "inReplyTo": null, + "published": "2022-01-22T02:07:16Z", + "url": "https://fedibird.com/@noellabo/107663670404015196", + "attributedTo": "https://fedibird.com/users/noellabo", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://fedibird.com/users/noellabo/followers" + ], + "sensitive": false, + "atomUri": "https://fedibird.com/users/noellabo/statuses/107663670404015196", + "inReplyToAtomUri": null, + "conversation": "tag:fedibird.com,2022-01-22:objectId=107663670404038002:objectType=Conversation", + "context": "https://fedibird.com/contexts/107663670404038002", + "quoteURL": "https://misskey.io/notes/8vsn2izjwh", + "_misskey_quote": "https://misskey.io/notes/8vsn2izjwh", + "_misskey_content": "いつの生まれだシトリン", + "content": "

いつの生まれだシトリン
QT: https://misskey.io/notes/8vsn2izjwh

", + "contentMap": { + "ja": "

いつの生まれだシトリン
QT: https://misskey.io/notes/8vsn2izjwh

" + }, + "attachment": [], + "tag": [], + "replies": { + "id": "https://fedibird.com/users/noellabo/statuses/107663670404015196/replies", + "type": "Collection", + "first": { + "type": "CollectionPage", + "next": "https://fedibird.com/users/noellabo/statuses/107663670404015196/replies?only_other_accounts=true&page=true", + "partOf": "https://fedibird.com/users/noellabo/statuses/107663670404015196/replies", + "items": [] + } + } +} diff --git a/test/fixtures/quote_post/fedibird_quote_uri.json b/test/fixtures/quote_post/fedibird_quote_uri.json new file mode 100644 index 000000000..7c328fdb9 --- /dev/null +++ b/test/fixtures/quote_post/fedibird_quote_uri.json @@ -0,0 +1,54 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "conversation": "ostatus:conversation", + "sensitive": "as:sensitive", + "toot": "http://joinmastodon.org/ns#", + "votersCount": "toot:votersCount", + "fedibird": "http://fedibird.com/ns#", + "quoteUri": "fedibird:quoteUri", + "expiry": "fedibird:expiry" + } + ], + "id": "https://fedibird.com/users/noellabo/statuses/107699335988346142", + "type": "Note", + "summary": null, + "inReplyTo": null, + "published": "2022-01-28T09:17:30Z", + "url": "https://fedibird.com/@noellabo/107699335988346142", + "attributedTo": "https://fedibird.com/users/noellabo", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://fedibird.com/users/noellabo/followers" + ], + "sensitive": false, + "atomUri": "https://fedibird.com/users/noellabo/statuses/107699335988346142", + "inReplyToAtomUri": null, + "conversation": "tag:fedibird.com,2022-01-28:objectId=107699335988345290:objectType=Conversation", + "context": "https://fedibird.com/contexts/107699335988345290", + "quoteUri": "https://fedibird.com/users/yamako/statuses/107699333438289729", + "_misskey_quote": "https://fedibird.com/users/yamako/statuses/107699333438289729", + "_misskey_content": "美味しそう", + "content": "

美味しそう
QT: https://fedibird.com/@yamako/107699333438289729

", + "contentMap": { + "ja": "

美味しそう
QT: https://fedibird.com/@yamako/107699333438289729

" + }, + "attachment": [], + "tag": [], + "replies": { + "id": "https://fedibird.com/users/noellabo/statuses/107699335988346142/replies", + "type": "Collection", + "first": { + "type": "CollectionPage", + "next": "https://fedibird.com/users/noellabo/statuses/107699335988346142/replies?only_other_accounts=true&page=true", + "partOf": "https://fedibird.com/users/noellabo/statuses/107699335988346142/replies", + "items": [] + } + } +} diff --git a/test/fixtures/quote_post/misskey_quote_post.json b/test/fixtures/quote_post/misskey_quote_post.json new file mode 100644 index 000000000..59f677ca9 --- /dev/null +++ b/test/fixtures/quote_post/misskey_quote_post.json @@ -0,0 +1,46 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey.io/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "id": "https://misskey.io/notes/8vs6ylpfez", + "type": "Note", + "attributedTo": "https://misskey.io/users/7rkrarq81i", + "summary": null, + "content": "

投稿者の設定によるね
Fanboxについても投稿者によっては過去の投稿は高額なプランに移動してることがある

RE:
https://misskey.io/notes/8vs6wxufd0

", + "_misskey_content": "投稿者の設定によるね\nFanboxについても投稿者によっては過去の投稿は高額なプランに移動してることがある", + "_misskey_quote": "https://misskey.io/notes/8vs6wxufd0", + "quoteUrl": "https://misskey.io/notes/8vs6wxufd0", + "published": "2022-01-21T16:38:30.243Z", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://misskey.io/users/7rkrarq81i/followers" + ], + "inReplyTo": null, + "attachment": [], + "sensitive": false, + "tag": [] +} diff --git a/test/fixtures/quoted_status.json b/test/fixtures/quoted_status.json new file mode 100644 index 000000000..5030d1a2d --- /dev/null +++ b/test/fixtures/quoted_status.json @@ -0,0 +1,38 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://example.com/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://example.com/users/user", + "attachment": [ + { + "mediaType": "image/png", + "name": "", + "type": "Document", + "url": "https://example.com/media/4d6097ae20200ac371f51d24eae0a94cb4b424b6aff81dcc0f7411b1a74c796f.png" + } + ], + "attributedTo": "https://example.com/users/user", + "cc": [ + "https://example.com/users/user/followers" + ], + "content": "", + "context": "https://example.com/contexts/c2c52511-977e-4168-996c-bcf006789dca", + "conversation": "https://example.com/contexts/c2c52511-977e-4168-996c-bcf006789dca", + "id": "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924", + "published": "2022-07-24T17:25:51.614495Z", + "sensitive": null, + "source": { + "content": "", + "mediaType": "text/plain" + }, + "summary": "", + "tag": [], + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note" +} diff --git a/test/pleroma/web/activity_pub/builder_test.exs b/test/pleroma/web/activity_pub/builder_test.exs index 3fe32bce5..640caa2b6 100644 --- a/test/pleroma/web/activity_pub/builder_test.exs +++ b/test/pleroma/web/activity_pub/builder_test.exs @@ -13,6 +13,7 @@ defmodule Pleroma.Web.ActivityPub.BuilderTest do test "returns note data" do user = insert(:user) note = insert(:note) + quote = insert(:note) user2 = insert(:user) user3 = insert(:user) @@ -25,7 +26,8 @@ test "returns note data" do tags: [name: "jimm"], summary: "test summary", cc: [user3.ap_id], - extra: %{"custom_tag" => "test"} + extra: %{"custom_tag" => "test"}, + quote: quote } expected = %{ @@ -39,7 +41,8 @@ test "returns note data" do "tag" => ["jimm"], "to" => [user2.ap_id], "type" => "Note", - "custom_tag" => "test" + "custom_tag" => "test", + "quoteUri" => quote.data["id"] } assert {:ok, ^expected, []} = Builder.note(draft) diff --git a/test/pleroma/web/activity_pub/mrf/inline_quote_policy_test.exs b/test/pleroma/web/activity_pub/mrf/inline_quote_policy_test.exs new file mode 100644 index 000000000..4e0910d3e --- /dev/null +++ b/test/pleroma/web/activity_pub/mrf/inline_quote_policy_test.exs @@ -0,0 +1,56 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.MRF.InlineQuotePolicyTest do + alias Pleroma.Web.ActivityPub.MRF.InlineQuotePolicy + use Pleroma.DataCase + + test "adds quote URL to post content" do + quote_url = "https://example.com/objects/1234" + + activity = %{ + "type" => "Create", + "actor" => "https://example.com/users/alex", + "object" => %{ + "type" => "Note", + "content" => "

Nice post

", + "quoteUri" => quote_url + } + } + + {:ok, %{"object" => %{"content" => filtered}}} = InlineQuotePolicy.filter(activity) + + assert filtered == + "

Nice post

RE: https://example.com/objects/1234

" + end + + test "ignores Misskey quote posts" do + object = File.read!("test/fixtures/quote_post/misskey_quote_post.json") |> Jason.decode!() + + activity = %{ + "type" => "Create", + "actor" => "https://misskey.io/users/7rkrarq81i", + "object" => object + } + + {:ok, filtered} = InlineQuotePolicy.filter(activity) + assert filtered == activity + end + + test "ignores Fedibird quote posts" do + object = File.read!("test/fixtures/quote_post/fedibird_quote_post.json") |> Jason.decode!() + + # Normally the ObjectValidator will fix this before it reaches MRF + object = Map.put(object, "quoteUrl", object["quoteURL"]) + + activity = %{ + "type" => "Create", + "actor" => "https://fedibird.com/users/noellabo", + "object" => object + } + + {:ok, filtered} = InlineQuotePolicy.filter(activity) + assert filtered == activity + end +end diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs index 8b3982916..80290a6e3 100644 --- a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs @@ -143,5 +143,61 @@ test "a misskey MFM status with a _misskey_content field should work and be link } } = ArticleNotePageValidator.cast_and_validate(note) end + + test "a misskey quote should work", _ do + Tesla.Mock.mock(fn %{ + method: :get, + url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/quoted_status.json"), + headers: HttpRequestMock.activitypub_object_headers() + } + end) + + insert(:user, %{ap_id: "https://misskey.io/users/93492q0ip0"}) + insert(:user, %{ap_id: "https://example.com/users/user"}) + + note = + "test/fixtures/misskey/quote.json" + |> File.read!() + |> Jason.decode!() + + %{ + valid?: true, + changes: %{ + quoteUri: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } + } = ArticleNotePageValidator.cast_and_validate(note) + end + + test "a fedibird quote should work", _ do + Tesla.Mock.mock(fn %{ + method: :get, + url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/quoted_status.json"), + headers: HttpRequestMock.activitypub_object_headers() + } + end) + + insert(:user, %{ap_id: "https://fedibird.com/users/akkoma_ap_integration_tester"}) + insert(:user, %{ap_id: "https://example.com/users/user"}) + + note = + "test/fixtures/fedibird/quote.json" + |> File.read!() + |> Jason.decode!() + + %{ + valid?: true, + changes: %{ + quoteUri: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } + } = ArticleNotePageValidator.cast_and_validate(note) + end end end diff --git a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs index 98ab9e717..90aa9398f 100644 --- a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs @@ -193,10 +193,14 @@ test "with adding expires_at", %{conn: conn, user: user} do assert response["irreversible"] == true - assert response["expires_at"] == - NaiveDateTime.utc_now() - |> NaiveDateTime.add(in_seconds) - |> Pleroma.Web.CommonAPI.Utils.to_masto_date() + expected_time = + NaiveDateTime.utc_now() + |> NaiveDateTime.add(in_seconds) + + assert NaiveDateTime.diff( + NaiveDateTime.from_iso8601!(response["expires_at"]), + expected_time + ) < 5 filter = Filter.get(response["id"], user) diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index c9f3f66be..b0efddb2a 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1944,4 +1944,102 @@ test "show" do } = result end end + + describe "posting quotes" do + setup do: oauth_access(["write:statuses"]) + + test "posting a quote", %{conn: conn} do + user = insert(:user) + {:ok, quoted_status} = CommonAPI.post(user, %{status: "tell me, for whom do you fight?"}) + + conn = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "Hmph, how very glib", + "quote_id" => quoted_status.id + }) + + response = json_response_and_validate_schema(conn, 200) + + assert response["quote_id"] == quoted_status.id + assert response["quote"]["id"] == quoted_status.id + assert response["quote"]["content"] == quoted_status.object.data["content"] + end + + test "posting a quote, quoting a status that isn't public", %{conn: conn} do + user = insert(:user) + + Enum.each(["private", "local", "direct"], fn visibility -> + {:ok, quoted_status} = + CommonAPI.post(user, %{ + status: "tell me, for whom do you fight?", + visibility: visibility + }) + + assert %{"error" => "You can only quote public or unlisted statuses"} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "Hmph, how very glib", + "quote_id" => quoted_status.id + }) + |> json_response_and_validate_schema(422) + end) + end + + test "posting a quote, after quote, the status gets deleted", %{conn: conn} do + user = insert(:user) + + {:ok, quoted_status} = + CommonAPI.post(user, %{status: "tell me, for whom do you fight?", visibility: "public"}) + + resp = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "I fight for eorzea!", + "quote_id" => quoted_status.id + }) + |> json_response_and_validate_schema(200) + + {:ok, _} = CommonAPI.delete(quoted_status.id, user) + + resp = + conn + |> get("/api/v1/statuses/#{resp["id"]}") + |> json_response_and_validate_schema(200) + + assert is_nil(resp["quote"]) + end + + test "posting a quote of a deleted status", %{conn: conn} do + user = insert(:user) + + {:ok, quoted_status} = + CommonAPI.post(user, %{status: "tell me, for whom do you fight?", visibility: "public"}) + + {:ok, _} = CommonAPI.delete(quoted_status.id, user) + + assert %{"error" => _} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "I fight for eorzea!", + "quote_id" => quoted_status.id + }) + |> json_response_and_validate_schema(422) + end + + test "posting a quote of a status that doesn't exist", %{conn: conn} do + assert %{"error" => "You can't quote a status that doesn't exist"} = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "I fight for eorzea!", + "quote_id" => "oops" + }) + |> json_response_and_validate_schema(422) + end + end end diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index caf2594c0..9ef44caca 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -305,7 +305,9 @@ test "a note activity" do }, akkoma: %{ source: HTML.filter_tags(object_data["content"]) - } + }, + quote_id: nil, + quote: nil } assert status == expected @@ -393,6 +395,30 @@ test "a reply" do assert status.in_reply_to_id == to_string(note.id) end + test "a quote" do + note = insert(:note_activity) + user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{status: "hehe", quote_id: note.id}) + + status = StatusView.render("show.json", %{activity: activity}) + + assert status.quote_id == to_string(note.id) + + [status] = StatusView.render("index.json", %{activities: [activity], as: :activity}) + + assert status.quote_id == to_string(note.id) + end + + test "a quote that we can't resolve" do + note = insert(:note_activity, quoteUri: "oopsie") + + status = StatusView.render("show.json", %{activity: note}) + + assert is_nil(status.quote_id) + assert is_nil(status.quote) + end + test "contains mentions" do user = insert(:user) mentioned = insert(:user) From 36eec899468dba99552359c705ae5451d52d16df Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 26 Jul 2022 10:51:40 +0100 Subject: [PATCH 25/82] add authorized_fetch_mode to description.exs --- config/description.exs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/config/description.exs b/config/description.exs index f7e3c714f..a447c58ec 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1655,6 +1655,11 @@ type: :boolean, description: "Sign object fetches with HTTP signatures" }, + %{ + key: :authorized_fetch_mode, + type: :boolean, + description: "Require HTTP signatures on AP fetches" + }, %{ key: :note_replies_output_limit, type: :integer, From 90c4785b893416b95e637437b08298781e86573c Mon Sep 17 00:00:00 2001 From: floatingghost Date: Tue, 26 Jul 2022 11:09:13 +0000 Subject: [PATCH 26/82] remove public post quarantine exception (#114) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/114 --- CHANGELOG.md | 4 +++ config/description.exs | 2 +- docs/docs/configuration/cheatsheet.md | 2 +- lib/pleroma/web/activity_pub/publisher.ex | 23 +++++++--------- .../web/activity_pub/publisher_test.exs | 27 +++++++++++++++++-- 5 files changed, 40 insertions(+), 18 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4982a3191..b75720f8d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - extended runtime module support, see config cheatsheet - quote posting; quotes are limited to public posts +### Changed +- quarantining is now considered absolutely; public activities are no longer + an exception. + ### Fixed - Updated mastoFE path, for the newer version diff --git a/config/description.exs b/config/description.exs index a447c58ec..b8a053c3c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -691,7 +691,7 @@ key_placeholder: "instance", value_placeholder: "reason", description: - "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so", + "List of ActivityPub instances where activities will not be sent, and the reason for doing so", suggestions: [ {"quarantined.com", "Reason"}, {"*.quarantined.com", "Reason"} diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index 7b0934fcf..fdc39c0de 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -34,7 +34,7 @@ To add configuration to your config file, you can copy it from the base config. * `federation_reachability_timeout_days`: Timeout (in days) of each external federation target being unreachable prior to pausing federating to it. * `allow_relay`: Permits remote instances to subscribe to all public posts of your instance. This may increase the visibility of your instance. * `public`: Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note that there is a dependent setting restricting or allowing unauthenticated access to specific resources, see `restrict_unauthenticated` for more details. -* `quarantined_instances`: ActivityPub instances where private (DMs, followers-only) activities will not be send. +* `quarantined_instances`: ActivityPub instances where activities will not be sent. They can still reach there via other means, we just won't send them. * `allowed_post_formats`: MIME-type list of formats allowed to be posted (transformed into HTML). * `extended_nickname_format`: Set to `true` to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames. diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index ed99079e2..cd820fa3d 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -103,19 +103,15 @@ defp signature_host(%URI{port: port, scheme: scheme, host: host}) do end end - defp should_federate?(inbox, public) do - if public do - true - else - %{host: host} = URI.parse(inbox) + defp should_federate?(inbox) do + %{host: host} = URI.parse(inbox) - quarantined_instances = - Config.get([:instance, :quarantined_instances], []) - |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() - |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() + quarantined_instances = + Config.get([:instance, :quarantined_instances], []) + |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() + |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() - !Pleroma.Web.ActivityPub.MRF.subdomain_match?(quarantined_instances, host) - end + !Pleroma.Web.ActivityPub.MRF.subdomain_match?(quarantined_instances, host) end @spec recipients(User.t(), Activity.t()) :: list(User.t()) | [] @@ -192,7 +188,6 @@ def determine_inbox( def publish(%User{} = actor, %{data: %{"bcc" => bcc}} = activity) when is_list(bcc) and bcc != [] do - public = is_public?(activity) {:ok, data} = Transmogrifier.prepare_outgoing(activity.data) recipients = recipients(actor, activity) @@ -201,7 +196,7 @@ def publish(%User{} = actor, %{data: %{"bcc" => bcc}} = activity) recipients |> Enum.filter(&User.ap_enabled?/1) |> Enum.map(fn actor -> actor.inbox end) - |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) + |> Enum.filter(fn inbox -> should_federate?(inbox) end) |> Instances.filter_reachable() Repo.checkout(fn -> @@ -246,7 +241,7 @@ def publish(%User{} = actor, %Activity{} = activity) do determine_inbox(activity, user) end) |> Enum.uniq() - |> Enum.filter(fn inbox -> should_federate?(inbox, public) end) + |> Enum.filter(fn inbox -> should_federate?(inbox) end) |> Instances.filter_reachable() |> Enum.each(fn {inbox, unreachable_since} -> Pleroma.Web.Federator.Publisher.enqueue_one( diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs index b50e22bbe..95f12de2d 100644 --- a/test/pleroma/web/activity_pub/publisher_test.exs +++ b/test/pleroma/web/activity_pub/publisher_test.exs @@ -23,7 +23,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do :ok end - setup_all do: clear_config([:instance, :federating], true) + setup_all do + clear_config([:instance, :federating], true) + clear_config([:instance, :quarantined_instances], []) + end describe "gather_webfinger_links/1" do test "it returns links" do @@ -267,7 +270,7 @@ test "publish to url with with different ports" do end describe "publish/2" do - test_with_mock "doesn't publish a non-public activity to quarantined instances.", + test_with_mock "doesn't publish any activity to quarantined instances.", Pleroma.Web.Federator.Publisher, [:passthrough], [] do @@ -291,10 +294,18 @@ test "publish to url with with different ports" do recipients: [follower.ap_id] ) + public_note_activity = + insert(:note_activity, + user: actor, + recipients: [follower.ap_id, @as_public] + ) + res = Publisher.publish(actor, note_activity) assert res == :ok + :ok = Publisher.publish(actor, public_note_activity) + assert not called( Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ inbox: "https://domain.com/users/nick1/inbox", @@ -302,6 +313,14 @@ test "publish to url with with different ports" do id: note_activity.data["id"] }) ) + + assert not called( + Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ + inbox: "https://domain.com/users/nick1/inbox", + actor_id: actor.id, + id: public_note_activity.data["id"] + }) + ) end test_with_mock "Publishes a non-public activity to non-quarantined instances.", @@ -345,6 +364,8 @@ test "publish to url with with different ports" do Pleroma.Web.Federator.Publisher, [:passthrough], [] do + Config.put([:instance, :quarantined_instances], []) + follower = insert(:user, %{ local: false, @@ -379,6 +400,8 @@ test "publish to url with with different ports" do Pleroma.Web.Federator.Publisher, [:passthrough], [] do + clear_config([:instance, :quarantined_instances], []) + fetcher = insert(:user, local: false, From 1f6deb0ef4f1b3131a124eee2f72f7bf3a32e0f0 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Tue, 26 Jul 2022 12:22:49 +0000 Subject: [PATCH 27/82] include local instance in bubble timeline (#117) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/117 --- .../controllers/timeline_controller.ex | 6 ++++- .../controllers/timeline_controller_test.exs | 26 +++++-------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index 620026374..b9978c05b 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -128,7 +128,11 @@ def public(%{assigns: %{user: user}} = conn, params) do # GET /api/v1/timelines/bubble def bubble(%{assigns: %{user: user}} = conn, params) do - bubble_instances = Config.get([:instance, :local_bubble], []) + bubble_instances = + Enum.uniq( + Config.get([:instance, :local_bubble], []) ++ + [Pleroma.Web.Endpoint.host()] + ) if is_nil(user) do fail_on_bad_auth(conn) diff --git a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs index 7ef08f258..fe32a4955 100644 --- a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs @@ -997,18 +997,10 @@ test "with `%{local: true, federated: false}`, forbids unauthenticated access to describe "bubble" do setup do: oauth_access(["read:statuses"]) - test "it returns nothing if no bubble is configured", %{user: user, conn: conn} do - clear_config([:instance, :local_bubble], []) - {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"}) - - conn = get(conn, "/api/v1/timelines/bubble") - - assert [] = json_response_and_validate_schema(conn, :ok) - end - test "filtering", %{conn: conn, user: user} do clear_config([:instance, :local_bubble], []) - local_user = insert(:user) + # our endpoint host has a port in it so let's set the AP ID + local_user = insert(:user, %{ap_id: "https://localhost/users/user"}) remote_user = insert(:user, %{ap_id: "https://example.com/users/remote_user"}) {:ok, user, local_user} = User.follow(user, local_user) {:ok, _user, remote_user} = User.follow(user, remote_user) @@ -1016,15 +1008,8 @@ test "filtering", %{conn: conn, user: user} do {:ok, local_activity} = CommonAPI.post(local_user, %{status: "Status"}) remote_activity = create_remote_activity(remote_user) - resp = - conn - |> get("/api/v1/timelines/bubble") - |> json_response_and_validate_schema(200) - |> Enum.map(& &1["id"]) - - assert Enum.empty?(resp) - - clear_config([:instance, :local_bubble], ["localhost:4001"]) + # If nothing, only include ours + clear_config([:instance, :local_bubble], []) one_instance = conn @@ -1034,7 +1019,8 @@ test "filtering", %{conn: conn, user: user} do assert local_activity.id in one_instance - clear_config([:instance, :local_bubble], ["localhost:4001", "example.com"]) + # If we have others, also include theirs + clear_config([:instance, :local_bubble], ["example.com"]) two_instances = conn From 0a55c37182ac3676ec9f9ad398d178fea1dd3cfd Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 26 Jul 2022 15:08:35 +0100 Subject: [PATCH 28/82] don't error out if the featured collection has a string ID --- lib/pleroma/web/activity_pub/activity_pub.ex | 8 ++++- .../mastodon/featured_collection.json | 20 +++++++++++ .../web/activity_pub/activity_pub_test.exs | 33 +++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/mastodon/featured_collection.json diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 3e58864c8..4eeba9903 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1657,7 +1657,13 @@ def pin_data_from_featured_collection( ) when type in ["OrderedCollection", "Collection"] do {:ok, objects} = Collections.Fetcher.fetch_collection(collection) - Map.new(objects, fn %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} end) + + # Items can either be a map _or_ a string + objects + |> Map.new(fn + ap_id when is_binary(ap_id) -> {ap_id, NaiveDateTime.utc_now()} + %{"id" => object_ap_id} -> {object_ap_id, NaiveDateTime.utc_now()} + end) end def fetch_and_prepare_featured_from_ap_id(nil) do diff --git a/test/fixtures/mastodon/featured_collection.json b/test/fixtures/mastodon/featured_collection.json new file mode 100644 index 000000000..32727dc05 --- /dev/null +++ b/test/fixtures/mastodon/featured_collection.json @@ -0,0 +1,20 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + { + "ostatus": "http://ostatus.org#", + "atomUri": "ostatus:atomUri", + "inReplyToAtomUri": "ostatus:inReplyToAtomUri", + "conversation": "ostatus:conversation", + "sensitive": "as:sensitive", + "toot": "http://joinmastodon.org/ns#", + "votersCount": "toot:votersCount" + } + ], + "id": "https://example.com/users/alisaie/collections/featured", + "type": "OrderedCollection", + "totalItems": 5, + "orderedItems": [ + "https://example.com/users/alisaie/statuses/108311386746229284" + ] +} diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index a5f971bbb..e6cc20bba 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -347,6 +347,39 @@ test "fetches user featured collection using the first property" do assert Map.has_key?(data, "http://inserted") end + test "fetches user featured when it has string IDs" do + featured_url = "https://example.com/alisaie/collections/featured" + dead_url = "https://example.com/users/alisaie/statuses/108311386746229284" + + featured_data = + "test/fixtures/mastodon/featured_collection.json" + |> File.read!() + + Tesla.Mock.mock(fn + %{ + method: :get, + url: ^featured_url + } -> + %Tesla.Env{ + status: 200, + body: featured_data, + headers: [{"content-type", "application/activity+json"}] + } + + %{ + method: :get, + url: ^dead_url + } -> + %Tesla.Env{ + status: 404, + body: "{}", + headers: [{"content-type", "application/activity+json"}] + } + end) + + {:ok, %{}} = ActivityPub.fetch_and_prepare_featured_from_ap_id(featured_url) + end + test "it fetches the appropriate tag-restricted posts" do user = insert(:user) From a3501cab86190d0c94f8987cb9e31ff1398b3e0e Mon Sep 17 00:00:00 2001 From: floatingghost Date: Tue, 26 Jul 2022 17:28:47 +0000 Subject: [PATCH 29/82] ensure quote fetching obeys max thread distance (#119) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/119 --- .../article_note_page_validator.ex | 1 - .../web/activity_pub/transmogrifier.ex | 83 ++++++++++--------- test/fixtures/misskey/recursive_quote.json | 48 +++++++++++ .../article_note_page_validator_test.exs | 56 ------------- .../transmogrifier/note_handling_test.exs | 77 +++++++++++++++++ 5 files changed, 171 insertions(+), 94 deletions(-) create mode 100644 test/fixtures/misskey/recursive_quote.json diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index a0724ca55..5e377c294 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -156,7 +156,6 @@ defp fix(data) do |> fix_replies() |> fix_source() |> fix_misskey_content() - |> Transmogrifier.fix_quote_url() |> Transmogrifier.fix_attachments() |> Transmogrifier.fix_emoji() |> Transmogrifier.fix_content_map() diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index b6ee24ee6..eea785a55 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -38,6 +38,7 @@ def fix_object(object, options \\ []) do |> fix_attachments() |> fix_context() |> fix_in_reply_to(options) + |> fix_quote_url(options) |> fix_emoji() |> fix_tag() |> fix_content_map() @@ -167,6 +168,50 @@ def fix_in_reply_to(%{"inReplyTo" => in_reply_to} = object, options) def fix_in_reply_to(object, _options), do: object + def fix_quote_url(object, options \\ []) + + def fix_quote_url(%{"quoteUri" => quote_url} = object, options) + when not is_nil(quote_url) do + depth = (options[:depth] || 0) + 1 + + if Federator.allowed_thread_distance?(depth) do + with {:ok, quoted_object} <- get_obj_helper(quote_url, options), + %Activity{} <- Activity.get_create_by_object_ap_id(quoted_object.data["id"]) do + object + |> Map.put("quoteUri", quoted_object.data["id"]) + else + e -> + Logger.warn("Couldn't fetch #{inspect(quote_url)}, error: #{inspect(e)}") + object + end + else + object + end + end + + # Soapbox + def fix_quote_url(%{"quoteUrl" => quote_url} = object, options) do + object + |> Map.put("quoteUri", quote_url) + |> fix_quote_url(options) + end + + # Old Fedibird (bug) + # https://github.com/fedibird/mastodon/issues/9 + def fix_quote_url(%{"quoteURL" => quote_url} = object, options) do + object + |> Map.put("quoteUri", quote_url) + |> fix_quote_url(options) + end + + def fix_quote_url(%{"_misskey_quote" => quote_url} = object, options) do + object + |> Map.put("quoteUri", quote_url) + |> fix_quote_url(options) + end + + def fix_quote_url(object, _), do: object + defp prepare_in_reply_to(in_reply_to) do cond do is_bitstring(in_reply_to) -> @@ -424,6 +469,7 @@ def handle_incoming( |> strip_internal_fields() |> fix_type(fetch_options) |> fix_in_reply_to(fetch_options) + |> fix_quote_url(fetch_options) data = Map.put(data, "object", object) options = Keyword.put(options, :local, false) @@ -886,43 +932,6 @@ defp strip_internal_tags(%{"tag" => tags} = object) do defp strip_internal_tags(object), do: object - def fix_quote_url(object, options \\ []) - - def fix_quote_url(%{"quoteUri" => quote_url} = object, options) - when not is_nil(quote_url) do - with {:ok, quoted_object} <- get_obj_helper(quote_url, options), - %Activity{} <- Activity.get_create_by_object_ap_id(quoted_object.data["id"]) do - Map.put(object, "quoteUri", quoted_object.data["id"]) - else - e -> - Logger.warn("Couldn't fetch #{inspect(quote_url)}, error: #{inspect(e)}") - object - end - end - - # Soapbox - def fix_quote_url(%{"quoteUrl" => quote_url} = object, options) do - object - |> Map.put("quoteUri", quote_url) - |> fix_quote_url(options) - end - - # Old Fedibird (bug) - # https://github.com/fedibird/mastodon/issues/9 - def fix_quote_url(%{"quoteURL" => quote_url} = object, options) do - object - |> Map.put("quoteUri", quote_url) - |> fix_quote_url(options) - end - - def fix_quote_url(%{"_misskey_quote" => quote_url} = object, options) do - object - |> Map.put("quoteUri", quote_url) - |> fix_quote_url(options) - end - - def fix_quote_url(object, _), do: object - def perform(:user_upgrade, user) do # we pass a fake user so that the followers collection is stripped away old_follower_address = User.ap_followers(%User{nickname: user.nickname}) diff --git a/test/fixtures/misskey/recursive_quote.json b/test/fixtures/misskey/recursive_quote.json new file mode 100644 index 000000000..f2f66521a --- /dev/null +++ b/test/fixtures/misskey/recursive_quote.json @@ -0,0 +1,48 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey-hub.net/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "id": "https://misskey.io/notes/934gok3482", + "type": "Note", + "attributedTo": "https://misskey.io/users/93492q0ip0", + "summary": null, + "content": "

i quompt u

", + "_misskey_content": "i quompt u", + "source": { + "content": "i quompt u", + "mediaType": "text/x.misskeymarkdown" + }, + "_misskey_quote": "https://misskey.io/notes/934gok3482", + "quoteUrl": "https://misskey.io/notes/934gok3482", + "published": "2022-07-25T15:21:48.208Z", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [], + "inReplyTo": null, + "attachment": [], + "sensitive": false, + "tag": [] +} diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs index 80290a6e3..8b3982916 100644 --- a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs @@ -143,61 +143,5 @@ test "a misskey MFM status with a _misskey_content field should work and be link } } = ArticleNotePageValidator.cast_and_validate(note) end - - test "a misskey quote should work", _ do - Tesla.Mock.mock(fn %{ - method: :get, - url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" - } -> - %Tesla.Env{ - status: 200, - body: File.read!("test/fixtures/quoted_status.json"), - headers: HttpRequestMock.activitypub_object_headers() - } - end) - - insert(:user, %{ap_id: "https://misskey.io/users/93492q0ip0"}) - insert(:user, %{ap_id: "https://example.com/users/user"}) - - note = - "test/fixtures/misskey/quote.json" - |> File.read!() - |> Jason.decode!() - - %{ - valid?: true, - changes: %{ - quoteUri: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" - } - } = ArticleNotePageValidator.cast_and_validate(note) - end - - test "a fedibird quote should work", _ do - Tesla.Mock.mock(fn %{ - method: :get, - url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" - } -> - %Tesla.Env{ - status: 200, - body: File.read!("test/fixtures/quoted_status.json"), - headers: HttpRequestMock.activitypub_object_headers() - } - end) - - insert(:user, %{ap_id: "https://fedibird.com/users/akkoma_ap_integration_tester"}) - insert(:user, %{ap_id: "https://example.com/users/user"}) - - note = - "test/fixtures/fedibird/quote.json" - |> File.read!() - |> Jason.decode!() - - %{ - valid?: true, - changes: %{ - quoteUri: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" - } - } = ArticleNotePageValidator.cast_and_validate(note) - end end end diff --git a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs index 1846b2291..24df5ea61 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/note_handling_test.exs @@ -707,4 +707,81 @@ test "take_emoji_tags/1" do } ] end + + describe "fix_quote_url/1" do + test "a misskey quote should work", _ do + Tesla.Mock.mock(fn %{ + method: :get, + url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/quoted_status.json"), + headers: HttpRequestMock.activitypub_object_headers() + } + end) + + insert(:user, %{ap_id: "https://misskey.io/users/93492q0ip0"}) + insert(:user, %{ap_id: "https://example.com/users/user"}) + + note = + "test/fixtures/misskey/quote.json" + |> File.read!() + |> Jason.decode!() + + %{"quoteUri" => "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924"} = + Transmogrifier.fix_quote_url(note) + end + + test "a fedibird quote should work", _ do + Tesla.Mock.mock(fn %{ + method: :get, + url: "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/quoted_status.json"), + headers: HttpRequestMock.activitypub_object_headers() + } + end) + + insert(:user, %{ap_id: "https://fedibird.com/users/akkoma_ap_integration_tester"}) + insert(:user, %{ap_id: "https://example.com/users/user"}) + + note = + "test/fixtures/fedibird/quote.json" + |> File.read!() + |> Jason.decode!() + + %{ + "quoteUri" => "https://example.com/objects/43479e20-c0f8-4f49-bf7f-13fab8234924" + } = Transmogrifier.fix_quote_url(note) + end + + test "quote fetching should stop after n levels", _ do + clear_config([:instance, :federation_incoming_replies_max_depth], 1) + + Tesla.Mock.mock(fn %{ + method: :get, + url: "https://misskey.io/notes/934gok3482" + } -> + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/misskey/recursive_quote.json"), + headers: HttpRequestMock.activitypub_object_headers() + } + end) + + insert(:user, %{ap_id: "https://misskey.io/users/93492q0ip0"}) + + note = + "test/fixtures/misskey/recursive_quote.json" + |> File.read!() + |> Jason.decode!() + + %{ + "quoteUri" => "https://misskey.io/notes/934gok3482" + } = Transmogrifier.fix_quote_url(note) + end + end end From 645f0390bcb64849dc69b59caf93947585e82d71 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Wed, 27 Jul 2022 21:48:13 +0000 Subject: [PATCH 30/82] Prepare for ubuntu22 murdering openssl (#120) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/120 --- .woodpecker.yml | 187 ++++++++++++++++++ .woodpecker/.docs.yml | 27 --- .woodpecker/.release.yml | 59 ------ .woodpecker/.test.yml | 59 ------ CHANGELOG.md | 1 - Dockerfile | 2 +- config/config.exs | 12 +- config/description.exs | 98 +++++++++ docs/docs/configuration/cheatsheet.md | 22 +++ docs/docs/installation/alpine_linux_en.md | 6 + lib/pleroma/user.ex | 25 +++ lib/pleroma/web/auth/ldap_authenticator.ex | 129 ++++++++++++ mix.exs | 1 + rel/files/bin/pleroma_ctl | 2 + .../web/o_auth/ldap_authorization_test.exs | 135 +++++++++++++ 15 files changed, 617 insertions(+), 148 deletions(-) create mode 100644 .woodpecker.yml delete mode 100644 .woodpecker/.docs.yml delete mode 100644 .woodpecker/.release.yml delete mode 100644 .woodpecker/.test.yml create mode 100644 lib/pleroma/web/auth/ldap_authenticator.ex create mode 100644 test/pleroma/web/o_auth/ldap_authorization_test.exs diff --git a/.woodpecker.yml b/.woodpecker.yml new file mode 100644 index 000000000..be497b531 --- /dev/null +++ b/.woodpecker.yml @@ -0,0 +1,187 @@ +variables: + - &scw-secrets + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + - &setup-hex "mix local.hex --force && mix local.rebar --force" + - &on-release + when: + event: + - push + - tag + branch: + - develop + - stable + - refs/tags/v* + - refs/tags/stable-* + - &on-point-release + when: + event: + - push + branch: + - develop + - stable + - &on-pr-open + when: + event: + - pull_request + + - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" + + - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + +services: + postgres: + image: postgres:13 + when: + event: + - pull_request + environment: + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + +pipeline: + lint: + <<: *on-pr-open + image: akkoma/ci-base:latest + commands: + - mix local.hex --force + - mix local.rebar --force + - mix format --check-formatted + + build: + image: akkoma/ci-base:latest + <<: *on-pr-open + environment: + MIX_ENV: test + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DB_HOST: postgres + commands: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + + test: + image: akkoma/ci-base:latest + <<: *on-pr-open + environment: + MIX_ENV: test + POSTGRES_DB: pleroma_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + DB_HOST: postgres + commands: + - mix local.hex --force + - mix local.rebar --force + - mix deps.get + - mix compile + - mix ecto.drop -f -q + - mix ecto.create + - mix ecto.migrate + - mix test --preload-modules --exclude erratic --exclude federated --max-cases 4 + + # Canonical amd64 + ubuntu22: + image: hexpm/elixir:1.13.4-erlang-25.0.2-ubuntu-jammy-20220428 + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - rm config/emoji.txt + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-amd64.zip -r release + + release-ubuntu22: + image: akkoma/releaser + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-amd64.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64.zip + - /bin/sh /entrypoint.sh + environment: + SOURCE: akkoma-amd64.zip + DEST: scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64.zip + + debian-bullseye: + image: elixir:1.13.4 + <<: *on-release + environment: + MIX_ENV: prod + DEBIAN_FRONTEND: noninteractive + commands: + - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential gcc make g++ wget + - *clean + - echo "import Config" > config/prod.secret.exs + - *setup-hex + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-amd64.zip -r release + + release-debian: + image: akkoma/releaser + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-amd64.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-debian-bullseye.zip + - /bin/sh /entrypoint.sh + + # Canonical amd64-musl + musl: + image: elixir:1.13.4-alpine + <<: *on-release + environment: + MIX_ENV: prod + commands: + - apk add git gcc g++ musl-dev make cmake file-dev rclone wget zip imagemagick + - *clean + - *setup-hex + - mix deps.clean --all + - *tag-build + - mix deps.get --only prod + - mix release --path release + - zip akkoma-amd64-musl.zip -r release + + release-musl: + image: akkoma/releaser + <<: *on-release + secrets: *scw-secrets + commands: + - export SOURCE=akkoma-amd64-musl.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64-musl.zip + - /bin/sh /entrypoint.sh + + docs: + <<: *on-point-release + secrets: + - SCW_ACCESS_KEY + - SCW_SECRET_KEY + - SCW_DEFAULT_ORGANIZATION_ID + environment: + CI: "true" + image: python:3.10-slim + commands: + - apt-get update && apt-get install -y rclone wget git zip + - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 + - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli + - chmod +x scaleway-cli + - ./scaleway-cli object config install type=rclone + - cd docs + - pip install -r requirements.txt + - mkdocs build + - zip -r docs.zip site/* + - cd site + - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/.docs.yml b/.woodpecker/.docs.yml deleted file mode 100644 index 61b369e51..000000000 --- a/.woodpecker/.docs.yml +++ /dev/null @@ -1,27 +0,0 @@ -pipeline: - build: - when: - event: - - push - branch: - - develop - - stable - secrets: - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - environment: - CI: "true" - image: python:3.10-slim - commands: - - apt-get update && apt-get install -y rclone wget git zip - - wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 - - mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli - - chmod +x scaleway-cli - - ./scaleway-cli object config install type=rclone - - cd docs - - pip install -r requirements.txt - - mkdocs build - - zip -r docs.zip site/* - - cd site - - rclone copy . scaleway:akkoma-docs/$CI_COMMIT_BRANCH/ diff --git a/.woodpecker/.release.yml b/.woodpecker/.release.yml deleted file mode 100644 index 535cdd65b..000000000 --- a/.woodpecker/.release.yml +++ /dev/null @@ -1,59 +0,0 @@ -variables: - - &scw-secrets - - SCW_ACCESS_KEY - - SCW_SECRET_KEY - - SCW_DEFAULT_ORGANIZATION_ID - - &setup-scw-s3 "wget https://github.com/scaleway/scaleway-cli/releases/download/v2.5.1/scaleway-cli_2.5.1_linux_amd64 && mv scaleway-cli_2.5.1_linux_amd64 scaleway-cli && chmod +x scaleway-cli && ./scaleway-cli object config install type=rclone" - - - &setup-hex "mix local.hex --force && mix local.rebar --force" - - &build-on - when: - event: - - push - - tag - branch: - - develop - - stable - - refs/tags/v* - - refs/tags/stable-* - - &tag-build 'export BUILD_TAG=$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG' - - - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix) && (rm scaleway-cli || true)" - - -pipeline: - glibc: - image: elixir:1.13 - <<: *build-on - secrets: *scw-secrets - environment: - MIX_ENV: prod - commands: - - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git - - *clean - - *setup-scw-s3 - - echo "import Mix.Config" > config/prod.secret.exs - - *setup-hex - - *tag-build - - mix deps.get --only prod - - mix release --path release - - zip akkoma-amd64.zip -r release - - rclone copyto akkoma-amd64.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-amd64.zip - - musl: - image: elixir:1.13-alpine - <<: *build-on - secrets: *scw-secrets - environment: - MIX_ENV: prod - commands: - - apk add git gcc g++ musl-dev make cmake file-dev rclone wget zip imagemagick - - *clean - - *setup-scw-s3 - - *setup-hex - - mix deps.clean --all - - *tag-build - - mix deps.get --only prod - - mix release --path release - - zip akkoma-amd64.zip -r release - - rclone copyto akkoma-amd64.zip scaleway:akkoma-updates/$BUILD_TAG/akkoma-amd64-musl.zip diff --git a/.woodpecker/.test.yml b/.woodpecker/.test.yml deleted file mode 100644 index f41655029..000000000 --- a/.woodpecker/.test.yml +++ /dev/null @@ -1,59 +0,0 @@ -matrix: - ELIXIR_VERSION: - - 1.13 - -pipeline: - lint: - when: - event: - - pull_request - image: pleromaforkci/ci-base:1.13 - commands: - - mix local.hex --force - - mix local.rebar --force - - mix format --check-formatted - - build: - image: pleromaforkci/ci-base:${ELIXIR_VERSION} - when: - event: - - pull_request - environment: - MIX_ENV: test - commands: - - mix local.hex --force - - mix local.rebar --force - - mix deps.get - - mix compile - - test: - group: test - image: pleromaforkci/ci-base:${ELIXIR_VERSION} - when: - event: - - pull_request - environment: - MIX_ENV: test - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres - DB_HOST: postgres - commands: - - mix local.hex --force - - mix local.rebar --force - - mix deps.get - - mix ecto.drop -f -q - - mix ecto.create - - mix ecto.migrate - - mix test --preload-modules --exclude erratic --exclude federated --max-cases 4 - -services: - postgres: - image: postgres:13 - when: - event: - - pull_request - environment: - POSTGRES_DB: pleroma_test - POSTGRES_USER: postgres - POSTGRES_PASSWORD: postgres diff --git a/CHANGELOG.md b/CHANGELOG.md index b75720f8d..98f434aaa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - `/api/v1/notifications/dismiss` - `/api/v1/search` - `/api/v1/statuses/{id}/card` -- LDAP authenticator (use the akkoma-contrib-authenticator-ldap runtime module) - Chats, they were half-baked. Just use PMs. - Prometheus, it causes massive slowdown diff --git a/Dockerfile b/Dockerfile index e6210affb..42ba9616b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM hexpm/elixir:1.13.4-erlang-24.3.4.2-alpine-3.16.0 as build +FROM elixir:1.13.4-alpine as build COPY . . diff --git a/config/config.exs b/config/config.exs index bac167c29..197887c93 100644 --- a/config/config.exs +++ b/config/config.exs @@ -509,7 +509,6 @@ "~", "about", "activities", - "akkoma", "api", "auth", "check_password", @@ -590,6 +589,17 @@ extra: true, validate_tld: :no_scheme +config :pleroma, :ldap, + enabled: System.get_env("LDAP_ENABLED") == "true", + host: System.get_env("LDAP_HOST") || "localhost", + port: String.to_integer(System.get_env("LDAP_PORT") || "389"), + ssl: System.get_env("LDAP_SSL") == "true", + sslopts: [], + tls: System.get_env("LDAP_TLS") == "true", + tlsopts: [], + base: System.get_env("LDAP_BASE") || "dc=example,dc=com", + uid: System.get_env("LDAP_UID") || "cn" + oauth_consumer_strategies = "OAUTH_CONSUMER_STRATEGIES" |> System.get_env() diff --git a/config/description.exs b/config/description.exs index b8a053c3c..e864f090c 100644 --- a/config/description.exs +++ b/config/description.exs @@ -2140,6 +2140,104 @@ } ] }, + %{ + group: :pleroma, + key: :ldap, + label: "LDAP", + type: :group, + description: + "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password" <> + " will be verified by trying to authenticate (bind) to a LDAP server." <> + " If a user exists in the LDAP directory but there is no account with the same name yet on the" <> + " Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name.", + children: [ + %{ + key: :enabled, + type: :boolean, + description: "Enables LDAP authentication" + }, + %{ + key: :host, + type: :string, + description: "LDAP server hostname", + suggestions: ["localhosts"] + }, + %{ + key: :port, + type: :integer, + description: "LDAP port, e.g. 389 or 636", + suggestions: [389, 636] + }, + %{ + key: :ssl, + label: "SSL", + type: :boolean, + description: "Enable to use SSL, usually implies the port 636" + }, + %{ + key: :sslopts, + label: "SSL options", + type: :keyword, + description: "Additional SSL options", + suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer], + children: [ + %{ + key: :cacertfile, + type: :string, + description: "Path to file with PEM encoded cacerts", + suggestions: ["path/to/file/with/PEM/cacerts"] + }, + %{ + key: :verify, + type: :atom, + description: "Type of cert verification", + suggestions: [:verify_peer] + } + ] + }, + %{ + key: :tls, + label: "TLS", + type: :boolean, + description: "Enable to use STARTTLS, usually implies the port 389" + }, + %{ + key: :tlsopts, + label: "TLS options", + type: :keyword, + description: "Additional TLS options", + suggestions: [cacertfile: "path/to/file/with/PEM/cacerts", verify: :verify_peer], + children: [ + %{ + key: :cacertfile, + type: :string, + description: "Path to file with PEM encoded cacerts", + suggestions: ["path/to/file/with/PEM/cacerts"] + }, + %{ + key: :verify, + type: :atom, + description: "Type of cert verification", + suggestions: [:verify_peer] + } + ] + }, + %{ + key: :base, + type: :string, + description: "LDAP base, e.g. \"dc=example,dc=com\"", + suggestions: ["dc=example,dc=com"] + }, + %{ + key: :uid, + label: "UID", + type: :string, + description: + "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"", + suggestions: ["cn"] + } + ] + }, %{ group: :pleroma, key: :auth, diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index fdc39c0de..bac20070f 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -891,6 +891,28 @@ Authentication / authorization settings. ### Pleroma.Web.Auth.Authenticator * `Pleroma.Web.Auth.PleromaAuthenticator`: default database authenticator. +* `Pleroma.Web.Auth.LDAPAuthenticator`: LDAP authentication. + +### :ldap + +Use LDAP for user authentication. When a user logs in to the Akkoma +instance, the name and password will be verified by trying to authenticate +(bind) to an LDAP server. If a user exists in the LDAP directory but there +is no account with the same name yet on the Akkoma instance then a new +Akkoma account will be created with the same name as the LDAP user name. + +* `enabled`: enables LDAP authentication +* `host`: LDAP server hostname +* `port`: LDAP port, e.g. 389 or 636 +* `ssl`: true to use SSL, usually implies the port 636 +* `sslopts`: additional SSL options +* `tls`: true to start TLS, usually implies the port 389 +* `tlsopts`: additional TLS options +* `base`: LDAP base, e.g. "dc=example,dc=com" +* `uid`: LDAP attribute name to authenticate the user, e.g. when "cn", the filter will be "cn=username,base" + +Note, if your LDAP server is an Active Directory server the correct value is commonly `uid: "cn"`, but if you use an +OpenLDAP server the value may be `uid: "uid"`. ### :oauth2 (Akkoma as OAuth 2.0 provider settings) diff --git a/docs/docs/installation/alpine_linux_en.md b/docs/docs/installation/alpine_linux_en.md index 3be69af6e..f98998fb8 100644 --- a/docs/docs/installation/alpine_linux_en.md +++ b/docs/docs/installation/alpine_linux_en.md @@ -41,6 +41,12 @@ doas apk add git build-base cmake file-dev doas apk add erlang elixir ``` +* Install `erlang-eldap` if you want to enable ldap authenticator + +```shell +doas apk add erlang-eldap +``` + ### Install PostgreSQL * Install Postgresql server: diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 275ad9506..2a1b5af94 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -660,6 +660,31 @@ def force_password_reset_async(user) do @spec force_password_reset(User.t()) :: {:ok, User.t()} | {:error, Ecto.Changeset.t()} def force_password_reset(user), do: update_password_reset_pending(user, true) + # Used to auto-register LDAP accounts which won't have a password hash stored locally + def register_changeset_ldap(struct, params = %{password: password}) + when is_nil(password) do + params = + if Map.has_key?(params, :email) do + Map.put_new(params, :email, params[:email]) + else + params + end + + struct + |> cast(params, [ + :name, + :nickname, + :email + ]) + |> validate_required([:name, :nickname]) + |> unique_constraint(:nickname) + |> validate_exclusion(:nickname, Config.get([User, :restricted_nicknames])) + |> validate_format(:nickname, local_nickname_regex()) + |> put_ap_id() + |> unique_constraint(:ap_id) + |> put_following_and_follower_and_featured_address() + end + def register_changeset(struct, params \\ %{}, opts \\ []) do bio_limit = Config.get([:instance, :user_bio_length], 5000) name_limit = Config.get([:instance, :user_name_length], 100) diff --git a/lib/pleroma/web/auth/ldap_authenticator.ex b/lib/pleroma/web/auth/ldap_authenticator.ex new file mode 100644 index 000000000..f77e8d203 --- /dev/null +++ b/lib/pleroma/web/auth/ldap_authenticator.ex @@ -0,0 +1,129 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.Auth.LDAPAuthenticator do + alias Pleroma.User + + require Logger + + import Pleroma.Web.Auth.Helpers, only: [fetch_credentials: 1, fetch_user: 1] + + @behaviour Pleroma.Web.Auth.Authenticator + @base Pleroma.Web.Auth.PleromaAuthenticator + + @connection_timeout 10_000 + @search_timeout 10_000 + + defdelegate get_registration(conn), to: @base + defdelegate create_from_registration(conn, registration), to: @base + defdelegate handle_error(conn, error), to: @base + defdelegate auth_template, to: @base + defdelegate oauth_consumer_template, to: @base + + def get_user(%Plug.Conn{} = conn) do + with {:ldap, true} <- {:ldap, Pleroma.Config.get([:ldap, :enabled])}, + {:ok, {name, password}} <- fetch_credentials(conn), + %User{} = user <- ldap_user(name, password) do + {:ok, user} + else + {:ldap, _} -> + @base.get_user(conn) + + error -> + error + end + end + + defp ldap_user(name, password) do + ldap = Pleroma.Config.get(:ldap, []) + host = Keyword.get(ldap, :host, "localhost") + port = Keyword.get(ldap, :port, 389) + ssl = Keyword.get(ldap, :ssl, false) + sslopts = Keyword.get(ldap, :sslopts, []) + + options = + [{:port, port}, {:ssl, ssl}, {:timeout, @connection_timeout}] ++ + if sslopts != [], do: [{:sslopts, sslopts}], else: [] + + case :eldap.open([to_charlist(host)], options) do + {:ok, connection} -> + try do + if Keyword.get(ldap, :tls, false) do + :application.ensure_all_started(:ssl) + + case :eldap.start_tls( + connection, + Keyword.get(ldap, :tlsopts, []), + @connection_timeout + ) do + :ok -> + :ok + + error -> + Logger.error("Could not start TLS: #{inspect(error)}") + end + end + + bind_user(connection, ldap, name, password) + after + :eldap.close(connection) + end + + {:error, error} -> + Logger.error("Could not open LDAP connection: #{inspect(error)}") + {:error, {:ldap_connection_error, error}} + end + end + + defp bind_user(connection, ldap, name, password) do + uid = Keyword.get(ldap, :uid, "cn") + base = Keyword.get(ldap, :base) + + case :eldap.simple_bind(connection, "#{uid}=#{name},#{base}", password) do + :ok -> + case fetch_user(name) do + %User{} = user -> + user + + _ -> + register_user(connection, base, uid, name) + end + + error -> + error + end + end + + defp register_user(connection, base, uid, name) do + case :eldap.search(connection, [ + {:base, to_charlist(base)}, + {:filter, :eldap.equalityMatch(to_charlist(uid), to_charlist(name))}, + {:scope, :eldap.wholeSubtree()}, + {:timeout, @search_timeout} + ]) do + {:ok, {:eldap_search_result, [{:eldap_entry, _, attributes}], _}} -> + params = %{ + name: name, + nickname: name, + password: nil + } + + params = + case List.keyfind(attributes, 'mail', 0) do + {_, [mail]} -> Map.put_new(params, :email, :erlang.list_to_binary(mail)) + _ -> params + end + + changeset = User.register_changeset_ldap(%User{}, params) + + case User.register(changeset) do + {:ok, user} -> user + error -> error + end + + error -> + error + end + end +end diff --git a/mix.exs b/mix.exs index ff54c79b4..71384c755 100644 --- a/mix.exs +++ b/mix.exs @@ -9,6 +9,7 @@ def project do elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(), elixirc_options: [warnings_as_errors: warnings_as_errors()], + xref: [exclude: [:eldap]], start_permanent: Mix.env() == :prod, aliases: aliases(), deps: deps(), diff --git a/rel/files/bin/pleroma_ctl b/rel/files/bin/pleroma_ctl index 5aebda2fb..176287fcb 100755 --- a/rel/files/bin/pleroma_ctl +++ b/rel/files/bin/pleroma_ctl @@ -2,6 +2,7 @@ # XXX: This should be removed when elixir's releases get custom command support detect_flavour() { + echo "Trying to autodetect flavour, you may want to override this with --flavour" arch="$(uname -m)" if [ "$arch" = "x86_64" ]; then arch="amd64" @@ -101,6 +102,7 @@ update() { echo "Restoring erlang cookie" echo $erlang_cookie > $RELEASE_ROOT/releases/COOKIE echo "Done! Please refer to the changelog/release notes for changes and update instructions" + echo "You probably also want to update your frontend!" set +e } diff --git a/test/pleroma/web/o_auth/ldap_authorization_test.exs b/test/pleroma/web/o_auth/ldap_authorization_test.exs new file mode 100644 index 000000000..61b9ce6b7 --- /dev/null +++ b/test/pleroma/web/o_auth/ldap_authorization_test.exs @@ -0,0 +1,135 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2021 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.OAuth.LDAPAuthorizationTest do + use Pleroma.Web.ConnCase + alias Pleroma.Repo + alias Pleroma.Web.OAuth.Token + import Pleroma.Factory + import Mock + + @skip if !Code.ensure_loaded?(:eldap), do: :skip + + setup_all do: clear_config([:ldap, :enabled], true) + + setup_all do: clear_config(Pleroma.Web.Auth.Authenticator, Pleroma.Web.Auth.LDAPAuthenticator) + + @tag @skip + test "authorizes the existing user using LDAP credentials" do + password = "testpassword" + user = insert(:user, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt(password)) + app = insert(:oauth_app, scopes: ["read", "write"]) + + host = Pleroma.Config.get([:ldap, :host]) |> to_charlist + port = Pleroma.Config.get([:ldap, :port]) + + with_mocks [ + {:eldap, [], + [ + open: fn [^host], [{:port, ^port}, {:ssl, false} | _] -> {:ok, self()} end, + simple_bind: fn _connection, _dn, ^password -> :ok end, + close: fn _connection -> + send(self(), :close_connection) + :ok + end + ]} + ] do + conn = + build_conn() + |> post("/oauth/token", %{ + "grant_type" => "password", + "username" => user.nickname, + "password" => password, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + + assert %{"access_token" => token} = json_response(conn, 200) + + token = Repo.get_by(Token, token: token) + + assert token.user_id == user.id + assert_received :close_connection + end + end + + @tag @skip + test "creates a new user after successful LDAP authorization" do + password = "testpassword" + user = build(:user) + app = insert(:oauth_app, scopes: ["read", "write"]) + + host = Pleroma.Config.get([:ldap, :host]) |> to_charlist + port = Pleroma.Config.get([:ldap, :port]) + + with_mocks [ + {:eldap, [], + [ + open: fn [^host], [{:port, ^port}, {:ssl, false} | _] -> {:ok, self()} end, + simple_bind: fn _connection, _dn, ^password -> :ok end, + equalityMatch: fn _type, _value -> :ok end, + wholeSubtree: fn -> :ok end, + search: fn _connection, _options -> + {:ok, {:eldap_search_result, [{:eldap_entry, '', []}], []}} + end, + close: fn _connection -> + send(self(), :close_connection) + :ok + end + ]} + ] do + conn = + build_conn() + |> post("/oauth/token", %{ + "grant_type" => "password", + "username" => user.nickname, + "password" => password, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + + assert %{"access_token" => token} = json_response(conn, 200) + + token = Repo.get_by(Token, token: token) |> Repo.preload(:user) + + assert token.user.nickname == user.nickname + assert_received :close_connection + end + end + + @tag @skip + test "disallow authorization for wrong LDAP credentials" do + password = "testpassword" + user = insert(:user, password_hash: Pleroma.Password.Pbkdf2.hash_pwd_salt(password)) + app = insert(:oauth_app, scopes: ["read", "write"]) + + host = Pleroma.Config.get([:ldap, :host]) |> to_charlist + port = Pleroma.Config.get([:ldap, :port]) + + with_mocks [ + {:eldap, [], + [ + open: fn [^host], [{:port, ^port}, {:ssl, false} | _] -> {:ok, self()} end, + simple_bind: fn _connection, _dn, ^password -> {:error, :invalidCredentials} end, + close: fn _connection -> + send(self(), :close_connection) + :ok + end + ]} + ] do + conn = + build_conn() + |> post("/oauth/token", %{ + "grant_type" => "password", + "username" => user.nickname, + "password" => password, + "client_id" => app.client_id, + "client_secret" => app.client_secret + }) + + assert %{"error" => "Invalid credentials"} = json_response(conn, 400) + assert_received :close_connection + end + end +end From 2796a9acaf418b6dd0dad494aa0092110b29e5a7 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Wed, 27 Jul 2022 21:56:59 +0000 Subject: [PATCH 31/82] backend-i18n (#121) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/121 --- lib/pleroma/docs/translator.ex | 10 + lib/pleroma/docs/translator/compiler.ex | 119 + .../controllers/config_controller.ex | 50 +- priv/gettext/config_descriptions.pot | 6023 +++++++++++++++++ priv/gettext/default.pot | 68 +- priv/gettext/errors.pot | 329 +- priv/gettext/static_pages.pot | 164 +- .../pleroma/docs/translator/compiler_test.exs | 90 + 8 files changed, 6595 insertions(+), 258 deletions(-) create mode 100644 lib/pleroma/docs/translator.ex create mode 100644 lib/pleroma/docs/translator/compiler.ex create mode 100644 priv/gettext/config_descriptions.pot create mode 100644 test/pleroma/docs/translator/compiler_test.exs diff --git a/lib/pleroma/docs/translator.ex b/lib/pleroma/docs/translator.ex new file mode 100644 index 000000000..13e33c87e --- /dev/null +++ b/lib/pleroma/docs/translator.ex @@ -0,0 +1,10 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Docs.Translator do + require Pleroma.Docs.Translator.Compiler + require Pleroma.Web.Gettext + + @before_compile Pleroma.Docs.Translator.Compiler +end diff --git a/lib/pleroma/docs/translator/compiler.ex b/lib/pleroma/docs/translator/compiler.ex new file mode 100644 index 000000000..5d27d9fa2 --- /dev/null +++ b/lib/pleroma/docs/translator/compiler.ex @@ -0,0 +1,119 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Docs.Translator.Compiler do + @external_resource "config/description.exs" + @raw_config Pleroma.Config.Loader.read("config/description.exs") + @raw_descriptions @raw_config[:pleroma][:config_description] + + defmacro __before_compile__(_env) do + strings = + __MODULE__.descriptions() + |> __MODULE__.extract_strings() + + quote do + def placeholder do + unquote do + Enum.map( + strings, + fn {path, type, string} -> + ctxt = msgctxt_for(path, type) + + quote do + Pleroma.Web.Gettext.dpgettext_noop( + "config_descriptions", + unquote(ctxt), + unquote(string) + ) + end + end + ) + end + end + end + end + + def descriptions do + Pleroma.Web.ActivityPub.MRF.config_descriptions() + |> Enum.reduce(@raw_descriptions, fn description, acc -> [description | acc] end) + |> Pleroma.Docs.Generator.convert_to_strings() + end + + def extract_strings(descriptions) do + descriptions + |> Enum.reduce(%{strings: [], path: []}, &process_item/2) + |> Map.get(:strings) + end + + defp process_item(entity, acc) do + current_level = + acc + |> process_desc(entity) + |> process_label(entity) + + process_children(entity, current_level) + end + + defp process_desc(acc, %{description: desc} = item) do + %{ + strings: [{acc.path ++ [key_for(item)], "description", desc} | acc.strings], + path: acc.path + } + end + + defp process_desc(acc, _) do + acc + end + + defp process_label(acc, %{label: label} = item) do + %{ + strings: [{acc.path ++ [key_for(item)], "label", label} | acc.strings], + path: acc.path + } + end + + defp process_label(acc, _) do + acc + end + + defp process_children(%{children: children} = item, acc) do + current_level = Map.put(acc, :path, acc.path ++ [key_for(item)]) + + children + |> Enum.reduce(current_level, &process_item/2) + |> Map.put(:path, acc.path) + end + + defp process_children(_, acc) do + acc + end + + def msgctxt_for(path, type) do + "config #{type} at #{Enum.join(path, " > ")}" + end + + defp convert_group({_, group}) do + group + end + + defp convert_group(group) do + group + end + + def key_for(%{group: group, key: key}) do + "#{convert_group(group)}-#{key}" + end + + def key_for(%{group: group}) do + convert_group(group) + end + + def key_for(%{key: key}) do + key + end + + def key_for(_) do + nil + end +end diff --git a/lib/pleroma/web/admin_api/controllers/config_controller.ex b/lib/pleroma/web/admin_api/controllers/config_controller.ex index a718d7b8d..831ba3b6f 100644 --- a/lib/pleroma/web/admin_api/controllers/config_controller.ex +++ b/lib/pleroma/web/admin_api/controllers/config_controller.ex @@ -22,10 +22,58 @@ defmodule Pleroma.Web.AdminAPI.ConfigController do defdelegate open_api_operation(action), to: Pleroma.Web.ApiSpec.Admin.ConfigOperation + defp translate_descriptions(descriptions, path \\ []) do + Enum.map(descriptions, fn desc -> translate_item(desc, path) end) + end + + defp translate_string(str, path, type) do + Gettext.dpgettext( + Pleroma.Web.Gettext, + "config_descriptions", + Pleroma.Docs.Translator.Compiler.msgctxt_for(path, type), + str + ) + end + + defp maybe_put_translated(item, key, path) do + if item[key] do + Map.put( + item, + key, + translate_string( + item[key], + path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)], + to_string(key) + ) + ) + else + item + end + end + + defp translate_item(item, path) do + item + |> maybe_put_translated(:label, path) + |> maybe_put_translated(:description, path) + |> translate_children(path) + end + + defp translate_children(%{children: children} = item, path) when is_list(children) do + item + |> Map.put( + :children, + translate_descriptions(children, path ++ [Pleroma.Docs.Translator.Compiler.key_for(item)]) + ) + end + + defp translate_children(item, _path) do + item + end + def descriptions(conn, _params) do descriptions = Enum.filter(Pleroma.Docs.JSON.compiled_descriptions(), &whitelisted_config?/1) - json(conn, descriptions) + json(conn, translate_descriptions(descriptions)) end def show(conn, %{only_db: true}) do diff --git a/priv/gettext/config_descriptions.pot b/priv/gettext/config_descriptions.pot new file mode 100644 index 000000000..9021fbfab --- /dev/null +++ b/priv/gettext/config_descriptions.pot @@ -0,0 +1,6023 @@ +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +msgid "" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger" +msgid "Logger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures for AP fetches" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config description at :pleroma-:instance > :short_description" +msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "" + +#, elixir-autogen, elixir-format +#: lib/pleroma/docs/translator.ex:5 +msgctxt "config label at :pleroma-:instance > :short_description" +msgid "Short description" +msgstr "" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index fed111ccb..10a62d2a8 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -10,175 +10,175 @@ msgid "" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:122 msgid "%{name} - %{count} is not a multiple of %{multiple}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:131 msgid "%{name} - %{value} is larger than exclusive maximum %{max}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:140 msgid "%{name} - %{value} is larger than inclusive maximum %{max}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:149 msgid "%{name} - %{value} is smaller than exclusive minimum %{min}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:158 msgid "%{name} - %{value} is smaller than inclusive minimum %{min}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:102 msgid "%{name} - Array items must be unique." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:114 msgid "%{name} - Array length %{length} is larger than maxItems: %{}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:106 msgid "%{name} - Array length %{length} is smaller than minItems: %{min}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:166 msgid "%{name} - Invalid %{type}. Got: %{value}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:174 msgid "%{name} - Invalid format. Expected %{format}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:51 msgid "%{name} - Invalid schema.type. Got: %{type}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:178 msgid "%{name} - Invalid value for enum." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:95 msgid "%{name} - String length is larger than maxLength: %{length}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:88 msgid "%{name} - String length is smaller than minLength: %{length}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:63 msgid "%{name} - null value where %{type} expected." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:60 msgid "%{name} - null value." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:182 msgid "Failed to cast to any schema in %{polymorphic_type}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:71 msgid "Failed to cast value as %{invalid_schema}. Value must be castable using `allOf` schemas listed." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:84 msgid "Failed to cast value to one of: %{failed_schemas}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:78 msgid "Failed to cast value using any of: %{failed_schemas}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:212 msgid "Invalid value for header: %{name}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:204 msgid "Missing field: %{name}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:208 msgid "Missing header: %{name}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:196 msgid "No value provided for required discriminator `%{field}`." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:216 msgid "Object property count %{property_count} is greater than maxProperties: %{max_properties}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:224 msgid "Object property count %{property_count} is less than minProperties: %{min_properties}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/static_fe/static_fe/error.html.eex:2 msgid "Oops" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:188 msgid "Unexpected field: %{name}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:200 msgid "Unknown schema: %{name}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/api_spec/render_error.ex:192 msgid "Value used as discriminator for `%{field}` matches no schemas." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:43 #: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:37 msgid "announces" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:44 #: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:38 msgid "likes" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:42 #: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:36 msgid "replies" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/embed/show.html.eex:27 #: lib/pleroma/web/templates/static_fe/static_fe/_notice.html.eex:22 msgid "sensitive media" diff --git a/priv/gettext/errors.pot b/priv/gettext/errors.pot index 7644fc230..85854d23e 100644 --- a/priv/gettext/errors.pot +++ b/priv/gettext/errors.pot @@ -89,436 +89,483 @@ msgstr "" msgid "must be equal to %{number}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:523 msgid "Account not found" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:316 msgid "Already voted" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:402 msgid "Bad request" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/controller_helper.ex:97 #: lib/pleroma/web/controller_helper.ex:103 msgid "Can't display this activity" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:324 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:325 msgid "Can't find user" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 msgid "Can't get favorites" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/utils.ex:482 msgid "Cannot post an empty status without attachments" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/utils.ex:441 msgid "Comment must be up to %{max_size} characters" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/config_db.ex:200 msgid "Config with params %{params} not found" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api.ex:167 lib/pleroma/web/common_api.ex:171 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:167 +#: lib/pleroma/web/common_api.ex:171 msgid "Could not delete" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:217 msgid "Could not favorite" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:254 msgid "Could not unfavorite" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:202 msgid "Could not unrepeat" msgstr "" -#, elixir-format -#: lib/pleroma/web/common_api.ex:530 lib/pleroma/web/common_api.ex:539 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/common_api.ex:530 +#: lib/pleroma/web/common_api.ex:539 msgid "Could not update state" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 msgid "Error." msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:99 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:105 msgid "Invalid CAPTCHA" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 #: lib/pleroma/web/o_auth/o_auth_controller.ex:631 msgid "Invalid credentials" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 msgid "Invalid credentials." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:337 msgid "Invalid indices" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 msgid "Invalid parameters" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/utils.ex:349 msgid "Invalid password." msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:254 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 msgid "Invalid request" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:102 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:108 msgid "Kocaptcha service unavailable" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 msgid "Missing parameters" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/utils.ex:477 msgid "No such conversation" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 -#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 msgid "No such permission_group" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:504 -#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 lib/pleroma/web/feed/tag_controller.ex:16 -#: lib/pleroma/web/feed/user_controller.ex:69 lib/pleroma/web/o_status/o_status_controller.ex:132 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:515 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 +#: lib/pleroma/web/feed/tag_controller.ex:16 +#: lib/pleroma/web/feed/user_controller.ex:69 +#: lib/pleroma/web/o_status/o_status_controller.ex:132 #: lib/pleroma/web/plugs/uploaded_media.ex:84 msgid "Not found" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:308 msgid "Poll's author can't vote" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 -#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 msgid "Record not found" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 -#: lib/pleroma/web/feed/user_controller.ex:78 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 +#: lib/pleroma/web/feed/user_controller.ex:78 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 #: lib/pleroma/web/o_status/o_status_controller.ex:138 msgid "Something went wrong" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/activity_draft.ex:143 msgid "The message visibility must be direct" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/utils.ex:492 msgid "The status is over the character limit" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 msgid "This resource requires authentication." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/rate_limiter.ex:208 msgid "Throttled" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:338 msgid "Too many choices" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 msgid "You can't revoke your own admin status." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:243 #: lib/pleroma/web/o_auth/o_auth_controller.ex:333 msgid "Your account is currently disabled" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:205 #: lib/pleroma/web/o_auth/o_auth_controller.ex:356 msgid "Your login is missing a confirmed e-mail address" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:392 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:403 msgid "can't read inbox of %{nickname} as %{as_nickname}" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 msgid "can't update outbox of %{nickname} as %{as_nickname}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:475 msgid "conversation is already muted" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:510 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:521 msgid "error" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 msgid "mascots can only be images" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 msgid "not found" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:437 msgid "Bad OAuth request." msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:108 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:114 msgid "CAPTCHA already used" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:105 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:111 msgid "CAPTCHA expired" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/uploaded_media.ex:57 msgid "Failed" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:453 msgid "Failed to authenticate: %{message}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:484 msgid "Failed to set up user account." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 msgid "Insufficient permissions: %{permissions}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/uploaded_media.ex:111 msgid "Internal Error" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/fallback_controller.ex:22 #: lib/pleroma/web/o_auth/fallback_controller.ex:29 msgid "Invalid Username/Password" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:111 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:117 msgid "Invalid answer data" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 msgid "Nodeinfo schema version not handled" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:194 msgid "This action is outside the authorized scopes" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/fallback_controller.ex:14 msgid "Unknown error, please check the details and try again." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:136 #: lib/pleroma/web/o_auth/o_auth_controller.ex:180 msgid "Unlisted redirect_uri." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:433 msgid "Unsupported OAuth provider: %{provider}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/uploaders/uploader.ex:74 msgid "Uploader callback timeout" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/uploader_controller.ex:23 msgid "bad request" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:96 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:102 msgid "CAPTCHA Error" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:266 msgid "Could not add reaction emoji" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api.ex:277 msgid "Could not remove reaction emoji" msgstr "" -#, elixir-format -#: lib/pleroma/web/twitter_api/twitter_api.ex:122 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/twitter_api/twitter_api.ex:128 msgid "Invalid CAPTCHA (Missing parameter: %{name})" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 msgid "List not found" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 msgid "Missing parameter: %{name}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:232 #: lib/pleroma/web/o_auth/o_auth_controller.ex:346 msgid "Password reset is required" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/tests/auth_test_controller.ex:9 -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 lib/pleroma/web/admin_api/controllers/config_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 lib/pleroma/web/admin_api/controllers/status_controller.ex:6 -#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 lib/pleroma/web/controller_helper.ex:6 lib/pleroma/web/embed_controller.ex:6 -#: lib/pleroma/web/fallback/redirect_controller.ex:6 lib/pleroma/web/feed/tag_controller.ex:6 -#: lib/pleroma/web/feed/user_controller.ex:6 lib/pleroma/web/mailer/subscription_controller.ex:6 -#: lib/pleroma/web/manifest_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 -#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 -#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 -#: lib/pleroma/web/o_auth/fallback_controller.ex:6 lib/pleroma/web/o_auth/mfa_controller.ex:10 -#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 lib/pleroma/web/o_status/o_status_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 -#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 +#: lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback/redirect_controller.ex:6 +#: lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 +#: lib/pleroma/web/mailer/subscription_controller.ex:6 +#: lib/pleroma/web/manifest_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 +#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 +#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 +#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 +#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/o_auth/fallback_controller.ex:6 +#: lib/pleroma/web/o_auth/mfa_controller.ex:10 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 +#: lib/pleroma/web/o_status/o_status_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 +#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 #: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 -#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 -#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 lib/pleroma/web/twitter_api/controller.ex:6 -#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 -#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 lib/pleroma/web/uploader_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 +#: lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 +#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 +#: lib/pleroma/web/twitter_api/controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 +#: lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 +#: lib/pleroma/web/uploader_controller.ex:6 #: lib/pleroma/web/web_finger/web_finger_controller.ex:6 msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 msgid "Two-factor authentication enabled, you must use a access token." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 msgid "Web push subscription is disabled on this Pleroma instance" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 msgid "You can't revoke your own admin/moderator status." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 msgid "authorization required for timeline view" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 msgid "Access denied" msgstr "" -#, elixir-format -#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:321 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:322 msgid "This API requires an authenticated user" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 #: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 msgid "User is not an admin." @@ -531,33 +578,33 @@ msgid_plural "Last export was less than %{days} days ago" msgstr[0] "" msgstr[1] "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/user/backup.ex:93 msgid "Backups require enabled email" msgstr "" -#, elixir-format -#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:423 +#, elixir-autogen, elixir-format +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:434 msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/user/backup.ex:98 msgid "Email is required" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/common_api/utils.ex:507 msgid "Too many attachments" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 #: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 msgid "User is not a staff member." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/o_auth/o_auth_controller.ex:366 msgid "Your account is awaiting approval." msgstr "" diff --git a/priv/gettext/static_pages.pot b/priv/gettext/static_pages.pot index fbc3e61a3..8e1b1d9db 100644 --- a/priv/gettext/static_pages.pot +++ b/priv/gettext/static_pages.pot @@ -10,393 +10,393 @@ msgid "" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 msgctxt "remote follow authorization button" msgid "Authorize" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 msgctxt "remote follow error" msgid "Error fetching user" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 msgctxt "remote follow header" msgid "Remote follow" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 msgctxt "placeholder text for auth code entry" msgid "Authentication code" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 msgctxt "placeholder text for password entry" msgid "Password" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 msgctxt "placeholder text for username entry" msgid "Username" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 msgctxt "remote follow authorization button for login" msgid "Authorize" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 msgctxt "remote follow authorization button for mfa" msgid "Authorize" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 msgctxt "remote follow error" msgid "Error following account" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 msgctxt "remote follow header, need login" msgid "Log in to follow" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 msgctxt "remote follow mfa header" msgid "Two-factor authentication" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 msgctxt "remote follow success" msgid "Account followed!" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 msgctxt "placeholder text for account id" msgid "Your account ID, e.g. lain@quitter.se" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 msgctxt "remote follow authorization button for following with a remote account" msgid "Follow" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 msgctxt "remote follow error" msgid "Error: %{error}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 msgctxt "remote follow header" msgid "Remotely follow %{nickname}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 msgctxt "password reset button" msgid "Reset" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 msgctxt "password reset failed homepage link" msgid "Homepage" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 msgctxt "password reset failed message" msgid "Password reset failed" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 msgctxt "password reset form confirm password prompt" msgid "Confirmation" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 msgctxt "password reset form password prompt" msgid "Password" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 msgctxt "password reset invalid token message" msgid "Invalid Token" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 msgctxt "password reset successful homepage link" msgid "Homepage" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 msgctxt "password reset successful message" msgid "Password changed!" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 #: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 msgctxt "tag feed description" msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 msgctxt "oauth authorization exists page title" msgid "Authorization exists" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 msgctxt "oauth authorize approve button" msgid "Approve" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 msgctxt "oauth authorize cancel button" msgid "Cancel" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 msgctxt "oauth authorize message" msgid "Application %{client_name} is requesting access to your account." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 msgctxt "oauth authorized page title" msgid "Successfully authorized" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 msgctxt "oauth external provider page title" msgid "Sign in with external provider" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 msgctxt "oauth external provider sign in button" msgid "Sign in with %{strategy}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 msgctxt "oauth login button" msgid "Log In" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 msgctxt "oauth login password prompt" msgid "Password" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 msgctxt "oauth login username prompt" msgid "Username" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 msgctxt "oauth register nickname prompt" msgid "Pleroma Handle" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 msgctxt "oauth register nickname unchangeable warning" msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 msgctxt "oauth register page email prompt" msgid "Email" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 msgctxt "oauth register page fill form prompt" msgid "If you'd like to register a new account, please provide the details below." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 msgctxt "oauth register page login button" msgid "Proceed as existing user" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 msgctxt "oauth register page login password prompt" msgid "Password" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 msgctxt "oauth register page login prompt" msgid "Alternatively, sign in to connect to existing account." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 msgctxt "oauth register page login username prompt" msgid "Name or email" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 msgctxt "oauth register page nickname prompt" msgid "Nickname" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 msgctxt "oauth register page register button" msgid "Proceed as new user" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 msgctxt "oauth register page title" msgid "Registration Details" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 msgctxt "oauth register page title" msgid "This is the first time you visit! Please enter your Pleroma handle." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 msgctxt "oauth scopes message" msgid "The following permissions will be granted" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 #: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 msgctxt "oauth token code message" msgid "Token code is
%{token}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 msgctxt "mfa auth code prompt" msgid "Authentication code" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 msgctxt "mfa auth page title" msgid "Two-factor authentication" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 msgctxt "mfa auth page use recovery code link" msgid "Enter a two-factor recovery code" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 msgctxt "mfa auth verify code button" msgid "Verify" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 msgctxt "mfa recover page title" msgid "Two-factor recovery" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 msgctxt "mfa recover recovery code prompt" msgid "Recovery code" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 msgctxt "mfa recover use 2fa code link" msgid "Enter a two-factor code" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 msgctxt "mfa recover verify recovery code button" msgid "Verify" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 msgctxt "static fe profile page remote follow button" msgid "Remote follow" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:163 msgctxt "digest email header line" msgid "Hey %{nickname}, here is what you've missed!" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:544 msgctxt "digest email receiver address" msgid "The email address you are subscribed as is %{email}. " msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:538 msgctxt "digest email sending reason" msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:547 msgctxt "digest email unsubscribe action" msgid "To unsubscribe, please go %{here}." msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/email/digest.html.eex:547 msgctxt "digest email unsubscribe action link text" msgid "here" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 msgctxt "mailer unsubscribe failed message" msgid "UNSUBSCRIBE FAILURE" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 msgctxt "mailer unsubscribe successful message" msgid "UNSUBSCRIBE SUCCESSFUL" @@ -410,103 +410,103 @@ msgid_plural "%{count} New Followers" msgstr[0] "" msgstr[1] "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:356 msgctxt "account archive email body - self-requested" msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:384 msgctxt "account archive email subject" msgid "Your account archive is ready" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:188 msgctxt "approval pending email body" msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:202 msgctxt "approval pending email subject" msgid "Your account is awaiting approval" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:158 msgctxt "confirmation email body" msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:174 msgctxt "confirmation email subject" msgid "%{instance_name} account confirmation" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:310 msgctxt "digest email subject" msgid "Your digest from %{instance_name}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:81 msgctxt "password reset email body" msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:98 msgctxt "password reset email subject" msgid "Password reset" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:215 msgctxt "successful registration email body" msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:231 msgctxt "successful registration email subject" msgid "Account registered on %{instance_name}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:119 msgctxt "user invitation email body" msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:136 msgctxt "user invitation email subject" msgid "Invitation to %{instance_name}" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:53 msgctxt "welcome email html body" msgid "Welcome to %{instance_name}!" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:41 msgctxt "welcome email subject" msgid "Welcome to %{instance_name}!" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:65 msgctxt "welcome email text body" msgid "Welcome to %{instance_name}!" msgstr "" -#, elixir-format +#, elixir-autogen, elixir-format #: lib/pleroma/emails/user_email.ex:368 msgctxt "account archive email body - admin requested" msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" diff --git a/test/pleroma/docs/translator/compiler_test.exs b/test/pleroma/docs/translator/compiler_test.exs new file mode 100644 index 000000000..d6c3cdd40 --- /dev/null +++ b/test/pleroma/docs/translator/compiler_test.exs @@ -0,0 +1,90 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Docs.Translator.CompilerTest do + use ExUnit.Case, async: true + + alias Pleroma.Docs.Translator.Compiler + + @descriptions [ + %{ + key: "1", + label: "1", + description: "2", + children: [ + %{ + key: "3", + label: "3", + description: "4" + }, + %{ + key: "5", + label: "5", + description: "6" + } + ] + }, + %{ + key: "7", + label: "7", + description: "8", + children: [ + %{ + key: "9", + description: "9", + children: [ + %{ + key: "10", + description: "10", + children: [ + %{key: "11", description: "11"}, + %{description: "12"} + ] + } + ] + }, + %{ + label: "13" + } + ] + }, + %{ + group: "14", + label: "14" + }, + %{ + group: "15", + key: "15", + label: "15" + }, + %{ + group: {":subgroup", "16"}, + label: "16" + } + ] + + describe "extract_strings/1" do + test "it extracts all labels and descriptions" do + strings = Compiler.extract_strings(@descriptions) + assert length(strings) == 16 + + assert {["1"], "label", "1"} in strings + assert {["1"], "description", "2"} in strings + assert {["1", "3"], "label", "3"} in strings + assert {["1", "3"], "description", "4"} in strings + assert {["1", "5"], "label", "5"} in strings + assert {["1", "5"], "description", "6"} in strings + assert {["7"], "label", "7"} in strings + assert {["7"], "description", "8"} in strings + assert {["7", "9"], "description", "9"} in strings + assert {["7", "9", "10"], "description", "10"} in strings + assert {["7", "9", "10", "11"], "description", "11"} in strings + assert {["7", "9", "10", nil], "description", "12"} in strings + assert {["7", nil], "label", "13"} in strings + assert {["14"], "label", "14"} in strings + assert {["15-15"], "label", "15"} in strings + assert {["16"], "label", "16"} in strings + end + end +end From 38cefaebd90f28dba7af9564ae977db28d4d51ce Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 27 Jul 2022 23:29:34 +0100 Subject: [PATCH 32/82] ensure mix clean --- .woodpecker.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index be497b531..1e4f09985 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -29,6 +29,7 @@ variables: - &tag-build "export BUILD_TAG=$${CI_COMMIT_TAG:-\"$CI_COMMIT_BRANCH\"} && export PLEROMA_BUILD_BRANCH=$BUILD_TAG" - &clean "(rm -rf release || true) && (rm -rf _build || true) && (rm -rf /root/.mix)" + - &mix-clean "mix deps.clean --all && mix clean" services: postgres: @@ -126,6 +127,7 @@ pipeline: - echo "import Config" > config/prod.secret.exs - *setup-hex - *tag-build + - *mix-clean - mix deps.get --only prod - mix release --path release - zip akkoma-amd64.zip -r release @@ -149,7 +151,7 @@ pipeline: - apk add git gcc g++ musl-dev make cmake file-dev rclone wget zip imagemagick - *clean - *setup-hex - - mix deps.clean --all + - *mix-clean - *tag-build - mix deps.get --only prod - mix release --path release From 7380dc02563989a6b389af1bd01d4e4d09bf7187 Mon Sep 17 00:00:00 2001 From: Fristi Date: Thu, 28 Jul 2022 10:19:32 +0000 Subject: [PATCH 33/82] Added installation guides for redhat linux distributions, includes OTP build guide for fedora. (#122) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/122 Co-authored-by: Fristi Co-committed-by: Fristi --- docs/docs/installation/fedora_based_en.md | 197 +++++++++++++++ docs/docs/installation/otp_en.md | 1 + docs/docs/installation/otp_redhat_en.md | 285 ++++++++++++++++++++++ 3 files changed, 483 insertions(+) create mode 100644 docs/docs/installation/fedora_based_en.md create mode 100644 docs/docs/installation/otp_redhat_en.md diff --git a/docs/docs/installation/fedora_based_en.md b/docs/docs/installation/fedora_based_en.md new file mode 100644 index 000000000..5129db80f --- /dev/null +++ b/docs/docs/installation/fedora_based_en.md @@ -0,0 +1,197 @@ +# Installing on Fedora + +## OTP releases and RedHat-distributions + +While the OTP releases of Akkoma work on most Linux distributions, they do not work correctly with RedHat-distributions. Therefore from-source installations are the recommended way to go when trying to install Akkoma on Fedora, Centos Stream or RedHat. + +However, it is possible to compile your own OTP release of Akkoma for RedHat. Keep in mind that this has a few drawbacks, and has no particular advantage over a from-source installation, since you'll need to install Erlang and Elixir anyway. + +This guide will cover a from-source installation. For instructions on how to build your own OTP release, please check out [the OTP for RedHat guide](./otp_redhat_en.md). + +## Installation + +This guide will assume you are on Fedora 36. This guide should also work with current releases of Centos Stream and RedHat, although it has not been tested yet. It also assumes that you have administrative rights, either as root or a user with [sudo permissions](https://docs.fedoraproject.org/en-US/quick-docs/adding_user_to_sudoers_file/). If you want to run this guide with root, ignore the `sudo` at the beginning of the lines, unless it calls a user like `sudo -Hu akkoma`; in this case, use `su -s $SHELL -c 'command'` instead. + +{! installation/generic_dependencies.include !} + +### Prepare the system + +* First update the system, if not already done: + +```shell +sudo dnf upgrade --refresh +``` + +* Install some of the above mentioned programs: + +```shell +sudo dnf install git gcc g++ make cmake file-devel postgresql postgresql-contrib +``` + +### Install Elixir and Erlang + +* Install Elixir and Erlang: + +```shell +sudo dnf install elixir erlang-os_mon erlang-eldap erlang-xmerl erlang-erl_interface erlang-syntax_tools +``` + + +### Optional packages: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md) + +* Install ffmpeg (requires setting up the RPM-fusion repositories): + +```shell +sudo dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm +sudo dnf -y install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm +sudo dnf install ffmpeg +``` + +* Install ImageMagick and ExifTool for image manipulation: + +```shell +sudo dnf install Imagemagick perl-Image-ExifTool +``` + + + +### Install AkkomaBE + +* Add a new system user for the Akkoma service: + +```shell +sudo useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma +``` + +**Note**: To execute a single command as the Akkoma system user, use `sudo -Hu akkoma command`. You can also switch to a shell by using `sudo -Hu akkoma $SHELL`. If you don’t have and want `sudo` on your system, you can use `su` as root user (UID 0) for a single command by using `su -l akkoma -s $SHELL -c 'command'` and `su -l akkoma -s $SHELL` for starting a shell. + +* Git clone the AkkomaBE repository and make the Akkoma user the owner of the directory: + +```shell +sudo mkdir -p /opt/akkoma +sudo chown -R akkoma:akkoma /opt/akkoma +sudo -Hu akkoma git clone https://akkoma.dev/AkkomaGang/akkoma.git /opt/akkoma +``` + +* Change to the new directory: + +```shell +cd /opt/akkoma +``` + +* Install the dependencies for Akkoma and answer with `yes` if it asks you to install `Hex`: + +```shell +sudo -Hu akkoma mix deps.get +``` + +* Generate the configuration: `sudo -Hu akkoma MIX_ENV=prod mix pleroma.instance gen` + * Answer with `yes` if it asks you to install `rebar3`. + * This may take some time, because parts of akkoma get compiled first. + * After that it will ask you a few questions about your instance and generates a configuration file in `config/generated_config.exs`. + +* Check the configuration and if all looks right, rename it, so Akkoma will load it (`prod.secret.exs` for productive instance, `dev.secret.exs` for development instances): + +```shell +sudo -Hu akkoma mv config/{generated_config.exs,prod.secret.exs} +``` + + +* The previous command creates also the file `config/setup_db.psql`, with which you can create the database: + +```shell +sudo -Hu postgres psql -f config/setup_db.psql +``` + +* Now run the database migration: + +```shell +sudo -Hu akkoma MIX_ENV=prod mix ecto.migrate +``` + +* Now you can start Akkoma already + +```shell +sudo -Hu akkoma MIX_ENV=prod mix phx.server +``` + +### Finalize installation + +If you want to open your newly installed instance to the world, you should run nginx or some other webserver/proxy in front of Akkoma and you should consider to create a systemd service file for Akkoma. + +#### Nginx + +* Install nginx, if not already done: + +```shell +sudo dnf install nginx +``` + +* Setup your SSL cert, using your method of choice or certbot. If using certbot, first install it: + +```shell +sudo dnf install certbot +``` + +and then set it up: + +```shell +sudo mkdir -p /var/lib/letsencrypt/ +sudo certbot certonly --email -d --standalone +``` + +If that doesn’t work, make sure, that nginx is not already running. If it still doesn’t work, try setting up nginx first (change ssl “on” to “off” and try again). + +--- + +* Copy the example nginx configuration and activate it: + +```shell +sudo cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/conf.d/akkoma.conf +``` + +* Before starting nginx edit the configuration and change it to your needs (e.g. change servername, change cert paths) +* Enable and start nginx: + +```shell +sudo systemctl enable --now nginx.service +``` + +If you need to renew the certificate in the future, uncomment the relevant location block in the nginx config and run: + +```shell +sudo certbot certonly --email -d --webroot -w /var/lib/letsencrypt/ +``` + +#### Other webserver/proxies + +You can find example configurations for them in `/opt/akkoma/installation/`. + +#### Systemd service + +* Copy example service file + +```shell +sudo cp /opt/akkoma/installation/akkoma.service /etc/systemd/system/akkoma.service +``` + +* Edit the service file and make sure that all paths fit your installation +* Enable and start `akkoma.service`: + +```shell +sudo systemctl enable --now akkoma.service +``` + +#### Create your first user + +If your instance is up and running, you can create your first user with administrative rights with the following task: + +```shell +sudo -Hu akkoma MIX_ENV=prod mix pleroma.user new --admin +``` + +#### Further reading + +{! installation/further_reading.include !} + +{! support.include !} diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index 5ae626bba..e746bbac4 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -6,6 +6,7 @@ This guide covers a installation using an OTP release. To install Akkoma from so ## Pre-requisites * A machine running Linux with GNU (e.g. Debian, Ubuntu) or musl (e.g. Alpine) libc and `x86_64`, `aarch64` or `armv7l` CPU, you have root access to. If you are not sure if it's compatible see [Detecting flavour section](#detecting-flavour) below +* For installing OTP releases on RedHat-based distros like Fedora and Centos Stream, please follow [this guide](./otp_redhat_en.md) instead. * A (sub)domain pointed to the machine You will be running commands as root. If you aren't root already, please elevate your priviledges by executing `sudo su`/`su`. diff --git a/docs/docs/installation/otp_redhat_en.md b/docs/docs/installation/otp_redhat_en.md new file mode 100644 index 000000000..2e6b58c9e --- /dev/null +++ b/docs/docs/installation/otp_redhat_en.md @@ -0,0 +1,285 @@ +# Installing on RedHat using OTP releases + +## OTP releases and Fedora/RedHat + +The current OTP builds available for Linux are unfortunately incompatible with RedHat Linux distributions, like Fedora and Centos Stream. This is due to RedHat maintaining patched versions of certain Erlang libraries, making them incompatible with other Linux distributions. + +However, you may compile your own OTP release from scratch. This is particularly useful if you wish to quickly distribute your OTP build onto multiple systems, without having to worry about compiling code on every system. However, if your goal is to simply set up a single instance for yourself, installing from-source might be a simpler option. To install from-source, please follow [this guide](./fedora_based_en.md). + + +## Pre-requisites + +In order to compile a RedHat-compatible OTP release, you will need to run a RedHat Linux distribution. This guide will assume you run Fedora 36, though it should also work on older Fedora releases and other RedHat distributions. It also assumes that you have administrative rights and sufficient knowledge on how to perform common CLI tasks in Linux. If you want to run this guide with root, ignore the `sudo` at the beginning of the lines. + +Important: keep in mind that you must build your OTP release for the specific RedHat distribution you wish to use it on. A build on Fedora will only be compatible with a specific Fedora release version. + + +## Building an OTP release for Fedora 36 + +### Installing required packages + +* First, update your system, if not already done: + +```shell +sudo dnf upgrade --refresh +``` + +* Then install the required packages to build your OTP release: + +```shell +sudo dnf install git gcc g++ erlang elixir erlang-os_mon erlang-eldap erlang-xmerl erlang-erl_interface erlang-syntax_tools make cmake file-devel +``` + + +### Preparing the project files + +* Git clone the AkkomaBE repository. This can be done anywhere: + +```shell +cd ~ +git clone https://akkoma.dev/AkkomaGang/akkoma.git +``` + +* Change to the new directory: + +```shell +cd ./akkoma +``` + + +### Building the OTP release + +* Run the following commands: + +```shell +export MIX_ENV=prod +echo "import Config" > config/prod.secret.exs +mix local.hex --force +mix local.rebar --force +mix deps.get --only prod +mkdir release +mix release --path release +``` + +Note that compiling the OTP release will take some time. Once it completes, you will find the OTP files in the directory `release`. + +If all went well, you will have built your very own Fedora-compatible OTP release! You can now pack up the files in the `release` directory and deploy them to your other Fedora servers. + + +## Installing the OTP release + +Installing the OTP release from this point onward will be very similar to the regular OTP release. This guide assumes you will want to install your OTP package on other systems, so additional pre-requisites will be listed below. + +Please note that running your own OTP release has some minor caveats that you should be aware of. They will be listed below as well. + + +### Installing required packages + +Other than things bundled in the OTP release Akkoma depends on: + +* curl (to download the release build) +* ncurses (ERTS won't run without it) +* PostgreSQL (also utilizes extensions in postgresql-contrib) +* nginx (could be swapped with another reverse proxy but this guide covers only it) +* certbot (for Let's Encrypt certificates, could be swapped with another ACME client, but this guide covers only it) +* libmagic/file + +First, update your system, if not already done: + +```shell +sudo dnf upgrade --refresh +``` + +Then install the required packages: + +```shell +sudo dnf install curl ncurses postgresql postgresql-contrib nginx certbot file-devel +``` + + +### Optional packages: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md) + +* Install ffmpeg (requires setting up the RPM-fusion repositories): + +```shell +sudo dnf -y install https://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm +sudo dnf -y install https://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm +sudo dnf install ffmpeg +``` + +* Install ImageMagick and ExifTool for image manipulation: + +```shell +sudo dnf install Imagemagick perl-Image-ExifTool +``` + + +### Configuring PostgreSQL +#### (Optional) Performance configuration +It is encouraged to check [Optimizing your PostgreSQL performance](../configuration/postgresql.md) document, for tips on PostgreSQL tuning. + +Restart PostgreSQL to apply configuration changes: + +```shell +sudo systemctl restart postgresql +``` + +### Installing Akkoma +```sh +# Create a Akkoma user +adduser --system --shell /bin/false --home /opt/akkoma akkoma + +# Move your custom OTP release to the home directory +sudo -Hu akkoma mv /your/custom/otp/release /opt/akkoma + +# Create uploads directory and set proper permissions (skip if planning to use a remote uploader) +# Note: It does not have to be `/var/lib/akkoma/uploads`, the config generator will ask about the upload directory later + +sudo mkdir -p /var/lib/akkoma/uploads +sudo chown -R akkoma /var/lib/akkoma + +# Create custom public files directory (custom emojis, frontend bundle overrides, robots.txt, etc.) +# Note: It does not have to be `/var/lib/akkoma/static`, the config generator will ask about the custom public files directory later +sudo mkdir -p /var/lib/akkoma/static +sudo chown -R akkoma /var/lib/akkoma + +# Create a config directory +sudo mkdir -p /etc/akkoma +sudo chown -R akkoma /etc/akkoma + +# Run the config generator +sudo -Hu akkoma ./bin/pleroma_ctl instance gen --output /etc/akkoma/config.exs --output-psql /tmp/setup_db.psql + +# Create the postgres database +sudo -Hu postgres psql -f /tmp/setup_db.psql + +# Create the database schema +sudo -Hu akkoma ./bin/pleroma_ctl migrate + +# Start the instance to verify that everything is working as expected +sudo -Hu akkoma ./bin/pleroma daemon + +# Wait for about 20 seconds and query the instance endpoint, if it shows your uri, name and email correctly, you are configured correctly +sleep 20 && curl http://localhost:4000/api/v1/instance + +# Stop the instance +sudo -Hu akkoma ./bin/pleroma stop +``` + + +### Setting up nginx and getting Let's Encrypt SSL certificaties + +#### Get a Let's Encrypt certificate + +```shell +certbot certonly --standalone --preferred-challenges http -d yourinstance.tld +``` + +#### Copy Akkoma nginx configuration to the nginx folder + +```shell +cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/conf.d/akkoma.conf +``` + +#### Edit the nginx config +```shell +# Replace example.tld with your (sub)domain (replace $EDITOR with your editor of choice) +sudo $EDITOR /etc/nginx/conf.d/akkoma.conf + +# Verify that the config is valid +sudo nginx -t +``` +#### Start nginx + +```shell +sudo systemctl start nginx +``` + +At this point if you open your (sub)domain in a browser you should see a 502 error, that's because Akkoma is not started yet. + + +### Setting up a system service + +```shell +# Copy the service into a proper directory +cp /opt/akkoma/installation/akkoma.service /etc/systemd/system/akkoma.service + +# Edit the service file and make any neccesary changes +sudo $EDITOR /etc/systemd/system/akkoma.service + +# If you use SELinux, set the correct file context on the pleroma binary +sudo semanage fcontext -a -t init_t /opt/akkoma/bin/pleroma +sudo restorecon -v /opt/akkoma/bin/pleroma + +# Start akkoma and enable it on boot +sudo systemctl start akkoma +sudo systemctl enable akkoma +``` + +If everything worked, you should see a response from Akkoma-BE when visiting your domain. You may need to install frontends like Akkoma-FE and Admin-FE; refer to [this guide](../administration/CLI_tasks/frontend.md) on how to install them. + +If that didn't happen, try reviewing the installation steps, starting Akkoma in the foreground and seeing if there are any errrors. + +{! support.include !} + +## Post installation + +### Setting up auto-renew of the Let's Encrypt certificate + +```shell +# Create the directory for webroot challenges +sudo mkdir -p /var/lib/letsencrypt + +# Uncomment the webroot method +sudo $EDITOR /etc/nginx/conf.d/akkoma.conf + +# Verify that the config is valid +sudo nginx -t + +# Restart nginx +sudo systemctl restart nginx + +# Ensure the webroot menthod and post hook is working +sudo certbot renew --cert-name yourinstance.tld --webroot -w /var/lib/letsencrypt/ --dry-run --post-hook 'systemctl reload nginx' + +# Add it to the daily cron +echo '#!/bin/sh +certbot renew --cert-name yourinstance.tld --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx" +' > /etc/cron.daily/renew-akkoma-cert +sudo chmod +x /etc/cron.daily/renew-akkoma-cert + +# If everything worked the output should contain /etc/cron.daily/renew-akkoma-cert +sudo run-parts --test /etc/cron.daily +``` + + +## Create your first user and set as admin +```shell +cd /opt/akkoma +sudo -Hu akkoma ./bin/pleroma_ctl user new joeuser joeuser@sld.tld --admin +``` +This will create an account withe the username of 'joeuser' with the email address of joeuser@sld.tld, and set that user's account as an admin. This will result in a link that you can paste into the browser, which logs you in and enables you to set the password. + +## Further reading + +### Caveats of building your own OTP release + +There are some things to take note of when your are running your own OTP builds. + +#### Updating your OTP builds + +Using your custom OTP build, you will not be able to update the installation using the `pleroma_ctl update` command. Running this command would overwrite your install with an OTP release from the main Akkoma repository, which will break your install. + +Instead, you will have to rebuild your OTP release every time there are updates, then manually move it to where your Akkoma installation is running, overwriting the old OTP release files. Make sure to stop the Akkoma-BE server before overwriting any files! + +After that, run the `pleroma_ctl migrate` command as usual to perform database migrations. + + +#### Cross-compatibility between RedHat distributions + +As it currently stands, your OTP build will only be compatible for the specific RedHat distribution you've built it on. Fedora builds only work on Fedora, Centos builds only on Centos, RedHat builds only on RedHat. Secondly, for Fedora, they will also be bound to the specific Fedora release. This is because different releases of Fedora may have significant changes made in some of the required packages and libraries. + + +{! installation/further_reading.include !} + +{! support.include !} From 2c8f57db989050507bfd1f1a5ccb6c02c6418595 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Thu, 28 Jul 2022 10:36:51 +0000 Subject: [PATCH 34/82] rename-flavours (#123) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/123 --- .woodpecker.yml | 10 +- CHANGELOG.md | 4 + docs/Makefile | 2 + docs/docs/installation/debian_based_jp.md | 188 ------------------ docs/docs/installation/migrating_to_akkoma.md | 12 +- docs/docs/installation/openbsd_fi.md | 121 ----------- docs/docs/installation/otp_en.md | 17 +- 7 files changed, 28 insertions(+), 326 deletions(-) delete mode 100644 docs/docs/installation/debian_based_jp.md delete mode 100644 docs/docs/installation/openbsd_fi.md diff --git a/.woodpecker.yml b/.woodpecker.yml index 1e4f09985..e0bc86a36 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -101,7 +101,7 @@ pipeline: - *tag-build - mix deps.get --only prod - mix release --path release - - zip akkoma-amd64.zip -r release + - zip akkoma-ubuntu-jammy.zip -r release release-ubuntu22: image: akkoma/releaser @@ -112,8 +112,8 @@ pipeline: - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64.zip - /bin/sh /entrypoint.sh environment: - SOURCE: akkoma-amd64.zip - DEST: scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64.zip + SOURCE: akkoma-ubuntu-jammy.zip + DEST: scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-ubuntu-jammy.zip debian-bullseye: image: elixir:1.13.4 @@ -138,7 +138,9 @@ pipeline: secrets: *scw-secrets commands: - export SOURCE=akkoma-amd64.zip - - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-debian-bullseye.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64.zip + - /bin/sh /entrypoint.sh + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-debian-stable.zip - /bin/sh /entrypoint.sh # Canonical amd64-musl diff --git a/CHANGELOG.md b/CHANGELOG.md index 98f434aaa..f5976a79d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - quarantining is now considered absolutely; public activities are no longer an exception. +- flavours: + - amd64 is built for debian stable. Compatible with ubuntu 20. + - ubuntu-jammy is built for... well, ubuntu 22 (LTS) + - amd64-musl is built for alpine 3.16 ### Fixed - Updated mastoFE path, for the newer version diff --git a/docs/Makefile b/docs/Makefile index e51c1d188..022459cf0 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -5,3 +5,5 @@ install: pipenv install clean: rm -rf site +serve: + pipenv run python3 -m http.server -d site diff --git a/docs/docs/installation/debian_based_jp.md b/docs/docs/installation/debian_based_jp.md deleted file mode 100644 index ec829c903..000000000 --- a/docs/docs/installation/debian_based_jp.md +++ /dev/null @@ -1,188 +0,0 @@ -# Akkomaの入れ方 -## 日本語訳について - -この記事は [Installing on Debian based distributions](Installing on Debian based distributions) の日本語訳です。何かがおかしいと思ったら、原文を見てください。 - -## インストール - -このガイドはDebian Stretchを利用することを想定しています。Ubuntu 16.04や18.04でもおそらく動作します。また、ユーザはrootもしくはsudoにより管理者権限を持っていることを前提とします。もし、以下の操作をrootユーザで行う場合は、 `sudo` を無視してください。ただし、`sudo -Hu akkoma` のようにユーザを指定している場合には `su -s $SHELL -c 'command'` を代わりに使ってください。 - -### 必要なソフトウェア - -- PostgreSQL 9.6以上 (Ubuntu16.04では9.5しか提供されていないので,[](https://www.postgresql.org/download/linux/ubuntu/)こちらから新しいバージョンを入手してください) -- `postgresql-contrib` 9.6以上 (同上) -- Elixir 1.8 以上 ([Debianのリポジトリからインストールしないこと!!! ここからインストールすること!](https://elixir-lang.org/install.html#unix-and-unix-like)。または [asdf](https://github.com/asdf-vm/asdf) をakkomaユーザーでインストールしてください) -- `erlang-dev` -- `erlang-nox` -- `git` -- `build-essential` -- `cmake` -- `libmagic-dev` - -#### このガイドで利用している追加パッケージ - -- `nginx` (おすすめです。他のリバースプロキシを使う場合は、参考となる設定をこのリポジトリから探してください) -- `certbot` (または何らかのLet's Encrypt向けACMEクライアント) -- `ImageMagick` -- `ffmpeg` -- `exiftool` - -### システムを準備する - -* まずシステムをアップデートしてください。 -``` -sudo apt update -sudo apt full-upgrade -``` - -* 上記に挙げたパッケージをインストールしておきます。 -``` -sudo apt install git build-essential postgresql postgresql-contrib cmake ffmpeg imagemagick libmagic-dev -``` - -### ElixirとErlangをインストールします - -* Erlangのリポジトリをダウンロードおよびインストールします。 -``` -wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_2.0_all.deb -sudo dpkg -i /tmp/erlang-solutions_2.0_all.deb -``` - -* ElixirとErlangをインストールします、 -``` -sudo apt update -sudo apt install elixir erlang-dev erlang-nox -``` - -### オプションパッケージ: [`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md) - -```shell -sudo apt install imagemagick ffmpeg libimage-exiftool-perl -``` - -### Akkoma BE (バックエンド) をインストールします - -* Akkoma用に新しいユーザーを作ります。 - -``` -sudo useradd -r -s /bin/false -m -d /var/lib/akkoma -U akkoma -``` - -**注意**: Akkomaユーザとして単発のコマンドを実行したい場合はは、`sudo -Hu akkoma command` を使ってください。シェルを使いたい場合は `sudo -Hu akkoma $SHELL`です。もし `sudo` を使わない場合は、rootユーザで `su -l akkoma -s $SHELL -c 'command'` とすることでコマンドを、`su -l akkoma -s $SHELL` とすることでシェルを開始できます。 - -* Gitリポジトリをクローンします。 -``` -sudo mkdir -p /opt/akkoma -sudo chown -R akkoma:akkoma /opt/akkoma -sudo -Hu akkoma git clone https://akkoma.dev/AkkomaGang/akkoma.git /opt/akkoma -``` - -* 新しいディレクトリに移動します。 -``` -cd /opt/akkoma -``` - -* Akkomaが依存するパッケージをインストールします。Hexをインストールしてもよいか聞かれたら、yesを入力してください。 -``` -sudo -Hu akkoma mix deps.get -``` - -* コンフィギュレーションを生成します。 -``` -sudo -Hu akkoma MIX_ENV=prod mix pleroma.instance gen -``` - * rebar3をインストールしてもよいか聞かれたら、yesを入力してください。 - * このときにakkomaの一部がコンパイルされるため、この処理には時間がかかります。 - * あなたのインスタンスについて、いくつかの質問されます。この質問により `config/generated_config.exs` という設定ファイルが生成されます。 - - -* コンフィギュレーションを確認して、もし問題なければ、ファイル名を変更してください。 -``` -sudo -Hu akkoma mv config/{generated_config.exs,prod.secret.exs} -``` - -* 先程のコマンドで、すでに `config/setup_db.psql` というファイルが作られています。このファイルをもとに、データベースを作成します。 -``` -sudo -Hu akkoma MIX_ENV=prod mix pleroma.instance gen -``` - -* そして、データベースのマイグレーションを実行します。 -``` -sudo -Hu akkoma MIX_ENV=prod mix ecto.migrate -``` - -* これでAkkomaを起動できるようになりました。 -``` -sudo -Hu akkoma MIX_ENV=prod mix phx.server -``` - -### インストールの最終段階 - -あなたの新しいインスタンスを世界に向けて公開するには、nginx等のWebサーバやプロキシサーバをAkkomaの前段に使用する必要があります。また、Akkoma のためにシステムサービスファイルを作成する必要があります。 - -#### Nginx - -* まだインストールしていないなら、nginxをインストールします。 -``` -sudo apt install nginx -``` - -* SSLをセットアップします。他の方法でもよいですが、ここではcertbotを説明します。 -certbotを使うならば、まずそれをインストールします。 -``` -sudo apt install certbot -``` -そしてセットアップします。 -``` -sudo mkdir -p /var/lib/letsencrypt/ -sudo certbot certonly --email -d --standalone -``` -もしうまくいかないときは、nginxが正しく動いていない可能性があります。先にnginxを設定してください。ssl "on" を "off" に変えてから再試行してください。 - ---- - -* nginxの設定ファイルサンプルをnginxフォルダーにコピーします。 -``` -sudo cp /opt/akkoma/installation/nginx/akkoma.nginx /etc/nginx/sites-available/akkoma.nginx -sudo ln -s /etc/nginx/sites-available/akkoma.nginx /etc/nginx/sites-enabled/akkoma.nginx -``` - -* nginxを起動する前に、設定ファイルを編集してください。例えば、サーバー名、証明書のパスなどを変更する必要があります。 -* nginxを再起動します。 -``` -sudo systemctl enable --now nginx.service -``` - -もし証明書を更新する必要が出てきた場合には、nginxの関連するlocationブロックのコメントアウトを外し、以下のコマンドを動かします。 - -``` -sudo certbot certonly --email -d --webroot -w /var/lib/letsencrypt/ -``` - -#### 他のWebサーバやプロキシ -これに関してはサンプルが `/opt/akkoma/installation/` にあるので、探してみてください。 - -#### Systemd サービス - -* サービスファイルのサンプルをコピーします。 -``` -sudo cp /opt/akkoma/installation/akkoma.service /etc/systemd/system/akkoma.service -``` - -* サービスファイルを変更します。すべてのパスが正しいことを確認してください -* サービスを有効化し `akkoma.service` を開始してください -``` -sudo systemctl enable --now akkoma.service -``` - -#### 初期ユーザの作成 - -新たにインスタンスを作成したら、以下のコマンドにより管理者権限を持った初期ユーザを作成できます。 - -``` -sudo -Hu akkoma MIX_ENV=prod mix pleroma.user new --admin -``` - -#### その他の設定とカスタマイズ - -{! installation/further_reading.include !} diff --git a/docs/docs/installation/migrating_to_akkoma.md b/docs/docs/installation/migrating_to_akkoma.md index 181f6dae6..3947914ab 100644 --- a/docs/docs/installation/migrating_to_akkoma.md +++ b/docs/docs/installation/migrating_to_akkoma.md @@ -30,22 +30,18 @@ upstream git URL then just rebuild - that'll be: git remote set-url origin https://akkoma.dev/AkkomaGang/akkoma.git/ git fetch origin git pull -r +# or, if you're on an instance-specific branch, you may want +# to run "git merge stable" instead (or develop if you want) ``` Then compile, migrate and restart as usual. ## From OTP -**IMPORTANT: if you are using musl1.1 (void linux musl edition), -you will need to override the FLAVOUR to amd64-musl11, -also pls go shout at your maintainers to actually upgrade from EOL software.** - -the flavour to be - -This will just be setting the update URL - +This will just be setting the update URL - find your flavour from the [mapping on the install guide](../otp_en/#detecting-flavour) first. ```bash -export FLAVOUR=$(arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix") +export FLAVOUR=[the flavour you found above] ./bin/pleroma_ctl update --zip-url https://akkoma-updates.s3-website.fr-par.scw.cloud/develop/akkoma-$FLAVOUR.zip ./bin/pleroma_ctl migrate diff --git a/docs/docs/installation/openbsd_fi.md b/docs/docs/installation/openbsd_fi.md deleted file mode 100644 index 4b51b9015..000000000 --- a/docs/docs/installation/openbsd_fi.md +++ /dev/null @@ -1,121 +0,0 @@ -# Akkoman asennus OpenBSD:llä - -Tarvitset: -* Oman domainin -* OpenBSD 6.3 -serverin -* Auttavan ymmärryksen unix-järjestelmistä - -Komennot, joiden edessä on '#', tulee ajaa käyttäjänä `root`. Tämä on -suositeltavaa tehdä komennon `doas` avulla, katso `doas (1)` ja `doas.conf (5)`. -Tästä eteenpäin oletuksena on, että domain "esimerkki.com" osoittaa -serverin IP-osoitteeseen. - -Jos asennuksen kanssa on ongelmia, IRC-kanava #pleroma Libera.chat tai -Matrix-kanava #pleroma:libera.chat ovat hyviä paikkoja löytää apua -(englanniksi), `/msg eal kukkuu` jos haluat välttämättä puhua härmää. - -Asenna tarvittava ohjelmisto: - -`# pkg_add git elixir gmake postgresql-server-10.3 postgresql-contrib-10.3 cmake ffmpeg ImageMagick` - -#### Optional software - -[`docs/installation/optional/media_graphics_packages.md`](../installation/optional/media_graphics_packages.md): - * ImageMagick - * ffmpeg - * exiftool - -Asenna tarvittava ohjelmisto: - -`# pkg_add ImageMagick ffmpeg p5-Image-ExifTool` - -Luo postgresql-tietokanta: - -`# su - _postgresql` - -`$ mkdir /var/postgresql/data` - -`$ initdb -D /var/postgresql/data -E UTF8` - -`$ createdb` - -Käynnistä tietokanta ja aseta se käynnistymään automaattisesti. - -`# rcctl start postgresql` - -`# rcctl enable postgresql` - -Luo käyttäjä akkomaa varten (kysyy muutaman kysymyksen): - -`# adduser akkoma` - -Vaihda akkoma-käyttäjään ja mene kotihakemistoosi: - -`# su - akkoma` - -Lataa akkoman lähdekoodi: - -`$ git clone https://akkoma.dev/AkkomaGang/akkoma.git` - -`$ cd akkoma` - -Asenna tarvittavat elixir-kirjastot: - -`$ mix deps.get` - -`$ mix deps.compile` - -Luo tarvittava konfiguraatio: - -`$ mix generate_config` - -`$ cp config/generated_config.exs config/prod.secret.exs` - -Aja luodut tietokantakomennot: - -`# su _postgres -c 'psql -f config/setup_db.psql'` - -`$ MIX_ENV=prod mix ecto.migrate` - -Käynnistä akkoma-prosessi: - -`$ MIX_ENV=prod mix compile` - -`$ MIX_ENV=prod mix phx.server` - -Tässä vaiheessa on hyvä tarkistaa että asetukset ovat oikein. Avaa selaimella, -curlilla tai vastaavalla työkalulla `esimerkki.com:4000/api/v1/instance` ja katso -että kohta "uri" on "https://esimerkki.com". - -Huom! Muista varmistaa että muuttuja MIX_ENV on "prod" mix-komentoja ajaessasi. -Mix lukee oikean konfiguraatiotiedoston sen mukaisesti. - -Ohessa enimmäkseen toimivaksi todettu rc.d-skripti akkoman käynnistämiseen. -Kirjoita se tiedostoon /etc/rc.d/akkoma. Tämän jälkeen aja -`# chmod +x /etc/rc.d/akkoma`, ja voit käynnistää akkoman komennolla -`# /etc/rc.d/akkoma start`. - -``` -#!/bin/ksh -#/etc/rc.d/akkoma - -daemon="cd /home/akkoma/akkoma;MIX_ENV=prod /usr/local/bin/elixir" -daemon_flags="--detached /usr/local/bin/mix phx.server" -daemon_user="akkoma" -rc_reload="NO" -rc_bg="YES" - -pexp="beam" - -. /etc/rc.d/rc.subr - -rc_cmd $1 -``` - -Tämän jälkeen tarvitset enää HTTP-serverin välittämään kutsut akkoma-prosessille. -Tiedostosta `install/akkoma.nginx` löytyy esimerkkikonfiguraatio, ja TLS-sertifikaatit -saat ilmaiseksi esimerkiksi [letsencryptiltä](https://certbot.eff.org/lets-encrypt/opbsd-nginx.html). -Nginx asentuu yksinkertaisesti komennolla `# pkg_add nginx`. - -Kun olet valmis, avaa https://esimerkki.com selaimessasi. Luo käyttäjä ja seuraa kiinnostavia -tyyppejä muilla palvelimilla! diff --git a/docs/docs/installation/otp_en.md b/docs/docs/installation/otp_en.md index e746bbac4..022716fec 100644 --- a/docs/docs/installation/otp_en.md +++ b/docs/docs/installation/otp_en.md @@ -15,12 +15,19 @@ While in theory OTP releases are possbile to install on any compatible machine, ### Detecting flavour -Paste the following into the shell: -```sh -arch="$(uname -m)";if [ "$arch" = "x86_64" ];then arch="amd64";elif [ "$arch" = "armv7l" ];then arch="arm";elif [ "$arch" = "aarch64" ];then arch="arm64";else echo "Unsupported arch: $arch">&2;fi;if getconf GNU_LIBC_VERSION>/dev/null;then libc_postfix="";elif [ "$(ldd 2>&1|head -c 9)" = "musl libc" ];then libc_postfix="-musl";elif [ "$(find /lib/libc.musl*|wc -l)" ];then libc_postfix="-musl";else echo "Unsupported libc">&2;fi;echo "$arch$libc_postfix" -``` +This is a little more complex than it used to be (thanks ubuntu) -If your platform is supported the output will contain the flavour string, you will need it later. If not, this just means that we don't build releases for your platform, you can still try installing from source. +Use the following mapping to figure out your flavour: + +| distribution | flavour | +| ------------- | ------------ | +| debian stable | amd64 | +| ubuntu focal | amd64 | +| ubuntu jammy | ubuntu-jammy | +| alpine | amd64-musl | + +Other similar distributions will _probably_ work, but if it is not listed above, there is no official +support. ### Installing the required packages From 52095ff4de0cdabbdd07ebe11ad3e69696e61306 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 28 Jul 2022 11:44:17 +0100 Subject: [PATCH 35/82] fix release tag --- .woodpecker.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index e0bc86a36..95ac1c921 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -108,12 +108,9 @@ pipeline: <<: *on-release secrets: *scw-secrets commands: - - export SOURCE=akkoma-amd64.zip - - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-amd64.zip + - export SOURCE=akkoma-ubuntu-jammy.zip + - export DEST=scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-ubuntu-jammy.zip - /bin/sh /entrypoint.sh - environment: - SOURCE: akkoma-ubuntu-jammy.zip - DEST: scaleway:akkoma-updates/$${CI_COMMIT_TAG:-"$CI_COMMIT_BRANCH"}/akkoma-ubuntu-jammy.zip debian-bullseye: image: elixir:1.13.4 From 405406601fe1840312f6ec06f547bdc9be20f958 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Thu, 28 Jul 2022 12:02:36 +0000 Subject: [PATCH 36/82] Fix emoji qualification (#124) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/124 --- lib/pleroma/emoji.ex | 16 ++++++- lib/pleroma/emoji/combinations.ex | 45 +++++++++++++++++++ lib/pleroma/reverse_proxy.ex | 1 + .../search/elasticsearch/activity_parser.ex | 9 +++- .../emoji_react_validator.ex | 18 ++++++++ test/pleroma/emoji_test.exs | 4 +- .../emoji_react_handling_test.exs | 31 +++++++++++++ 7 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 lib/pleroma/emoji/combinations.ex diff --git a/lib/pleroma/emoji.ex b/lib/pleroma/emoji.ex index ced2ae83d..24eafda41 100644 --- a/lib/pleroma/emoji.ex +++ b/lib/pleroma/emoji.ex @@ -9,6 +9,7 @@ defmodule Pleroma.Emoji do """ use GenServer + alias Pleroma.Emoji.Combinations alias Pleroma.Emoji.Loader require Logger @@ -124,7 +125,7 @@ defp update_emojis(emojis) do |> String.split("\n") |> Enum.filter(fn line -> line != "" and not String.starts_with?(line, "#") and - String.contains?(line, "qualified") + String.contains?(line, "fully-qualified") end) |> Enum.map(fn line -> line @@ -186,4 +187,17 @@ def emoji_url(%{"type" => "EmojiReact", "content" => emoji, "tag" => tags}) do end def emoji_url(_), do: nil + + emoji_qualification_map = + emojis + |> Enum.filter(&String.contains?(&1, "\uFE0F")) + |> Combinations.variate_emoji_qualification() + + for {qualified, unqualified_list} <- emoji_qualification_map do + for unqualified <- unqualified_list do + def fully_qualify_emoji(unquote(unqualified)), do: unquote(qualified) + end + end + + def fully_qualify_emoji(emoji), do: emoji end diff --git a/lib/pleroma/emoji/combinations.ex b/lib/pleroma/emoji/combinations.ex new file mode 100644 index 000000000..981c73596 --- /dev/null +++ b/lib/pleroma/emoji/combinations.ex @@ -0,0 +1,45 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Emoji.Combinations do + # FE0F is the emoji variation sequence. It is used for fully-qualifying + # emoji, and that includes emoji combinations. + # This code generates combinations per emoji: for each FE0F, all possible + # combinations of the character being removed or staying will be generated. + # This is made as an attempt to find all partially-qualified and unqualified + # versions of a fully-qualified emoji. + # I have found *no cases* for which this would be a problem, after browsing + # the entire emoji list in emoji-test.txt. This is safe, and, sadly, most + # likely sane too. + + defp qualification_combinations(codepoints) do + qualification_combinations([[]], codepoints) + end + + defp qualification_combinations(acc, []), do: acc + + defp qualification_combinations(acc, ["\uFE0F" | tail]) do + acc + |> Enum.flat_map(fn x -> [x, x ++ ["\uFE0F"]] end) + |> qualification_combinations(tail) + end + + defp qualification_combinations(acc, [codepoint | tail]) do + acc + |> Enum.map(&Kernel.++(&1, [codepoint])) + |> qualification_combinations(tail) + end + + def variate_emoji_qualification(emoji) when is_binary(emoji) do + emoji + |> String.codepoints() + |> qualification_combinations() + |> Enum.map(&List.to_string/1) + end + + def variate_emoji_qualification(emoji) when is_list(emoji) do + emoji + |> Enum.map(fn emoji -> {emoji, variate_emoji_qualification(emoji)} end) + end +end diff --git a/lib/pleroma/reverse_proxy.ex b/lib/pleroma/reverse_proxy.ex index 51f9609cb..91cf1bba3 100644 --- a/lib/pleroma/reverse_proxy.ex +++ b/lib/pleroma/reverse_proxy.ex @@ -114,6 +114,7 @@ def call(conn = %{method: method}, url, opts) when method in @methods do else {:ok, true} -> conn + |> put_private(:proxied_url, url) |> error_or_redirect(500, "Request failed", opts) |> halt() diff --git a/lib/pleroma/search/elasticsearch/activity_parser.ex b/lib/pleroma/search/elasticsearch/activity_parser.ex index 9c39e516a..f2fa394fa 100644 --- a/lib/pleroma/search/elasticsearch/activity_parser.ex +++ b/lib/pleroma/search/elasticsearch/activity_parser.ex @@ -37,6 +37,13 @@ defp to_es({:filter, [field, query]}) do end def parse(q) do - Enum.map(q, &to_es/1) + [ + %{ + exists: %{ + field: "content" + } + } + ] ++ + Enum.map(q, &to_es/1) end end diff --git a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex index f4870f580..306a57a93 100644 --- a/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/emoji_react_validator.ex @@ -53,6 +53,7 @@ def changeset(struct, data) do defp fix(data) do data = data + |> fix_emoji_qualification() |> CommonFixes.fix_actor() |> CommonFixes.fix_activity_addressing() @@ -77,6 +78,23 @@ defp fix(data) do defp matches_shortcode?(nil), do: false defp matches_shortcode?(s), do: Regex.match?(@emoji_regex, s) + defp fix_emoji_qualification(%{"content" => emoji} = data) do + new_emoji = Pleroma.Emoji.fully_qualify_emoji(emoji) + + cond do + Pleroma.Emoji.is_unicode_emoji?(emoji) -> + data + + Pleroma.Emoji.is_unicode_emoji?(new_emoji) -> + data |> Map.put("content", new_emoji) + + true -> + data + end + end + + defp fix_emoji_qualification(data), do: data + defp validate_emoji(cng) do content = get_field(cng, :content) diff --git a/test/pleroma/emoji_test.exs b/test/pleroma/emoji_test.exs index 978473b14..deaab1e8b 100644 --- a/test/pleroma/emoji_test.exs +++ b/test/pleroma/emoji_test.exs @@ -13,8 +13,8 @@ test "tells if a string is an unicode emoji" do # Accept fully-qualified and unqualified emoji # See http://www.unicode.org/reports/tr51/ - assert Emoji.is_unicode_emoji?("❤") - assert Emoji.is_unicode_emoji?("☂") + refute Emoji.is_unicode_emoji?("❤") + refute Emoji.is_unicode_emoji?("☂") assert Emoji.is_unicode_emoji?("🥺") assert Emoji.is_unicode_emoji?("🤰") diff --git a/test/pleroma/web/activity_pub/transmogrifier/emoji_react_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/emoji_react_handling_test.exs index 4ab1d29e3..d6f9b0144 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/emoji_react_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/emoji_react_handling_test.exs @@ -86,6 +86,37 @@ test "it works for incoming custom emoji reactions" do ) end + test "it works for incoming unqualified emoji reactions" do + user = insert(:user) + other_user = insert(:user, local: false) + {:ok, activity} = CommonAPI.post(user, %{status: "hello"}) + + # woman detective emoji, unqualified + unqualified_emoji = [0x1F575, 0x200D, 0x2640] |> List.to_string() + + data = + File.read!("test/fixtures/emoji-reaction.json") + |> Jason.decode!() + |> Map.put("object", activity.data["object"]) + |> Map.put("actor", other_user.ap_id) + |> Map.put("content", unqualified_emoji) + + {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + + assert data["actor"] == other_user.ap_id + assert data["type"] == "EmojiReact" + assert data["id"] == "http://mastodon.example.org/users/admin#reactions/2" + assert data["object"] == activity.data["object"] + # woman detective emoji, fully qualified + emoji = [0x1F575, 0xFE0F, 0x200D, 0x2640, 0xFE0F] |> List.to_string() + assert data["content"] == emoji + + object = Object.get_by_ap_id(data["object"]) + + assert object.data["reaction_count"] == 1 + assert match?([[^emoji, _, _]], object.data["reactions"]) + end + test "it reject invalid emoji reactions" do user = insert(:user) other_user = insert(:user, local: false) From f4b507f3a23ff12e65e56ece48d711ef95485c9e Mon Sep 17 00:00:00 2001 From: Weblate Date: Thu, 28 Jul 2022 09:36:02 +0000 Subject: [PATCH 37/82] Translated using Weblate (Catalan) Currently translated at 100.0% (0 of 0 strings) Added translation using Weblate (Catalan) Added translation using Weblate (Catalan) Added translation using Weblate (Catalan) Co-authored-by: Anonymous Co-authored-by: Weblate Co-authored-by: sola Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/ca/ Translation: Pleroma fe/Akkoma Backend (Config Descriptions) --- .../ca/LC_MESSAGES/config_descriptions.po | 6396 +++++++++++++++++ priv/gettext/ca/LC_MESSAGES/posix_errors.po | 163 + priv/gettext/ca/LC_MESSAGES/static_pages.po | 525 ++ 3 files changed, 7084 insertions(+) create mode 100644 priv/gettext/ca/LC_MESSAGES/config_descriptions.po create mode 100644 priv/gettext/ca/LC_MESSAGES/posix_errors.po create mode 100644 priv/gettext/ca/LC_MESSAGES/static_pages.po diff --git a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..bdb997f1a --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6396 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-28 09:35+0000\n" +"PO-Revision-Date: 2022-07-28 09:36+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" +"Before enabling this you must add :esshd to mix.exs as one of the " +"extra_applications and generate host keys in your priv dir with ssh-keygen -" +"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "Mime Types settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" +"Allows setting a token that can be used to authenticate requests with admin " +"privileges without a normal user account token. Append the `admin_token` " +"parameter to requests to utilize it. (Please reconsider using HTTP Basic " +"Auth or OAuth-based authentication if possible)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "Quack-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "CORS plug config" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "ESSHD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger" +msgid "Logger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "Mime Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "Pleroma Admin Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "Pleroma Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "Quack Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "Console logger settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "ExSyslogger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "ActivityPub-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" +"This section configures assets to be used with various frontends. Currently " +"the only option relates to mascots on the mastodon frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "Authentication / authorization settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "Advanced settings for `Gun` connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "Email notifications settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "Customizable features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "Configure feed rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe are configured. If you want to add your own configuration your " +"settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "Installed frontends management" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "Gopher settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "Advanced settings for `Hackney` connections pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "HTTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "HTTP security settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "Instance-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" +"Use LDAP for user authentication. When a user logs in to the Pleroma " +"instance, the name and password will be verified by trying to authenticate " +"(bind) to a LDAP server. If a user exists in the LDAP directory but there is " +"no account with the same name yet on the Pleroma instance then a new Pleroma " +"account will be created with the same name as the LDAP user name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "Majic/libmagic configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" +"This section describe PWA manifest instance-specific values. Currently this " +"option relate only for MastoFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "Custom Runtime Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "Adds automatic expiration to all local activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "Automatically follows newly discovered accounts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (" +"without the leading #)\n" +"\n" +"Note: This MRF Policy is always enabled, if you want to disable it you have " +"to set empty lists.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "Block messages with excessive user mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" +"Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs" +".pm/elixir/Regex.html)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "Block messages which mention a specific user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "MRF NormalizeMarkup settings. Scrub configured hypertext markup." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" +"Rejects or delists posts based on their timestamp deviance from your " +"server's clock." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "RejectNonPublic drops posts with non-public visibility settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "Simple ingress policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "Steals emojis from selected instances when it sees them." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" +"This policy processes messages through an alternate pipeline when a given " +"message matches certain criteria. All criteria are configured as a map of " +"regular expressions to lists of policy modules." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "Filter messages which belong to certain activity vocabularies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "Configure OAuth 2 provider capabilities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "Advanced settings for `Gun` workers pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "`populate_hashtags_table` background migration settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" +"Rate limit settings. This is an advanced feature enabled only for :" +"authentication by default." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" +"If enabled the instance will parse metadata from attached links to generate " +"link previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "Pleroma shout settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" +"Render profiles and posts using server-generated HTML that is viewable " +"without using JavaScript" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "Settings for notifications streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "URI schemes related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" +"The expiration time for the web responses cache. Values should be in " +"milliseconds or `nil` to disable expiration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "Welcome messages settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "Includes custom worker options not interpretable directly by `Oban`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "Limits configuration for background tasks." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" +"[Oban](https://github.com/sorentwo/oban) asynchronous job processor " +"configuration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "Captcha-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" +"Kocaptcha is a very simple captcha service with a single API endpoint, the " +"source code is here: https://github.com/koto-bank/kocaptcha. The default " +"endpoint (https://captcha.kotobank.ch) is hosted by the developer." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "New users admin email digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" +"Configuration for Pleroma's link formatter which parses mentions, hashtags, " +"and URLs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "Scheduled activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "Upload general settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "Filter replaces the filename of the upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "Uploads mogrify filter settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "Local uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "S3 uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "Account Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "HTTP invalidate settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "Metadata-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" +"`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." +"pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" +"**If your instance is not behind at least one reverse proxy, you should not " +"enable this plug.**\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "Expired activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "Prometheus app metrics endpoint configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" +"Web Push Notifications configuration. You can use the mix task mix " +"web_push.gen.keypair to generate it." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "Console Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "ExSyslogger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "ActivityPub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "Assets" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "Connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "Email notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "Emoji" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "Features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "Feed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "Frontend configurations" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "Frontends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "Gopher" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "Hackney pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "HTTP security" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "Instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "LDAP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "Majic pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "Manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "MRF" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "MRF Activity Expiration Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "MRF FollowBot Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "MRF Hashtag" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "MRF Hellthread" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "MRF Keyword" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "MRF Mention" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "MRF Normalize Markup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "MRF Object Age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "MRF Reject Non Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "MRF Simple" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "MRF Emojis" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "MRF Subchain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "MRF Vocabulary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "OAuth2" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "Populate hashtags table" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "Rate limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "Restrict Unauthenticated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "Rich media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "Shout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "Static FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "Streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "URI Schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "Web cache TTL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "Welcome" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "ConcurrentLimiter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "Oban" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "Pleroma.Captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "Pleroma.Captcha.Kocaptcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "Pleroma.Emails.NewUsersDigestEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "Pleroma.Emails.UserEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "Linkify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "Pleroma.ScheduledActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "Pleroma.Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "Pleroma.Upload.Filter.AnonymizeFilename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "Pleroma.Upload.Filter.Mogrify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "Pleroma.Uploaders.Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "Pleroma.Uploaders.S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "Pleroma.User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "Pleroma.User.Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "Pleroma.Web.ApiSpec.CastAndValidate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Http" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Script" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "Pleroma.Web.Plugs.RemoteIp" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "Pleroma.Web.Preload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "Pleroma.Workers.PurgeExpiredActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "Vapid Details" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "Enables SSH" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "Port to connect" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "Dir with SSH keys" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "S3 access key ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "S3 host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "S3 region (for AWS)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" +"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" +"ex_syslogger } - to syslog, Quack.Logger - to Slack." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" +"A string that's prepended to every message, and is typically set to the app " +"name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "Whether a user can see someone who has blocked them" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "Following handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" +"The number of Note replies' URIs to be included with outgoing federation (`5`" +" to match Mastodon hardcoded value, `0` to disable the output)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "Whether to federate blocks to other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "Sign object fetches with HTTP signatures" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "Whether blocks result in people getting unfollowed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" +"This will be used as the default mascot on MastoFE. Default: " +"`:pleroma_fox_tan`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "URL of the default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" +"Keyword of mascots, each element must contain both an URL and a mime_type key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" +"Authentication form template. By default it's `show.html` which corresponds " +"to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" +"OAuth admin scope requirement toggle. If enabled, admin actions explicitly " +"demand admin OAuth scope(s) presence in OAuth token (client app must support " +"admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` " +"user flag grants access to admin-specific actions." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" +"The list of enabled OAuth consumer strategies. By default it's set by " +"OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" +"delimited string should be of format \"strategy\" or \"strategy:dependency\" " +"(e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is " +"named differently than ueberauth_)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" +"OAuth consumer mode authentication form template. By default it's `consumer." +"html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." +"html.eex`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" +"Number of attempts to acquire the connection from the pool if it is " +"overloaded. Default: 5" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" +"Timeout to acquire a connection from pool. The total max time is this value " +"multiplied by the number of retries. Default: 250ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "Maximum number of connections in the pool. Default: 250 connections." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" +"Multiplier for the number of idle connection to be reclaimed if the pool is " +"full. For example if the pool maxes out at 250 connections and this setting " +"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " +"overloaded. Default: 0.1" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" +"emails of \"what you've missed\" for users who have been inactive for a while" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "Globally enable or disable digest emails" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "Minimum user inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "Minimum interval between digest emails to one user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" +"When to send digest email, in crontab format. \"0 0 0\" is the default, " +"meaning \"once a week at midnight on Sunday morning\"." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" +"Location of the JSON-manifest. This manifest contains information about the " +"emoji-packs you can download. Currently only one manifest can be added (no " +"arrays)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" +"Emojis are ordered in groups (tags). This is an array of key-value pairs " +"where the key is the group name and the value is the location or array of " +"locations. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" +"A list of file extensions for emojis, when no emoji.txt for a pack is present" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "Location of custom emoji files. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" +"Setting to force toggle / force disable improved hashtags timeline. " +"`:enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +"timeline. `:disabled` forces object-embedded hashtags to be used (slower). " +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [" +"unless overridden] when HashtagsTableMigrator completes)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "Configure title rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "Maximum number of characters before truncating title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "Replacement which will be used after truncating string" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "When disabled, auto-hide the subject field if it's empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" +"URL of the background, unless viewing a user profile with a background that " +"is set" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" +"When a message has a subject (aka Content Warning), collapse it by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "Enables green text on lines prefixed with the > character" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "Hides filtered statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "Hides muted statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "Hide notices statistics (repeats, favorites, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "Hides instance name from PleromaFE banner" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" +"Hide profile statistics (posts, posts per day, followers, followings, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "URL of the logo, defaults to Pleroma's logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" +"Allows you to adjust vertical margins between logo boundary and navbar " +"borders. The idea is that to have logo's image without any extra margins and " +"instead adjust them to your need in layout." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" +"By default it assumes logo used will be monochrome with alpha channel to be " +"compatible with both light and dark themes. If you want a colorful logo you " +"must disable logoMask." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" +"Limit scope selection to Direct, User default, and Scope of post replying " +"to. Also prevents replying to a DM with a public post from PleromaFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" +"URL of the image to use for hiding NSFW media attachments in the timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "Default post formatting option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "Relative URL which indicates where to redirect when a user is logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" +"Relative URL which indicates where to redirect when a user isn't logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "Copy the scope (private/unlisted/public) in replies to posts by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" +"Enables panel displaying functionality of the instance on the About page" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "Change alignment of sidebar and panels to the right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" +"Allows changing the default behaviour of subject lines in replies.\n" +" `email`: copy and preprend re:, as in email,\n" +" `masto`: copy verbatim, as in Mastodon,\n" +" `noop`: don't copy the subject." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "Which theme to use. Available themes are defined in styles.json" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" +"A map containing available frontends and parameters for their installation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "The directory inside the zip file " + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" +"Either an url to a zip file containing the frontend or a template to build " +"it by inserting the `ref`. The string `${ref}` will be replaced by the " +"configured `ref`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "The custom HTTP headers for the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "URL of the git repository of the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "Name of the frontend." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "Reference of the frontend to be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "Primary frontend, the one that is served for all pages by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "Port advertised in URLs (optional, defaults to port)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "Enables the gopher interface" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "IP address to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "Port to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "Adapter specific options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "SSL options for HTTP adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "List of TLS version to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" +"What user agent to use. Must be a string or an atom `:default`. Default " +"value is `:default`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "The maximum age for the Expect-CT header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "Whether the managed content security policy is enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "Adds the specified URL to report-uri and report-to group in CSP header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "Whether to additionally send a Strict-Transport-Security header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "The maximum age for the Strict-Transport-Security header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "Require users to confirm their emails before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "Require users to be manually approved by an admin before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "An account field name maximum length. Default: 512." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "An account field value maximum length. Default: 2048." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" +"Permits remote instances to subscribe to all public posts of your instance. " +"(Important!) This may increase the visibility of your instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "MIME-type list of formats allowed to be posted (transformed into HTML)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "Enable to automatically add attachment link text to statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" +"Set to nicknames of (local) users that every new user should automatically " +"follow" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" +"Set to nicknames of (local) users that automatically follows every newly " +"registered user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "File size limit of user's profile avatars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "File size limit of user's profile backgrounds" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "File size limit of user's profile banners" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" +"Minimum required age for users to create account. Only used if birthday is " +"required." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "Require users to enter their birthday." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" +"Enable to remove associated attachments when status is removed.\n" +"This will not affect duplicates and attachments without status.\n" +"Enabling this will increase load to database when deleting statuses on " +"larger instances.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" +"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "Email used to reach an Administrator/Moderator of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" +"Enable to use extended local nicknames format (allows underscores/dashes). " +"This will break federation with older software for theses nicknames." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" +"Enabling following/followers counters synchronization for external users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "Enable federation with other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" +"Max. depth of reply-to and reply activities fetching on incoming federation, " +"to prevent out-of-memory situations while fetching very long threads. If set " +"to `nil`, threads of any depth will be fetched. Lower this value if you " +"experience out-of-memory crashes." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" +"Timeout (in days) of each external federation target being unreachable prior " +"to pausing federating to it" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" +"The instance thumbnail can be any image that represents your instance and is " +"used by some apps or services when they display information about your " +"instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" +"Enable user invitations for admins (depends on `registrations_open` being " +"disabled)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "Posts character limit (CW/Subject included in the counter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" +"Limit unauthenticated users to search for local statutes and users only. " +"Default: `:unauthenticated`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "The maximum number of custom fields in the user profile. Default: 10." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "The maximum number of recommended accounts. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "Maximum number of post media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "The maximum number of pinned statuses. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" +"The maximum number of custom fields in the remote user profile. Default: 20." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "The maximum size of the report comment. Default: 1000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "Multi-factor authentication settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "MFA backup codes settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" +"Determines the length of backup one-time pass-codes, in characters. Defaults " +"to 16 characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "Number of backup codes to generate." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" +"Determines the length of a one-time pass-code, in characters. Defaults to 6 " +"characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" +"A period for which the TOTP code will be valid, in seconds. Defaults to 30 " +"seconds." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "Envelope FROM address for mail sent via Pleroma" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "A map with poll limits for local polls" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "Maximum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "Maximum number of characters per option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "Maximum number of options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "Minimum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "Enable profile directory." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "Maximum registration reason length. Default: 500." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" +"Enable registrations for anyone. Invitations require this setting to be " +"disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "Hard character limit beyond which remote posts will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" +"The default amount of days to retain remote posts when pruning the database" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" +"If enabled, only mentions at the beginning of a post will be used to address " +"people in direct messages. This is to prevent accidental mentioning of " +"people when talking about them (e.g. \"@admin please keep an eye on @" +"bad_actor\"). Default: disabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "Let favourites and emoji reactions be viewed through the API." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "Skip filtering out broken threads. Default: enabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "Instance static directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "File size limit of uploads (except for avatar, background, banner)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "A user bio maximum length. Default: 5000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "A user name maximum length. Default: 100." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "LDAP base, e.g. \"dc=example,dc=com\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "Enables LDAP authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "LDAP server hostname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "LDAP port, e.g. 389 or 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "Enable to use SSL, usually implies the port 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "Additional SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "Enable to use STARTTLS, usually implies the port 389" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "Additional TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" +"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " +"will be \"cn=username,base\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "Number of majic workers to start." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "Describe the icons of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" +"Module names are shortened (removed leading `Pleroma.HTML.` part), but on " +"adding custom module you need to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" +"Enables proxying of remote media preview to the instance's proxy. Requires " +"enabled media proxy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" +"Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" +"Min content length (in bytes) to perform preview. Media smaller in size will " +"be served without thumbnailing." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max height of preview thumbnail for images (video preview always has " +"original dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max width of preview thumbnail for images (video preview always has original " +"dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" +"The base URL to access a user-uploaded file. Useful when you want to proxy " +"the media files via another host/CDN fronts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "Enables proxying of remote media via the instance's proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "Enables media cache object invalidation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "Module which will be used to purge objects from the cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "Internal Pleroma.ReverseProxy settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" +"Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "Timeout (in milliseconds) of GET request to the remote URI." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" +"Redirects the client to the origin server upon encountering HTTP errors.\n" +"\n" +"Note that files larger than Max Body Length will trigger an error. (e.g., " +"Peertube videos)\n" +"\n" +"\n" +"**WARNING:** This setting will allow larger files to be accessed, but " +"exposes the\n" +"\n" +"IP addresses of your users to the other servers, bypassing the MediaProxy.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "List of hosts with scheme to bypass the MediaProxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "A path to custom Elixir modules (such as MRF policies)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" +"A list of MRF policies enabled. Module names are shortened (removed leading " +"`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" +"Make the content of your Message Rewrite Facility settings public (via " +"nodeinfo)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" +"Exclude specific instance names from MRF transparency. The use of the " +"exclusions feature will be disclosed in nodeinfo as a boolean value. You can " +"also provide a reason for excluding these instance names. The instances and " +"reasons won't be publicly disclosed." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "Default global expiration time for all local activities (in days)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" +"The name of the bot account to use for following newly discovered users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" +"A list of hashtags which result in message being removed from federated " +"timelines (a.k.a unlisted)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "A list of hashtags which result in message being rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" +"A list of hashtags which result in message being set as sensitive (a.k.a " +"NSFW/R-18)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the message gets removed from " +"timelines anddisables notifications. Set to 0 to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the messaged gets rejected. Set to 0 " +"to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being removed from federated " +"timelines (a.k.a unlisted).\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being rejected.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" +" **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " +"the format of `~r/PATTERN/`.\n" +"\n" +" **Replacement**: a string. Leaving the field empty is permitted.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "A list of actors for which any post mentioning them will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" +"A list of actions to apply to the post. `:delist` removes the post from " +"public timelines; `:strip_followers` removes followers from the ActivityPub " +"recipient list ensuring they won't be delivered to home timelines; `:reject` " +"rejects the message entirely" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "Required age (in seconds) of a post before actions are taken." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "Whether to allow direct messages" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "Whether to allow followers-only posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to only accept activities from (except deletes) and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "List of instances to strip avatars from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "List of instances to strip banners from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" +"List of instances to remove from the Federated (aka The Whole Known Network) " +"Timeline and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" +"Force posts from the given instances to be visible by followers only and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" +"List of instances to tag all media as NSFW (sensitive) from and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" +"List of instances to strip media attachments from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to reject activities from (except deletes) and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "List of instances to reject deletions from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "List of instances to reject reports from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "List of hosts to steal emojis from" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns or matches to reject shortcodes with.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" +"File size limit (in bytes), checked before an emoji is saved to the disk" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "Matches a series of regular expressions against the actor field" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" +"A list of ActivityStreams terms to accept. If empty, all supported messages " +"are accepted." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" +"A list of ActivityStreams terms to reject. If empty, no messages are " +"rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" +"Enable a background job to clean expired OAuth tokens. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" +"Keeps old refresh token or generate new refresh token when to obtain an " +"access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "The lifetime in seconds of the access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "Settings for default pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" +"Max accepted rate of objects that failed in the migration. Any value from " +"0.0 which tolerates no errors to 1.0 which will enable the feature even if " +"hashtags transfer failed for all records." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" +"Sleep interval between each chunk of processed records in order to decrease " +"the load on the system (defaults to 0 and should be keep default on most " +"instances)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "For registering user accounts from the same IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" +"For authentication create / password check / user existence check requests" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "For actions on relation with a specific user (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "For actions on relationships with all users (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "For the search requests (account & status search etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" +"For fav / unfav or reblog / unreblog actions on the same status by the same " +"user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" +"For create / delete / fav / unfav / reblog / unreblog actions on any statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "For requests to timelines (each timeline has it's own limiter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "Settings for user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "Settings for public and federated timelines." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "Enables RichMedia parsing of URLs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" +"Amount of milliseconds after request failure, during which the request will " +"not be retried." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "List of hosts which will be ignored by the metadata parser" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "List TLDs (top-level domains) which will ignore for parse metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" +"List of Rich Media parsers. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" +"List of rich media TTL setters. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "Enables the backend Shoutbox chat feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "Shout message character limit." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "Enables the rendering of static HTML. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "Maximum number of workers created if pool is empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "Number of workers to send notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "List of the scheme part that is considered valid to be an URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" +"Activity pub routes (except question activities). Default: `nil` (no " +"expiration)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" +"Activity pub routes (question activities). Default: `30_000` (30 seconds)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "Enables sending a chat message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "A message that will be sent to newly registered users as a chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "The nickname of the local user that sends a welcome chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "Enables sending a direct message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "A message that will be sent to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "The nickname of the local user that sends a welcome message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "Enables sending an email to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"HTML content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" +"Email address and/or nickname that will be used to send the welcome email." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Subject of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Text content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "Concurrent limits configuration for MediaProxyWarmingPolicy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "Concurrent limits configuration for getting RichMedia for activities." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "Settings for cron background jobs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "Logs verbose mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" +"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "Activity expiration queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "Attachment deletion queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "Background queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "Backup queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "Incoming federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "Outgoing federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "Email sender queue, see Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "Scheduled activities queue, see Pleroma.ScheduledActivities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "Transmogrifier queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "Web push notifications queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "Whether the captcha should be shown on registration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "The method/service to use for captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "The time in seconds for which the captcha is valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "The kocaptcha endpoint to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" +"One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" +"swoosh/Swoosh.html#module-adapters)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "SMTP AUTH enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "SMTP AUTH password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "SMTP port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "Hostname or IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "SMTP temporary (4xx) error retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "Use Implicit SSL/TLS. e.g. port 465" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "Explicit TLS (STARTTLS) enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "SMTP AUTH username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "Enables new users admin digest email when `true`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" +"A path to a custom logo. Set it to `nil` to use the default Pleroma logo." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "A map with color settings for email templates." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "Specify the class to be added to the generated link. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "Link URLs will open in a new window/tab." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "Override the rel attribute. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "Strip the scheme prefix." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" +"Set to a number to truncate URLs longer than the number. Truncated URLs will " +"end in `...`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" +"Set to false to disable TLD validation for URLs/emails. Can be set to :" +"no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " +"will be validated, but `http://example.loki` won't)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" +"The number of scheduled activities a user is allowed to create in a single " +"day. Default: 25." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "Whether scheduled activities are sent to the job queue to be executed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" +"The number of scheduled activities a user is allowed to create in total. " +"Default: 300." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" +"Base URL for the uploads. Required if you use a CDN or host attachments " +"under a different domain." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "Set max length of a filename to display. 0 = no limit. Default: 30" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" +"List of filter modules for uploads. Module names are shortened (removed " +"leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" +"If enabled, a name parameter will be added to the URL of the upload. For " +"example `https://instance.tld/media/imagehash.png?name=realname.png`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" +"Proxy requests to the remote uploader.\n" +"\n" +"Useful if media upload endpoint is not internet accessible.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "Module which will be used for uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" +"Text to replace filenames in links. If no setting, {random}.extension will " +"be used. You can get the original filename extension by using {extension}, " +"for example custom-file-name.{extension}." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" +"List of actions for the mogrify command. It's possible to add self-written " +"settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080" +">\"}` value will be parsed into valid list of the settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "Path where user's uploads will be saved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "S3 bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "S3 bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" +"Enable streaming uploads, when enabled the file will be sent to the server " +"in chunks as it's being read. This may be unsupported by some providers, try " +"disabling this if you have upload problems." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" +"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " +"folder name or \"\" etc. For example, when using CDN to S3 virtual host " +"format, set \"\". At this time, write CNAME to CDN in Upload base_url." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "List of email domains users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "List of nicknames users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "Limit user to export not more often than once per N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "Remove backup achives after N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" +"Enables strict input validation (useful in development, not recommended in " +"production)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "HTTP headers of request" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "HTTP method of request. Default: :purge" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "Request options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "Path to executable script which will purge cached items." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" +"Optional URL format preprocessing. Only required for Apache's htcacheclean." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "List of metadata providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "When enabled NSFW attachments will be shown in previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "Enable/disable the plug. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" +" A list of strings naming the HTTP headers to use when deriving the true " +"client IP. Default: `[\"x-forwarded-for\"]`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" +"A list of upstream proxy IP subnets in CIDR notation from which we will " +"parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " +"bitmask will be assumed to be /32 and IPv6 /128." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" +" A list of reserved IP subnets in CIDR notation which should be ignored if " +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\"" +", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "List of preload providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "Enables expired activities addition & deletion" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "Minimum lifetime for ephemeral activity (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "[Pleroma extension] Enables app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "App metrics endpoint output format." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "Restrict access of app metrics endpoint to the specified IP addresses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "App metrics endpoint URI path." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "Configure which metadata you want to report on" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "Configure the Slack incoming webhook" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "VAPID private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" +"A mailto link for the administrative contact. It's best if this email is not " +"a personal email address, but rather a group email to the instance " +"moderation team." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "Credentials" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "Expose" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "Max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "Methods" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "Handler" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "Password authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "Priv dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "Access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "Backends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "Ident" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "\"application/activity+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "\"application/jrd+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "\"application/ld+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "\"application/xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "\"application/xrd+xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "Pleroma.Web.Auth.Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "Blockers visible" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "Follow handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "Note replies output limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "Outgoing blocks" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "Sign object fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "Unfollow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "Default mascot" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "Default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "Mascots" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "Auth template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "Enforce OAuth admin scope usage" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "OAuth consumer strategies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "OAuth consumer template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "Connect timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "Connection acquisition retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "Connection acquisition wait" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "Reclaim multiplier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "Digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "Inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "Interval" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "Schedule" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "Default manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "Groups" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "Pack extensions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "Shared pack cache s/file" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "Shortcode globs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "Improved hashtag timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "Post title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "Max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "Omission" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "Always show subject input" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "Collapse message with subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "Greentext" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "Hide Filtered Statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "Hide Muted Posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "Hide post stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "Hide user stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "Logo margin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "Logo mask" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "Minimal scopes mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "NSFW Censor Image" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "Post Content Type" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "Redirect root login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "Redirect root no login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "Scope copy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "Show instance features panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "Sidebar on Right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "Subject line behavior" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "Theme" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "Admin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "Available" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "Build directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "Build URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "Custom HTTP headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "Git Repository URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "Primary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "Dstport" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "IP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "SSL Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "Versions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "Send user agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "User agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "CT max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "Referrer policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "Report URI" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "STS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "STS max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "Account activation required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "Account approval required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "Account field name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "Account field value length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "Allow relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "Allowed post formats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "Attachment links" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "Autofollowed nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "Autofollowing nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "Avatar upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "Background upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "Banner upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "Birthday min age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "Birthday required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "Cleanup attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "Description" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "Admin Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "Extended nickname format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "External user synchronization" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "Federating" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "Fed. incoming replies max depth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "Fed. reachability timeout days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "Healthcheck" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "Instance thumbnail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "Invites enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "Limit to local content" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "Max account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "Max endorsed users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "Max media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "Max pinned statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "Max remote account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "Max report comment size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "Multi factor authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "Backup codes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "Length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "Number" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "Digits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "Period" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "Sender Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "Poll limits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "Max expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "Max option chars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "Max options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "Min expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "Privileged staff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "Profile directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "Quarantined instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "Registration reason length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "Registrations open" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "Remote limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "Remote post retention days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "Safe DM mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "Show reactions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "Skip thread containment" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "Static dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "Upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "User bio length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "User name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "Base" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "TLS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "UID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "Icons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "Allow fonts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "Allow headings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "Allow inline images" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "Allow tables" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "Image quality" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "Min content length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "Thumbnail max height" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "Thumbnail max width" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "Invalidation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "Provider" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "Advanced MediaProxy Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "Max body length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "Max read duration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "Redirect on failure" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "Runtime dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "Policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "MRF transparency" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "MRF transparency exclusions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "Days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "Follower nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "Sensitive" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "Delist threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "Reject threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "Replace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "Actors" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "Actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "Threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "Allow direct" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "Allow followers-only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "Avatar removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "Banner removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "Followers only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "Media NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "Media removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "Reject deletes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "Report removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "Hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "Size limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "Match actor" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "Clean expired tokens" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "Issue new refresh token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "Token expires in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "Default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "Fault rate allowance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "Sleep interval ms" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "App account creation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "Authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "Relation ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "Relations actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "Status ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "Statuses actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "Timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "Profiles" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "Timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "Federated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "Failure backoff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "Ignore hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "Ignore TLD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "Parsers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "TTL setters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "Overflow workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "Valid schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "Deny follow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "Activity pub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "Activity pub question" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "Chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "Direct message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "Email" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "Html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "Sender" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "Pleroma.Web.RichMedia.Helpers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "Crontab" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "Log" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "Queues" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "Activity expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "Attachments cleanup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "Federator incoming" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "Federator outgoing" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "Scheduled activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "Transmogrifier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "Web push" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "Seconds valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "Mailer Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "AWS Access Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "AWS Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "AWS Secret Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "Dyn API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "GMail API Access Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "Mailgun API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "Domain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "MailJet Public API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "MailJet Private API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "Mandrill API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "Postmark API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "AUTH Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "Relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "Use SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "STARTTLS Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "SendGrid API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "Cmd path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "Qmail compat mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "SocketLabs API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "Server ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "SparkPost API key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "Styling" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "Content background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "Header color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "Link color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "Text color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "Text muted color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "Class" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "Extra" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "New window" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "Rel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "Strip prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "Truncate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "Validate tld" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "Daily user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "Total user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "Filename display max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "Filters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "Link name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "Proxy remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "Uploader" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "Args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "Uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "Bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "Bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "Truncated namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "Email blacklist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "Restricted nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "Limit days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "Purge after days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "Params" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "Script path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "URL Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "Unfurl NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "Proxies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "Reserved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "Min lifetime" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "IP Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "Path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "Meta" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "Webhook URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "Public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures for AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :short_description" +msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgstr "" +"Shorter version of instance description. It can be seen on `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "Authorized fetch mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :short_description" +msgid "Short description" +msgstr "Short description" diff --git a/priv/gettext/ca/LC_MESSAGES/posix_errors.po b/priv/gettext/ca/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..cd723f0f5 --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/posix_errors.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-28 09:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.1\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +msgid "eperm" +msgstr "" + +msgid "eacces" +msgstr "" + +msgid "eagain" +msgstr "" + +msgid "ebadf" +msgstr "" + +msgid "ebadmsg" +msgstr "" + +msgid "ebusy" +msgstr "" + +msgid "edeadlk" +msgstr "" + +msgid "edeadlock" +msgstr "" + +msgid "edquot" +msgstr "" + +msgid "eexist" +msgstr "" + +msgid "efault" +msgstr "" + +msgid "efbig" +msgstr "" + +msgid "eftype" +msgstr "" + +msgid "eintr" +msgstr "" + +msgid "einval" +msgstr "" + +msgid "eio" +msgstr "" + +msgid "eisdir" +msgstr "" + +msgid "eloop" +msgstr "" + +msgid "emfile" +msgstr "" + +msgid "emlink" +msgstr "" + +msgid "emultihop" +msgstr "" + +msgid "enametoolong" +msgstr "" + +msgid "enfile" +msgstr "" + +msgid "enobufs" +msgstr "" + +msgid "enodev" +msgstr "" + +msgid "enolck" +msgstr "" + +msgid "enolink" +msgstr "" + +msgid "enoent" +msgstr "" + +msgid "enomem" +msgstr "" + +msgid "enospc" +msgstr "" + +msgid "enosr" +msgstr "" + +msgid "enostr" +msgstr "" + +msgid "enosys" +msgstr "" + +msgid "enotblk" +msgstr "" + +msgid "enotdir" +msgstr "" + +msgid "enotsup" +msgstr "" + +msgid "enxio" +msgstr "" + +msgid "eopnotsupp" +msgstr "" + +msgid "eoverflow" +msgstr "" + +msgid "epipe" +msgstr "" + +msgid "erange" +msgstr "" + +msgid "erofs" +msgstr "" + +msgid "espipe" +msgstr "" + +msgid "esrch" +msgstr "" + +msgid "estale" +msgstr "" + +msgid "etxtbsy" +msgstr "" + +msgid "exdev" +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/static_pages.po b/priv/gettext/ca/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..6f37874ca --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/static_pages.po @@ -0,0 +1,525 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-28 09:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error following account" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "password reset button" +msgid "Reset" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "" + +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-autogen, elixir-format +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +#, elixir-autogen, elixir-format +msgctxt "oauth login button" +msgid "Log In" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +#, elixir-autogen, elixir-format +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +#, elixir-autogen, elixir-format +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-autogen, elixir-format +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-autogen, elixir-format +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-autogen, elixir-format +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-autogen, elixir-format +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "" +msgstr[1] "" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:384 +#, elixir-autogen, elixir-format +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:188 +#, elixir-autogen, elixir-format +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:202 +#, elixir-autogen, elixir-format +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:158 +#, elixir-autogen, elixir-format +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:174 +#, elixir-autogen, elixir-format +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:310 +#, elixir-autogen, elixir-format +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:81 +#, elixir-autogen, elixir-format +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:98 +#, elixir-autogen, elixir-format +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:215 +#, elixir-autogen, elixir-format +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:231 +#, elixir-autogen, elixir-format +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-autogen, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:136 +#, elixir-autogen, elixir-format +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:53 +#, elixir-autogen, elixir-format +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:41 +#, elixir-autogen, elixir-format +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:65 +#, elixir-autogen, elixir-format +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:368 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" From bf3f934275cc0e2f957483c3a2ee53f93a191986 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 29 Jul 2022 10:04:04 +0100 Subject: [PATCH 38/82] add guards around fix misskey content --- .../object_validators/article_note_page_validator.ex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index 5e377c294..453bc6d86 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -110,7 +110,8 @@ defp remote_mention_resolver( # https://github.com/misskey-dev/misskey/pull/8787 defp fix_misskey_content( %{"source" => %{"mediaType" => "text/x.misskeymarkdown", "content" => content}} = object - ) do + ) + when is_binary(content) do mention_handler = fn nick, buffer, opts, acc -> remote_mention_resolver(object, nick, buffer, opts, acc) end @@ -121,7 +122,7 @@ defp fix_misskey_content( Map.put(object, "content", linked) end - defp fix_misskey_content(%{"_misskey_content" => content} = object) do + defp fix_misskey_content(%{"_misskey_content" => content} = object) when is_binary(content) do mention_handler = fn nick, buffer, opts, acc -> remote_mention_resolver(object, nick, buffer, opts, acc) end From 4f6caae2092abb3d80ad7a921a90f40d15e4051a Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 29 Jul 2022 10:08:40 +0100 Subject: [PATCH 39/82] ensure we can't run the same clause of fix_quote_url more than once --- lib/pleroma/web/activity_pub/transmogrifier.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index eea785a55..dfd2c5dc8 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -201,12 +201,14 @@ def fix_quote_url(%{"quoteUrl" => quote_url} = object, options) do def fix_quote_url(%{"quoteURL" => quote_url} = object, options) do object |> Map.put("quoteUri", quote_url) + |> Map.delete("quoteURL") |> fix_quote_url(options) end def fix_quote_url(%{"_misskey_quote" => quote_url} = object, options) do object |> Map.put("quoteUri", quote_url) + |> Map.delete("_misskey_quote") |> fix_quote_url(options) end From db99edacfe5431130e33d85addc902a72cee639e Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 29 Jul 2022 10:10:12 +0100 Subject: [PATCH 40/82] do the same for soapbox --- lib/pleroma/web/activity_pub/transmogrifier.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index dfd2c5dc8..604fc6310 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -193,6 +193,7 @@ def fix_quote_url(%{"quoteUri" => quote_url} = object, options) def fix_quote_url(%{"quoteUrl" => quote_url} = object, options) do object |> Map.put("quoteUri", quote_url) + |> Map.delete("quoteUrl") |> fix_quote_url(options) end From c0965ed24a30692985984e30792b1419d0f79ca3 Mon Sep 17 00:00:00 2001 From: Weblate Date: Fri, 29 Jul 2022 11:37:51 +0000 Subject: [PATCH 41/82] Added translation using Weblate (Catalan) Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Translated using Weblate (Catalan) Currently translated at 100.0% (0 of 0 strings) Added translation using Weblate (Catalan) Added translation using Weblate (Catalan) Added translation using Weblate (Catalan) Co-authored-by: Anonymous Co-authored-by: Weblate Co-authored-by: sola Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/ca/ Translation: Pleroma fe/Akkoma Backend (Config Descriptions) --- .../ca/LC_MESSAGES/config_descriptions.po | 6396 +++++++++++++++++ priv/gettext/ca/LC_MESSAGES/errors.po | 624 ++ priv/gettext/ca/LC_MESSAGES/posix_errors.po | 163 + priv/gettext/ca/LC_MESSAGES/static_pages.po | 525 ++ 4 files changed, 7708 insertions(+) create mode 100644 priv/gettext/ca/LC_MESSAGES/config_descriptions.po create mode 100644 priv/gettext/ca/LC_MESSAGES/errors.po create mode 100644 priv/gettext/ca/LC_MESSAGES/posix_errors.po create mode 100644 priv/gettext/ca/LC_MESSAGES/static_pages.po diff --git a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..bdb997f1a --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6396 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-28 09:35+0000\n" +"PO-Revision-Date: 2022-07-28 09:36+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" +"Before enabling this you must add :esshd to mix.exs as one of the " +"extra_applications and generate host keys in your priv dir with ssh-keygen -" +"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "Mime Types settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" +"Allows setting a token that can be used to authenticate requests with admin " +"privileges without a normal user account token. Append the `admin_token` " +"parameter to requests to utilize it. (Please reconsider using HTTP Basic " +"Auth or OAuth-based authentication if possible)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "Quack-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "CORS plug config" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "ESSHD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger" +msgid "Logger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "Mime Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "Pleroma Admin Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "Pleroma Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "Quack Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "Console logger settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "ExSyslogger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "ActivityPub-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" +"This section configures assets to be used with various frontends. Currently " +"the only option relates to mascots on the mastodon frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "Authentication / authorization settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "Advanced settings for `Gun` connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "Email notifications settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "Customizable features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "Configure feed rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe are configured. If you want to add your own configuration your " +"settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "Installed frontends management" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "Gopher settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "Advanced settings for `Hackney` connections pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "HTTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "HTTP security settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "Instance-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" +"Use LDAP for user authentication. When a user logs in to the Pleroma " +"instance, the name and password will be verified by trying to authenticate " +"(bind) to a LDAP server. If a user exists in the LDAP directory but there is " +"no account with the same name yet on the Pleroma instance then a new Pleroma " +"account will be created with the same name as the LDAP user name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "Majic/libmagic configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" +"This section describe PWA manifest instance-specific values. Currently this " +"option relate only for MastoFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "Custom Runtime Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "Adds automatic expiration to all local activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "Automatically follows newly discovered accounts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (" +"without the leading #)\n" +"\n" +"Note: This MRF Policy is always enabled, if you want to disable it you have " +"to set empty lists.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "Block messages with excessive user mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" +"Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs" +".pm/elixir/Regex.html)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "Block messages which mention a specific user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "MRF NormalizeMarkup settings. Scrub configured hypertext markup." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" +"Rejects or delists posts based on their timestamp deviance from your " +"server's clock." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "RejectNonPublic drops posts with non-public visibility settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "Simple ingress policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "Steals emojis from selected instances when it sees them." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" +"This policy processes messages through an alternate pipeline when a given " +"message matches certain criteria. All criteria are configured as a map of " +"regular expressions to lists of policy modules." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "Filter messages which belong to certain activity vocabularies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "Configure OAuth 2 provider capabilities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "Advanced settings for `Gun` workers pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "`populate_hashtags_table` background migration settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" +"Rate limit settings. This is an advanced feature enabled only for :" +"authentication by default." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" +"If enabled the instance will parse metadata from attached links to generate " +"link previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "Pleroma shout settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" +"Render profiles and posts using server-generated HTML that is viewable " +"without using JavaScript" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "Settings for notifications streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "URI schemes related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" +"The expiration time for the web responses cache. Values should be in " +"milliseconds or `nil` to disable expiration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "Welcome messages settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "Includes custom worker options not interpretable directly by `Oban`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "Limits configuration for background tasks." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" +"[Oban](https://github.com/sorentwo/oban) asynchronous job processor " +"configuration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "Captcha-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" +"Kocaptcha is a very simple captcha service with a single API endpoint, the " +"source code is here: https://github.com/koto-bank/kocaptcha. The default " +"endpoint (https://captcha.kotobank.ch) is hosted by the developer." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "New users admin email digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" +"Configuration for Pleroma's link formatter which parses mentions, hashtags, " +"and URLs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "Scheduled activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "Upload general settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "Filter replaces the filename of the upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "Uploads mogrify filter settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "Local uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "S3 uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "Account Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "HTTP invalidate settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "Metadata-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" +"`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." +"pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" +"**If your instance is not behind at least one reverse proxy, you should not " +"enable this plug.**\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "Expired activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "Prometheus app metrics endpoint configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" +"Web Push Notifications configuration. You can use the mix task mix " +"web_push.gen.keypair to generate it." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "Console Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "ExSyslogger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "ActivityPub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "Assets" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "Connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "Email notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "Emoji" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "Features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "Feed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "Frontend configurations" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "Frontends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "Gopher" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "Hackney pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "HTTP security" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "Instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "LDAP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "Majic pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "Manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "MRF" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "MRF Activity Expiration Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "MRF FollowBot Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "MRF Hashtag" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "MRF Hellthread" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "MRF Keyword" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "MRF Mention" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "MRF Normalize Markup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "MRF Object Age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "MRF Reject Non Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "MRF Simple" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "MRF Emojis" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "MRF Subchain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "MRF Vocabulary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "OAuth2" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "Populate hashtags table" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "Rate limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "Restrict Unauthenticated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "Rich media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "Shout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "Static FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "Streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "URI Schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "Web cache TTL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "Welcome" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "ConcurrentLimiter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "Oban" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "Pleroma.Captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "Pleroma.Captcha.Kocaptcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "Pleroma.Emails.NewUsersDigestEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "Pleroma.Emails.UserEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "Linkify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "Pleroma.ScheduledActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "Pleroma.Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "Pleroma.Upload.Filter.AnonymizeFilename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "Pleroma.Upload.Filter.Mogrify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "Pleroma.Uploaders.Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "Pleroma.Uploaders.S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "Pleroma.User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "Pleroma.User.Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "Pleroma.Web.ApiSpec.CastAndValidate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Http" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Script" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "Pleroma.Web.Plugs.RemoteIp" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "Pleroma.Web.Preload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "Pleroma.Workers.PurgeExpiredActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "Vapid Details" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "Enables SSH" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "Port to connect" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "Dir with SSH keys" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "S3 access key ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "S3 host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "S3 region (for AWS)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" +"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" +"ex_syslogger } - to syslog, Quack.Logger - to Slack." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" +"A string that's prepended to every message, and is typically set to the app " +"name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "Whether a user can see someone who has blocked them" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "Following handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" +"The number of Note replies' URIs to be included with outgoing federation (`5`" +" to match Mastodon hardcoded value, `0` to disable the output)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "Whether to federate blocks to other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "Sign object fetches with HTTP signatures" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "Whether blocks result in people getting unfollowed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" +"This will be used as the default mascot on MastoFE. Default: " +"`:pleroma_fox_tan`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "URL of the default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" +"Keyword of mascots, each element must contain both an URL and a mime_type key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" +"Authentication form template. By default it's `show.html` which corresponds " +"to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" +"OAuth admin scope requirement toggle. If enabled, admin actions explicitly " +"demand admin OAuth scope(s) presence in OAuth token (client app must support " +"admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` " +"user flag grants access to admin-specific actions." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" +"The list of enabled OAuth consumer strategies. By default it's set by " +"OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" +"delimited string should be of format \"strategy\" or \"strategy:dependency\" " +"(e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is " +"named differently than ueberauth_)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" +"OAuth consumer mode authentication form template. By default it's `consumer." +"html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." +"html.eex`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" +"Number of attempts to acquire the connection from the pool if it is " +"overloaded. Default: 5" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" +"Timeout to acquire a connection from pool. The total max time is this value " +"multiplied by the number of retries. Default: 250ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "Maximum number of connections in the pool. Default: 250 connections." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" +"Multiplier for the number of idle connection to be reclaimed if the pool is " +"full. For example if the pool maxes out at 250 connections and this setting " +"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " +"overloaded. Default: 0.1" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" +"emails of \"what you've missed\" for users who have been inactive for a while" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "Globally enable or disable digest emails" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "Minimum user inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "Minimum interval between digest emails to one user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" +"When to send digest email, in crontab format. \"0 0 0\" is the default, " +"meaning \"once a week at midnight on Sunday morning\"." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" +"Location of the JSON-manifest. This manifest contains information about the " +"emoji-packs you can download. Currently only one manifest can be added (no " +"arrays)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" +"Emojis are ordered in groups (tags). This is an array of key-value pairs " +"where the key is the group name and the value is the location or array of " +"locations. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" +"A list of file extensions for emojis, when no emoji.txt for a pack is present" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "Location of custom emoji files. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" +"Setting to force toggle / force disable improved hashtags timeline. " +"`:enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +"timeline. `:disabled` forces object-embedded hashtags to be used (slower). " +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [" +"unless overridden] when HashtagsTableMigrator completes)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "Configure title rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "Maximum number of characters before truncating title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "Replacement which will be used after truncating string" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "When disabled, auto-hide the subject field if it's empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" +"URL of the background, unless viewing a user profile with a background that " +"is set" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" +"When a message has a subject (aka Content Warning), collapse it by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "Enables green text on lines prefixed with the > character" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "Hides filtered statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "Hides muted statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "Hide notices statistics (repeats, favorites, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "Hides instance name from PleromaFE banner" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" +"Hide profile statistics (posts, posts per day, followers, followings, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "URL of the logo, defaults to Pleroma's logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" +"Allows you to adjust vertical margins between logo boundary and navbar " +"borders. The idea is that to have logo's image without any extra margins and " +"instead adjust them to your need in layout." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" +"By default it assumes logo used will be monochrome with alpha channel to be " +"compatible with both light and dark themes. If you want a colorful logo you " +"must disable logoMask." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" +"Limit scope selection to Direct, User default, and Scope of post replying " +"to. Also prevents replying to a DM with a public post from PleromaFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" +"URL of the image to use for hiding NSFW media attachments in the timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "Default post formatting option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "Relative URL which indicates where to redirect when a user is logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" +"Relative URL which indicates where to redirect when a user isn't logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "Copy the scope (private/unlisted/public) in replies to posts by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" +"Enables panel displaying functionality of the instance on the About page" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "Change alignment of sidebar and panels to the right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" +"Allows changing the default behaviour of subject lines in replies.\n" +" `email`: copy and preprend re:, as in email,\n" +" `masto`: copy verbatim, as in Mastodon,\n" +" `noop`: don't copy the subject." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "Which theme to use. Available themes are defined in styles.json" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" +"A map containing available frontends and parameters for their installation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "The directory inside the zip file " + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" +"Either an url to a zip file containing the frontend or a template to build " +"it by inserting the `ref`. The string `${ref}` will be replaced by the " +"configured `ref`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "The custom HTTP headers for the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "URL of the git repository of the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "Name of the frontend." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "Reference of the frontend to be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "Primary frontend, the one that is served for all pages by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "Port advertised in URLs (optional, defaults to port)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "Enables the gopher interface" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "IP address to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "Port to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "Adapter specific options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "SSL options for HTTP adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "List of TLS version to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" +"What user agent to use. Must be a string or an atom `:default`. Default " +"value is `:default`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "The maximum age for the Expect-CT header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "Whether the managed content security policy is enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "Adds the specified URL to report-uri and report-to group in CSP header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "Whether to additionally send a Strict-Transport-Security header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "The maximum age for the Strict-Transport-Security header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "Require users to confirm their emails before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "Require users to be manually approved by an admin before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "An account field name maximum length. Default: 512." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "An account field value maximum length. Default: 2048." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" +"Permits remote instances to subscribe to all public posts of your instance. " +"(Important!) This may increase the visibility of your instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "MIME-type list of formats allowed to be posted (transformed into HTML)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "Enable to automatically add attachment link text to statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" +"Set to nicknames of (local) users that every new user should automatically " +"follow" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" +"Set to nicknames of (local) users that automatically follows every newly " +"registered user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "File size limit of user's profile avatars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "File size limit of user's profile backgrounds" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "File size limit of user's profile banners" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" +"Minimum required age for users to create account. Only used if birthday is " +"required." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "Require users to enter their birthday." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" +"Enable to remove associated attachments when status is removed.\n" +"This will not affect duplicates and attachments without status.\n" +"Enabling this will increase load to database when deleting statuses on " +"larger instances.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" +"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "Email used to reach an Administrator/Moderator of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" +"Enable to use extended local nicknames format (allows underscores/dashes). " +"This will break federation with older software for theses nicknames." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" +"Enabling following/followers counters synchronization for external users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "Enable federation with other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" +"Max. depth of reply-to and reply activities fetching on incoming federation, " +"to prevent out-of-memory situations while fetching very long threads. If set " +"to `nil`, threads of any depth will be fetched. Lower this value if you " +"experience out-of-memory crashes." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" +"Timeout (in days) of each external federation target being unreachable prior " +"to pausing federating to it" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" +"The instance thumbnail can be any image that represents your instance and is " +"used by some apps or services when they display information about your " +"instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" +"Enable user invitations for admins (depends on `registrations_open` being " +"disabled)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "Posts character limit (CW/Subject included in the counter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" +"Limit unauthenticated users to search for local statutes and users only. " +"Default: `:unauthenticated`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "The maximum number of custom fields in the user profile. Default: 10." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "The maximum number of recommended accounts. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "Maximum number of post media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "The maximum number of pinned statuses. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" +"The maximum number of custom fields in the remote user profile. Default: 20." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "The maximum size of the report comment. Default: 1000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "Multi-factor authentication settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "MFA backup codes settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" +"Determines the length of backup one-time pass-codes, in characters. Defaults " +"to 16 characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "Number of backup codes to generate." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" +"Determines the length of a one-time pass-code, in characters. Defaults to 6 " +"characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" +"A period for which the TOTP code will be valid, in seconds. Defaults to 30 " +"seconds." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "Envelope FROM address for mail sent via Pleroma" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "A map with poll limits for local polls" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "Maximum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "Maximum number of characters per option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "Maximum number of options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "Minimum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "Enable profile directory." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "Maximum registration reason length. Default: 500." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" +"Enable registrations for anyone. Invitations require this setting to be " +"disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "Hard character limit beyond which remote posts will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" +"The default amount of days to retain remote posts when pruning the database" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" +"If enabled, only mentions at the beginning of a post will be used to address " +"people in direct messages. This is to prevent accidental mentioning of " +"people when talking about them (e.g. \"@admin please keep an eye on @" +"bad_actor\"). Default: disabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "Let favourites and emoji reactions be viewed through the API." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "Skip filtering out broken threads. Default: enabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "Instance static directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "File size limit of uploads (except for avatar, background, banner)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "A user bio maximum length. Default: 5000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "A user name maximum length. Default: 100." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "LDAP base, e.g. \"dc=example,dc=com\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "Enables LDAP authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "LDAP server hostname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "LDAP port, e.g. 389 or 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "Enable to use SSL, usually implies the port 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "Additional SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "Enable to use STARTTLS, usually implies the port 389" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "Additional TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" +"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " +"will be \"cn=username,base\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "Number of majic workers to start." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "Describe the icons of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" +"Module names are shortened (removed leading `Pleroma.HTML.` part), but on " +"adding custom module you need to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" +"Enables proxying of remote media preview to the instance's proxy. Requires " +"enabled media proxy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" +"Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" +"Min content length (in bytes) to perform preview. Media smaller in size will " +"be served without thumbnailing." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max height of preview thumbnail for images (video preview always has " +"original dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max width of preview thumbnail for images (video preview always has original " +"dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" +"The base URL to access a user-uploaded file. Useful when you want to proxy " +"the media files via another host/CDN fronts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "Enables proxying of remote media via the instance's proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "Enables media cache object invalidation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "Module which will be used to purge objects from the cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "Internal Pleroma.ReverseProxy settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" +"Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "Timeout (in milliseconds) of GET request to the remote URI." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" +"Redirects the client to the origin server upon encountering HTTP errors.\n" +"\n" +"Note that files larger than Max Body Length will trigger an error. (e.g., " +"Peertube videos)\n" +"\n" +"\n" +"**WARNING:** This setting will allow larger files to be accessed, but " +"exposes the\n" +"\n" +"IP addresses of your users to the other servers, bypassing the MediaProxy.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "List of hosts with scheme to bypass the MediaProxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "A path to custom Elixir modules (such as MRF policies)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" +"A list of MRF policies enabled. Module names are shortened (removed leading " +"`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" +"Make the content of your Message Rewrite Facility settings public (via " +"nodeinfo)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" +"Exclude specific instance names from MRF transparency. The use of the " +"exclusions feature will be disclosed in nodeinfo as a boolean value. You can " +"also provide a reason for excluding these instance names. The instances and " +"reasons won't be publicly disclosed." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "Default global expiration time for all local activities (in days)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" +"The name of the bot account to use for following newly discovered users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" +"A list of hashtags which result in message being removed from federated " +"timelines (a.k.a unlisted)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "A list of hashtags which result in message being rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" +"A list of hashtags which result in message being set as sensitive (a.k.a " +"NSFW/R-18)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the message gets removed from " +"timelines anddisables notifications. Set to 0 to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the messaged gets rejected. Set to 0 " +"to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being removed from federated " +"timelines (a.k.a unlisted).\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being rejected.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" +" **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " +"the format of `~r/PATTERN/`.\n" +"\n" +" **Replacement**: a string. Leaving the field empty is permitted.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "A list of actors for which any post mentioning them will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" +"A list of actions to apply to the post. `:delist` removes the post from " +"public timelines; `:strip_followers` removes followers from the ActivityPub " +"recipient list ensuring they won't be delivered to home timelines; `:reject` " +"rejects the message entirely" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "Required age (in seconds) of a post before actions are taken." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "Whether to allow direct messages" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "Whether to allow followers-only posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to only accept activities from (except deletes) and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "List of instances to strip avatars from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "List of instances to strip banners from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" +"List of instances to remove from the Federated (aka The Whole Known Network) " +"Timeline and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" +"Force posts from the given instances to be visible by followers only and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" +"List of instances to tag all media as NSFW (sensitive) from and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" +"List of instances to strip media attachments from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to reject activities from (except deletes) and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "List of instances to reject deletions from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "List of instances to reject reports from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "List of hosts to steal emojis from" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns or matches to reject shortcodes with.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" +"File size limit (in bytes), checked before an emoji is saved to the disk" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "Matches a series of regular expressions against the actor field" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" +"A list of ActivityStreams terms to accept. If empty, all supported messages " +"are accepted." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" +"A list of ActivityStreams terms to reject. If empty, no messages are " +"rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" +"Enable a background job to clean expired OAuth tokens. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" +"Keeps old refresh token or generate new refresh token when to obtain an " +"access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "The lifetime in seconds of the access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "Settings for default pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" +"Max accepted rate of objects that failed in the migration. Any value from " +"0.0 which tolerates no errors to 1.0 which will enable the feature even if " +"hashtags transfer failed for all records." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" +"Sleep interval between each chunk of processed records in order to decrease " +"the load on the system (defaults to 0 and should be keep default on most " +"instances)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "For registering user accounts from the same IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" +"For authentication create / password check / user existence check requests" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "For actions on relation with a specific user (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "For actions on relationships with all users (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "For the search requests (account & status search etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" +"For fav / unfav or reblog / unreblog actions on the same status by the same " +"user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" +"For create / delete / fav / unfav / reblog / unreblog actions on any statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "For requests to timelines (each timeline has it's own limiter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "Settings for user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "Settings for public and federated timelines." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "Enables RichMedia parsing of URLs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" +"Amount of milliseconds after request failure, during which the request will " +"not be retried." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "List of hosts which will be ignored by the metadata parser" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "List TLDs (top-level domains) which will ignore for parse metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" +"List of Rich Media parsers. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" +"List of rich media TTL setters. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "Enables the backend Shoutbox chat feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "Shout message character limit." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "Enables the rendering of static HTML. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "Maximum number of workers created if pool is empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "Number of workers to send notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "List of the scheme part that is considered valid to be an URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" +"Activity pub routes (except question activities). Default: `nil` (no " +"expiration)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" +"Activity pub routes (question activities). Default: `30_000` (30 seconds)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "Enables sending a chat message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "A message that will be sent to newly registered users as a chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "The nickname of the local user that sends a welcome chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "Enables sending a direct message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "A message that will be sent to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "The nickname of the local user that sends a welcome message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "Enables sending an email to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"HTML content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" +"Email address and/or nickname that will be used to send the welcome email." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Subject of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Text content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "Concurrent limits configuration for MediaProxyWarmingPolicy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "Concurrent limits configuration for getting RichMedia for activities." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "Settings for cron background jobs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "Logs verbose mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" +"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "Activity expiration queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "Attachment deletion queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "Background queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "Backup queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "Incoming federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "Outgoing federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "Email sender queue, see Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "Scheduled activities queue, see Pleroma.ScheduledActivities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "Transmogrifier queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "Web push notifications queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "Whether the captcha should be shown on registration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "The method/service to use for captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "The time in seconds for which the captcha is valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "The kocaptcha endpoint to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" +"One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" +"swoosh/Swoosh.html#module-adapters)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "SMTP AUTH enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "SMTP AUTH password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "SMTP port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "Hostname or IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "SMTP temporary (4xx) error retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "Use Implicit SSL/TLS. e.g. port 465" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "Explicit TLS (STARTTLS) enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "SMTP AUTH username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "Enables new users admin digest email when `true`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" +"A path to a custom logo. Set it to `nil` to use the default Pleroma logo." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "A map with color settings for email templates." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "Specify the class to be added to the generated link. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "Link URLs will open in a new window/tab." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "Override the rel attribute. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "Strip the scheme prefix." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" +"Set to a number to truncate URLs longer than the number. Truncated URLs will " +"end in `...`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" +"Set to false to disable TLD validation for URLs/emails. Can be set to :" +"no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " +"will be validated, but `http://example.loki` won't)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" +"The number of scheduled activities a user is allowed to create in a single " +"day. Default: 25." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "Whether scheduled activities are sent to the job queue to be executed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" +"The number of scheduled activities a user is allowed to create in total. " +"Default: 300." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" +"Base URL for the uploads. Required if you use a CDN or host attachments " +"under a different domain." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "Set max length of a filename to display. 0 = no limit. Default: 30" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" +"List of filter modules for uploads. Module names are shortened (removed " +"leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" +"If enabled, a name parameter will be added to the URL of the upload. For " +"example `https://instance.tld/media/imagehash.png?name=realname.png`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" +"Proxy requests to the remote uploader.\n" +"\n" +"Useful if media upload endpoint is not internet accessible.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "Module which will be used for uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" +"Text to replace filenames in links. If no setting, {random}.extension will " +"be used. You can get the original filename extension by using {extension}, " +"for example custom-file-name.{extension}." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" +"List of actions for the mogrify command. It's possible to add self-written " +"settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080" +">\"}` value will be parsed into valid list of the settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "Path where user's uploads will be saved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "S3 bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "S3 bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" +"Enable streaming uploads, when enabled the file will be sent to the server " +"in chunks as it's being read. This may be unsupported by some providers, try " +"disabling this if you have upload problems." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" +"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " +"folder name or \"\" etc. For example, when using CDN to S3 virtual host " +"format, set \"\". At this time, write CNAME to CDN in Upload base_url." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "List of email domains users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "List of nicknames users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "Limit user to export not more often than once per N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "Remove backup achives after N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" +"Enables strict input validation (useful in development, not recommended in " +"production)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "HTTP headers of request" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "HTTP method of request. Default: :purge" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "Request options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "Path to executable script which will purge cached items." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" +"Optional URL format preprocessing. Only required for Apache's htcacheclean." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "List of metadata providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "When enabled NSFW attachments will be shown in previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "Enable/disable the plug. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" +" A list of strings naming the HTTP headers to use when deriving the true " +"client IP. Default: `[\"x-forwarded-for\"]`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" +"A list of upstream proxy IP subnets in CIDR notation from which we will " +"parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " +"bitmask will be assumed to be /32 and IPv6 /128." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" +" A list of reserved IP subnets in CIDR notation which should be ignored if " +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\"" +", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "List of preload providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "Enables expired activities addition & deletion" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "Minimum lifetime for ephemeral activity (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "[Pleroma extension] Enables app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "App metrics endpoint output format." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "Restrict access of app metrics endpoint to the specified IP addresses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "App metrics endpoint URI path." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "Configure which metadata you want to report on" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "Configure the Slack incoming webhook" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "VAPID private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" +"A mailto link for the administrative contact. It's best if this email is not " +"a personal email address, but rather a group email to the instance " +"moderation team." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "Credentials" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "Expose" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "Max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "Methods" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "Handler" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "Password authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "Priv dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "Access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "Backends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "Ident" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "\"application/activity+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "\"application/jrd+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "\"application/ld+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "\"application/xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "\"application/xrd+xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "Pleroma.Web.Auth.Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "Blockers visible" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "Follow handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "Note replies output limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "Outgoing blocks" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "Sign object fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "Unfollow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "Default mascot" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "Default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "Mascots" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "Auth template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "Enforce OAuth admin scope usage" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "OAuth consumer strategies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "OAuth consumer template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "Connect timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "Connection acquisition retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "Connection acquisition wait" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "Reclaim multiplier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "Digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "Inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "Interval" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "Schedule" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "Default manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "Groups" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "Pack extensions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "Shared pack cache s/file" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "Shortcode globs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "Improved hashtag timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "Post title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "Max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "Omission" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "Always show subject input" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "Collapse message with subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "Greentext" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "Hide Filtered Statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "Hide Muted Posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "Hide post stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "Hide user stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "Logo margin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "Logo mask" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "Minimal scopes mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "NSFW Censor Image" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "Post Content Type" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "Redirect root login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "Redirect root no login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "Scope copy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "Show instance features panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "Sidebar on Right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "Subject line behavior" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "Theme" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "Admin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "Available" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "Build directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "Build URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "Custom HTTP headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "Git Repository URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "Primary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "Dstport" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "IP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "SSL Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "Versions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "Send user agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "User agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "CT max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "Referrer policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "Report URI" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "STS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "STS max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "Account activation required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "Account approval required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "Account field name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "Account field value length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "Allow relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "Allowed post formats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "Attachment links" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "Autofollowed nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "Autofollowing nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "Avatar upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "Background upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "Banner upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "Birthday min age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "Birthday required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "Cleanup attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "Description" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "Admin Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "Extended nickname format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "External user synchronization" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "Federating" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "Fed. incoming replies max depth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "Fed. reachability timeout days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "Healthcheck" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "Instance thumbnail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "Invites enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "Limit to local content" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "Max account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "Max endorsed users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "Max media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "Max pinned statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "Max remote account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "Max report comment size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "Multi factor authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "Backup codes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "Length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "Number" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "Digits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "Period" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "Sender Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "Poll limits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "Max expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "Max option chars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "Max options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "Min expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "Privileged staff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "Profile directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "Quarantined instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "Registration reason length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "Registrations open" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "Remote limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "Remote post retention days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "Safe DM mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "Show reactions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "Skip thread containment" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "Static dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "Upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "User bio length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "User name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "Base" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "TLS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "UID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "Icons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "Allow fonts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "Allow headings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "Allow inline images" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "Allow tables" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "Image quality" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "Min content length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "Thumbnail max height" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "Thumbnail max width" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "Invalidation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "Provider" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "Advanced MediaProxy Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "Max body length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "Max read duration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "Redirect on failure" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "Runtime dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "Policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "MRF transparency" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "MRF transparency exclusions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "Days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "Follower nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "Sensitive" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "Delist threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "Reject threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "Replace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "Actors" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "Actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "Threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "Allow direct" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "Allow followers-only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "Avatar removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "Banner removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "Followers only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "Media NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "Media removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "Reject deletes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "Report removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "Hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "Size limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "Match actor" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "Clean expired tokens" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "Issue new refresh token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "Token expires in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "Default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "Fault rate allowance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "Sleep interval ms" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "App account creation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "Authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "Relation ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "Relations actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "Status ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "Statuses actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "Timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "Profiles" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "Timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "Federated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "Failure backoff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "Ignore hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "Ignore TLD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "Parsers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "TTL setters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "Overflow workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "Valid schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "Deny follow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "Activity pub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "Activity pub question" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "Chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "Direct message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "Email" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "Html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "Sender" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "Pleroma.Web.RichMedia.Helpers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "Crontab" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "Log" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "Queues" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "Activity expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "Attachments cleanup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "Federator incoming" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "Federator outgoing" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "Scheduled activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "Transmogrifier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "Web push" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "Seconds valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "Mailer Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "AWS Access Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "AWS Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "AWS Secret Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "Dyn API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "GMail API Access Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "Mailgun API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "Domain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "MailJet Public API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "MailJet Private API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "Mandrill API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "Postmark API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "AUTH Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "Relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "Use SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "STARTTLS Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "SendGrid API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "Cmd path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "Qmail compat mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "SocketLabs API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "Server ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "SparkPost API key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "Styling" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "Content background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "Header color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "Link color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "Text color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "Text muted color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "Class" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "Extra" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "New window" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "Rel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "Strip prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "Truncate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "Validate tld" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "Daily user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "Total user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "Filename display max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "Filters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "Link name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "Proxy remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "Uploader" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "Args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "Uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "Bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "Bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "Truncated namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "Email blacklist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "Restricted nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "Limit days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "Purge after days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "Params" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "Script path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "URL Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "Unfurl NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "Proxies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "Reserved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "Min lifetime" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "IP Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "Path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "Meta" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "Webhook URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "Public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures for AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :short_description" +msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgstr "" +"Shorter version of instance description. It can be seen on `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "Authorized fetch mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :short_description" +msgid "Short description" +msgstr "Short description" diff --git a/priv/gettext/ca/LC_MESSAGES/errors.po b/priv/gettext/ca/LC_MESSAGES/errors.po new file mode 100644 index 000000000..0fde4784e --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/errors.po @@ -0,0 +1,624 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-29 11:37+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.1\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +## From Ecto.Changeset.cast/4 +msgid "can't be blank" +msgstr "" + +## From Ecto.Changeset.unique_constraint/3 +msgid "has already been taken" +msgstr "" + +## From Ecto.Changeset.put_change/3 +msgid "is invalid" +msgstr "" + +## From Ecto.Changeset.validate_format/3 +msgid "has invalid format" +msgstr "" + +## From Ecto.Changeset.validate_subset/3 +msgid "has an invalid entry" +msgstr "" + +## From Ecto.Changeset.validate_exclusion/3 +msgid "is reserved" +msgstr "" + +## From Ecto.Changeset.validate_confirmation/3 +msgid "does not match confirmation" +msgstr "" + +## From Ecto.Changeset.no_assoc_constraint/3 +msgid "is still associated with this entry" +msgstr "" + +msgid "are still associated with this entry" +msgstr "" + +## From Ecto.Changeset.validate_length/3 +msgid "should be %{count} character(s)" +msgid_plural "should be %{count} character(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should have %{count} item(s)" +msgid_plural "should have %{count} item(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should be at least %{count} character(s)" +msgid_plural "should be at least %{count} character(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should have at least %{count} item(s)" +msgid_plural "should have at least %{count} item(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should be at most %{count} character(s)" +msgid_plural "should be at most %{count} character(s)" +msgstr[0] "" +msgstr[1] "" + +msgid "should have at most %{count} item(s)" +msgid_plural "should have at most %{count} item(s)" +msgstr[0] "" +msgstr[1] "" + +## From Ecto.Changeset.validate_number/3 +msgid "must be less than %{number}" +msgstr "" + +msgid "must be greater than %{number}" +msgstr "" + +msgid "must be less than or equal to %{number}" +msgstr "" + +msgid "must be greater than or equal to %{number}" +msgstr "" + +msgid "must be equal to %{number}" +msgstr "" + +#: lib/pleroma/web/common_api.ex:523 +#, elixir-autogen, elixir-format +msgid "Account not found" +msgstr "" + +#: lib/pleroma/web/common_api.ex:316 +#, elixir-autogen, elixir-format +msgid "Already voted" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:402 +#, elixir-autogen, elixir-format +msgid "Bad request" +msgstr "" + +#: lib/pleroma/web/controller_helper.ex:97 +#: lib/pleroma/web/controller_helper.ex:103 +#, elixir-autogen, elixir-format +msgid "Can't display this activity" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:325 +#, elixir-autogen, elixir-format +msgid "Can't find user" +msgstr "" + +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 +#, elixir-autogen, elixir-format +msgid "Can't get favorites" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:482 +#, elixir-autogen, elixir-format +msgid "Cannot post an empty status without attachments" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:441 +#, elixir-autogen, elixir-format +msgid "Comment must be up to %{max_size} characters" +msgstr "" + +#: lib/pleroma/config_db.ex:200 +#, elixir-autogen, elixir-format +msgid "Config with params %{params} not found" +msgstr "" + +#: lib/pleroma/web/common_api.ex:167 +#: lib/pleroma/web/common_api.ex:171 +#, elixir-autogen, elixir-format +msgid "Could not delete" +msgstr "" + +#: lib/pleroma/web/common_api.ex:217 +#, elixir-autogen, elixir-format +msgid "Could not favorite" +msgstr "" + +#: lib/pleroma/web/common_api.ex:254 +#, elixir-autogen, elixir-format +msgid "Could not unfavorite" +msgstr "" + +#: lib/pleroma/web/common_api.ex:202 +#, elixir-autogen, elixir-format +msgid "Could not unrepeat" +msgstr "" + +#: lib/pleroma/web/common_api.ex:530 +#: lib/pleroma/web/common_api.ex:539 +#, elixir-autogen, elixir-format +msgid "Could not update state" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 +#, elixir-autogen, elixir-format +msgid "Error." +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:105 +#, elixir-autogen, elixir-format +msgid "Invalid CAPTCHA" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:631 +#, elixir-autogen, elixir-format +msgid "Invalid credentials" +msgstr "" + +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 +#, elixir-autogen, elixir-format +msgid "Invalid credentials." +msgstr "" + +#: lib/pleroma/web/common_api.ex:337 +#, elixir-autogen, elixir-format +msgid "Invalid indices" +msgstr "" + +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 +#, elixir-autogen, elixir-format +msgid "Invalid parameters" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:349 +#, elixir-autogen, elixir-format +msgid "Invalid password." +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 +#, elixir-autogen, elixir-format +msgid "Invalid request" +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:108 +#, elixir-autogen, elixir-format +msgid "Kocaptcha service unavailable" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 +#, elixir-autogen, elixir-format +msgid "Missing parameters" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:477 +#, elixir-autogen, elixir-format +msgid "No such conversation" +msgstr "" + +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 +#, elixir-autogen, elixir-format +msgid "No such permission_group" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:515 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 +#: lib/pleroma/web/feed/tag_controller.ex:16 +#: lib/pleroma/web/feed/user_controller.ex:69 +#: lib/pleroma/web/o_status/o_status_controller.ex:132 +#: lib/pleroma/web/plugs/uploaded_media.ex:84 +#, elixir-autogen, elixir-format +msgid "Not found" +msgstr "" + +#: lib/pleroma/web/common_api.ex:308 +#, elixir-autogen, elixir-format +msgid "Poll's author can't vote" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 +#, elixir-autogen, elixir-format +msgid "Record not found" +msgstr "" + +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 +#: lib/pleroma/web/feed/user_controller.ex:78 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 +#: lib/pleroma/web/o_status/o_status_controller.ex:138 +#, elixir-autogen, elixir-format +msgid "Something went wrong" +msgstr "" + +#: lib/pleroma/web/common_api/activity_draft.ex:143 +#, elixir-autogen, elixir-format +msgid "The message visibility must be direct" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:492 +#, elixir-autogen, elixir-format +msgid "The status is over the character limit" +msgstr "" + +#: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 +#, elixir-autogen, elixir-format +msgid "This resource requires authentication." +msgstr "" + +#: lib/pleroma/web/plugs/rate_limiter.ex:208 +#, elixir-autogen, elixir-format +msgid "Throttled" +msgstr "" + +#: lib/pleroma/web/common_api.ex:338 +#, elixir-autogen, elixir-format +msgid "Too many choices" +msgstr "" + +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 +#, elixir-autogen, elixir-format +msgid "You can't revoke your own admin status." +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:243 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:333 +#, elixir-autogen, elixir-format +msgid "Your account is currently disabled" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:205 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:356 +#, elixir-autogen, elixir-format +msgid "Your login is missing a confirmed e-mail address" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:403 +#, elixir-autogen, elixir-format +msgid "can't read inbox of %{nickname} as %{as_nickname}" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 +#, elixir-autogen, elixir-format +msgid "can't update outbox of %{nickname} as %{as_nickname}" +msgstr "" + +#: lib/pleroma/web/common_api.ex:475 +#, elixir-autogen, elixir-format +msgid "conversation is already muted" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:521 +#, elixir-autogen, elixir-format +msgid "error" +msgstr "" + +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 +#, elixir-autogen, elixir-format +msgid "mascots can only be images" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 +#, elixir-autogen, elixir-format +msgid "not found" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:437 +#, elixir-autogen, elixir-format +msgid "Bad OAuth request." +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:114 +#, elixir-autogen, elixir-format +msgid "CAPTCHA already used" +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:111 +#, elixir-autogen, elixir-format +msgid "CAPTCHA expired" +msgstr "" + +#: lib/pleroma/web/plugs/uploaded_media.ex:57 +#, elixir-autogen, elixir-format +msgid "Failed" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:453 +#, elixir-autogen, elixir-format +msgid "Failed to authenticate: %{message}." +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:484 +#, elixir-autogen, elixir-format +msgid "Failed to set up user account." +msgstr "" + +#: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 +#, elixir-autogen, elixir-format +msgid "Insufficient permissions: %{permissions}." +msgstr "" + +#: lib/pleroma/web/plugs/uploaded_media.ex:111 +#, elixir-autogen, elixir-format +msgid "Internal Error" +msgstr "" + +#: lib/pleroma/web/o_auth/fallback_controller.ex:22 +#: lib/pleroma/web/o_auth/fallback_controller.ex:29 +#, elixir-autogen, elixir-format +msgid "Invalid Username/Password" +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:117 +#, elixir-autogen, elixir-format +msgid "Invalid answer data" +msgstr "" + +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 +#, elixir-autogen, elixir-format +msgid "Nodeinfo schema version not handled" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:194 +#, elixir-autogen, elixir-format +msgid "This action is outside the authorized scopes" +msgstr "" + +#: lib/pleroma/web/o_auth/fallback_controller.ex:14 +#, elixir-autogen, elixir-format +msgid "Unknown error, please check the details and try again." +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:136 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:180 +#, elixir-autogen, elixir-format +msgid "Unlisted redirect_uri." +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:433 +#, elixir-autogen, elixir-format +msgid "Unsupported OAuth provider: %{provider}." +msgstr "" + +#: lib/pleroma/uploaders/uploader.ex:74 +#, elixir-autogen, elixir-format +msgid "Uploader callback timeout" +msgstr "" + +#: lib/pleroma/web/uploader_controller.ex:23 +#, elixir-autogen, elixir-format +msgid "bad request" +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:102 +#, elixir-autogen, elixir-format +msgid "CAPTCHA Error" +msgstr "" + +#: lib/pleroma/web/common_api.ex:266 +#, elixir-autogen, elixir-format +msgid "Could not add reaction emoji" +msgstr "" + +#: lib/pleroma/web/common_api.ex:277 +#, elixir-autogen, elixir-format +msgid "Could not remove reaction emoji" +msgstr "" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:128 +#, elixir-autogen, elixir-format +msgid "Invalid CAPTCHA (Missing parameter: %{name})" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 +#, elixir-autogen, elixir-format +msgid "List not found" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 +#, elixir-autogen, elixir-format +msgid "Missing parameter: %{name}" +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:232 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:346 +#, elixir-autogen, elixir-format +msgid "Password reset is required" +msgstr "" + +#: lib/pleroma/tests/auth_test_controller.ex:9 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 +#: lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback/redirect_controller.ex:6 +#: lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 +#: lib/pleroma/web/mailer/subscription_controller.ex:6 +#: lib/pleroma/web/manifest_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 +#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 +#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 +#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 +#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/o_auth/fallback_controller.ex:6 +#: lib/pleroma/web/o_auth/mfa_controller.ex:10 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 +#: lib/pleroma/web/o_status/o_status_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 +#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 +#: lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 +#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 +#: lib/pleroma/web/twitter_api/controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 +#: lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 +#: lib/pleroma/web/uploader_controller.ex:6 +#: lib/pleroma/web/web_finger/web_finger_controller.ex:6 +#, elixir-autogen, elixir-format +msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." +msgstr "" + +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 +#, elixir-autogen, elixir-format +msgid "Two-factor authentication enabled, you must use a access token." +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 +#, elixir-autogen, elixir-format +msgid "Web push subscription is disabled on this Pleroma instance" +msgstr "" + +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 +#, elixir-autogen, elixir-format +msgid "You can't revoke your own admin/moderator status." +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 +#, elixir-autogen, elixir-format +msgid "authorization required for timeline view" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 +#, elixir-autogen, elixir-format +msgid "Access denied" +msgstr "" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:322 +#, elixir-autogen, elixir-format +msgid "This API requires an authenticated user" +msgstr "" + +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 +#: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 +#, elixir-autogen, elixir-format +msgid "User is not an admin." +msgstr "" + +#: lib/pleroma/user/backup.ex:75 +#, elixir-format +msgid "Last export was less than a day ago" +msgid_plural "Last export was less than %{days} days ago" +msgstr[0] "" +msgstr[1] "" + +#: lib/pleroma/user/backup.ex:93 +#, elixir-autogen, elixir-format +msgid "Backups require enabled email" +msgstr "" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:434 +#, elixir-autogen, elixir-format +msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" +msgstr "" + +#: lib/pleroma/user/backup.ex:98 +#, elixir-autogen, elixir-format +msgid "Email is required" +msgstr "" + +#: lib/pleroma/web/common_api/utils.ex:507 +#, elixir-autogen, elixir-format +msgid "Too many attachments" +msgstr "" + +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 +#: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 +#, elixir-autogen, elixir-format +msgid "User is not a staff member." +msgstr "" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:366 +#, elixir-autogen, elixir-format +msgid "Your account is awaiting approval." +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/posix_errors.po b/priv/gettext/ca/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..cd723f0f5 --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/posix_errors.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-28 09:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.1\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +msgid "eperm" +msgstr "" + +msgid "eacces" +msgstr "" + +msgid "eagain" +msgstr "" + +msgid "ebadf" +msgstr "" + +msgid "ebadmsg" +msgstr "" + +msgid "ebusy" +msgstr "" + +msgid "edeadlk" +msgstr "" + +msgid "edeadlock" +msgstr "" + +msgid "edquot" +msgstr "" + +msgid "eexist" +msgstr "" + +msgid "efault" +msgstr "" + +msgid "efbig" +msgstr "" + +msgid "eftype" +msgstr "" + +msgid "eintr" +msgstr "" + +msgid "einval" +msgstr "" + +msgid "eio" +msgstr "" + +msgid "eisdir" +msgstr "" + +msgid "eloop" +msgstr "" + +msgid "emfile" +msgstr "" + +msgid "emlink" +msgstr "" + +msgid "emultihop" +msgstr "" + +msgid "enametoolong" +msgstr "" + +msgid "enfile" +msgstr "" + +msgid "enobufs" +msgstr "" + +msgid "enodev" +msgstr "" + +msgid "enolck" +msgstr "" + +msgid "enolink" +msgstr "" + +msgid "enoent" +msgstr "" + +msgid "enomem" +msgstr "" + +msgid "enospc" +msgstr "" + +msgid "enosr" +msgstr "" + +msgid "enostr" +msgstr "" + +msgid "enosys" +msgstr "" + +msgid "enotblk" +msgstr "" + +msgid "enotdir" +msgstr "" + +msgid "enotsup" +msgstr "" + +msgid "enxio" +msgstr "" + +msgid "eopnotsupp" +msgstr "" + +msgid "eoverflow" +msgstr "" + +msgid "epipe" +msgstr "" + +msgid "erange" +msgstr "" + +msgid "erofs" +msgstr "" + +msgid "espipe" +msgstr "" + +msgid "esrch" +msgstr "" + +msgid "estale" +msgstr "" + +msgid "etxtbsy" +msgstr "" + +msgid "exdev" +msgstr "" diff --git a/priv/gettext/ca/LC_MESSAGES/static_pages.po b/priv/gettext/ca/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..6f37874ca --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/static_pages.po @@ -0,0 +1,525 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-28 09:15+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error following account" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "password reset button" +msgid "Reset" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "" + +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-autogen, elixir-format +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +#, elixir-autogen, elixir-format +msgctxt "oauth login button" +msgid "Log In" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +#, elixir-autogen, elixir-format +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +#, elixir-autogen, elixir-format +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-autogen, elixir-format +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-autogen, elixir-format +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-autogen, elixir-format +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-autogen, elixir-format +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "" + +#: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "" +msgstr[1] "" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:384 +#, elixir-autogen, elixir-format +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:188 +#, elixir-autogen, elixir-format +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:202 +#, elixir-autogen, elixir-format +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:158 +#, elixir-autogen, elixir-format +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:174 +#, elixir-autogen, elixir-format +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:310 +#, elixir-autogen, elixir-format +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:81 +#, elixir-autogen, elixir-format +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:98 +#, elixir-autogen, elixir-format +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:215 +#, elixir-autogen, elixir-format +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:231 +#, elixir-autogen, elixir-format +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-autogen, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:136 +#, elixir-autogen, elixir-format +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:53 +#, elixir-autogen, elixir-format +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:41 +#, elixir-autogen, elixir-format +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:65 +#, elixir-autogen, elixir-format +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "" + +#: lib/pleroma/emails/user_email.ex:368 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" From 2033d7d4fc35f701440505f53502e57c8c55d6c1 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 29 Jul 2022 19:50:26 +0100 Subject: [PATCH 42/82] ensure extra info in fix_follow_state prints --- lib/mix/tasks/pleroma/user.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/mix/tasks/pleroma/user.ex b/lib/mix/tasks/pleroma/user.ex index 8972d4cfb..d2d416655 100644 --- a/lib/mix/tasks/pleroma/user.ex +++ b/lib/mix/tasks/pleroma/user.ex @@ -496,12 +496,12 @@ def run(["fix_follow_state", local_user, remote_user]) do {:follow_data, Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(local, remote)} do calculated_state = User.following?(local, remote) - shell_info( + IO.puts( "Request state is #{request_state}, vs calculated state of following=#{calculated_state}" ) if calculated_state == false && request_state == "accept" do - shell_info("Discrepancy found, fixing") + IO.puts("Discrepancy found, fixing") Pleroma.Web.CommonAPI.reject_follow_request(local, remote) shell_info("Relationship fixed") else From 38659e5610ecd1057bf38d9349903a6cdd775f49 Mon Sep 17 00:00:00 2001 From: Yukkuri Date: Sat, 30 Jul 2022 21:58:14 +0000 Subject: [PATCH 43/82] Use uppercase HTTP HEAD method for media preview proxy request (#128) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/128 Co-authored-by: Yukkuri Co-committed-by: Yukkuri --- .../web/media_proxy/media_proxy_controller.ex | 2 +- .../media_proxy_controller_test.exs | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/pleroma/web/media_proxy/media_proxy_controller.ex b/lib/pleroma/web/media_proxy/media_proxy_controller.ex index b3a92d75a..84e07132a 100644 --- a/lib/pleroma/web/media_proxy/media_proxy_controller.ex +++ b/lib/pleroma/web/media_proxy/media_proxy_controller.ex @@ -54,7 +54,7 @@ defp handle_preview(conn, url) do media_proxy_url = MediaProxy.url(url) with {:ok, %{status: status} = head_response} when status in 200..299 <- - Pleroma.HTTP.request("head", media_proxy_url, [], [], name: MyFinch) do + Pleroma.HTTP.request("HEAD", media_proxy_url, [], [], name: MyFinch) do content_type = Tesla.get_header(head_response, "content-type") content_length = Tesla.get_header(head_response, "content-length") content_length = content_length && String.to_integer(content_length) diff --git a/test/pleroma/web/media_proxy/media_proxy_controller_test.exs b/test/pleroma/web/media_proxy/media_proxy_controller_test.exs index 1f2e54194..e4b66c109 100644 --- a/test/pleroma/web/media_proxy/media_proxy_controller_test.exs +++ b/test/pleroma/web/media_proxy/media_proxy_controller_test.exs @@ -158,7 +158,7 @@ test "responds with 424 Failed Dependency if HEAD request to media proxy fails", media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 500, body: ""} end) @@ -173,7 +173,7 @@ test "redirects to media proxy URI on unsupported content type", %{ media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "application/pdf"}]} end) @@ -193,7 +193,7 @@ test "with `static=true` and GIF image preview requested, responds with JPEG ima clear_config([:media_preview_proxy, :min_content_length], 1_000_000_000) Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{ status: 200, body: "", @@ -218,7 +218,7 @@ test "with GIF image preview requested and no `static` param, redirects to media media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/gif"}]} end) @@ -236,7 +236,7 @@ test "with `static` param and non-GIF image preview requested, " <> media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} end) @@ -256,7 +256,7 @@ test "with :min_content_length setting not matched by Content-Length header, " < clear_config([:media_preview_proxy, :min_content_length], 100_000) Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{ status: 200, body: "", @@ -278,7 +278,7 @@ test "thumbnails PNG images into PNG", %{ assert_dependencies_installed() Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/png"}]} %{method: :get, url: ^media_proxy_url} -> @@ -300,7 +300,7 @@ test "thumbnails JPEG images into JPEG", %{ assert_dependencies_installed() Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} %{method: :get, url: ^media_proxy_url} -> @@ -320,7 +320,7 @@ test "redirects to media proxy URI in case of thumbnailing error", %{ media_proxy_url: media_proxy_url } do Tesla.Mock.mock(fn - %{method: "head", url: ^media_proxy_url} -> + %{method: "HEAD", url: ^media_proxy_url} -> %Tesla.Env{status: 200, body: "", headers: [{"content-type", "image/jpeg"}]} %{method: :get, url: ^media_proxy_url} -> From 19a27ff006b7a61186b5153513ca7c90a16cc3bc Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 1 Aug 2022 12:46:52 +0000 Subject: [PATCH 44/82] allow small/center tags in misskeymarkdown (#132) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/132 --- lib/pleroma/formatter.ex | 7 ++++++- lib/pleroma/web/common_api/utils.ex | 12 ++++++++++-- priv/scrubbers/default.ex | 3 +++ .../article_note_page_validator_test.exs | 9 ++++++--- 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/formatter.ex b/lib/pleroma/formatter.ex index ad29d21d7..575bf9b2d 100644 --- a/lib/pleroma/formatter.ex +++ b/lib/pleroma/formatter.ex @@ -136,7 +136,12 @@ def html_escape(text, "text/html") do HTML.filter_tags(text) end - def html_escape(text, format) when format in ["text/plain", "text/x.misskeymarkdown"] do + def html_escape(text, "text/x.misskeymarkdown") do + text + |> HTML.filter_tags() + end + + def html_escape(text, "text/plain") do Regex.split(@link_regex, text, include_captures: true) |> Enum.map_every(2, fn chunk -> {:safe, part} = Phoenix.HTML.html_escape(chunk) diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index f5bc3acf5..826160a23 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -259,8 +259,7 @@ def format_input(text, format, options \\ []) @doc """ Formatting text to plain text, BBCode, HTML, or Markdown """ - def format_input(text, format, options) - when format in ["text/plain", "text/x.misskeymarkdown"] do + def format_input(text, "text/plain", options) do text |> Formatter.html_escape("text/plain") |> Formatter.linkify(options) @@ -284,6 +283,15 @@ def format_input(text, "text/html", options) do |> Formatter.linkify(options) end + def format_input(text, "text/x.misskeymarkdown", options) do + text + |> Formatter.linkify(options) + |> Formatter.html_escape("text/x.misskeymarkdown") + |> (fn {text, mentions, tags} -> + {String.replace(text, ~r/\r?\n/, "
"), mentions, tags} + end).() + end + def format_input(text, "text/markdown", options) do text |> Formatter.mentions_escape(options) diff --git a/priv/scrubbers/default.ex b/priv/scrubbers/default.ex index 4694a92a5..478cbde9b 100644 --- a/priv/scrubbers/default.ex +++ b/priv/scrubbers/default.ex @@ -97,5 +97,8 @@ defmodule Pleroma.HTML.Scrubber.Default do Meta.allow_tag_with_these_attributes(:font, ["face"]) end + Meta.allow_tag_with_these_attributes(:center, []) + Meta.allow_tag_with_these_attributes(:small, []) + Meta.strip_everything_not_covered() end diff --git a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs index 8b3982916..09cd1a964 100644 --- a/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs +++ b/test/pleroma/web/activity_pub/object_validators/article_note_page_validator_test.exs @@ -130,18 +130,21 @@ test "a misskey MFM status with a _misskey_content field should work and be link |> Jason.decode!() expected_content = - "@akkoma_user linkifylink #dancedance $[jelly mfm goes here]

## aaa" + "@akkoma_user linkifylink #dancedance $[jelly mfm goes here]

## aaa" + + changes = ArticleNotePageValidator.cast_and_validate(note) %{ valid?: true, changes: %{ - content: ^expected_content, source: %{ "content" => "@akkoma_user linkifylink #dancedance $[jelly mfm goes here] \n\n## aaa", "mediaType" => "text/x.misskeymarkdown" } } - } = ArticleNotePageValidator.cast_and_validate(note) + } = changes + + assert changes.changes[:content] == expected_content end end end From dbb80c79d5ba5cc337998226ccafd52daf692593 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 30 Jul 2022 21:58:21 +0000 Subject: [PATCH 45/82] Translated using Weblate (Catalan) Currently translated at 100.0% (103 of 103 strings) Translated using Weblate (Catalan) Currently translated at 0.3% (4 of 1002 strings) Translated using Weblate (Catalan) Currently translated at 100.0% (83 of 83 strings) Translated using Weblate (Catalan) Currently translated at 13.5% (14 of 103 strings) Added translation using Weblate (Catalan) Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Merge branch 'origin/develop' into Weblate. Translated using Weblate (Catalan) Currently translated at 100.0% (0 of 0 strings) Added translation using Weblate (Catalan) Added translation using Weblate (Catalan) Added translation using Weblate (Catalan) Co-authored-by: Anonymous Co-authored-by: Weblate Co-authored-by: sola Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/ca/ Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-errors/ca/ Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ca/ Translation: Pleroma fe/Akkoma Backend (Config Descriptions) Translation: Pleroma fe/Akkoma Backend (Errors) Translation: Pleroma fe/Akkoma Backend (Static pages) --- .../ca/LC_MESSAGES/config_descriptions.po | 20 +- priv/gettext/ca/LC_MESSAGES/errors.po | 631 ++++++++++++++++++ priv/gettext/ca/LC_MESSAGES/static_pages.po | 192 +++--- 3 files changed, 758 insertions(+), 85 deletions(-) create mode 100644 priv/gettext/ca/LC_MESSAGES/errors.po diff --git a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po index bdb997f1a..789ff54d0 100644 --- a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po +++ b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po @@ -3,8 +3,8 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-28 09:35+0000\n" -"PO-Revision-Date: 2022-07-28 09:36+0000\n" -"Last-Translator: Anonymous \n" +"PO-Revision-Date: 2022-07-30 21:58+0000\n" +"Last-Translator: sola \n" "Language-Team: Catalan \n" "Language: ca\n" @@ -33,16 +33,16 @@ msgstr "" "m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :logger" msgid "Logger-related settings" -msgstr "Logger-related settings" +msgstr "Configuració relacionada amb el registrador(Log)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :mime" msgid "Mime Types settings" -msgstr "Mime Types settings" +msgstr "Configuració de tipus Mime" #: lib/pleroma/docs/translator.ex:5 #, elixir-autogen, elixir-format, fuzzy @@ -55,16 +55,16 @@ msgstr "" "Auth or OAuth-based authentication if possible)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :pleroma" msgid "Authenticator" -msgstr "Authenticator" +msgstr "Autenticador" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, elixir-autogen, elixir-format msgctxt "config description at :quack" msgid "Quack-related settings" -msgstr "Quack-related settings" +msgstr "Configuració relacionada amb Quack" #: lib/pleroma/docs/translator.ex:5 #, elixir-autogen, elixir-format, fuzzy diff --git a/priv/gettext/ca/LC_MESSAGES/errors.po b/priv/gettext/ca/LC_MESSAGES/errors.po new file mode 100644 index 000000000..e1dd11cc7 --- /dev/null +++ b/priv/gettext/ca/LC_MESSAGES/errors.po @@ -0,0 +1,631 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-07-29 11:37+0000\n" +"PO-Revision-Date: 2022-07-30 21:58+0000\n" +"Last-Translator: sola \n" +"Language-Team: Catalan \n" +"Language: ca\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +## From Ecto.Changeset.cast/4 +msgid "can't be blank" +msgstr "No pot estar en blanc" + +## From Ecto.Changeset.unique_constraint/3 +msgid "has already been taken" +msgstr "ja s'ha agafat" + +## From Ecto.Changeset.put_change/3 +msgid "is invalid" +msgstr "és invàlid" + +## From Ecto.Changeset.validate_format/3 +msgid "has invalid format" +msgstr "té format invàlid" + +## From Ecto.Changeset.validate_subset/3 +msgid "has an invalid entry" +msgstr "té una entrada no vàlida" + +## From Ecto.Changeset.validate_exclusion/3 +msgid "is reserved" +msgstr "està reservat" + +## From Ecto.Changeset.validate_confirmation/3 +msgid "does not match confirmation" +msgstr "no coincideix amb la confirmació" + +## From Ecto.Changeset.no_assoc_constraint/3 +msgid "is still associated with this entry" +msgstr "està encara associat amb aquesta entrada" + +msgid "are still associated with this entry" +msgstr "estan encara associats amb aquesta entrada" + +## From Ecto.Changeset.validate_length/3 +msgid "should be %{count} character(s)" +msgid_plural "should be %{count} character(s)" +msgstr[0] "hauria de ser %{count} caràcter" +msgstr[1] "hauria de ser %{count} caràcters" + +msgid "should have %{count} item(s)" +msgid_plural "should have %{count} item(s)" +msgstr[0] "hauria de tenir %{count} article" +msgstr[1] "hauria de tenir %{count} articles" + +msgid "should be at least %{count} character(s)" +msgid_plural "should be at least %{count} character(s)" +msgstr[0] "hauria de ser al menys %{count} caràcter" +msgstr[1] "hauria de ser al menys %{count} caràcters" + +msgid "should have at least %{count} item(s)" +msgid_plural "should have at least %{count} item(s)" +msgstr[0] "hauria de tenir al menys %{count} article" +msgstr[1] "hauria de tenir al menys %{count} articles" + +msgid "should be at most %{count} character(s)" +msgid_plural "should be at most %{count} character(s)" +msgstr[0] "hauria de ser com a molt %{count} caràcter" +msgstr[1] "hauria de ser com a molt %{count} caràcters" + +msgid "should have at most %{count} item(s)" +msgid_plural "should have at most %{count} item(s)" +msgstr[0] "com a molt hauria de ser %{count} article" +msgstr[1] "com a molt haurien de ser %{count} articles" + +## From Ecto.Changeset.validate_number/3 +msgid "must be less than %{number}" +msgstr "ha de ser menor que %{number}" + +msgid "must be greater than %{number}" +msgstr "ha de ser major que %{number}" + +msgid "must be less than or equal to %{number}" +msgstr "ha de ser menor o igual a %{number}" + +msgid "must be greater than or equal to %{number}" +msgstr "ha de ser més gran o igual a %{number}" + +msgid "must be equal to %{number}" +msgstr "ha de ser igual a %{number}" + +#: lib/pleroma/web/common_api.ex:523 +#, elixir-autogen, elixir-format +msgid "Account not found" +msgstr "Compte no trobat" + +#: lib/pleroma/web/common_api.ex:316 +#, elixir-autogen, elixir-format +msgid "Already voted" +msgstr "Ja votada" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:402 +#, elixir-autogen, elixir-format +msgid "Bad request" +msgstr "Mala Sol·licitud" + +#: lib/pleroma/web/controller_helper.ex:97 +#: lib/pleroma/web/controller_helper.ex:103 +#, elixir-autogen, elixir-format +msgid "Can't display this activity" +msgstr "No es pot mostrar aquesta activitat" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:325 +#, elixir-autogen, elixir-format +msgid "Can't find user" +msgstr "No es pot trobar l'usuari" + +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:80 +#, elixir-autogen, elixir-format +msgid "Can't get favorites" +msgstr "No es poden obtenir els favorits" + +#: lib/pleroma/web/common_api/utils.ex:482 +#, elixir-autogen, elixir-format +msgid "Cannot post an empty status without attachments" +msgstr "No es pot publicar un apunt buit sense adjunts" + +#: lib/pleroma/web/common_api/utils.ex:441 +#, elixir-autogen, elixir-format +msgid "Comment must be up to %{max_size} characters" +msgstr "El comentari ha de ser fins a %{max_size} caràcters" + +#: lib/pleroma/config_db.ex:200 +#, elixir-autogen, elixir-format +msgid "Config with params %{params} not found" +msgstr "Configuració amb paràmetres %{params} no trobada" + +#: lib/pleroma/web/common_api.ex:167 +#: lib/pleroma/web/common_api.ex:171 +#, elixir-autogen, elixir-format +msgid "Could not delete" +msgstr "No es pot esborrar" + +#: lib/pleroma/web/common_api.ex:217 +#, elixir-autogen, elixir-format +msgid "Could not favorite" +msgstr "No es pot afavorir" + +#: lib/pleroma/web/common_api.ex:254 +#, elixir-autogen, elixir-format +msgid "Could not unfavorite" +msgstr "No es pot desfer el favorit" + +#: lib/pleroma/web/common_api.ex:202 +#, elixir-autogen, elixir-format +msgid "Could not unrepeat" +msgstr "No es pot desfer la repetició" + +#: lib/pleroma/web/common_api.ex:530 +#: lib/pleroma/web/common_api.ex:539 +#, elixir-autogen, elixir-format +msgid "Could not update state" +msgstr "No es pot actualitzar l'apunt" + +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:205 +#, elixir-autogen, elixir-format +msgid "Error." +msgstr "Error." + +#: lib/pleroma/web/twitter_api/twitter_api.ex:105 +#, elixir-autogen, elixir-format +msgid "Invalid CAPTCHA" +msgstr "CAPTCHA invàlid" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:144 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:631 +#, elixir-autogen, elixir-format +msgid "Invalid credentials" +msgstr "Credencials invàlides" + +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:42 +#, elixir-autogen, elixir-format +msgid "Invalid credentials." +msgstr "Credencials invàlides." + +#: lib/pleroma/web/common_api.ex:337 +#, elixir-autogen, elixir-format +msgid "Invalid indices" +msgstr "Index invàlids" + +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:29 +#, elixir-autogen, elixir-format +msgid "Invalid parameters" +msgstr "Paràmetres invàlids" + +#: lib/pleroma/web/common_api/utils.ex:349 +#, elixir-autogen, elixir-format +msgid "Invalid password." +msgstr "Contrasenya invàlida." + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:255 +#, elixir-autogen, elixir-format +msgid "Invalid request" +msgstr "Sol·licitud invàlida" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:108 +#, elixir-autogen, elixir-format +msgid "Kocaptcha service unavailable" +msgstr "Servei Kocaptcha no disponible" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:140 +#, elixir-autogen, elixir-format +msgid "Missing parameters" +msgstr "Falten paràmetres" + +#: lib/pleroma/web/common_api/utils.ex:477 +#, elixir-autogen, elixir-format +msgid "No such conversation" +msgstr "No hi ha tal conversa" + +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:171 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:197 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:239 +#, elixir-autogen, elixir-format +msgid "No such permission_group" +msgstr "No existeix permission_group" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:515 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:11 +#: lib/pleroma/web/feed/tag_controller.ex:16 +#: lib/pleroma/web/feed/user_controller.ex:69 +#: lib/pleroma/web/o_status/o_status_controller.ex:132 +#: lib/pleroma/web/plugs/uploaded_media.ex:84 +#, elixir-autogen, elixir-format +msgid "Not found" +msgstr "No trobat" + +#: lib/pleroma/web/common_api.ex:308 +#, elixir-autogen, elixir-format +msgid "Poll's author can't vote" +msgstr "L'autor de l'enquesta no pot votar-hi" + +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:39 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:51 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:52 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:326 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 +#, elixir-autogen, elixir-format +msgid "Record not found" +msgstr "Registre no trobat" + +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:35 +#: lib/pleroma/web/feed/user_controller.ex:78 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:42 +#: lib/pleroma/web/o_status/o_status_controller.ex:138 +#, elixir-autogen, elixir-format +msgid "Something went wrong" +msgstr "Alguna cosa ha anat malament" + +#: lib/pleroma/web/common_api/activity_draft.ex:143 +#, elixir-autogen, elixir-format +msgid "The message visibility must be direct" +msgstr "La visibilitat del missatge ha de ser directe" + +#: lib/pleroma/web/common_api/utils.ex:492 +#, elixir-autogen, elixir-format +msgid "The status is over the character limit" +msgstr "L'apunt està per sobre del limit de caràcters" + +#: lib/pleroma/web/plugs/ensure_public_or_authenticated_plug.ex:36 +#, elixir-autogen, elixir-format +msgid "This resource requires authentication." +msgstr "Aquest recurs requereix autenticació." + +#: lib/pleroma/web/plugs/rate_limiter.ex:208 +#, elixir-autogen, elixir-format +msgid "Throttled" +msgstr "Estrangulat" + +#: lib/pleroma/web/common_api.ex:338 +#, elixir-autogen, elixir-format +msgid "Too many choices" +msgstr "Massa opcions" + +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:268 +#, elixir-autogen, elixir-format +msgid "You can't revoke your own admin status." +msgstr "No pots revocar el teu propi estat d'administrador." + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:243 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:333 +#, elixir-autogen, elixir-format +msgid "Your account is currently disabled" +msgstr "El teu compte està actualment desactivat" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:205 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:356 +#, elixir-autogen, elixir-format +msgid "Your login is missing a confirmed e-mail address" +msgstr "Al teu inici de sessió li falta una adreça de correu confirmada" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:403 +#, elixir-autogen, elixir-format +msgid "can't read inbox of %{nickname} as %{as_nickname}" +msgstr "no puc llegir la safata d'entrada de %{nickname} com a %{as_nickname}" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:502 +#, elixir-autogen, elixir-format +msgid "can't update outbox of %{nickname} as %{as_nickname}" +msgstr "" +"no es pot actualitzar la safata de sortida de %{nickname} com a " +"%{as_nickname}" + +#: lib/pleroma/web/common_api.ex:475 +#, elixir-autogen, elixir-format +msgid "conversation is already muted" +msgstr "la conversa ja està silenciada" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:521 +#, elixir-autogen, elixir-format +msgid "error" +msgstr "error" + +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:34 +#, elixir-autogen, elixir-format +msgid "mascots can only be images" +msgstr "les mascotes només poden ser imatges" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:63 +#, elixir-autogen, elixir-format +msgid "not found" +msgstr "no trobat" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:437 +#, elixir-autogen, elixir-format +msgid "Bad OAuth request." +msgstr "Sol·licitu OAuth dolenta." + +#: lib/pleroma/web/twitter_api/twitter_api.ex:114 +#, elixir-autogen, elixir-format +msgid "CAPTCHA already used" +msgstr "CAPTCHA ja usat" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:111 +#, elixir-autogen, elixir-format +msgid "CAPTCHA expired" +msgstr "CAPTCHA expirat" + +#: lib/pleroma/web/plugs/uploaded_media.ex:57 +#, elixir-autogen, elixir-format +msgid "Failed" +msgstr "Fallat" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:453 +#, elixir-autogen, elixir-format +msgid "Failed to authenticate: %{message}." +msgstr "No s'ha pogut autenticar: %{message}." + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:484 +#, elixir-autogen, elixir-format +msgid "Failed to set up user account." +msgstr "No s'ha pogut configurar el compte d'usuari." + +#: lib/pleroma/web/plugs/o_auth_scopes_plug.ex:37 +#, elixir-autogen, elixir-format +msgid "Insufficient permissions: %{permissions}." +msgstr "Permisos insuficients: %{permissions}." + +#: lib/pleroma/web/plugs/uploaded_media.ex:111 +#, elixir-autogen, elixir-format +msgid "Internal Error" +msgstr "Error intern" + +#: lib/pleroma/web/o_auth/fallback_controller.ex:22 +#: lib/pleroma/web/o_auth/fallback_controller.ex:29 +#, elixir-autogen, elixir-format +msgid "Invalid Username/Password" +msgstr "Usuari/Contrasenya invàlids" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:117 +#, elixir-autogen, elixir-format +msgid "Invalid answer data" +msgstr "dada de resposta invàlida" + +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:33 +#, elixir-autogen, elixir-format +msgid "Nodeinfo schema version not handled" +msgstr "Versió no controlada del Esquema Nodeinfo" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:194 +#, elixir-autogen, elixir-format +msgid "This action is outside the authorized scopes" +msgstr "Aquesta acció és fora dels àmbits autoritzats" + +#: lib/pleroma/web/o_auth/fallback_controller.ex:14 +#, elixir-autogen, elixir-format +msgid "Unknown error, please check the details and try again." +msgstr "Error desconegut, si us plau verifica els detalls i prova-ho de nou." + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:136 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:180 +#, elixir-autogen, elixir-format +msgid "Unlisted redirect_uri." +msgstr "redirect_uri no llistada." + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:433 +#, elixir-autogen, elixir-format +msgid "Unsupported OAuth provider: %{provider}." +msgstr "Proveïdor OAuth no compatible: %{provider}." + +#: lib/pleroma/uploaders/uploader.ex:74 +#, elixir-autogen, elixir-format +msgid "Uploader callback timeout" +msgstr "Temps d'espera esgotat del callback del carregador" + +#: lib/pleroma/web/uploader_controller.ex:23 +#, elixir-autogen, elixir-format +msgid "bad request" +msgstr "sol·licitud dolenta" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:102 +#, elixir-autogen, elixir-format +msgid "CAPTCHA Error" +msgstr "Error CAPTCHA" + +#: lib/pleroma/web/common_api.ex:266 +#, elixir-autogen, elixir-format +msgid "Could not add reaction emoji" +msgstr "No es pot afegir la reacció emoji" + +#: lib/pleroma/web/common_api.ex:277 +#, elixir-autogen, elixir-format +msgid "Could not remove reaction emoji" +msgstr "No es pot treure la reacció emoji" + +#: lib/pleroma/web/twitter_api/twitter_api.ex:128 +#, elixir-autogen, elixir-format +msgid "Invalid CAPTCHA (Missing parameter: %{name})" +msgstr "CAPTCHA invàlid (Falta el paràmetre: %{name})" + +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:96 +#, elixir-autogen, elixir-format +msgid "List not found" +msgstr "Llista no trobada" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:151 +#, elixir-autogen, elixir-format +msgid "Missing parameter: %{name}" +msgstr "Falta el paràmetre: %{name}" + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:232 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:346 +#, elixir-autogen, elixir-format +msgid "Password reset is required" +msgstr "Es requereix restablir la contrasenya" + +#: lib/pleroma/tests/auth_test_controller.ex:9 +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/chat_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/config_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/frontend_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/instance_document_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/invite_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/media_proxy_cache_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/o_auth_app_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/relay_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/admin_api/controllers/user_controller.ex:6 +#: lib/pleroma/web/controller_helper.ex:6 +#: lib/pleroma/web/embed_controller.ex:6 +#: lib/pleroma/web/fallback/redirect_controller.ex:6 +#: lib/pleroma/web/feed/tag_controller.ex:6 +#: lib/pleroma/web/feed/user_controller.ex:6 +#: lib/pleroma/web/mailer/subscription_controller.ex:6 +#: lib/pleroma/web/manifest_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/announcement_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/app_controller.ex:11 +#: lib/pleroma/web/mastodon_api/controllers/auth_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/custom_emoji_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/directory_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/domain_block_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/filter_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/follow_request_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/instance_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/marker_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex:14 +#: lib/pleroma/web/mastodon_api/controllers/media_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/scheduled_activity_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/search_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/status_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:7 +#: lib/pleroma/web/mastodon_api/controllers/suggestion_controller.ex:6 +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:6 +#: lib/pleroma/web/media_proxy/media_proxy_controller.ex:6 +#: lib/pleroma/web/mongoose_im/mongoose_im_controller.ex:6 +#: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:6 +#: lib/pleroma/web/o_auth/fallback_controller.ex:6 +#: lib/pleroma/web/o_auth/mfa_controller.ex:10 +#: lib/pleroma/web/o_auth/o_auth_controller.ex:6 +#: lib/pleroma/web/o_status/o_status_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/account_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/app_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/backup_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/chat_controller.ex:5 +#: lib/pleroma/web/pleroma_api/controllers/conversation_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_file_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_pack_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/emoji_reaction_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/instances_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/notification_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/report_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/scrobble_controller.ex:6 +#: lib/pleroma/web/pleroma_api/controllers/two_factor_authentication_controller.ex:7 +#: lib/pleroma/web/pleroma_api/controllers/user_import_controller.ex:6 +#: lib/pleroma/web/static_fe/static_fe_controller.ex:6 +#: lib/pleroma/web/twitter_api/controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/password_controller.ex:10 +#: lib/pleroma/web/twitter_api/controllers/remote_follow_controller.ex:6 +#: lib/pleroma/web/twitter_api/controllers/util_controller.ex:6 +#: lib/pleroma/web/uploader_controller.ex:6 +#: lib/pleroma/web/web_finger/web_finger_controller.ex:6 +#, elixir-autogen, elixir-format +msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." +msgstr "" +"Violació de seguretat: la verificació dels àmbits OAuth no ha estat ni " +"controlada ni explícitament omesa." + +#: lib/pleroma/web/plugs/ensure_authenticated_plug.ex:32 +#, elixir-autogen, elixir-format +msgid "Two-factor authentication enabled, you must use a access token." +msgstr "Autenticació de dos factor activada, has d'usar un token d'accés." + +#: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 +#, elixir-autogen, elixir-format +msgid "Web push subscription is disabled on this Pleroma instance" +msgstr "La subscripció Web push està desactivada en aquesta instància Akkoma" + +#: lib/pleroma/web/admin_api/controllers/admin_api_controller.ex:234 +#, elixir-autogen, elixir-format +msgid "You can't revoke your own admin/moderator status." +msgstr "No pots revocar els teu propi estat de admin/moderador." + +#: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:129 +#, elixir-autogen, elixir-format +msgid "authorization required for timeline view" +msgstr "es requereix autorització per a veure la línia de temps" + +#: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:24 +#, elixir-autogen, elixir-format +msgid "Access denied" +msgstr "Accés denegat" + +#: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:322 +#, elixir-autogen, elixir-format +msgid "This API requires an authenticated user" +msgstr "Aquesta API requereix un usuari autenticat" + +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:26 +#: lib/pleroma/web/plugs/user_is_admin_plug.ex:21 +#, elixir-autogen, elixir-format +msgid "User is not an admin." +msgstr "L'usuari no és un admin." + +#: lib/pleroma/user/backup.ex:75 +#, elixir-format +msgid "Last export was less than a day ago" +msgid_plural "Last export was less than %{days} days ago" +msgstr[0] "La darrera exportació va ser fa menys d'un dia" +msgstr[1] "La darrera exportació va ser fa menys de %{days} dies" + +#: lib/pleroma/user/backup.ex:93 +#, elixir-autogen, elixir-format +msgid "Backups require enabled email" +msgstr "Les copies de seguretat requereixen un correu activat" + +#: lib/pleroma/web/activity_pub/activity_pub_controller.ex:434 +#, elixir-autogen, elixir-format +msgid "Character limit (%{limit} characters) exceeded, contains %{length} characters" +msgstr "" +"Limit de caràcters (%{limit} characters) excedit, conté %{length} caràcters" + +#: lib/pleroma/user/backup.ex:98 +#, elixir-autogen, elixir-format +msgid "Email is required" +msgstr "Es requereix correu" + +#: lib/pleroma/web/common_api/utils.ex:507 +#, elixir-autogen, elixir-format +msgid "Too many attachments" +msgstr "Massa adjunts" + +#: lib/pleroma/web/plugs/ensure_staff_privileged_plug.ex:33 +#: lib/pleroma/web/plugs/user_is_staff_plug.ex:20 +#, elixir-autogen, elixir-format +msgid "User is not a staff member." +msgstr "L'usuari no és un membre del equip." + +#: lib/pleroma/web/o_auth/o_auth_controller.ex:366 +#, elixir-autogen, elixir-format +msgid "Your account is awaiting approval." +msgstr "El teu compte espera aprovació." diff --git a/priv/gettext/ca/LC_MESSAGES/static_pages.po b/priv/gettext/ca/LC_MESSAGES/static_pages.po index 6f37874ca..1d7c4e0a8 100644 --- a/priv/gettext/ca/LC_MESSAGES/static_pages.po +++ b/priv/gettext/ca/LC_MESSAGES/static_pages.po @@ -3,14 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-28 09:15+0000\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language-Team: none\n" +"PO-Revision-Date: 2022-07-30 21:58+0000\n" +"Last-Translator: sola \n" +"Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Translate Toolkit 3.7.1\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" ## This file is a PO Template file. ## @@ -21,150 +23,149 @@ msgstr "" ## Run "mix gettext.extract" to bring this file up to ## date. Leave "msgstr"s empty as changing them here as no ## effect: edit them in PO (.po) files instead. - #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button" msgid "Authorize" -msgstr "" +msgstr "Autoritza" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 #, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error fetching user" -msgstr "" +msgstr "Error obtenint usuari" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow header" msgid "Remote follow" -msgstr "" +msgstr "Seguiment remot" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 #, elixir-autogen, elixir-format msgctxt "placeholder text for auth code entry" msgid "Authentication code" -msgstr "" +msgstr "Codi d'autenticació" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 #, elixir-autogen, elixir-format msgctxt "placeholder text for password entry" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 #, elixir-autogen, elixir-format msgctxt "placeholder text for username entry" msgid "Username" -msgstr "" +msgstr "Nom d'usuari" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button for login" msgid "Authorize" -msgstr "" +msgstr "Autoritza" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button for mfa" msgid "Authorize" -msgstr "" +msgstr "Autoritza" #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 #, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error following account" -msgstr "" +msgstr "Error seguint el compte" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow header, need login" msgid "Log in to follow" -msgstr "" +msgstr "Inicia sessió per a seguir" #: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow mfa header" msgid "Two-factor authentication" -msgstr "" +msgstr "Autenticació de dos factors" #: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow success" msgid "Account followed!" -msgstr "" +msgstr "Compte seguit!" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 #, elixir-autogen, elixir-format msgctxt "placeholder text for account id" msgid "Your account ID, e.g. lain@quitter.se" -msgstr "" +msgstr "L'ID del teu compte, p.e. maria@exemple.cat" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 #, elixir-autogen, elixir-format msgctxt "remote follow authorization button for following with a remote account" msgid "Follow" -msgstr "" +msgstr "Segueix" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 #, elixir-autogen, elixir-format msgctxt "remote follow error" msgid "Error: %{error}" -msgstr "" +msgstr "Error: %{error}" #: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 #, elixir-autogen, elixir-format msgctxt "remote follow header" msgid "Remotely follow %{nickname}" -msgstr "" +msgstr "Seguir remotament %{nickname}" #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 #, elixir-autogen, elixir-format msgctxt "password reset button" msgid "Reset" -msgstr "" +msgstr "Reiniciar" #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 #, elixir-autogen, elixir-format msgctxt "password reset failed homepage link" msgid "Homepage" -msgstr "" +msgstr "Pàgina d'inici" #: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 #, elixir-autogen, elixir-format msgctxt "password reset failed message" msgid "Password reset failed" -msgstr "" +msgstr "Error al restablir la contrasenya" #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 #, elixir-autogen, elixir-format msgctxt "password reset form confirm password prompt" msgid "Confirmation" -msgstr "" +msgstr "Confirmació" #: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 #, elixir-autogen, elixir-format msgctxt "password reset form password prompt" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 #, elixir-autogen, elixir-format msgctxt "password reset invalid token message" msgid "Invalid Token" -msgstr "" +msgstr "Token Invàlid" #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 #, elixir-autogen, elixir-format msgctxt "password reset successful homepage link" msgid "Homepage" -msgstr "" +msgstr "Pàgina d'inici" #: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 #, elixir-autogen, elixir-format msgctxt "password reset successful message" msgid "Password changed!" -msgstr "" +msgstr "Contrasenya canviada!" #: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 #: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 @@ -172,354 +173,395 @@ msgstr "" msgctxt "tag feed description" msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." msgstr "" +"Aquests son apunts públics etiquetats amb #%{tag}. Pots interactuar amb ells " +"si tens un compte en qualsevol lloc del fedivers." #: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 #, elixir-autogen, elixir-format msgctxt "oauth authorization exists page title" msgid "Authorization exists" -msgstr "" +msgstr "Existeix autorització" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 #, elixir-autogen, elixir-format msgctxt "oauth authorize approve button" msgid "Approve" -msgstr "" +msgstr "Aprova" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 #, elixir-autogen, elixir-format msgctxt "oauth authorize cancel button" msgid "Cancel" -msgstr "" +msgstr "Cancel·la" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 #, elixir-autogen, elixir-format msgctxt "oauth authorize message" msgid "Application %{client_name} is requesting access to your account." msgstr "" +"L'aplicació %{client_name} sol·licita accés al teu compte." #: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 #, elixir-autogen, elixir-format msgctxt "oauth authorized page title" msgid "Successfully authorized" -msgstr "" +msgstr "Autoritzat amb èxit" #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 #, elixir-autogen, elixir-format msgctxt "oauth external provider page title" msgid "Sign in with external provider" -msgstr "" +msgstr "Inicia sessió amb proveïdor extern" #: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 #, elixir-autogen, elixir-format msgctxt "oauth external provider sign in button" msgid "Sign in with %{strategy}" -msgstr "" +msgstr "Inicia sessió amb %{strategy}" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 #, elixir-autogen, elixir-format msgctxt "oauth login button" msgid "Log In" -msgstr "" +msgstr "Inicia sessió" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 #, elixir-autogen, elixir-format msgctxt "oauth login password prompt" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 #, elixir-autogen, elixir-format msgctxt "oauth login username prompt" msgid "Username" -msgstr "" +msgstr "Nom d'usuari" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 #, elixir-autogen, elixir-format msgctxt "oauth register nickname prompt" msgid "Pleroma Handle" -msgstr "" +msgstr "Sobrenom Akkoma" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 #, elixir-autogen, elixir-format msgctxt "oauth register nickname unchangeable warning" msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." msgstr "" +"Tria amb cura! No podràs canviar-ho més tard. En canvi, podràs canviar el " +"teu nom a mostrar." #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 #, elixir-autogen, elixir-format msgctxt "oauth register page email prompt" msgid "Email" -msgstr "" +msgstr "Correu" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 #, elixir-autogen, elixir-format msgctxt "oauth register page fill form prompt" msgid "If you'd like to register a new account, please provide the details below." msgstr "" +"Si desitges registrar un compte nou, si us plau proporciona els detalls a " +"continuació." #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 #, elixir-autogen, elixir-format msgctxt "oauth register page login button" msgid "Proceed as existing user" -msgstr "" +msgstr "Procedir com a usuari existent" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 #, elixir-autogen, elixir-format msgctxt "oauth register page login password prompt" msgid "Password" -msgstr "" +msgstr "Contrasenya" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 #, elixir-autogen, elixir-format msgctxt "oauth register page login prompt" msgid "Alternatively, sign in to connect to existing account." -msgstr "" +msgstr "Alternativament, inicia sessió per a connectar amb un compte existent." #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 #, elixir-autogen, elixir-format msgctxt "oauth register page login username prompt" msgid "Name or email" -msgstr "" +msgstr "Nom o correu" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 #, elixir-autogen, elixir-format msgctxt "oauth register page nickname prompt" msgid "Nickname" -msgstr "" +msgstr "Sobrenom" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 #, elixir-autogen, elixir-format msgctxt "oauth register page register button" msgid "Proceed as new user" -msgstr "" +msgstr "Procedir com a usuari nou" #: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 #, elixir-autogen, elixir-format msgctxt "oauth register page title" msgid "Registration Details" -msgstr "" +msgstr "Detalls del registre" #: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 #, elixir-autogen, elixir-format msgctxt "oauth register page title" msgid "This is the first time you visit! Please enter your Pleroma handle." msgstr "" +"Aquesta és la primera vegada que ens visites! Si us plau introdueix el teu " +"sobrenom a Akkoma." #: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 #, elixir-autogen, elixir-format msgctxt "oauth scopes message" msgid "The following permissions will be granted" -msgstr "" +msgstr "Es concediran els següents permisos" #: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 #: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 #, elixir-autogen, elixir-format msgctxt "oauth token code message" msgid "Token code is
%{token}" -msgstr "" +msgstr "El codi del Token és
%{token}" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 #, elixir-autogen, elixir-format msgctxt "mfa auth code prompt" msgid "Authentication code" -msgstr "" +msgstr "Codi d'autenticació" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 #, elixir-autogen, elixir-format msgctxt "mfa auth page title" msgid "Two-factor authentication" -msgstr "" +msgstr "Autenticació de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 #, elixir-autogen, elixir-format msgctxt "mfa auth page use recovery code link" msgid "Enter a two-factor recovery code" -msgstr "" +msgstr "Entra el codi de recuperació de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 #, elixir-autogen, elixir-format msgctxt "mfa auth verify code button" msgid "Verify" -msgstr "" +msgstr "Verifica" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 #, elixir-autogen, elixir-format msgctxt "mfa recover page title" msgid "Two-factor recovery" -msgstr "" +msgstr "Recuperació de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 #, elixir-autogen, elixir-format msgctxt "mfa recover recovery code prompt" msgid "Recovery code" -msgstr "" +msgstr "Codi de recuperació" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 #, elixir-autogen, elixir-format msgctxt "mfa recover use 2fa code link" msgid "Enter a two-factor code" -msgstr "" +msgstr "Entra el codi de dos factors" #: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 #, elixir-autogen, elixir-format msgctxt "mfa recover verify recovery code button" msgid "Verify" -msgstr "" +msgstr "Verifica" #: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 #, elixir-autogen, elixir-format msgctxt "static fe profile page remote follow button" msgid "Remote follow" -msgstr "" +msgstr "Seguiment remot" #: lib/pleroma/web/templates/email/digest.html.eex:163 #, elixir-autogen, elixir-format msgctxt "digest email header line" msgid "Hey %{nickname}, here is what you've missed!" -msgstr "" +msgstr "Hola %{nickname}, aquí està el que t'has perdut!" #: lib/pleroma/web/templates/email/digest.html.eex:544 #, elixir-autogen, elixir-format msgctxt "digest email receiver address" msgid "The email address you are subscribed as is %{email}. " msgstr "" +"L'adreça de correu a la que estàs subscrit és %{email}. " #: lib/pleroma/web/templates/email/digest.html.eex:538 #, elixir-autogen, elixir-format msgctxt "digest email sending reason" msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." msgstr "" +"Has rebut aquest correu perquè t'has registrat per a rebre correus resum des " +"de l'instància Akkoma %{instance}2." #: lib/pleroma/web/templates/email/digest.html.eex:547 #, elixir-autogen, elixir-format msgctxt "digest email unsubscribe action" msgid "To unsubscribe, please go %{here}." -msgstr "" +msgstr "Per a donar-te de baixa, si us plau ves a %{here}." #: lib/pleroma/web/templates/email/digest.html.eex:547 #, elixir-autogen, elixir-format msgctxt "digest email unsubscribe action link text" msgid "here" -msgstr "" +msgstr "aquí" #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 #, elixir-autogen, elixir-format msgctxt "mailer unsubscribe failed message" msgid "UNSUBSCRIBE FAILURE" -msgstr "" +msgstr "ERROR DE CANCEL·LACIÓ DE LA SUBSCRIPCIÓ" #: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 #, elixir-autogen, elixir-format msgctxt "mailer unsubscribe successful message" msgid "UNSUBSCRIBE SUCCESSFUL" -msgstr "" +msgstr "SUBSCRIPCIÓ CANCEL·LADA AMB ÈXIT" #: lib/pleroma/web/templates/email/digest.html.eex:385 #, elixir-format msgctxt "new followers count header" msgid "%{count} New Follower" msgid_plural "%{count} New Followers" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%{count} Nou Seguidor" +msgstr[1] "%{count} Nous Seguidors" #: lib/pleroma/emails/user_email.ex:356 #, elixir-autogen, elixir-format msgctxt "account archive email body - self-requested" msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" msgstr "" +"

Has sol·licitat una copia de seguretat completa del teu compte Akkoma. " +"Està llest per a descarrega:

\n" +"

%{download_url}

\n" #: lib/pleroma/emails/user_email.ex:384 #, elixir-autogen, elixir-format msgctxt "account archive email subject" msgid "Your account archive is ready" -msgstr "" +msgstr "L'arxiu del teu compte està preparat" #: lib/pleroma/emails/user_email.ex:188 #, elixir-autogen, elixir-format msgctxt "approval pending email body" msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" msgstr "" +"

Esperant aprovació

\n" +"

El teu compte a %{instance_name} està sent revisat per l'equip. Rebràs un " +"altre correu quan el teu compte estigui aprovat.

\n" #: lib/pleroma/emails/user_email.ex:202 #, elixir-autogen, elixir-format msgctxt "approval pending email subject" msgid "Your account is awaiting approval" -msgstr "" +msgstr "El teu compte està esperant aprovació" #: lib/pleroma/emails/user_email.ex:158 #, elixir-autogen, elixir-format msgctxt "confirmation email body" msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" msgstr "" +"

Gràcies per registrar-te a %{instance_name}

\n" +"

Es requereix correu de confirmació per a activar el reu compte.

\n" +"

Si us plau clica en l'enllaç següent per a activar el teu compte.

\n" #: lib/pleroma/emails/user_email.ex:174 #, elixir-autogen, elixir-format msgctxt "confirmation email subject" msgid "%{instance_name} account confirmation" -msgstr "" +msgstr "confirmació del compte a %{instance_name}" #: lib/pleroma/emails/user_email.ex:310 #, elixir-autogen, elixir-format msgctxt "digest email subject" msgid "Your digest from %{instance_name}" -msgstr "" +msgstr "El teu resum des de %{instance_name}" #: lib/pleroma/emails/user_email.ex:81 #, elixir-autogen, elixir-format msgctxt "password reset email body" msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" msgstr "" +"

Restableix la teva contrasenya a %{instance_name}

\n" +"

Algú ha sol·licitat un canvi de contrasenya per el teu compte a " +"%{instance_name}.

\n" +"

Si has estat tu, visita el següent enllaç per a procedir: restablir contrasenya.

\n" +"

Si ha estat algú altre, no et preocupis: les teves dades estan segures i " +"la teva contrasenya no s'ha canviat.

\n" #: lib/pleroma/emails/user_email.ex:98 #, elixir-autogen, elixir-format msgctxt "password reset email subject" msgid "Password reset" -msgstr "" +msgstr "Restablir contrasenya" #: lib/pleroma/emails/user_email.ex:215 #, elixir-autogen, elixir-format msgctxt "successful registration email body" msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" msgstr "" +"

Hola @%{nickname},

\n" +"

El teu compte a %{instance_name} ha estat registrar amb èxit.

\n" +"

No es requereix cap altre acció per a activar el teu compte.

\n" #: lib/pleroma/emails/user_email.ex:231 #, elixir-autogen, elixir-format msgctxt "successful registration email subject" msgid "Account registered on %{instance_name}" -msgstr "" +msgstr "Compte registrat a %{instance_name}" #: lib/pleroma/emails/user_email.ex:119 #, elixir-autogen, elixir-format msgctxt "user invitation email body" msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" msgstr "" +"

Has estat invitat a %{instance_name}

\n" +"

%{inviter_name} t'invita a unir-te a %{instance_name}, una instància de " +"la plataforma de xarxa social federada Akkoma.

\n" +"

Clica el següent enllaç per a registrar-te: accepta invitació.

\n" #: lib/pleroma/emails/user_email.ex:136 #, elixir-autogen, elixir-format msgctxt "user invitation email subject" msgid "Invitation to %{instance_name}" -msgstr "" +msgstr "Invitació per %{instance_name}" #: lib/pleroma/emails/user_email.ex:53 #, elixir-autogen, elixir-format msgctxt "welcome email html body" msgid "Welcome to %{instance_name}!" -msgstr "" +msgstr "Benvingut a %{instance_name}!" #: lib/pleroma/emails/user_email.ex:41 #, elixir-autogen, elixir-format msgctxt "welcome email subject" msgid "Welcome to %{instance_name}!" -msgstr "" +msgstr "Benvingut a %{instance_name}!" #: lib/pleroma/emails/user_email.ex:65 #, elixir-autogen, elixir-format msgctxt "welcome email text body" msgid "Welcome to %{instance_name}!" -msgstr "" +msgstr "Benvingut a %{instance_name}!" #: lib/pleroma/emails/user_email.ex:368 #, elixir-autogen, elixir-format msgctxt "account archive email body - admin requested" msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" msgstr "" +"

L'Administrador @%{admin_nickname} ha sol·licitat una copia de seguretat " +"completa del teu compte Akkoma. Està preparat per a descarrega:

\n" +"

%{download_url}

\n" From c3eea8dc7d005ccc2384a5e6e744d8084aff3e0c Mon Sep 17 00:00:00 2001 From: floatingghost Date: Tue, 2 Aug 2022 09:11:22 +0000 Subject: [PATCH 46/82] expose bubble instances via nodeinfo (#136) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/136 --- lib/pleroma/web/nodeinfo/nodeinfo.ex | 3 ++- .../web/nodeinfo/nodeinfo_controller.ex | 3 ++- test/pleroma/web/node_info_test.exs | 19 +++++++++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/web/nodeinfo/nodeinfo.ex b/lib/pleroma/web/nodeinfo/nodeinfo.ex index 80a2ce676..bf0d65f45 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo.ex @@ -70,7 +70,8 @@ def get_nodeinfo("2.0") do features: features, restrictedNicknames: Config.get([Pleroma.User, :restricted_nicknames]), skipThreadContainment: Config.get([:instance, :skip_thread_containment], false), - privilegedStaff: Config.get([:instance, :privileged_staff]) + privilegedStaff: Config.get([:instance, :privileged_staff]), + localBubbleInstances: Config.get([:instance, :local_bubble], []) } } end diff --git a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex index 5cee26afe..a0dee7c6b 100644 --- a/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex +++ b/lib/pleroma/web/nodeinfo/nodeinfo_controller.ex @@ -88,7 +88,8 @@ def raw_nodeinfo do mailerEnabled: Config.get([Pleroma.Emails.Mailer, :enabled], false), features: features, restrictedNicknames: Config.get([Pleroma.User, :restricted_nicknames]), - skipThreadContainment: Config.get([:instance, :skip_thread_containment], false) + skipThreadContainment: Config.get([:instance, :skip_thread_containment], false), + localBubbleInstances: Config.get([:instance, :local_bubble], []) } } end diff --git a/test/pleroma/web/node_info_test.exs b/test/pleroma/web/node_info_test.exs index 6eb0a585a..05a078266 100644 --- a/test/pleroma/web/node_info_test.exs +++ b/test/pleroma/web/node_info_test.exs @@ -188,6 +188,25 @@ test "shows extra information in the quarantined_info field for relevant entries end end + test "Bubble instances", %{conn: conn} do + clear_config([:instance, :local_bubble], []) + + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + assert response["metadata"]["localBubbleInstances"] == [] + clear_config([:instance, :local_bubble], ["example.com"]) + + response = + conn + |> get("/nodeinfo/2.1.json") + |> json_response(:ok) + + assert response["metadata"]["localBubbleInstances"] == ["example.com"] + end + describe "MRF SimplePolicy" do setup do clear_config([:mrf, :policies], [Pleroma.Web.ActivityPub.MRF.SimplePolicy]) From e26388a01c91f9e3b1b9a0b77938b6f5b215ec63 Mon Sep 17 00:00:00 2001 From: Joel Beckmeyer Date: Tue, 2 Aug 2022 13:54:22 +0000 Subject: [PATCH 47/82] Support reaching user@sub.domain.tld at user@domain.tld (#134) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/134 Co-authored-by: Joel Beckmeyer Co-committed-by: Joel Beckmeyer --- CHANGELOG.md | 1 + config/config.exs | 2 + config/test.exs | 2 + ...w_to_serve_another_domain_for_webfinger.md | 62 ++++++++++ lib/pleroma/http.ex | 9 ++ lib/pleroma/web/activity_pub/activity_pub.ex | 53 +++++---- lib/pleroma/web/web_finger.ex | 47 ++++---- .../tesla_mock/framatube.org_host_meta | 2 +- .../tesla_mock/status.alpicola.com_host_meta | 2 +- test/fixtures/webfinger/masto-host-meta.xml | 4 + test/fixtures/webfinger/masto-user.json | 92 +++++++++++++++ test/fixtures/webfinger/masto-webfinger.json | 23 ++++ test/fixtures/webfinger/pleroma-host-meta.xml | 1 + test/fixtures/webfinger/pleroma-user.json | 58 +++++++++ .../fixtures/webfinger/pleroma-webfinger.json | 27 +++++ test/pleroma/user_test.exs | 110 ++++++++++++++++++ .../remote_follow_controller_test.exs | 2 +- .../web_finger/web_finger_controller_test.exs | 29 +++++ test/pleroma/web/web_finger_test.exs | 8 +- test/support/http_request_mock.ex | 20 +--- 20 files changed, 489 insertions(+), 65 deletions(-) create mode 100644 docs/docs/configuration/how_to_serve_another_domain_for_webfinger.md create mode 100644 test/fixtures/webfinger/masto-host-meta.xml create mode 100644 test/fixtures/webfinger/masto-user.json create mode 100644 test/fixtures/webfinger/masto-webfinger.json create mode 100644 test/fixtures/webfinger/pleroma-host-meta.xml create mode 100644 test/fixtures/webfinger/pleroma-user.json create mode 100644 test/fixtures/webfinger/pleroma-webfinger.json diff --git a/CHANGELOG.md b/CHANGELOG.md index f5976a79d..6010744dd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -173,6 +173,7 @@ you might end up in a situation where you don't have an ability to get it. - Attachment dimensions and blurhashes are federated when available. - Mastodon API: support `poll` notification. - Pinned posts federation +- Possibility to discover users like `user@example.org`, while Akkoma is working on `akkoma.example.org`. Additional configuration required. ### Fixed - Don't crash so hard when email settings are invalid. diff --git a/config/config.exs b/config/config.exs index 197887c93..d14c4e3d7 100644 --- a/config/config.exs +++ b/config/config.exs @@ -809,6 +809,8 @@ {Pleroma.Search, [max_running: 30, max_waiting: 50]} ] +config :pleroma, Pleroma.Web.WebFinger, domain: nil, update_nickname_on_user_fetch: true + config :pleroma, Pleroma.Search, module: Pleroma.Search.DatabaseSearch config :pleroma, Pleroma.Search.Meilisearch, diff --git a/config/test.exs b/config/test.exs index 93d07ff19..a5edb1149 100644 --- a/config/test.exs +++ b/config/test.exs @@ -126,6 +126,8 @@ config :pleroma, :cachex, provider: Pleroma.CachexMock +config :pleroma, Pleroma.Web.WebFinger, update_nickname_on_user_fetch: false + config :pleroma, :side_effects, ap_streamer: Pleroma.Web.ActivityPub.ActivityPubMock, logger: Pleroma.LoggerMock diff --git a/docs/docs/configuration/how_to_serve_another_domain_for_webfinger.md b/docs/docs/configuration/how_to_serve_another_domain_for_webfinger.md new file mode 100644 index 000000000..ccf13ad84 --- /dev/null +++ b/docs/docs/configuration/how_to_serve_another_domain_for_webfinger.md @@ -0,0 +1,62 @@ +# How to use a different domain name for Akkoma and the users it serves + +Akkoma users are primarily identified by a `user@example.org` handle, and you might want this identifier to be the same as your email or jabber account, for instance. +However, in this case, you are almost certainly serving some web content on `https://example.org` already, and you might want to use another domain (say `akkoma.example.org`) for Akkoma itself. + +Akkoma supports that, but it might be tricky to set up, and any error might prevent you from federating with other instances. + +*If you are already running Akkoma on `example.org`, it is no longer possible to move it to `akkoma.example.org`.* + +## Account identifiers + +It is important to understand that for federation purposes, a user in Akkoma has two unique identifiers associated: + +- A webfinger `acct:` URI, used for discovery and as a verifiable global name for the user across Akkoma instances. In our example, our account's acct: URI is `acct:user@example.org` +- An author/actor URI, used in every other aspect of federation. This is the way in which users are identified in ActivityPub, the underlying protocol used for federation with other Akkoma instances. +In our case, it is `https://akkoma.example.org/users/user`. + +Both account identifiers are unique and required for Akkoma. An important risk if you set up your Akkoma instance incorrectly is to create two users (with different acct: URIs) with conflicting author/actor URIs. + +## WebFinger + +As said earlier, each Akkoma user has an `acct`: URI, which is used for discovery and authentication. When you add @user@example.org, a webfinger query is performed. This is done in two steps: + +1. Querying `https://example.org/.well-known/host-meta` (where the domain of the URL matches the domain part of the `acct`: URI) to get information on how to perform the query. +This file will indeed contain a URL template of the form `https://example.org/.well-known/webfinger?resource={uri}` that will be used in the second step. +2. Fill the returned template with the `acct`: URI to be queried and perform the query: `https://example.org/.well-known/webfinger?resource=acct:user@example.org` + +## Configuring your Akkoma instance + +**_DO NOT ATTEMPT TO CONFIGURE YOUR INSTANCE THIS WAY IF YOU DID NOT UNDERSTAND THE ABOVE_** + +### Configuring Akkoma + +Akkoma has a two configuration settings to enable using different domains for your users and Akkoma itself. `host` in `Pleroma.Web.Endpoint` and `domain` in `Pleroma.Web.WebFinger`. When the latter is not set, it defaults to the value of `host`. + +*Be extra careful when configuring your Akkoma instance, as changing `host` may cause remote instances to register different accounts with the same author/actor URI, which will result in federation issues!* + +```elixir +config :pleroma, Pleroma.Web.Endpoint, + url: [host: "pleroma.example.org"] + +config :pleroma, Pleroma.Web.WebFinger, domain: "example.org" +``` + +- `domain` - is the domain for which your Akkoma instance has authority, it's the domain used in `acct:` URI. In our example, `domain` would be set to `example.org`. +- `host` - is the domain used for any URL generated for your instance, including the author/actor URL's. In our case, that would be `akkoma.example.org`. + +### Configuring WebFinger domain + +Now, you have Akkoma running at `https://akkoma.example.org` as well as a website at `https://example.org`. If you recall how webfinger queries work, the first step is to query `https://example.org/.well-known/host-meta`, which will contain an URL template. + +Therefore, the easiest way to configure `example.org` is to redirect `/.well-known/host-meta` to `akkoma.example.org`. + +With nginx, it would be as simple as adding: + +```nginx +location = /.well-known/host-meta { + return 301 https://akkoma.example.org$request_uri; +} +``` + +in example.org's server block. diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index d8028651c..f3bdccaee 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -83,4 +83,13 @@ defp build_request(method, headers, options, url, body, params) do |> Builder.add_param(:query, :query, params) |> Builder.convert_to_keyword() end + + defp adapter_middlewares(_) do + if Pleroma.Config.get(:env) == :test do + # Emulate redirects in test env, which are handled by adapters in other environments + [Tesla.Middleware.FollowRedirects] + else + [] + end + end end diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 4eeba9903..29a1a40b5 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -1437,7 +1437,7 @@ defp normalize_image(%{"url" => url}) do defp normalize_image(urls) when is_list(urls), do: urls |> List.first() |> normalize_image() defp normalize_image(_), do: nil - defp object_to_user_data(data) do + defp object_to_user_data(data, additional) do fields = data |> Map.get("attachment", []) @@ -1467,18 +1467,18 @@ defp object_to_user_data(data) do public_key = if is_map(data["publicKey"]) && is_binary(data["publicKey"]["publicKeyPem"]) do data["publicKey"]["publicKeyPem"] - else - nil end shared_inbox = if is_map(data["endpoints"]) && is_binary(data["endpoints"]["sharedInbox"]) do data["endpoints"]["sharedInbox"] - else - nil end - user_data = %{ + # if WebFinger request was already done, we probably have acct, otherwise + # we request WebFinger here + nickname = additional[:nickname_from_acct] || generate_nickname(data) + + %{ ap_id: data["id"], uri: get_actor_url(data["url"]), ap_enabled: true, @@ -1499,21 +1499,27 @@ defp object_to_user_data(data) do public_key: public_key, inbox: data["inbox"], shared_inbox: shared_inbox, - pinned_objects: pinned_objects + pinned_objects: pinned_objects, + nickname: nickname } + end - # nickname can be nil because of virtual actors - if data["preferredUsername"] do - Map.put( - user_data, - :nickname, - "#{data["preferredUsername"]}@#{URI.parse(data["id"]).host}" - ) + defp generate_nickname(%{"preferredUsername" => username} = data) when is_binary(username) do + generated = "#{username}@#{URI.parse(data["id"]).host}" + + if Config.get([WebFinger, :update_nickname_on_user_fetch]) do + case WebFinger.finger(generated) do + {:ok, %{"subject" => "acct:" <> acct}} -> acct + _ -> generated + end else - Map.put(user_data, :nickname, nil) + generated end end + # nickname can be nil because of virtual actors + defp generate_nickname(_), do: nil + def fetch_follow_information_for_user(user) do with {:ok, following_data} <- Fetcher.fetch_and_contain_remote_object_from_id(user.following_address), @@ -1585,17 +1591,17 @@ defp collection_private(%{"first" => first}) do defp collection_private(_data), do: {:ok, true} - def user_data_from_user_object(data) do + def user_data_from_user_object(data, additional \\ []) do with {:ok, data} <- MRF.filter(data) do - {:ok, object_to_user_data(data)} + {:ok, object_to_user_data(data, additional)} else e -> {:error, e} end end - def fetch_and_prepare_user_from_ap_id(ap_id) do + def fetch_and_prepare_user_from_ap_id(ap_id, additional \\ []) do with {:ok, data} <- Fetcher.fetch_and_contain_remote_object_from_id(ap_id), - {:ok, data} <- user_data_from_user_object(data) do + {:ok, data} <- user_data_from_user_object(data, additional) do {:ok, maybe_update_follow_information(data)} else # If this has been deleted, only log a debug and not an error @@ -1693,13 +1699,13 @@ def pinned_fetch_task(%{pinned_objects: pins}) do end end - def make_user_from_ap_id(ap_id) do + def make_user_from_ap_id(ap_id, additional \\ []) do user = User.get_cached_by_ap_id(ap_id) if user && !User.ap_enabled?(user) do Transmogrifier.upgrade_user_from_ap_id(ap_id) else - with {:ok, data} <- fetch_and_prepare_user_from_ap_id(ap_id) do + with {:ok, data} <- fetch_and_prepare_user_from_ap_id(ap_id, additional) do {:ok, _pid} = Task.start(fn -> pinned_fetch_task(data) end) if user do @@ -1719,8 +1725,9 @@ def make_user_from_ap_id(ap_id) do end def make_user_from_nickname(nickname) do - with {:ok, %{"ap_id" => ap_id}} when not is_nil(ap_id) <- WebFinger.finger(nickname) do - make_user_from_ap_id(ap_id) + with {:ok, %{"ap_id" => ap_id, "subject" => "acct:" <> acct}} when not is_nil(ap_id) <- + WebFinger.finger(nickname) do + make_user_from_ap_id(ap_id, nickname_from_acct: acct) else _e -> {:error, "No AP id in WebFinger"} end diff --git a/lib/pleroma/web/web_finger.ex b/lib/pleroma/web/web_finger.ex index 938fc09e3..b5f2cb72e 100644 --- a/lib/pleroma/web/web_finger.ex +++ b/lib/pleroma/web/web_finger.ex @@ -32,7 +32,13 @@ def host_meta do def webfinger(resource, fmt) when fmt in ["XML", "JSON"] do host = Pleroma.Web.Endpoint.host() - regex = ~r/(acct:)?(?[a-z0-9A-Z_\.-]+)@#{host}/ + + regex = + if webfinger_domain = Pleroma.Config.get([__MODULE__, :domain]) do + ~r/(acct:)?(?[a-z0-9A-Z_\.-]+)@(#{host}|#{webfinger_domain})/ + else + ~r/(acct:)?(?[a-z0-9A-Z_\.-]+)@#{host}/ + end with %{"username" => username} <- Regex.named_captures(regex, resource), %User{} = user <- User.get_cached_by_nickname(username) do @@ -66,7 +72,7 @@ def represent_user(user, "JSON") do {:ok, user} = User.ensure_keys_present(user) %{ - "subject" => "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}", + "subject" => "acct:#{user.nickname}@#{domain()}", "aliases" => gather_aliases(user), "links" => gather_links(user) } @@ -88,12 +94,16 @@ def represent_user(user, "XML") do :XRD, %{xmlns: "http://docs.oasis-open.org/ns/xri/xrd-1.0"}, [ - {:Subject, "acct:#{user.nickname}@#{Pleroma.Web.Endpoint.host()}"} + {:Subject, "acct:#{user.nickname}@#{domain()}"} ] ++ aliases ++ links } |> XmlBuilder.to_doc() end + defp domain do + Pleroma.Config.get([__MODULE__, :domain]) || Pleroma.Web.Endpoint.host() + end + defp webfinger_from_xml(body) do with {:ok, doc} <- XML.parse_document(body) do subject = XML.string_from_xpath("//Subject", doc) @@ -150,17 +160,15 @@ def get_template_from_xml(body) do end def find_lrdd_template(domain) do - with {:ok, %{status: status, body: body}} when status in 200..299 <- - HTTP.get("http://#{domain}/.well-known/host-meta") do + # WebFinger is restricted to HTTPS - https://tools.ietf.org/html/rfc7033#section-9.1 + meta_url = "https://#{domain}/.well-known/host-meta" + + with {:ok, %{status: status, body: body}} when status in 200..299 <- HTTP.get(meta_url) do get_template_from_xml(body) else - _ -> - with {:ok, %{body: body, status: status}} when status in 200..299 <- - HTTP.get("https://#{domain}/.well-known/host-meta") do - get_template_from_xml(body) - else - e -> {:error, "Can't find LRDD template: #{inspect(e)}"} - end + error -> + Logger.warn("Can't find LRDD template in #{inspect(meta_url)}: #{inspect(error)}") + {:error, :lrdd_not_found} end end @@ -174,7 +182,7 @@ defp get_address_from_domain(domain, encoded_account) when is_binary(domain) do end end - defp get_address_from_domain(_, _), do: nil + defp get_address_from_domain(_, _), do: {:error, :webfinger_no_domain} @spec finger(String.t()) :: {:ok, map()} | {:error, any()} def finger(account) do @@ -191,13 +199,11 @@ def finger(account) do encoded_account = URI.encode("acct:#{account}") with address when is_binary(address) <- get_address_from_domain(domain, encoded_account), - response <- + {:ok, %{status: status, body: body, headers: headers}} when status in 200..299 <- HTTP.get( address, [{"accept", "application/xrd+xml,application/jrd+json"}] - ), - {:ok, %{status: status, body: body, headers: headers}} when status in 200..299 <- - response do + ) do case List.keyfind(headers, "content-type", 0) do {_, content_type} -> case Plug.Conn.Utils.media_type(content_type) do @@ -215,10 +221,9 @@ def finger(account) do {:error, {:content_type, nil}} end else - e -> - Logger.debug(fn -> "Couldn't finger #{account}" end) - Logger.debug(fn -> inspect(e) end) - {:error, e} + error -> + Logger.debug("Couldn't finger #{account}: #{inspect(error)}") + error end end end diff --git a/test/fixtures/tesla_mock/framatube.org_host_meta b/test/fixtures/tesla_mock/framatube.org_host_meta index 91516ff6d..02e25bd64 100644 --- a/test/fixtures/tesla_mock/framatube.org_host_meta +++ b/test/fixtures/tesla_mock/framatube.org_host_meta @@ -1,2 +1,2 @@ -framatube.orgResource Descriptor +framatube.orgResource Descriptor diff --git a/test/fixtures/tesla_mock/status.alpicola.com_host_meta b/test/fixtures/tesla_mock/status.alpicola.com_host_meta index 6948c30ea..78155f644 100644 --- a/test/fixtures/tesla_mock/status.alpicola.com_host_meta +++ b/test/fixtures/tesla_mock/status.alpicola.com_host_meta @@ -1,2 +1,2 @@ -status.alpicola.comResource Descriptor \ No newline at end of file +status.alpicola.comResource Descriptor diff --git a/test/fixtures/webfinger/masto-host-meta.xml b/test/fixtures/webfinger/masto-host-meta.xml new file mode 100644 index 000000000..f432a27c3 --- /dev/null +++ b/test/fixtures/webfinger/masto-host-meta.xml @@ -0,0 +1,4 @@ + + + + diff --git a/test/fixtures/webfinger/masto-user.json b/test/fixtures/webfinger/masto-user.json new file mode 100644 index 000000000..1702de011 --- /dev/null +++ b/test/fixtures/webfinger/masto-user.json @@ -0,0 +1,92 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "toot": "http://joinmastodon.org/ns#", + "featured": { + "@id": "toot:featured", + "@type": "@id" + }, + "featuredTags": { + "@id": "toot:featuredTags", + "@type": "@id" + }, + "alsoKnownAs": { + "@id": "as:alsoKnownAs", + "@type": "@id" + }, + "movedTo": { + "@id": "as:movedTo", + "@type": "@id" + }, + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "IdentityProof": "toot:IdentityProof", + "discoverable": "toot:discoverable", + "Device": "toot:Device", + "Ed25519Signature": "toot:Ed25519Signature", + "Ed25519Key": "toot:Ed25519Key", + "Curve25519Key": "toot:Curve25519Key", + "EncryptedMessage": "toot:EncryptedMessage", + "publicKeyBase64": "toot:publicKeyBase64", + "deviceId": "toot:deviceId", + "claim": { + "@type": "@id", + "@id": "toot:claim" + }, + "fingerprintKey": { + "@type": "@id", + "@id": "toot:fingerprintKey" + }, + "identityKey": { + "@type": "@id", + "@id": "toot:identityKey" + }, + "devices": { + "@type": "@id", + "@id": "toot:devices" + }, + "messageFranking": "toot:messageFranking", + "messageType": "toot:messageType", + "cipherText": "toot:cipherText", + "suspended": "toot:suspended", + "focalPoint": { + "@container": "@list", + "@id": "toot:focalPoint" + } + } + ], + "id": "https://{{domain}}/users/{{nickname}}", + "type": "Person", + "following": "https://{{domain}}/users/{{nickname}}/following", + "followers": "https://{{domain}}/users/{{nickname}}/followers", + "inbox": "https://{{domain}}/users/{{nickname}}/inbox", + "outbox": "https://{{domain}}/users/{{nickname}}/outbox", + "featured": "https://{{domain}}/users/{{nickname}}/collections/featured", + "featuredTags": "https://{{domain}}/users/{{nickname}}/collections/tags", + "preferredUsername": "{{nickname}}", + "name": "Name Name", + "summary": "

Summary

", + "url": "https://{{domain}}/@{{nickname}}", + "manuallyApprovesFollowers": false, + "discoverable": false, + "devices": "https://{{domain}}/users/{{nickname}}/collections/devices", + "publicKey": { + "id": "https://{{domain}}/users/{{nickname}}#main-key", + "owner": "https://{{domain}}/users/{{nickname}}", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvwDujxmxoYHs64MyVB3L\nG5ZyBxV3ufaMRBFu42bkcTpISq1WwZ+3Zb6CI8zOO+nM+Q2llrVRYjZa4ZFnOLvM\nTq/Kf+Zf5wy2aCRer88gX+MsJOAtItSi412y0a/rKOuFaDYLOLeTkRvmGLgZWbsr\nZJOp+YWb3zQ5qsIOInkc5BwI172tMsGeFtsnbNApPV4lrmtTGaJ8RiM8MR7XANBO\nfOHggSt1+eAIKGIsCmINEMzs1mG9D75xKtC/sM8GfbvBclQcBstGkHAEj1VHPW0c\nh6Bok5/QQppicyb8UA1PAA9bznSFtKlYE4xCH8rlCDSDTBRtdnBWHKcj619Ujz4Q\nawIDAQAB\n-----END PUBLIC KEY-----\n" + }, + "tag": [], + "attachment": [], + "endpoints": { + "sharedInbox": "https://{{domain}}/inbox" + }, + "icon": { + "type": "Image", + "mediaType": "image/jpeg", + "url": "https://s3.wasabisys.com/merp/accounts/avatars/000/000/001/original/6fdd3eee632af247.jpg" + } +} diff --git a/test/fixtures/webfinger/masto-webfinger.json b/test/fixtures/webfinger/masto-webfinger.json new file mode 100644 index 000000000..561be3fff --- /dev/null +++ b/test/fixtures/webfinger/masto-webfinger.json @@ -0,0 +1,23 @@ +{ + "subject": "acct:{{nickname}}@{{domain}}", + "aliases": [ + "https://{{subdomain}}/@{{nickname}}", + "https://{{subdomain}}/users/{{nickname}}" + ], + "links": [ + { + "rel": "http://webfinger.net/rel/profile-page", + "type": "text/html", + "href": "https://{{subdomain}}/@{{nickname}}" + }, + { + "rel": "self", + "type": "application/activity+json", + "href": "https://{{subdomain}}/users/{{nickname}}" + }, + { + "rel": "http://ostatus.org/schema/1.0/subscribe", + "template": "https://{{subdomain}}/authorize_interaction?uri={uri}" + } + ] +} diff --git a/test/fixtures/webfinger/pleroma-host-meta.xml b/test/fixtures/webfinger/pleroma-host-meta.xml new file mode 100644 index 000000000..88c274a1a --- /dev/null +++ b/test/fixtures/webfinger/pleroma-host-meta.xml @@ -0,0 +1 @@ + diff --git a/test/fixtures/webfinger/pleroma-user.json b/test/fixtures/webfinger/pleroma-user.json new file mode 100644 index 000000000..b822db46c --- /dev/null +++ b/test/fixtures/webfinger/pleroma-user.json @@ -0,0 +1,58 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://{{domain}}/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "alsoKnownAs": [], + "attachment": [], + "capabilities": { + "acceptsChatMessages": true + }, + "discoverable": true, + "endpoints": { + "oauthAuthorizationEndpoint": "https://{{domain}}/oauth/authorize", + "oauthRegistrationEndpoint": "https://{{domain}}/api/v1/apps", + "oauthTokenEndpoint": "https://{{domain}}/oauth/token", + "sharedInbox": "https://{{domain}}/inbox", + "uploadMedia": "https://{{domain}}/api/ap/upload_media" + }, + "followers": "https://{{domain}}/users/{{nickname}}/followers", + "following": "https://{{domain}}/users/{{nickname}}/following", + "icon": { + "type": "Image", + "url": "https://{{domain}}/media/a932a27f158b63c3a97e3a57d5384f714a82249274c6fc66c9eca581b4fd8af2.jpg" + }, + "id": "https://{{domain}}/users/{{nickname}}", + "image": { + "type": "Image", + "url": "https://{{domain}}/media/db15f476d0ad14488db4762b7800479e6ef67b1824f8b9ea5c1fa05b7525c5b7.jpg" + }, + "inbox": "https://{{domain}}/users/{{nickname}}/inbox", + "manuallyApprovesFollowers": false, + "name": "{{nickname}} :verified:", + "outbox": "https://{{domain}}/users/{{nickname}}/outbox", + "preferredUsername": "{{nickname}}", + "publicKey": { + "id": "https://{{domain}}/users/{{nickname}}#main-key", + "owner": "https://{{domain}}/users/{{nickname}}", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu4XOAopC4nRIxNlHlt60\n//nCicuedu5wvLGIoQ+KUM2u7/PhLrrTDEqr1A7yQL95S0X8ryYtALgFLI5A54ww\nqjMIbIGAs44lEmDLMEd+XI+XxREE8wdsFpb4QQzWug0DTyqlMouTU25k0tfKh1rF\n4PMJ3uBSjDTAGgFvLNyFWTiVVgChbTNgGOmrEBucRl4NmKzQ69/FIUwENV88oQSU\n3bWvQTEH9rWH1rCLpkmQwdRiWfnhFX/4EUqXukfgoskvenKR8ff3nYhElDqFoE0e\nqUnIW1OZceyl8JewVLcL6m0/wdKeosTsfrcWc8DKfnRYQcBGNoBEq9GrOHDU0q2v\nyQIDAQAB\n-----END PUBLIC KEY-----\n\n" + }, + "summary": "Pleroma BE dev", + "tag": [ + { + "icon": { + "type": "Image", + "url": "https://{{domain}}/emoji/mine/6143373a807b1ae7.png" + }, + "id": "https://{{domain}}/emoji/mine/6143373a807b1ae7.png", + "name": ":verified:", + "type": "Emoji", + "updated": "1970-01-01T00:00:00Z" + } + ], + "type": "Person", + "url": "https://{{domain}}/users/{{nickname}}" +} diff --git a/test/fixtures/webfinger/pleroma-webfinger.json b/test/fixtures/webfinger/pleroma-webfinger.json new file mode 100644 index 000000000..8f075eaaf --- /dev/null +++ b/test/fixtures/webfinger/pleroma-webfinger.json @@ -0,0 +1,27 @@ +{ + "aliases": [ + "https://{{subdomain}}/users/{{nickname}}" + ], + "links": [ + { + "href": "https://{{subdomain}}/users/{{nickname}}", + "rel": "http://webfinger.net/rel/profile-page", + "type": "text/html" + }, + { + "href": "https://{{subdomain}}/users/{{nickname}}", + "rel": "self", + "type": "application/activity+json" + }, + { + "href": "https://{{subdomain}}/users/{{nickname}}", + "rel": "self", + "type": "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"" + }, + { + "rel": "http://ostatus.org/schema/1.0/subscribe", + "template": "https://{{subdomain}}/ostatus_subscribe?acct={uri}" + } + ], + "subject": "acct:{{nickname}}@{{domain}}" +} diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs index dee76f676..67136e95b 100644 --- a/test/pleroma/user_test.exs +++ b/test/pleroma/user_test.exs @@ -738,6 +738,116 @@ test "gets an existing user by ap_id" do end end + describe "get_or_fetch/1 remote users with tld, while BE is runned on subdomain" do + setup do: clear_config([Pleroma.Web.WebFinger, :update_nickname_on_user_fetch], true) + + test "for mastodon" do + Tesla.Mock.mock(fn + %{url: "https://example.com/.well-known/host-meta"} -> + %Tesla.Env{ + status: 302, + headers: [{"location", "https://sub.example.com/.well-known/host-meta"}] + } + + %{url: "https://sub.example.com/.well-known/host-meta"} -> + %Tesla.Env{ + status: 200, + body: + "test/fixtures/webfinger/masto-host-meta.xml" + |> File.read!() + |> String.replace("{{domain}}", "sub.example.com") + } + + %{url: "https://sub.example.com/.well-known/webfinger?resource=acct:a@example.com"} -> + %Tesla.Env{ + status: 200, + body: + "test/fixtures/webfinger/masto-webfinger.json" + |> File.read!() + |> String.replace("{{nickname}}", "a") + |> String.replace("{{domain}}", "example.com") + |> String.replace("{{subdomain}}", "sub.example.com"), + headers: [{"content-type", "application/jrd+json"}] + } + + %{url: "https://sub.example.com/users/a"} -> + %Tesla.Env{ + status: 200, + body: + "test/fixtures/webfinger/masto-user.json" + |> File.read!() + |> String.replace("{{nickname}}", "a") + |> String.replace("{{domain}}", "sub.example.com"), + headers: [{"content-type", "application/activity+json"}] + } + + %{url: "https://sub.example.com/users/a/collections/featured"} -> + %Tesla.Env{ + status: 200, + body: + File.read!("test/fixtures/users_mock/masto_featured.json") + |> String.replace("{{domain}}", "sub.example.com") + |> String.replace("{{nickname}}", "a"), + headers: [{"content-type", "application/activity+json"}] + } + end) + + ap_id = "a@example.com" + {:ok, fetched_user} = User.get_or_fetch(ap_id) + + assert fetched_user.ap_id == "https://sub.example.com/users/a" + assert fetched_user.nickname == "a@example.com" + end + + test "for pleroma" do + Tesla.Mock.mock(fn + %{url: "https://example.com/.well-known/host-meta"} -> + %Tesla.Env{ + status: 302, + headers: [{"location", "https://sub.example.com/.well-known/host-meta"}] + } + + %{url: "https://sub.example.com/.well-known/host-meta"} -> + %Tesla.Env{ + status: 200, + body: + "test/fixtures/webfinger/pleroma-host-meta.xml" + |> File.read!() + |> String.replace("{{domain}}", "sub.example.com") + } + + %{url: "https://sub.example.com/.well-known/webfinger?resource=acct:a@example.com"} -> + %Tesla.Env{ + status: 200, + body: + "test/fixtures/webfinger/pleroma-webfinger.json" + |> File.read!() + |> String.replace("{{nickname}}", "a") + |> String.replace("{{domain}}", "example.com") + |> String.replace("{{subdomain}}", "sub.example.com"), + headers: [{"content-type", "application/jrd+json"}] + } + + %{url: "https://sub.example.com/users/a"} -> + %Tesla.Env{ + status: 200, + body: + "test/fixtures/webfinger/pleroma-user.json" + |> File.read!() + |> String.replace("{{nickname}}", "a") + |> String.replace("{{domain}}", "sub.example.com"), + headers: [{"content-type", "application/activity+json"}] + } + end) + + ap_id = "a@example.com" + {:ok, fetched_user} = User.get_or_fetch(ap_id) + + assert fetched_user.ap_id == "https://sub.example.com/users/a" + assert fetched_user.nickname == "a@example.com" + end + end + describe "fetching a user from nickname or trying to build one" do test "gets an existing user" do user = insert(:user) diff --git a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs b/test/pleroma/web/twitter_api/remote_follow_controller_test.exs index 97c9c6b1d..15e9b5884 100644 --- a/test/pleroma/web/twitter_api/remote_follow_controller_test.exs +++ b/test/pleroma/web/twitter_api/remote_follow_controller_test.exs @@ -3,7 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-only defmodule Pleroma.Web.TwitterAPI.RemoteFollowControllerTest do - use Pleroma.Web.ConnCase + use Pleroma.Web.ConnCase, async: true alias Pleroma.MFA alias Pleroma.MFA.TOTP diff --git a/test/pleroma/web/web_finger/web_finger_controller_test.exs b/test/pleroma/web/web_finger/web_finger_controller_test.exs index 66d79320f..29cb6e01b 100644 --- a/test/pleroma/web/web_finger/web_finger_controller_test.exs +++ b/test/pleroma/web/web_finger/web_finger_controller_test.exs @@ -48,6 +48,35 @@ test "Webfinger JRD" do ] end + test "reach user on tld, while pleroma is runned on subdomain" do + Pleroma.Web.Endpoint.config_change( + [{Pleroma.Web.Endpoint, url: [host: "sub.example.com"]}], + [] + ) + + clear_config([Pleroma.Web.Endpoint, :url, :host], "sub.example.com") + + clear_config([Pleroma.Web.WebFinger, :domain], "example.com") + + user = insert(:user, ap_id: "https://sub.example.com/users/bobby", nickname: "bobby") + + response = + build_conn() + |> put_req_header("accept", "application/jrd+json") + |> get("/.well-known/webfinger?resource=acct:#{user.nickname}@example.com") + |> json_response(200) + + assert response["subject"] == "acct:#{user.nickname}@example.com" + assert response["aliases"] == ["https://sub.example.com/users/#{user.nickname}"] + + on_exit(fn -> + Pleroma.Web.Endpoint.config_change( + [{Pleroma.Web.Endpoint, url: [host: "localhost"]}], + [] + ) + end) + end + test "it returns 404 when user isn't found (JSON)" do result = build_conn() diff --git a/test/pleroma/web/web_finger_test.exs b/test/pleroma/web/web_finger_test.exs index 0a36d57e6..d10238b1a 100644 --- a/test/pleroma/web/web_finger_test.exs +++ b/test/pleroma/web/web_finger_test.exs @@ -47,7 +47,7 @@ test "returns error for nonsensical input" do test "returns error when there is no content-type header" do Tesla.Mock.mock(fn - %{url: "http://social.heldscal.la/.well-known/host-meta"} -> + %{url: "https://social.heldscal.la/.well-known/host-meta"} -> {:ok, %Tesla.Env{ status: 200, @@ -120,7 +120,7 @@ test "it gets the xrd endpoint for hubzilla" do test "it gets the xrd endpoint for statusnet" do {:ok, template} = WebFinger.find_lrdd_template("status.alpicola.com") - assert template == "http://status.alpicola.com/main/xrd?uri={uri}" + assert template == "https://status.alpicola.com/main/xrd?uri={uri}" end test "it works with idna domains as nickname" do @@ -147,7 +147,7 @@ test "respects json content-type" do headers: [{"content-type", "application/jrd+json"}] }} - %{url: "http://mastodon.social/.well-known/host-meta"} -> + %{url: "https://mastodon.social/.well-known/host-meta"} -> {:ok, %Tesla.Env{ status: 200, @@ -170,7 +170,7 @@ test "respects xml content-type" do headers: [{"content-type", "application/xrd+xml"}] }} - %{url: "http://pawoo.net/.well-known/host-meta"} -> + %{url: "https://pawoo.net/.well-known/host-meta"} -> {:ok, %Tesla.Env{ status: 200, diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index dfac773de..42dcb2bc3 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -424,14 +424,6 @@ def get("http://mastodon.example.org/users/gargron", _, _, [ {:error, :nxdomain} end - def get("http://osada.macgirvin.com/.well-known/host-meta", _, _, _) do - {:ok, - %Tesla.Env{ - status: 404, - body: "" - }} - end - def get("https://osada.macgirvin.com/.well-known/host-meta", _, _, _) do {:ok, %Tesla.Env{ @@ -765,7 +757,7 @@ def get( {:ok, %Tesla.Env{status: 406, body: ""}} end - def get("http://squeet.me/.well-known/host-meta", _, _, _) do + def get("https://squeet.me/.well-known/host-meta", _, _, _) do {:ok, %Tesla.Env{status: 200, body: File.read!("test/fixtures/tesla_mock/squeet.me_host_meta")}} end @@ -806,7 +798,7 @@ def get( {:ok, %Tesla.Env{status: 200, body: "", headers: [{"content-type", "application/jrd+json"}]}} end - def get("http://framatube.org/.well-known/host-meta", _, _, _) do + def get("https://framatube.org/.well-known/host-meta", _, _, _) do {:ok, %Tesla.Env{ status: 200, @@ -815,7 +807,7 @@ def get("http://framatube.org/.well-known/host-meta", _, _, _) do end def get( - "http://framatube.org/main/xrd?uri=acct:framasoft@framatube.org", + "https://framatube.org/main/xrd?uri=acct:framasoft@framatube.org", _, _, [{"accept", "application/xrd+xml,application/jrd+json"}] @@ -850,7 +842,7 @@ def get( }} end - def get("http://status.alpicola.com/.well-known/host-meta", _, _, _) do + def get("https://status.alpicola.com/.well-known/host-meta", _, _, _) do {:ok, %Tesla.Env{ status: 200, @@ -858,7 +850,7 @@ def get("http://status.alpicola.com/.well-known/host-meta", _, _, _) do }} end - def get("http://macgirvin.com/.well-known/host-meta", _, _, _) do + def get("https://macgirvin.com/.well-known/host-meta", _, _, _) do {:ok, %Tesla.Env{ status: 200, @@ -866,7 +858,7 @@ def get("http://macgirvin.com/.well-known/host-meta", _, _, _) do }} end - def get("http://gerzilla.de/.well-known/host-meta", _, _, _) do + def get("https://gerzilla.de/.well-known/host-meta", _, _, _) do {:ok, %Tesla.Env{ status: 200, From ca000f8301a1ed08fbc6cdb3712b82c4cdb4b78c Mon Sep 17 00:00:00 2001 From: floatingghost Date: Tue, 2 Aug 2022 14:19:24 +0000 Subject: [PATCH 48/82] Merge mrf_simple-reject with quarantine (#137) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/137 --- CHANGELOG.md | 1 + config/config.exs | 1 - config/description.exs | 2 +- docs/docs/configuration/cheatsheet.md | 4 +-- lib/pleroma/config/deprecation_warnings.ex | 6 ++-- lib/pleroma/web/activity_pub/publisher.ex | 7 ++++- .../web/activity_pub/publisher_test.exs | 30 ++++++++++++++++++- 7 files changed, 43 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6010744dd..c658af460 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Changed - quarantining is now considered absolutely; public activities are no longer an exception. +- also merged quarantine and mrf reject - quarantine is now deprecated - flavours: - amd64 is built for debian stable. Compatible with ubuntu 20. - ubuntu-jammy is built for... well, ubuntu 22 (LTS) diff --git a/config/config.exs b/config/config.exs index d14c4e3d7..947ff0ecc 100644 --- a/config/config.exs +++ b/config/config.exs @@ -215,7 +215,6 @@ ], allow_relay: true, public: true, - quarantined_instances: [], static_dir: "instance/static/", allowed_post_formats: [ "text/plain", diff --git a/config/description.exs b/config/description.exs index e864f090c..9cbd0024d 100644 --- a/config/description.exs +++ b/config/description.exs @@ -691,7 +691,7 @@ key_placeholder: "instance", value_placeholder: "reason", description: - "List of ActivityPub instances where activities will not be sent, and the reason for doing so", + "(Deprecated, will be removed in next release) List of ActivityPub instances where activities will not be sent, and the reason for doing so", suggestions: [ {"quarantined.com", "Reason"}, {"*.quarantined.com", "Reason"} diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index bac20070f..83d943c51 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -34,7 +34,7 @@ To add configuration to your config file, you can copy it from the base config. * `federation_reachability_timeout_days`: Timeout (in days) of each external federation target being unreachable prior to pausing federating to it. * `allow_relay`: Permits remote instances to subscribe to all public posts of your instance. This may increase the visibility of your instance. * `public`: Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note that there is a dependent setting restricting or allowing unauthenticated access to specific resources, see `restrict_unauthenticated` for more details. -* `quarantined_instances`: ActivityPub instances where activities will not be sent. They can still reach there via other means, we just won't send them. +* `quarantined_instances`: *DEPRECATED* ActivityPub instances where activities will not be sent. They can still reach there via other means, we just won't send them. * `allowed_post_formats`: MIME-type list of formats allowed to be posted (transformed into HTML). * `extended_nickname_format`: Set to `true` to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames. @@ -131,7 +131,7 @@ To add configuration to your config file, you can copy it from the base config. * `media_removal`: List of instances to strip media attachments from and the reason for doing so. * `media_nsfw`: List of instances to tag all media as NSFW (sensitive) from and the reason for doing so. * `federated_timeline_removal`: List of instances to remove from the Federated Timeline (aka The Whole Known Network) and the reason for doing so. -* `reject`: List of instances to reject activities (except deletes) from and the reason for doing so. +* `reject`: List of instances to reject activities (except deletes) from and the reason for doing so. Additionally prevents activities from being sent to that instance. * `accept`: List of instances to only accept activities (except deletes) from and the reason for doing so. * `followers_only`: Force posts from the given instances to be visible by followers only and the reason for doing so. * `report_removal`: List of instances to reject reports from and the reason for doing so. diff --git a/lib/pleroma/config/deprecation_warnings.ex b/lib/pleroma/config/deprecation_warnings.ex index 3675c5e4a..8a336c35a 100644 --- a/lib/pleroma/config/deprecation_warnings.ex +++ b/lib/pleroma/config/deprecation_warnings.ex @@ -17,7 +17,9 @@ defmodule Pleroma.Config.DeprecationWarnings do {[:instance, :mrf_transparency], [:mrf, :transparency], "\n* `config :pleroma, :instance, mrf_transparency` is now `config :pleroma, :mrf, transparency`"}, {[:instance, :mrf_transparency_exclusions], [:mrf, :transparency_exclusions], - "\n* `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`"} + "\n* `config :pleroma, :instance, mrf_transparency_exclusions` is now `config :pleroma, :mrf, transparency_exclusions`"}, + {[:instance, :quarantined_instances], [:mrf_simple, :reject], + "\n* `config :pleroma, :instance, :quarantined_instances` is now covered by `:pleroma, :mrf_simple, :reject`"} ] def check_simple_policy_tuples do @@ -81,7 +83,7 @@ def check_simple_policy_tuples do end def check_quarantined_instances_tuples do - has_strings = Config.get([:instance, :quarantined_instances]) |> Enum.any?(&is_binary/1) + has_strings = Config.get([:instance, :quarantined_instances], []) |> Enum.any?(&is_binary/1) if has_strings do Logger.warn(""" diff --git a/lib/pleroma/web/activity_pub/publisher.ex b/lib/pleroma/web/activity_pub/publisher.ex index cd820fa3d..ed67a060d 100644 --- a/lib/pleroma/web/activity_pub/publisher.ex +++ b/lib/pleroma/web/activity_pub/publisher.ex @@ -103,11 +103,16 @@ defp signature_host(%URI{port: port, scheme: scheme, host: host}) do end end + defp blocked_instances do + Config.get([:instance, :quarantined_instances], []) ++ + Config.get([:mrf_simple, :reject], []) + end + defp should_federate?(inbox) do %{host: host} = URI.parse(inbox) quarantined_instances = - Config.get([:instance, :quarantined_instances], []) + blocked_instances() |> Pleroma.Web.ActivityPub.MRF.instance_list_from_tuples() |> Pleroma.Web.ActivityPub.MRF.subdomains_regex() diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs index 95f12de2d..0f1d621b1 100644 --- a/test/pleroma/web/activity_pub/publisher_test.exs +++ b/test/pleroma/web/activity_pub/publisher_test.exs @@ -26,6 +26,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do setup_all do clear_config([:instance, :federating], true) clear_config([:instance, :quarantined_instances], []) + clear_config([:mrf_simple, :reject], []) end describe "gather_webfinger_links/1" do @@ -270,12 +271,14 @@ test "publish to url with with different ports" do end describe "publish/2" do - test_with_mock "doesn't publish any activity to quarantined instances.", + test_with_mock "doesn't publish any activity to quarantined or rejected instances.", Pleroma.Web.Federator.Publisher, [:passthrough], [] do Config.put([:instance, :quarantined_instances], [{"domain.com", "some reason"}]) + Config.put([:mrf_simple, :reject], [{"rejected.com", "some reason"}]) + follower = insert(:user, %{ local: false, @@ -283,9 +286,18 @@ test "publish to url with with different ports" do ap_enabled: true }) + another_follower = + insert(:user, %{ + local: false, + inbox: "https://rejected.com/users/nick2/inbox", + ap_enabled: true + }) + actor = insert(:user, follower_address: follower.ap_id) {:ok, follower, actor} = Pleroma.User.follow(follower, actor) + {:ok, _another_follower, actor} = Pleroma.User.follow(another_follower, actor) + actor = refresh_record(actor) note_activity = @@ -321,6 +333,22 @@ test "publish to url with with different ports" do id: public_note_activity.data["id"] }) ) + + assert not called( + Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ + inbox: "https://rejected.com/users/nick2/inbox", + actor_id: actor.id, + id: note_activity.data["id"] + }) + ) + + assert not called( + Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ + inbox: "https://rejected.com/users/nick1/inbox", + actor_id: actor.id, + id: public_note_activity.data["id"] + }) + ) end test_with_mock "Publishes a non-public activity to non-quarantined instances.", From c9600dbbbf925d984e745a621fa03d1850c5cfd2 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Tue, 2 Aug 2022 14:46:46 +0000 Subject: [PATCH 49/82] local-only-fixed (#138) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/138 --- lib/pleroma/web/activity_pub/activity_pub.ex | 23 ++- lib/pleroma/web/activity_pub/visibility.ex | 8 +- .../controllers/timeline_controller.ex | 2 + ...read_visibility_to_be_local_only_aware.exs | 153 ++++++++++++++++++ .../activity_pub_controller_test.exs | 50 ++++++ .../controllers/account_controller_test.exs | 14 ++ .../controllers/filter_controller_test.exs | 6 +- .../controllers/status_controller_test.exs | 53 ++++-- .../controllers/timeline_controller_test.exs | 41 +++++ 9 files changed, 326 insertions(+), 24 deletions(-) create mode 100644 priv/repo/migrations/20220509180452_change_thread_visibility_to_be_local_only_aware.exs diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 29a1a40b5..8ab87bfee 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -486,9 +486,18 @@ def fetch_activities(recipients, opts \\ %{}, pagination \\ :keyset) do @spec fetch_public_or_unlisted_activities(map(), Pagination.type()) :: [Activity.t()] def fetch_public_or_unlisted_activities(opts \\ %{}, pagination \\ :keyset) do + includes_local_public = Map.get(opts, :includes_local_public, false) + opts = Map.delete(opts, :user) - [Constants.as_public()] + intended_recipients = + if includes_local_public do + [Constants.as_public(), as_local_public()] + else + [Constants.as_public()] + end + + intended_recipients |> fetch_activities_query(opts) |> restrict_unlisted(opts) |> fetch_paginated_optimized(opts, pagination) @@ -588,9 +597,11 @@ defp restrict_thread_visibility(query, %{user: %User{skip_thread_containment: tr do: query defp restrict_thread_visibility(query, %{user: %User{ap_id: ap_id}}, _) do + local_public = as_local_public() + from( a in query, - where: fragment("thread_visibility(?, (?)->>'id') = true", ^ap_id, a.data) + where: fragment("thread_visibility(?, (?)->>'id', ?) = true", ^ap_id, a.data, ^local_public) ) end @@ -677,8 +688,12 @@ defp fetch_activities_for_reading_user(reading_user, params) do defp user_activities_recipients(%{godmode: true}), do: [] defp user_activities_recipients(%{reading_user: reading_user}) do - if reading_user do - [Constants.as_public(), reading_user.ap_id | User.following(reading_user)] + if not is_nil(reading_user) and reading_user.local do + [ + Constants.as_public(), + as_local_public(), + reading_user.ap_id | User.following(reading_user) + ] else [Constants.as_public()] end diff --git a/lib/pleroma/web/activity_pub/visibility.ex b/lib/pleroma/web/activity_pub/visibility.ex index 98b69f0b7..02d4e195a 100644 --- a/lib/pleroma/web/activity_pub/visibility.ex +++ b/lib/pleroma/web/activity_pub/visibility.ex @@ -85,11 +85,9 @@ def visible_for_user?(%{__struct__: module} = message, user) x = [user.ap_id | User.following(user)] y = [message.data["actor"]] ++ message.data["to"] ++ (message.data["cc"] || []) - if is_local_public?(message) do - user.local - else - is_public?(message) || Enum.any?(x, &(&1 in y)) - end + user_is_local = user.local + federatable = not is_local_public?(message) + (is_public?(message) || Enum.any?(x, &(&1 in y))) and (user_is_local || federatable) end def entire_thread_visible_for_user?(%Activity{} = activity, %User{} = user) do diff --git a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex index b9978c05b..5f8acb2df 100644 --- a/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex @@ -113,6 +113,8 @@ def public(%{assigns: %{user: user}} = conn, params) do |> Map.put(:muting_user, user) |> Map.put(:reply_filtering_user, user) |> Map.put(:instance, params[:instance]) + # Restricts unfederated content to authenticated users + |> Map.put(:includes_local_public, not is_nil(user)) |> ActivityPub.fetch_public_activities() conn diff --git a/priv/repo/migrations/20220509180452_change_thread_visibility_to_be_local_only_aware.exs b/priv/repo/migrations/20220509180452_change_thread_visibility_to_be_local_only_aware.exs new file mode 100644 index 000000000..ea6ae6c5c --- /dev/null +++ b/priv/repo/migrations/20220509180452_change_thread_visibility_to_be_local_only_aware.exs @@ -0,0 +1,153 @@ +defmodule Pleroma.Repo.Migrations.ChangeThreadVisibilityToBeLocalOnlyAware do + use Ecto.Migration + + def up do + execute("DROP FUNCTION IF EXISTS thread_visibility(actor varchar, activity_id varchar)") + execute(update_thread_visibility()) + end + + def down do + execute( + "DROP FUNCTION IF EXISTS thread_visibility(actor varchar, activity_id varchar, local_public varchar)" + ) + + execute(restore_thread_visibility()) + end + + def update_thread_visibility do + """ + CREATE OR REPLACE FUNCTION thread_visibility(actor varchar, activity_id varchar, local_public varchar default '') RETURNS boolean AS $$ + DECLARE + public varchar := 'https://www.w3.org/ns/activitystreams#Public'; + child objects%ROWTYPE; + activity activities%ROWTYPE; + author_fa varchar; + valid_recipients varchar[]; + actor_user_following varchar[]; + BEGIN + --- Fetch actor following + SELECT array_agg(following.follower_address) INTO actor_user_following FROM following_relationships + JOIN users ON users.id = following_relationships.follower_id + JOIN users AS following ON following.id = following_relationships.following_id + WHERE users.ap_id = actor; + + --- Fetch our initial activity. + SELECT * INTO activity FROM activities WHERE activities.data->>'id' = activity_id; + + LOOP + --- Ensure that we have an activity before continuing. + --- If we don't, the thread is not satisfiable. + IF activity IS NULL THEN + RETURN false; + END IF; + + --- We only care about Create activities. + IF activity.data->>'type' != 'Create' THEN + RETURN true; + END IF; + + --- Normalize the child object into child. + SELECT * INTO child FROM objects + INNER JOIN activities ON COALESCE(activities.data->'object'->>'id', activities.data->>'object') = objects.data->>'id' + WHERE COALESCE(activity.data->'object'->>'id', activity.data->>'object') = objects.data->>'id'; + + --- Fetch the author's AS2 following collection. + SELECT COALESCE(users.follower_address, '') INTO author_fa FROM users WHERE users.ap_id = activity.actor; + + --- Prepare valid recipients array. + valid_recipients := ARRAY[actor, public]; + --- If we specified local public, add it. + IF local_public <> '' THEN + valid_recipients := valid_recipients || local_public; + END IF; + IF ARRAY[author_fa] && actor_user_following THEN + valid_recipients := valid_recipients || author_fa; + END IF; + + --- Check visibility. + IF NOT valid_recipients && activity.recipients THEN + --- activity not visible, break out of the loop + RETURN false; + END IF; + + --- If there's a parent, load it and do this all over again. + IF (child.data->'inReplyTo' IS NOT NULL) AND (child.data->'inReplyTo' != 'null'::jsonb) THEN + SELECT * INTO activity FROM activities + INNER JOIN objects ON COALESCE(activities.data->'object'->>'id', activities.data->>'object') = objects.data->>'id' + WHERE child.data->>'inReplyTo' = objects.data->>'id'; + ELSE + RETURN true; + END IF; + END LOOP; + END; + $$ LANGUAGE plpgsql IMMUTABLE; + """ + end + + # priv/repo/migrations/20191007073319_create_following_relationships.exs + def restore_thread_visibility do + """ + CREATE OR REPLACE FUNCTION thread_visibility(actor varchar, activity_id varchar) RETURNS boolean AS $$ + DECLARE + public varchar := 'https://www.w3.org/ns/activitystreams#Public'; + child objects%ROWTYPE; + activity activities%ROWTYPE; + author_fa varchar; + valid_recipients varchar[]; + actor_user_following varchar[]; + BEGIN + --- Fetch actor following + SELECT array_agg(following.follower_address) INTO actor_user_following FROM following_relationships + JOIN users ON users.id = following_relationships.follower_id + JOIN users AS following ON following.id = following_relationships.following_id + WHERE users.ap_id = actor; + + --- Fetch our initial activity. + SELECT * INTO activity FROM activities WHERE activities.data->>'id' = activity_id; + + LOOP + --- Ensure that we have an activity before continuing. + --- If we don't, the thread is not satisfiable. + IF activity IS NULL THEN + RETURN false; + END IF; + + --- We only care about Create activities. + IF activity.data->>'type' != 'Create' THEN + RETURN true; + END IF; + + --- Normalize the child object into child. + SELECT * INTO child FROM objects + INNER JOIN activities ON COALESCE(activities.data->'object'->>'id', activities.data->>'object') = objects.data->>'id' + WHERE COALESCE(activity.data->'object'->>'id', activity.data->>'object') = objects.data->>'id'; + + --- Fetch the author's AS2 following collection. + SELECT COALESCE(users.follower_address, '') INTO author_fa FROM users WHERE users.ap_id = activity.actor; + + --- Prepare valid recipients array. + valid_recipients := ARRAY[actor, public]; + IF ARRAY[author_fa] && actor_user_following THEN + valid_recipients := valid_recipients || author_fa; + END IF; + + --- Check visibility. + IF NOT valid_recipients && activity.recipients THEN + --- activity not visible, break out of the loop + RETURN false; + END IF; + + --- If there's a parent, load it and do this all over again. + IF (child.data->'inReplyTo' IS NOT NULL) AND (child.data->'inReplyTo' != 'null'::jsonb) THEN + SELECT * INTO activity FROM activities + INNER JOIN objects ON COALESCE(activities.data->'object'->>'id', activities.data->>'object') = objects.data->>'id' + WHERE child.data->>'inReplyTo' = objects.data->>'id'; + ELSE + RETURN true; + END IF; + END LOOP; + END; + $$ LANGUAGE plpgsql IMMUTABLE; + """ + end +end diff --git a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs index 511405624..da5c87bd8 100644 --- a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs @@ -247,6 +247,27 @@ test "returns local-only objects when authenticated", %{conn: conn} do assert json_response(response, 200) == ObjectView.render("object.json", %{object: object}) end + test "does not return local-only objects for remote users", %{conn: conn} do + user = insert(:user) + reader = insert(:user, local: false) + + {:ok, post} = + CommonAPI.post(user, %{status: "test @#{reader.nickname}", visibility: "local"}) + + assert Pleroma.Web.ActivityPub.Visibility.is_local_public?(post) + + object = Object.normalize(post, fetch: false) + uuid = String.split(object.data["id"], "/") |> List.last() + + assert response = + conn + |> assign(:user, reader) + |> put_req_header("accept", "application/activity+json") + |> get("/objects/#{uuid}") + + json_response(response, 404) + end + test "it returns a json representation of the object with accept application/json", %{ conn: conn } do @@ -1297,6 +1318,35 @@ test "it returns 200 even if there're no activities", %{conn: conn} do assert outbox_endpoint == result["id"] end + test "it returns a local note activity when authenticated as local user", %{conn: conn} do + user = insert(:user) + reader = insert(:user) + {:ok, note_activity} = CommonAPI.post(user, %{status: "mew mew", visibility: "local"}) + ap_id = note_activity.data["id"] + + resp = + conn + |> assign(:user, reader) + |> put_req_header("accept", "application/activity+json") + |> get("/users/#{user.nickname}/outbox?page=true") + |> json_response(200) + + assert %{"orderedItems" => [%{"id" => ^ap_id}]} = resp + end + + test "it does not return a local note activity when unauthenticated", %{conn: conn} do + user = insert(:user) + {:ok, _note_activity} = CommonAPI.post(user, %{status: "mew mew", visibility: "local"}) + + resp = + conn + |> put_req_header("accept", "application/activity+json") + |> get("/users/#{user.nickname}/outbox?page=true") + |> json_response(200) + + assert %{"orderedItems" => []} = resp + end + test "it returns a note activity in a collection", %{conn: conn} do note_activity = insert(:note_activity) note_object = Object.normalize(note_activity, fetch: false) diff --git a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs index 402c71e77..dcdff6c09 100644 --- a/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/account_controller_test.exs @@ -414,6 +414,20 @@ test "unimplemented pinned statuses feature", %{conn: conn} do assert json_response_and_validate_schema(conn, 200) == [] end + test "gets local-only statuses for authenticated users", %{user: _user, conn: conn} do + user_one = insert(:user) + + {:ok, activity} = CommonAPI.post(user_one, %{status: "HI!!!", visibility: "local"}) + + resp = + conn + |> get("/api/v1/accounts/#{user_one.id}/statuses") + |> json_response_and_validate_schema(200) + + assert [%{"id" => id}] = resp + assert id == to_string(activity.id) + end + test "gets an users media, excludes reblogs", %{conn: conn} do note = insert(:note_activity) user = User.get_cached_by_ap_id(note.data["actor"]) diff --git a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs index 90aa9398f..66f7ed579 100644 --- a/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/filter_controller_test.exs @@ -67,9 +67,11 @@ test "a filter with expires_in", %{conn: conn, user: user} do expires_at = NaiveDateTime.utc_now() |> NaiveDateTime.add(in_seconds) - |> Pleroma.Web.CommonAPI.Utils.to_masto_date() - assert response["expires_at"] == expires_at + assert NaiveDateTime.diff( + NaiveDateTime.from_iso8601!(response["expires_at"]), + expires_at + ) < 5 filter = Filter.get(response["id"], user) diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index b0efddb2a..1a3bc2990 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -1855,23 +1855,50 @@ test "expires_at is nil for another user" do |> json_response_and_validate_schema(:ok) end - test "posting a local only status" do - %{user: _user, conn: conn} = oauth_access(["write:statuses"]) + describe "local-only statuses" do + test "posting a local only status" do + %{user: _user, conn: conn} = oauth_access(["write:statuses"]) - conn_one = - conn - |> put_req_header("content-type", "application/json") - |> post("/api/v1/statuses", %{ - "status" => "cofe", - "visibility" => "local" - }) + conn_one = + conn + |> put_req_header("content-type", "application/json") + |> post("/api/v1/statuses", %{ + "status" => "cofe", + "visibility" => "local" + }) - local = Utils.as_local_public() + local = Utils.as_local_public() - assert %{"content" => "cofe", "id" => id, "visibility" => "local"} = - json_response_and_validate_schema(conn_one, 200) + assert %{"content" => "cofe", "id" => id, "visibility" => "local"} = + json_response_and_validate_schema(conn_one, 200) - assert %Activity{id: ^id, data: %{"to" => [^local]}} = Activity.get_by_id(id) + assert %Activity{id: ^id, data: %{"to" => [^local]}} = Activity.get_by_id(id) + end + + test "other users can read local-only posts" do + user = insert(:user) + %{user: _reader, conn: conn} = oauth_access(["read:statuses"]) + + {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) + + received = + conn + |> get("/api/v1/statuses/#{activity.id}") + |> json_response_and_validate_schema(:ok) + + assert received["id"] == activity.id + end + + test "anonymous users cannot see local-only posts" do + user = insert(:user) + + {:ok, activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) + + _received = + build_conn() + |> get("/api/v1/statuses/#{activity.id}") + |> json_response_and_validate_schema(:not_found) + end end describe "muted reactions" do diff --git a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs index fe32a4955..cf60ba93e 100644 --- a/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/timeline_controller_test.exs @@ -367,6 +367,47 @@ test "muted emotions", %{conn: conn} do } ] = result end + + test "should return local-only posts for authenticated users" do + user = insert(:user) + %{user: _reader, conn: conn} = oauth_access(["read:statuses"]) + + {:ok, %{id: id}} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) + + result = + conn + |> get("/api/v1/timelines/public") + |> json_response_and_validate_schema(200) + + assert [%{"id" => ^id}] = result + end + + test "should not return local-only posts for users without read:statuses" do + user = insert(:user) + %{user: _reader, conn: conn} = oauth_access([]) + + {:ok, _activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) + + result = + conn + |> get("/api/v1/timelines/public") + |> json_response_and_validate_schema(200) + + assert [] = result + end + + test "should not return local-only posts for anonymous users" do + user = insert(:user) + + {:ok, _activity} = CommonAPI.post(user, %{status: "#2hu #2HU", visibility: "local"}) + + result = + build_conn() + |> get("/api/v1/timelines/public") + |> json_response_and_validate_schema(200) + + assert [] = result + end end defp local_and_remote_activities do From f08241c8ab1b1f920e6c2d179fc1086b0ad10c1d Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Sat, 7 May 2022 00:20:50 -0400 Subject: [PATCH 50/82] Allow users to create backups without providing email address Ref: backup-without-email --- lib/pleroma/user/backup.ex | 18 +------- lib/pleroma/workers/backup_worker.ex | 24 ++++++++-- test/pleroma/user/backup_test.exs | 45 +++++++++++++++++-- .../controllers/backup_controller_test.exs | 20 +++++++++ 4 files changed, 82 insertions(+), 25 deletions(-) diff --git a/lib/pleroma/user/backup.ex b/lib/pleroma/user/backup.ex index cba94248f..2c6378265 100644 --- a/lib/pleroma/user/backup.ex +++ b/lib/pleroma/user/backup.ex @@ -32,9 +32,7 @@ defmodule Pleroma.User.Backup do end def create(user, admin_id \\ nil) do - with :ok <- validate_email_enabled(), - :ok <- validate_user_email(user), - :ok <- validate_limit(user, admin_id), + with :ok <- validate_limit(user, admin_id), {:ok, backup} <- user |> new() |> Repo.insert() do BackupWorker.process(backup, admin_id) end @@ -86,20 +84,6 @@ defp validate_limit(user, nil) do end end - defp validate_email_enabled do - if Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) do - :ok - else - {:error, dgettext("errors", "Backups require enabled email")} - end - end - - defp validate_user_email(%User{email: nil}) do - {:error, dgettext("errors", "Email is required")} - end - - defp validate_user_email(%User{email: email}) when is_binary(email), do: :ok - def get_last(user_id) do __MODULE__ |> where(user_id: ^user_id) diff --git a/lib/pleroma/workers/backup_worker.ex b/lib/pleroma/workers/backup_worker.ex index 9b763b04b..66c5c3591 100644 --- a/lib/pleroma/workers/backup_worker.ex +++ b/lib/pleroma/workers/backup_worker.ex @@ -37,10 +37,7 @@ def perform(%Job{ backup_id |> Backup.get() |> Backup.process(), {:ok, _job} <- schedule_deletion(backup), :ok <- Backup.remove_outdated(backup), - {:ok, _} <- - backup - |> Pleroma.Emails.UserEmail.backup_is_ready_email(admin_user_id) - |> Pleroma.Emails.Mailer.deliver() do + :ok <- maybe_deliver_email(backup, admin_user_id) do {:ok, backup} end end @@ -51,4 +48,23 @@ def perform(%Job{args: %{"op" => "delete", "backup_id" => backup_id}}) do nil -> :ok end end + + defp has_email?(user) do + not is_nil(user.email) and user.email != "" + end + + defp maybe_deliver_email(backup, admin_user_id) do + has_mailer = Pleroma.Config.get([Pleroma.Emails.Mailer, :enabled]) + backup = backup |> Pleroma.Repo.preload(:user) + + if has_email?(backup.user) and has_mailer do + backup + |> Pleroma.Emails.UserEmail.backup_is_ready_email(admin_user_id) + |> Pleroma.Emails.Mailer.deliver() + + :ok + else + :ok + end + end end diff --git a/test/pleroma/user/backup_test.exs b/test/pleroma/user/backup_test.exs index b16152876..029bbbf56 100644 --- a/test/pleroma/user/backup_test.exs +++ b/test/pleroma/user/backup_test.exs @@ -22,15 +22,15 @@ defmodule Pleroma.User.BackupTest do clear_config([Pleroma.Emails.Mailer, :enabled], true) end - test "it requries enabled email" do + test "it does not requrie enabled email" do clear_config([Pleroma.Emails.Mailer, :enabled], false) user = insert(:user) - assert {:error, "Backups require enabled email"} == Backup.create(user) + assert {:ok, _} = Backup.create(user) end - test "it requries user's email" do + test "it does not require user's email" do user = insert(:user, %{email: nil}) - assert {:error, "Email is required"} == Backup.create(user) + assert {:ok, _} = Backup.create(user) end test "it creates a backup record and an Oban job" do @@ -75,6 +75,43 @@ test "it process a backup record" do ) end + test "it does not send an email if the user does not have an email" do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + %{id: user_id} = user = insert(:user, %{email: nil}) + + assert {:ok, %Oban.Job{args: %{"backup_id" => backup_id} = args}} = Backup.create(user) + assert {:ok, backup} = perform_job(BackupWorker, args) + assert backup.file_size > 0 + assert %Backup{id: ^backup_id, processed: true, user_id: ^user_id} = backup + + assert_no_email_sent() + end + + test "it does not send an email if mailer is not on" do + clear_config([Pleroma.Emails.Mailer, :enabled], false) + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + %{id: user_id} = user = insert(:user) + + assert {:ok, %Oban.Job{args: %{"backup_id" => backup_id} = args}} = Backup.create(user) + assert {:ok, backup} = perform_job(BackupWorker, args) + assert backup.file_size > 0 + assert %Backup{id: ^backup_id, processed: true, user_id: ^user_id} = backup + + assert_no_email_sent() + end + + test "it does not send an email if the user has an empty email" do + clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) + %{id: user_id} = user = insert(:user, %{email: ""}) + + assert {:ok, %Oban.Job{args: %{"backup_id" => backup_id} = args}} = Backup.create(user) + assert {:ok, backup} = perform_job(BackupWorker, args) + assert backup.file_size > 0 + assert %Backup{id: ^backup_id, processed: true, user_id: ^user_id} = backup + + assert_no_email_sent() + end + test "it removes outdated backups after creating a fresh one" do clear_config([Backup, :limit_days], -1) clear_config([Pleroma.Upload, :uploader], Pleroma.Uploaders.Local) diff --git a/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs b/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs index 3ee660a05..ba17636da 100644 --- a/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs +++ b/test/pleroma/web/pleroma_api/controllers/backup_controller_test.exs @@ -82,4 +82,24 @@ test "POST /api/v1/pleroma/backups", %{user: _user, conn: conn} do |> post("/api/v1/pleroma/backups") |> json_response_and_validate_schema(400) end + + test "Backup without email address" do + user = Pleroma.Factory.insert(:user, email: nil) + %{conn: conn} = oauth_access(["read:accounts"], user: user) + + assert is_nil(user.email) + + assert [ + %{ + "content_type" => "application/zip", + "url" => _url, + "file_size" => 0, + "processed" => false, + "inserted_at" => _ + } + ] = + conn + |> post("/api/v1/pleroma/backups") + |> json_response_and_validate_schema(:ok) + end end From 8bfd01b9c75ceb8ebae9e5735d50300938ebdcc4 Mon Sep 17 00:00:00 2001 From: Francis Dinh Date: Wed, 3 Aug 2022 01:05:53 -0400 Subject: [PATCH 51/82] Update default paths --- lib/pleroma/config/holder.ex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/config/holder.ex b/lib/pleroma/config/holder.ex index 4d186a854..d6bf948ae 100644 --- a/lib/pleroma/config/holder.ex +++ b/lib/pleroma/config/holder.ex @@ -32,9 +32,9 @@ defp get_default, do: Pleroma.Config.get(:default_config) def release_defaults do [ pleroma: [ - {:instance, [static_dir: "/var/lib/pleroma/static"]}, - {Pleroma.Uploaders.Local, [uploads: "/var/lib/pleroma/uploads"]}, - {:modules, [runtime_dir: "/var/lib/pleroma/modules"]}, + {:instance, [static_dir: "/var/lib/akkoma/static"]}, + {Pleroma.Uploaders.Local, [uploads: "/var/lib/akkoma/uploads"]}, + {:modules, [runtime_dir: "/var/lib/akkoma/modules"]}, {:release, true} ] ] From 359510eebcb3e0d0bec30c6944fa42f41d8c9249 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 3 Aug 2022 11:50:48 +0100 Subject: [PATCH 52/82] remove unneeded function --- lib/pleroma/http.ex | 9 --------- test/pleroma/web/activity_pub/publisher_test.exs | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/pleroma/http.ex b/lib/pleroma/http.ex index f3bdccaee..d8028651c 100644 --- a/lib/pleroma/http.ex +++ b/lib/pleroma/http.ex @@ -83,13 +83,4 @@ defp build_request(method, headers, options, url, body, params) do |> Builder.add_param(:query, :query, params) |> Builder.convert_to_keyword() end - - defp adapter_middlewares(_) do - if Pleroma.Config.get(:env) == :test do - # Emulate redirects in test env, which are handled by adapters in other environments - [Tesla.Middleware.FollowRedirects] - else - [] - end - end end diff --git a/test/pleroma/web/activity_pub/publisher_test.exs b/test/pleroma/web/activity_pub/publisher_test.exs index 0f1d621b1..93bf5c345 100644 --- a/test/pleroma/web/activity_pub/publisher_test.exs +++ b/test/pleroma/web/activity_pub/publisher_test.exs @@ -344,7 +344,7 @@ test "publish to url with with different ports" do assert not called( Pleroma.Web.Federator.Publisher.enqueue_one(Publisher, %{ - inbox: "https://rejected.com/users/nick1/inbox", + inbox: "https://rejected.com/users/nick2/inbox", actor_id: actor.id, id: public_note_activity.data["id"] }) From 2c40d565fa15051a54b04acbb31d534bac6b6b9a Mon Sep 17 00:00:00 2001 From: Norm Date: Wed, 3 Aug 2022 10:52:21 +0000 Subject: [PATCH 53/82] Fix config path lookup (#139) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/139 Co-authored-by: Norm Co-committed-by: Norm --- lib/pleroma/config/release_runtime_provider.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/config/release_runtime_provider.ex b/lib/pleroma/config/release_runtime_provider.ex index 1e4bddc59..e5f2d6339 100644 --- a/lib/pleroma/config/release_runtime_provider.ex +++ b/lib/pleroma/config/release_runtime_provider.ex @@ -14,10 +14,10 @@ def load(config, opts) do config_path = cond do opts[:config_path] -> opts[:config_path] - System.get_env("PLEROMA_CONFIG_PATH") -> System.get_env("PLEROMA_CONFIG_PATH") System.get_env("AKKOMA_CONFIG_PATH") -> System.get_env("AKKOMA_CONFIG_PATH") - File.exists?("/etc/akkoma/config.exs") -> "/etc/akkoma/config.exs" - true -> "/etc/pleroma/config.exs" + System.get_env("PLEROMA_CONFIG_PATH") -> System.get_env("PLEROMA_CONFIG_PATH") + File.exists?("/etc/pleroma/config.exs") -> "/etc/pleroma/config.exs" + true -> "/etc/akkoma/config.exs" end with_runtime_config = @@ -31,7 +31,7 @@ def load(config, opts) do warning = [ IO.ANSI.red(), IO.ANSI.bright(), - "!!! Config path is not declared! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file", + "!!! Config path is not declared! Please ensure it exists and that AKKOMA_CONFIG_PATH and/or PLEROMA_CONFIG_PATH is unset or points to an existing file", IO.ANSI.reset() ] From 6e9126a794270dc670ee48b08ad19ff5719c1c0f Mon Sep 17 00:00:00 2001 From: sfr Date: Wed, 3 Aug 2022 10:55:11 +0000 Subject: [PATCH 54/82] add code of conduct (#129) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/129 Co-authored-by: sfr Co-committed-by: sfr --- CODE_OF_CONDUCT.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..599610780 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,24 @@ +# Akkoma Code of Conduct + +The Akkoma project aims to be **enjoyable** for anyone to participate in, regardless of their identity or level of expertise. To achieve this, the community must create an environment which is **safe** and **equitable**; the following guidelines have been created with these goals in mind. + +1. **Treat individuals with respect.** Differing experiences and viewpoints deserve to be respected, and bigotry and harassment are not tolerated under any circumstances. + - Individuals should at all times be treated as equals, regardless of their age, gender, sexuality, race, ethnicity, _or any other characteristic_, intrinsic or otherwise. + - Behaviour that is harmful in nature should be addressed and corrected *regardless of intent*. + - Respect personal boundaries and ask for clarification whenever they are unclear. + - (Obviously, hate does not count as merely a "differing viewpoint", because it is harmful in nature.) + +2. **Be understanding of differences in communication.** Not everyone is aware of unspoken social cues, and speech that is not intended to be offensive should not be treated as such simply due to an atypical manner of communication. + - Somebody who speaks bluntly is not necessarily rude, and somebody who swears a lot is not necessarily volatile. + - Try to confirm your interpretation of their intent rather than assuming bad faith. + - Someone may not communicate as, or come across as a picture of "professionalism", but this should not be seen as a reason to dismiss them. This is a **casual** space, and communication styles can reflect that. + +3. **"Uncomfortable" does not mean "unsafe".** In an ideal world, the community would be safe, equitable, enjoyable, *and* comfortable for all members at all times. Unfortunately, this is not always possible in reality. + - Safety and equity will be prioritized over comfort whenever it is necessary to do so. + - Weaponizing one's own discomfort to deflect accountability or censor an individual (e.g. "white fragility") is a form of discriminatory conduct. + +4. **Let people grow from their mistakes.** Nobody is perfect; even the most well-meaning individual can do something hurtful. Everyone should be given a fair opportunity to explain themselves and correct their behaviour. Portraying someone as inherently malicious prevents improvement and shifts focus away from the *action* that was problematic. + - Avoid bringing up past events that do not accurately reflect an individual's current actions or beliefs. (This is, of course, different from providing evidence of a recurring pattern of behaviour.) + +--- +This document was adapted from one created by ~keith as part of punks default repository template, and is licensed under CC-BY-SA 4.0. The original template is here: From b5d06a3db85a87b29b6a239cd6af1369177306fb Mon Sep 17 00:00:00 2001 From: Norm Date: Wed, 3 Aug 2022 12:01:13 +0000 Subject: [PATCH 55/82] docs/installation: Update required Elixir version to 1.12 Some dependencies will refuse to work on Elixir 1.10 (and presumably 1.9). One dependency states 1.13 as a requirement but will still work on 1.12 just fine. --- docs/docs/installation/generic_dependencies.include | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/installation/generic_dependencies.include b/docs/docs/installation/generic_dependencies.include index 2dbd93e42..68c61129a 100644 --- a/docs/docs/installation/generic_dependencies.include +++ b/docs/docs/installation/generic_dependencies.include @@ -1,7 +1,7 @@ ## Required dependencies * PostgreSQL 9.6+ -* Elixir 1.9+ +* Elixir 1.12+ (1.13+ recommended) * Erlang OTP 22.2+ * git * file / libmagic From c1e15ff6f8d279f4d44e834e809ac036e7a5cc5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9l=C3=A8ne?= Date: Tue, 2 Aug 2022 17:30:36 +0200 Subject: [PATCH 56/82] Transmogrifier: fix reply context fixing Incoming Pleroma replies to a Misskey thread were rejected due to a broken context fix, which caused them to not be visible until a non-Pleroma user interacted with the replies. This fix properly sets the post-fix object context to its parent Create activity as well, if it was changed. --- .../web/activity_pub/transmogrifier.ex | 11 +++- ...reate-pleroma-reply-to-misskey-thread.json | 61 +++++++++++++++++ .../tesla_mock/helene@p.helene.moe.json | 50 ++++++++++++++ .../mametsuko@mk.absturztau.be.json | 65 +++++++++++++++++++ .../mk.absturztau.be-93e7nm8wqg.json | 44 +++++++++++++ .../p.helene.moe-AM7S6vZQmL6pI9TgPY.json | 36 ++++++++++ .../web/activity_pub/transmogrifier_test.exs | 16 +++++ test/support/http_request_mock.ex | 36 ++++++++++ 8 files changed, 318 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/create-pleroma-reply-to-misskey-thread.json create mode 100644 test/fixtures/tesla_mock/helene@p.helene.moe.json create mode 100644 test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json create mode 100644 test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json create mode 100644 test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex index 604fc6310..d2077967c 100644 --- a/lib/pleroma/web/activity_pub/transmogrifier.ex +++ b/lib/pleroma/web/activity_pub/transmogrifier.ex @@ -474,7 +474,16 @@ def handle_incoming( |> fix_in_reply_to(fetch_options) |> fix_quote_url(fetch_options) - data = Map.put(data, "object", object) + # Only change the Create's context if the object's context has been modified. + data = + if data["object"]["context"] != object["context"] do + data + |> Map.put("object", object) + |> Map.put("context", object["context"]) + else + Map.put(data, "object", object) + end + options = Keyword.put(options, :local, false) with {:ok, %User{}} <- ObjectValidator.fetch_actor(data), diff --git a/test/fixtures/create-pleroma-reply-to-misskey-thread.json b/test/fixtures/create-pleroma-reply-to-misskey-thread.json new file mode 100644 index 000000000..0c31efa76 --- /dev/null +++ b/test/fixtures/create-pleroma-reply-to-misskey-thread.json @@ -0,0 +1,61 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://p.helene.moe/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://p.helene.moe/users/helene", + "attachment": [], + "attributedTo": "https://p.helene.moe/users/helene", + "cc": [ + "https://p.helene.moe/users/helene/followers" + ], + "context": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "conversation": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "directMessage": false, + "id": "https://p.helene.moe/activities/5f80db86-a9bb-4883-9845-fbdbd1478f3a", + "object": { + "actor": "https://p.helene.moe/users/helene", + "attachment": [], + "attributedTo": "https://p.helene.moe/users/helene", + "cc": [ + "https://p.helene.moe/users/helene/followers" + ], + "content": "@mametsuko meow", + "context": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "conversation": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "id": "https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", + "inReplyTo": "https://mk.absturztau.be/notes/93e7nm8wqg", + "published": "2022-08-02T13:46:58.403996Z", + "sensitive": null, + "source": "@mametsuko@mk.absturztau.be meow", + "summary": "", + "tag": [ + { + "href": "https://mk.absturztau.be/users/8ozbzjs3o8", + "name": "@mametsuko@mk.absturztau.be", + "type": "Mention" + } + ], + "to": [ + "https://mk.absturztau.be/users/8ozbzjs3o8", + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note" + }, + "published": "2022-08-02T13:46:58.403883Z", + "tag": [ + { + "href": "https://mk.absturztau.be/users/8ozbzjs3o8", + "name": "@mametsuko@mk.absturztau.be", + "type": "Mention" + } + ], + "to": [ + "https://mk.absturztau.be/users/8ozbzjs3o8", + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Create" +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/helene@p.helene.moe.json b/test/fixtures/tesla_mock/helene@p.helene.moe.json new file mode 100644 index 000000000..d7444817f --- /dev/null +++ b/test/fixtures/tesla_mock/helene@p.helene.moe.json @@ -0,0 +1,50 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://p.helene.moe/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "alsoKnownAs": [], + "attachment": [ + { + "name": "Timezone", + "type": "PropertyValue", + "value": "UTC+2 (Paris/Berlin)" + } + ], + "capabilities": { + "acceptsChatMessages": true + }, + "discoverable": true, + "endpoints": { + "oauthAuthorizationEndpoint": "https://p.helene.moe/oauth/authorize", + "oauthRegistrationEndpoint": "https://p.helene.moe/api/v1/apps", + "oauthTokenEndpoint": "https://p.helene.moe/oauth/token", + "sharedInbox": "https://p.helene.moe/inbox", + "uploadMedia": "https://p.helene.moe/api/ap/upload_media" + }, + "featured": "https://p.helene.moe/users/helene/collections/featured", + "followers": "https://p.helene.moe/users/helene/followers", + "following": "https://p.helene.moe/users/helene/following", + "icon": { + "type": "Image", + "url": "https://p.helene.moe/media/9a39209daa5a66b7ebb0547b08bf8360aa9d8d65a4ffba2603c6ffbe6aecb432.jpg" + }, + "id": "https://p.helene.moe/users/helene", + "inbox": "https://p.helene.moe/users/helene/inbox", + "manuallyApprovesFollowers": false, + "name": "Hélène", + "outbox": "https://p.helene.moe/users/helene/outbox", + "preferredUsername": "helene", + "publicKey": { + "id": "https://p.helene.moe/users/helene#main-key", + "owner": "https://p.helene.moe/users/helene", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtoSBPU/VS2Kx3f6ap3zv\nZVacJsgUfaoFb3c2ii/FRh9RmRVlarq8sJXcjsQt1e0oxWaWJaIDDwyKZPt6hXae\nrY/AiGGeNu+NA+BtY7l7+9Yu67HUyT62+1qAwYHKBXX3fLOPs/YmQI0Tt0c4wKAG\nKEkiYsRizghgpzUC6jqdKV71DJkUZ8yhckCGb2fLko1ajbWEssdaP51aLsyRMyC2\nuzeWrxtD4O/HG0ea4S6y5X6hnsAHIK4Y3nnyIQ6pn4tOsl3HgqkjXE9MmZSvMCFx\nBq89TfZrVXNa2gSZdZLdbbJstzEScQWNt1p6tA6rM+e4JXYGr+rMdF3G+jV7afI2\nFQIDAQAB\n-----END PUBLIC KEY-----\n\n" + }, + "summary": "I can speak: Français, English, Deutsch (nicht sehr gut), 日本語 (not very well)", + "tag": [], + "type": "Person", + "url": "https://p.helene.moe/users/helene" +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json b/test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json new file mode 100644 index 000000000..d8c13f775 --- /dev/null +++ b/test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json @@ -0,0 +1,65 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey-hub.net/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "type": "Person", + "id": "https://mk.absturztau.be/users/8ozbzjs3o8", + "inbox": "https://mk.absturztau.be/users/8ozbzjs3o8/inbox", + "outbox": "https://mk.absturztau.be/users/8ozbzjs3o8/outbox", + "followers": "https://mk.absturztau.be/users/8ozbzjs3o8/followers", + "following": "https://mk.absturztau.be/users/8ozbzjs3o8/following", + "featured": "https://mk.absturztau.be/users/8ozbzjs3o8/collections/featured", + "sharedInbox": "https://mk.absturztau.be/inbox", + "endpoints": { + "sharedInbox": "https://mk.absturztau.be/inbox" + }, + "url": "https://mk.absturztau.be/@mametsuko", + "preferredUsername": "mametsuko", + "name": "mametschko", + "summary": "

nya, ich bin eine Brotperson

", + "icon": { + "type": "Image", + "url": "https://mk.absturztau.be/files/webpublic-3b5594f4-fa52-4548-b4e3-c379ae2143ed", + "sensitive": false, + "name": null + }, + "image": { + "type": "Image", + "url": "https://mk.absturztau.be/files/webpublic-0d03b03d-b14b-4916-ac3d-8a137118ec84", + "sensitive": false, + "name": null + }, + "tag": [], + "manuallyApprovesFollowers": true, + "discoverable": false, + "publicKey": { + "id": "https://mk.absturztau.be/users/8ozbzjs3o8#main-key", + "type": "Key", + "owner": "https://mk.absturztau.be/users/8ozbzjs3o8", + "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuN/S1spBGmh8FXI1Bt16\nXB7Cc0QutBp7UPgmDNHjOfsq0zrF4g3L1UBxvrpU0XX77XPMCd9yPvGwAYURH2mv\ntIcYuE+R90VLDmBu5MTVthcG2D874eCZ2rD2YsEYmN5AjTX7QBIqCck+qDhVWkkM\nEZ6S5Ht6IJ5Of74eKffXElQI/C6QB+9uEDOmPk0jCzgI5gw7xvJqFj/DIF4kUUAu\nA89JqaFZzZlkrSrj4cr48bLN/YOmpdaHu0BKHaDSHct4+MqlixqovgdB6RboCEDw\ne4Aeav7+Q0Y9oGIvuggg0Q+nCubnVNnaPyzd817tpPVzyZmTts+DKyDuv90SX3nR\nsPaNa5Ty60eqplUk4b7X1gSvuzBJUFBxTVV84WnjwoeoydaS6rSyjCDPGLBjaByc\nFyWMMEb/zlQyhLZfBlvT7k96wRSsMszh2hDALWmgYIhq/jNwINvALJ1GKLNHHKZ4\nyz2LnxVpRm2rWrZzbvtcnSQOt3LaPSZn8Wgwv4buyHF02iuVuIamZVtKexsE1Ixl\nIi9qa3AKEc5gOzYXhRhvHaruzoCehUbb/UHC5c8Tto8L5G1xYzjLP3qj3PT9w/wM\n+k1Ra/4JhuAnVFROOoOmx9rIELLHH7juY2nhM7plGhyt1M5gysgqEloij8QzyQU2\nZK1YlAERG2XFO6br8omhcmECAwEAAQ==\n-----END PUBLIC KEY-----\n" + }, + "isCat": true, + "vcard:Address": "Vienna, Austria" +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json b/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json new file mode 100644 index 000000000..1b931a9a4 --- /dev/null +++ b/test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json @@ -0,0 +1,44 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://w3id.org/security/v1", + { + "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", + "sensitive": "as:sensitive", + "Hashtag": "as:Hashtag", + "quoteUrl": "as:quoteUrl", + "toot": "http://joinmastodon.org/ns#", + "Emoji": "toot:Emoji", + "featured": "toot:featured", + "discoverable": "toot:discoverable", + "schema": "http://schema.org#", + "PropertyValue": "schema:PropertyValue", + "value": "schema:value", + "misskey": "https://misskey-hub.net/ns#", + "_misskey_content": "misskey:_misskey_content", + "_misskey_quote": "misskey:_misskey_quote", + "_misskey_reaction": "misskey:_misskey_reaction", + "_misskey_votes": "misskey:_misskey_votes", + "_misskey_talk": "misskey:_misskey_talk", + "isCat": "misskey:isCat", + "vcard": "http://www.w3.org/2006/vcard/ns#" + } + ], + "id": "https://mk.absturztau.be/notes/93e7nm8wqg", + "type": "Note", + "attributedTo": "https://mk.absturztau.be/users/8ozbzjs3o8", + "summary": null, + "content": "

meow

", + "_misskey_content": "meow", + "published": "2022-08-01T11:06:49.568Z", + "to": [ + "https://www.w3.org/ns/activitystreams#Public" + ], + "cc": [ + "https://mk.absturztau.be/users/8ozbzjs3o8/followers" + ], + "inReplyTo": null, + "attachment": [], + "sensitive": false, + "tag": [] +} \ No newline at end of file diff --git a/test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json b/test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json new file mode 100644 index 000000000..a1ef5e20b --- /dev/null +++ b/test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json @@ -0,0 +1,36 @@ +{ + "@context": [ + "https://www.w3.org/ns/activitystreams", + "https://p.helene.moe/schemas/litepub-0.1.jsonld", + { + "@language": "und" + } + ], + "actor": "https://p.helene.moe/users/helene", + "attachment": [], + "attributedTo": "https://p.helene.moe/users/helene", + "cc": [ + "https://p.helene.moe/users/helene/followers" + ], + "content": "@mametsuko meow", + "context": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "conversation": "https://p.helene.moe/contexts/cc324643-5583-4c3f-91d2-c6ed37db159d", + "id": "https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", + "inReplyTo": "https://mk.absturztau.be/notes/93e7nm8wqg", + "published": "2022-08-02T13:46:58.403996Z", + "sensitive": null, + "source": "@mametsuko@mk.absturztau.be meow", + "summary": "", + "tag": [ + { + "href": "https://mk.absturztau.be/users/8ozbzjs3o8", + "name": "@mametsuko@mk.absturztau.be", + "type": "Mention" + } + ], + "to": [ + "https://mk.absturztau.be/users/8ozbzjs3o8", + "https://www.w3.org/ns/activitystreams#Public" + ], + "type": "Note" +} \ No newline at end of file diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index 3756fdee0..6941f69aa 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -107,6 +107,22 @@ test "it accepts Move activities" do assert activity.data["target"] == new_user.ap_id assert activity.data["type"] == "Move" end + + test "it fixes both the Create and object contexts in a reply" do + insert(:user, ap_id: "https://mk.absturztau.be/users/8ozbzjs3o8") + insert(:user, ap_id: "https://p.helene.moe/users/helene") + + create_activity = + "test/fixtures/create-pleroma-reply-to-misskey-thread.json" + |> File.read!() + |> Jason.decode!() + + assert {:ok, %Activity{} = activity} = Transmogrifier.handle_incoming(create_activity) + + object = Object.normalize(activity, fetch: false) + + assert activity.data["context"] == object.data["context"] + end end describe "prepare outgoing" do diff --git a/test/support/http_request_mock.ex b/test/support/http_request_mock.ex index 42dcb2bc3..476e0ce04 100644 --- a/test/support/http_request_mock.ex +++ b/test/support/http_request_mock.ex @@ -1363,6 +1363,42 @@ def get("https://patch.cx/objects/a399c28e-c821-4820-bc3e-4afeb044c16f", _, _, _ }} end + def get("https://mk.absturztau.be/users/8ozbzjs3o8", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/mametsuko@mk.absturztau.be.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://p.helene.moe/users/helene", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/helene@p.helene.moe.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://mk.absturztau.be/notes/93e7nm8wqg", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/mk.absturztau.be-93e7nm8wqg.json"), + headers: activitypub_object_headers() + }} + end + + def get("https://p.helene.moe/objects/fd5910ac-d9dc-412e-8d1d-914b203296c4", _, _, _) do + {:ok, + %Tesla.Env{ + status: 200, + body: File.read!("test/fixtures/tesla_mock/p.helene.moe-AM7S6vZQmL6pI9TgPY.json"), + headers: activitypub_object_headers() + }} + end + def get(url, query, body, headers) do {:error, "Mock response not implemented for GET #{inspect(url)}, #{query}, #{inspect(body)}, #{inspect(headers)}"} From 6b85b36e3a0cf8f5d6f96f5a2de7e9a7cbe8e1c0 Mon Sep 17 00:00:00 2001 From: Norm Date: Fri, 5 Aug 2022 05:02:42 +0000 Subject: [PATCH 57/82] Fix postgres install and setup for fedora guide Fedora requires some additional setup to work with Pleroma compared to Ubuntu/Debian. --- docs/docs/installation/fedora_based_en.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/docs/docs/installation/fedora_based_en.md b/docs/docs/installation/fedora_based_en.md index 5129db80f..30d68d97f 100644 --- a/docs/docs/installation/fedora_based_en.md +++ b/docs/docs/installation/fedora_based_en.md @@ -25,7 +25,16 @@ sudo dnf upgrade --refresh * Install some of the above mentioned programs: ```shell -sudo dnf install git gcc g++ make cmake file-devel postgresql postgresql-contrib +sudo dnf install git gcc g++ make cmake file-devel postgresql-server postgresql-contrib +``` + +* Enable and initialize Postgres: +```shell +sudo systemctl enable postgresql.service +sudo postgresql-setup --initdb --unit postgresql +# Allow password auth for postgres +sudo sed -E -i 's|(host +all +all +127.0.0.1/32 +)ident|\1md5|' /var/lib/pgsql/data/pg_hba.conf +sudo systemctl start postgresql.service ``` ### Install Elixir and Erlang From 0ec3a11895f48a8cfaafd3548f4df00d1250a5bd Mon Sep 17 00:00:00 2001 From: floatingghost Date: Fri, 5 Aug 2022 13:28:56 +0000 Subject: [PATCH 58/82] don't persist undo of follows (#149) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/149 --- lib/pleroma/web/activity_pub/activity_pub.ex | 30 +++++++++++++++- ...emove_remote_cancelled_follow_requests.exs | 35 +++++++++++++++++++ .../web/activity_pub/activity_pub_test.exs | 15 ++++++++ 3 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 priv/repo/migrations/20220805123645_remove_remote_cancelled_follow_requests.exs diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 8ab87bfee..03e72be58 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -327,7 +327,9 @@ def unfollow(follower, followed, activity_id \\ nil, local \\ true) do end end - defp do_unfollow(follower, followed, activity_id, local) do + defp do_unfollow(follower, followed, activity_id, local) + + defp do_unfollow(follower, followed, activity_id, local) when local == true do with %Activity{} = follow_activity <- fetch_latest_follow(follower, followed), {:ok, follow_activity} <- update_follow_state(follow_activity, "cancelled"), unfollow_data <- make_unfollow_data(follower, followed, follow_activity, activity_id), @@ -341,6 +343,32 @@ defp do_unfollow(follower, followed, activity_id, local) do end end + defp do_unfollow(follower, followed, activity_id, false) do + # On a remote unfollow, _remove_ their activity from the database, since some software (MISSKEEEEY) + # uses deterministic ids for follows. + with %Activity{} = follow_activity <- fetch_latest_follow(follower, followed), + {:ok, _activity} <- Repo.delete(follow_activity), + unfollow_data <- make_unfollow_data(follower, followed, follow_activity, activity_id), + unfollow_activity <- remote_unfollow_data(unfollow_data), + _ <- notify_and_stream(unfollow_activity) do + {:ok, unfollow_activity} + else + nil -> nil + {:error, error} -> Repo.rollback(error) + end + end + + defp remote_unfollow_data(data) do + {recipients, _, _} = get_recipients(data) + + %Activity{ + data: data, + local: false, + actor: data["actor"], + recipients: recipients + } + end + @spec flag(map()) :: {:ok, Activity.t()} | {:error, any()} def flag(params) do with {:ok, result} <- Repo.transaction(fn -> do_flag(params) end) do diff --git a/priv/repo/migrations/20220805123645_remove_remote_cancelled_follow_requests.exs b/priv/repo/migrations/20220805123645_remove_remote_cancelled_follow_requests.exs new file mode 100644 index 000000000..3159843d1 --- /dev/null +++ b/priv/repo/migrations/20220805123645_remove_remote_cancelled_follow_requests.exs @@ -0,0 +1,35 @@ +defmodule Pleroma.Repo.Migrations.RemoveRemoteCancelledFollowRequests do + use Ecto.Migration + + def up do + statement = """ + DELETE FROM + activities + WHERE + (data->>'type') = 'Follow' + AND + (data->>'state') = 'cancelled' + AND + local = false; + """ + + execute(statement) + + statement = """ + DELETE FROM + activities + WHERE + (data->>'type') = 'Undo' + AND + (data->'object'->>'type') = 'Follow' + AND + local = false; + """ + + execute(statement) + end + + def down do + :ok + end +end diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index e6cc20bba..90680e8cc 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -1375,6 +1375,21 @@ test "creates an undo activity for a pending follow request" do assert embedded_object["object"] == followed.ap_id assert embedded_object["id"] == follow_activity.data["id"] end + + test "it removes the follow activity if it was remote" do + follower = insert(:user, local: false) + followed = insert(:user) + + {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed) + {:ok, activity} = ActivityPub.unfollow(follower, followed, nil, false) + + assert activity.data["type"] == "Undo" + assert activity.data["actor"] == follower.ap_id + + activity = Activity.get_by_id(follow_activity.id) + assert is_nil(activity) + assert is_nil(Utils.fetch_latest_follow(follower, followed)) + end end describe "timeline post-processing" do From 273e51cb4ae3fa58b92d296041b5e550bfe07b82 Mon Sep 17 00:00:00 2001 From: ShariVegas Date: Fri, 5 Aug 2022 16:30:33 +0000 Subject: [PATCH 59/82] Update 'docs/docs/installation/migrating_to_akkoma.md' I ran into an issue after migrating, admin-fe wouldn't function properly. Ran the above command for my build, and got that functionality back. --- docs/docs/installation/migrating_to_akkoma.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/docs/installation/migrating_to_akkoma.md b/docs/docs/installation/migrating_to_akkoma.md index 3947914ab..74b87e318 100644 --- a/docs/docs/installation/migrating_to_akkoma.md +++ b/docs/docs/installation/migrating_to_akkoma.md @@ -60,13 +60,18 @@ your upgrade path here depends on your setup ### I just run with the built-in frontend -You'll need to run a single command, +You'll need to run a couple of commands, ```bash # From source mix pleroma.frontend install pleroma-fe +# you'll probably want this too +mix pleroma.frontend install admin-fe + # OTP ./bin/pleroma_ctl frontend install pleroma-fe +# you'll probably want this too +./bin/pleroma_ctl frontend install admin-fe ``` ### I've run the mix task to install a frontend From ec162b496b1012ebac328885695b6e25645fd71a Mon Sep 17 00:00:00 2001 From: floatingghost Date: Fri, 5 Aug 2022 19:31:32 +0000 Subject: [PATCH 60/82] /notice signing checks on redirect (#150) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/150 --- lib/pleroma/web/plugs/http_signature_plug.ex | 48 ++++++++++++++----- .../web/plugs/http_signature_plug_test.exs | 10 ++++ 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/lib/pleroma/web/plugs/http_signature_plug.ex b/lib/pleroma/web/plugs/http_signature_plug.ex index 0f7550516..79030be5f 100644 --- a/lib/pleroma/web/plugs/http_signature_plug.ex +++ b/lib/pleroma/web/plugs/http_signature_plug.ex @@ -5,6 +5,8 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlug do import Plug.Conn import Phoenix.Controller, only: [get_format: 1, text: 2] + alias Pleroma.Activity + alias Pleroma.Web.Router require Logger def init(options) do @@ -25,21 +27,45 @@ def call(conn, _opts) do end end + def route_aliases(%{path_info: ["objects", id]} = conn) do + ap_id = Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :object, id) + + with %Activity{} = activity <- Activity.get_by_object_ap_id_with_object(ap_id) do + ["/notice/#{activity.id}"] + else + _ -> [] + end + end + + def route_aliases(_), do: [] + + defp assign_valid_signature_on_route_aliases(conn, []), do: conn + + defp assign_valid_signature_on_route_aliases(%{assigns: %{valid_signature: true}} = conn, _), + do: conn + + defp assign_valid_signature_on_route_aliases(conn, [path | rest]) do + request_target = String.downcase("#{conn.method}") <> " #{path}" + + conn = + conn + |> put_req_header("(request-target)", request_target) + |> case do + %{assigns: %{digest: digest}} = conn -> put_req_header(conn, "digest", digest) + conn -> conn + end + + conn + |> assign(:valid_signature, HTTPSignatures.validate_conn(conn)) + |> assign_valid_signature_on_route_aliases(rest) + end + defp maybe_assign_valid_signature(conn) do if has_signature_header?(conn) do # set (request-target) header to the appropriate value # we also replace the digest header with the one we computed - request_target = String.downcase("#{conn.method}") <> " #{conn.request_path}" - - conn = - conn - |> put_req_header("(request-target)", request_target) - |> case do - %{assigns: %{digest: digest}} = conn -> put_req_header(conn, "digest", digest) - conn -> conn - end - - assign(conn, :valid_signature, HTTPSignatures.validate_conn(conn)) + possible_paths = route_aliases(conn) ++ [conn.request_path] + assign_valid_signature_on_route_aliases(conn, possible_paths) else Logger.debug("No signature header!") conn diff --git a/test/pleroma/web/plugs/http_signature_plug_test.exs b/test/pleroma/web/plugs/http_signature_plug_test.exs index 56ef6b06f..02e8b3092 100644 --- a/test/pleroma/web/plugs/http_signature_plug_test.exs +++ b/test/pleroma/web/plugs/http_signature_plug_test.exs @@ -4,6 +4,7 @@ defmodule Pleroma.Web.Plugs.HTTPSignaturePlugTest do use Pleroma.Web.ConnCase + import Pleroma.Factory alias Pleroma.Web.Plugs.HTTPSignaturePlug import Plug.Conn @@ -81,5 +82,14 @@ test "halts the connection when `signature` header is not present", %{conn: conn assert conn.state == :sent assert conn.resp_body == "Request not signed" end + + test "aliases redirected /object endpoints", _ do + obj = insert(:note) + act = insert(:note_activity, note: obj) + params = %{"actor" => "http://mastodon.example.org/users/admin"} + path = URI.parse(obj.data["id"]).path + conn = build_conn(:get, path, params) + assert ["/notice/#{act.id}"] == HTTPSignaturePlug.route_aliases(conn) + end end end From e8806fdc42b2b097cc69600a0535d92e1e469d4f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 5 Aug 2022 20:35:00 +0100 Subject: [PATCH 61/82] allow quote-inline span class --- priv/scrubbers/default.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/scrubbers/default.ex b/priv/scrubbers/default.ex index 478cbde9b..153b0be45 100644 --- a/priv/scrubbers/default.ex +++ b/priv/scrubbers/default.ex @@ -56,7 +56,7 @@ defmodule Pleroma.HTML.Scrubber.Default do Meta.allow_tag_with_these_attributes(:u, []) Meta.allow_tag_with_these_attributes(:ul, []) - Meta.allow_tag_with_this_attribute_values(:span, "class", ["h-card"]) + Meta.allow_tag_with_this_attribute_values(:span, "class", ["h-card", "quote-inline"]) Meta.allow_tag_with_these_attributes(:span, []) Meta.allow_tag_with_this_attribute_values(:code, "class", ["inline"]) From 62e179f446ac7bfada965fac47e9613ce60091b4 Mon Sep 17 00:00:00 2001 From: floatingghost Date: Sat, 6 Aug 2022 20:59:15 +0000 Subject: [PATCH 62/82] make conversation-id deterministic (#154) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/154 --- lib/pleroma/object.ex | 4 --- .../article_note_page_validator.ex | 2 +- .../object_validators/common_fields.ex | 2 -- .../object_validators/common_fixes.ex | 4 +-- .../object_validators/event_validator.ex | 2 +- .../object_validators/question_validator.ex | 2 +- lib/pleroma/web/activity_pub/utils.ex | 23 ++------------- lib/pleroma/web/common_api/utils.ex | 29 ------------------- .../web/mastodon_api/views/status_view.ex | 5 +--- .../20220806014830_remove_null_objects.exs | 14 +++++++++ .../web/activity_pub/activity_pub_test.exs | 5 +--- .../transmogrifier/question_handling_test.exs | 3 -- .../web/activity_pub/transmogrifier_test.exs | 2 -- test/pleroma/web/activity_pub/utils_test.exs | 4 --- test/pleroma/web/common_api/utils_test.exs | 28 ------------------ .../mastodon_api/views/status_view_test.exs | 3 +- 16 files changed, 23 insertions(+), 109 deletions(-) create mode 100644 priv/repo/optional_migrations/destructive/remove_null_object_type_records/20220806014830_remove_null_objects.exs diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index c3ea1b98b..00af77f57 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -208,10 +208,6 @@ def get_cached_by_ap_id(ap_id) do end end - def context_mapping(context) do - Object.change(%Object{}, %{data: %{"id" => context}}) - end - def make_tombstone(%Object{data: %{"id" => id, "type" => type}}, deleted \\ DateTime.utc_now()) do %ObjectTombstone{ id: id, diff --git a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex index 453bc6d86..eee7629ad 100644 --- a/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/article_note_page_validator.ex @@ -174,7 +174,7 @@ def changeset(struct, data) do defp validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["Article", "Note", "Page"]) - |> validate_required([:id, :actor, :attributedTo, :type, :context, :context_id]) + |> validate_required([:id, :actor, :attributedTo, :type, :context]) |> CommonValidations.validate_any_presence([:cc, :to]) |> CommonValidations.validate_fields_match([:actor, :attributedTo]) |> CommonValidations.validate_actor_presence() diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex index 1eaf572b9..49aba68af 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fields.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fields.ex @@ -51,8 +51,6 @@ defmacro status_object_fields do field(:summary, :string) field(:context, :string) - # short identifier for PleromaFE to group statuses by context - field(:context_id, :integer) field(:sensitive, :boolean, default: false) field(:replies_count, :integer, default: 0) diff --git a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex index 9631013a7..779c8b622 100644 --- a/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex +++ b/lib/pleroma/web/activity_pub/object_validators/common_fixes.ex @@ -22,14 +22,12 @@ def cast_and_filter_recipients(message, field, follower_collection, field_fallba end def fix_object_defaults(data) do - %{data: %{"id" => context}, id: context_id} = - Utils.create_context(data["context"] || data["conversation"]) + context = Utils.maybe_create_context(data["context"] || data["conversation"]) %User{follower_address: follower_collection} = User.get_cached_by_ap_id(data["attributedTo"]) data |> Map.put("context", context) - |> Map.put("context_id", context_id) |> cast_and_filter_recipients("to", follower_collection) |> cast_and_filter_recipients("cc", follower_collection) |> cast_and_filter_recipients("bto", follower_collection) diff --git a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex index 34a3031c3..76bba2778 100644 --- a/lib/pleroma/web/activity_pub/object_validators/event_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/event_validator.ex @@ -62,7 +62,7 @@ def changeset(struct, data) do defp validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["Event"]) - |> validate_required([:id, :actor, :attributedTo, :type, :context, :context_id]) + |> validate_required([:id, :actor, :attributedTo, :type, :context]) |> CommonValidations.validate_any_presence([:cc, :to]) |> CommonValidations.validate_fields_match([:actor, :attributedTo]) |> CommonValidations.validate_actor_presence() diff --git a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex index bdddfdaeb..9c45374a4 100644 --- a/lib/pleroma/web/activity_pub/object_validators/question_validator.ex +++ b/lib/pleroma/web/activity_pub/object_validators/question_validator.ex @@ -80,7 +80,7 @@ def changeset(struct, data) do defp validate_data(data_cng) do data_cng |> validate_inclusion(:type, ["Question"]) - |> validate_required([:id, :actor, :attributedTo, :type, :context, :context_id]) + |> validate_required([:id, :actor, :attributedTo, :type, :context]) |> CommonValidations.validate_any_presence([:cc, :to]) |> CommonValidations.validate_fields_match([:actor, :attributedTo]) |> CommonValidations.validate_actor_presence() diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 0e92deb31..5e5df4888 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -154,22 +154,7 @@ def get_notified_from_object(object) do Notification.get_notified_from_activity(%Activity{data: object}, false) end - def create_context(context) do - context = context || generate_id("contexts") - - # Ecto has problems accessing the constraint inside the jsonb, - # so we explicitly check for the existed object before insert - object = Object.get_cached_by_ap_id(context) - - with true <- is_nil(object), - changeset <- Object.context_mapping(context), - {:ok, inserted_object} <- Repo.insert(changeset) do - inserted_object - else - _ -> - object - end - end + def maybe_create_context(context), do: context || generate_id("contexts") @doc """ Enqueues an activity for federation if it's local @@ -201,18 +186,16 @@ def lazy_put_activity_defaults(map, true) do |> Map.put_new("id", "pleroma:fakeid") |> Map.put_new_lazy("published", &make_date/0) |> Map.put_new("context", "pleroma:fakecontext") - |> Map.put_new("context_id", -1) |> lazy_put_object_defaults(true) end def lazy_put_activity_defaults(map, _fake?) do - %{data: %{"id" => context}, id: context_id} = create_context(map["context"]) + context = maybe_create_context(map["context"]) map |> Map.put_new_lazy("id", &generate_activity_id/0) |> Map.put_new_lazy("published", &make_date/0) |> Map.put_new("context", context) - |> Map.put_new("context_id", context_id) |> lazy_put_object_defaults(false) end @@ -226,7 +209,6 @@ defp lazy_put_object_defaults(%{"object" => map} = activity, true) |> Map.put_new("id", "pleroma:fake_object_id") |> Map.put_new_lazy("published", &make_date/0) |> Map.put_new("context", activity["context"]) - |> Map.put_new("context_id", activity["context_id"]) |> Map.put_new("fake", true) %{activity | "object" => object} @@ -239,7 +221,6 @@ defp lazy_put_object_defaults(%{"object" => map} = activity, _) |> Map.put_new_lazy("id", &generate_object_id/0) |> Map.put_new_lazy("published", &make_date/0) |> Map.put_new("context", activity["context"]) - |> Map.put_new("context_id", activity["context_id"]) %{activity | "object" => object} end diff --git a/lib/pleroma/web/common_api/utils.ex b/lib/pleroma/web/common_api/utils.ex index 826160a23..61af71acd 100644 --- a/lib/pleroma/web/common_api/utils.ex +++ b/lib/pleroma/web/common_api/utils.ex @@ -458,35 +458,6 @@ def get_report_statuses(%User{ap_id: actor}, %{status_ids: status_ids}) def get_report_statuses(_, _), do: {:ok, nil} - # DEPRECATED mostly, context objects are now created at insertion time. - def context_to_conversation_id(context) do - with %Object{id: id} <- Object.get_cached_by_ap_id(context) do - id - else - _e -> - changeset = Object.context_mapping(context) - - case Repo.insert(changeset) do - {:ok, %{id: id}} -> - id - - # This should be solved by an upsert, but it seems ecto - # has problems accessing the constraint inside the jsonb. - {:error, _} -> - Object.get_cached_by_ap_id(context).id - end - end - end - - def conversation_id_to_context(id) do - with %Object{data: %{"id" => context}} <- Repo.get(Object, id) do - context - else - _e -> - {:error, dgettext("errors", "No such conversation")} - end - end - def validate_character_limit("" = _full_payload, [] = _attachments) do {:error, dgettext("errors", "Cannot post an empty status without attachments")} end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index cf4ea51e0..f0ecf685b 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -57,11 +57,8 @@ defp get_replied_to_activities(activities) do end) end - defp get_context_id(%{data: %{"context_id" => context_id}}) when not is_nil(context_id), - do: context_id - defp get_context_id(%{data: %{"context" => context}}) when is_binary(context), - do: Utils.context_to_conversation_id(context) + do: :erlang.crc32(context) defp get_context_id(_), do: nil diff --git a/priv/repo/optional_migrations/destructive/remove_null_object_type_records/20220806014830_remove_null_objects.exs b/priv/repo/optional_migrations/destructive/remove_null_object_type_records/20220806014830_remove_null_objects.exs new file mode 100644 index 000000000..308c3dbf0 --- /dev/null +++ b/priv/repo/optional_migrations/destructive/remove_null_object_type_records/20220806014830_remove_null_objects.exs @@ -0,0 +1,14 @@ +defmodule Pleroma.Repo.Migrations.RemoveNullObjects do + use Ecto.Migration + + def up do + statement = """ + DELETE FROM objects + WHERE (data->>'type') is null; + """ + + execute(statement) + end + + def down, do: :ok +end diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs index 90680e8cc..50eff9431 100644 --- a/test/pleroma/web/activity_pub/activity_pub_test.exs +++ b/test/pleroma/web/activity_pub/activity_pub_test.exs @@ -523,7 +523,6 @@ test "inserts a given map into the activity database, giving it an id if it has assert activity.data["ok"] == data["ok"] assert activity.data["id"] == given_id assert activity.data["context"] == "blabla" - assert activity.data["context_id"] end test "adds a context when none is there" do @@ -545,8 +544,6 @@ test "adds a context when none is there" do assert is_binary(activity.data["context"]) assert is_binary(object.data["context"]) - assert activity.data["context_id"] - assert object.data["context_id"] end test "adds an id to a given object if it lacks one and is a note and inserts it to the object database" do @@ -1560,7 +1557,7 @@ test "it can create a Flag activity", }) assert Repo.aggregate(Activity, :count, :id) == 1 - assert Repo.aggregate(Object, :count, :id) == 2 + assert Repo.aggregate(Object, :count, :id) == 1 assert Repo.aggregate(Notification, :count, :id) == 0 end end diff --git a/test/pleroma/web/activity_pub/transmogrifier/question_handling_test.exs b/test/pleroma/web/activity_pub/transmogrifier/question_handling_test.exs index 32cf51e59..54cbb9c65 100644 --- a/test/pleroma/web/activity_pub/transmogrifier/question_handling_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier/question_handling_test.exs @@ -33,8 +33,6 @@ test "Mastodon Question activity" do assert object.data["context"] == "tag:mastodon.sdf.org,2019-05-10:objectId=15095122:objectType=Conversation" - assert object.data["context_id"] - assert object.data["anyOf"] == [] assert Enum.sort(object.data["oneOf"]) == @@ -68,7 +66,6 @@ test "Mastodon Question activity" do reply_object = Object.normalize(reply_activity, fetch: false) assert reply_object.data["context"] == object.data["context"] - assert reply_object.data["context_id"] == object.data["context_id"] end test "Mastodon Question activity with HTML tags in plaintext" do diff --git a/test/pleroma/web/activity_pub/transmogrifier_test.exs b/test/pleroma/web/activity_pub/transmogrifier_test.exs index 6941f69aa..ae2fc067a 100644 --- a/test/pleroma/web/activity_pub/transmogrifier_test.exs +++ b/test/pleroma/web/activity_pub/transmogrifier_test.exs @@ -232,7 +232,6 @@ test "it strips internal fields" do assert is_nil(modified["object"]["like_count"]) assert is_nil(modified["object"]["announcements"]) assert is_nil(modified["object"]["announcement_count"]) - assert is_nil(modified["object"]["context_id"]) assert is_nil(modified["object"]["generator"]) end @@ -247,7 +246,6 @@ test "it strips internal fields of article" do assert is_nil(modified["object"]["like_count"]) assert is_nil(modified["object"]["announcements"]) assert is_nil(modified["object"]["announcement_count"]) - assert is_nil(modified["object"]["context_id"]) assert is_nil(modified["object"]["likes"]) end diff --git a/test/pleroma/web/activity_pub/utils_test.exs b/test/pleroma/web/activity_pub/utils_test.exs index 62dc02f61..0d88303e3 100644 --- a/test/pleroma/web/activity_pub/utils_test.exs +++ b/test/pleroma/web/activity_pub/utils_test.exs @@ -429,7 +429,6 @@ test "returns map with id and published data" do object = Object.normalize(note_activity, fetch: false) res = Utils.lazy_put_activity_defaults(%{"context" => object.data["id"]}) assert res["context"] == object.data["id"] - assert res["context_id"] == object.id assert res["id"] assert res["published"] end @@ -437,7 +436,6 @@ test "returns map with id and published data" do test "returns map with fake id and published data" do assert %{ "context" => "pleroma:fakecontext", - "context_id" => -1, "id" => "pleroma:fakeid", "published" => _ } = Utils.lazy_put_activity_defaults(%{}, true) @@ -454,13 +452,11 @@ test "returns activity data with object" do }) assert res["context"] == object.data["id"] - assert res["context_id"] == object.id assert res["id"] assert res["published"] assert res["object"]["id"] assert res["object"]["published"] assert res["object"]["context"] == object.data["id"] - assert res["object"]["context_id"] == object.id end end diff --git a/test/pleroma/web/common_api/utils_test.exs b/test/pleroma/web/common_api/utils_test.exs index c4f506fe3..a88d7681a 100644 --- a/test/pleroma/web/common_api/utils_test.exs +++ b/test/pleroma/web/common_api/utils_test.exs @@ -4,7 +4,6 @@ defmodule Pleroma.Web.CommonAPI.UtilsTest do alias Pleroma.Builders.UserBuilder - alias Pleroma.Object alias Pleroma.Web.CommonAPI alias Pleroma.Web.CommonAPI.ActivityDraft alias Pleroma.Web.CommonAPI.Utils @@ -273,22 +272,6 @@ test "delegated renderers" do end end - describe "context_to_conversation_id" do - test "creates a mapping object" do - conversation_id = Utils.context_to_conversation_id("random context") - object = Object.get_by_ap_id("random context") - - assert conversation_id == object.id - end - - test "returns an existing mapping for an existing object" do - {:ok, object} = Object.context_mapping("random context") |> Repo.insert() - conversation_id = Utils.context_to_conversation_id("random context") - - assert conversation_id == object.id - end - end - describe "formats date to asctime" do test "when date is in ISO 8601 format" do date = DateTime.utc_now() |> DateTime.to_iso8601() @@ -517,17 +500,6 @@ test "returns empty string when date invalid" do end end - describe "conversation_id_to_context/1" do - test "returns id" do - object = insert(:note) - assert Utils.conversation_id_to_context(object.id) == object.data["id"] - end - - test "returns error if object not found" do - assert Utils.conversation_id_to_context("123") == {:error, "No such conversation"} - end - end - describe "maybe_notify_mentioned_recipients/2" do test "returns recipients when activity is not `Create`" do activity = insert(:like_activity) diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 9ef44caca..130de1b17 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -14,7 +14,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do alias Pleroma.User alias Pleroma.UserRelationship alias Pleroma.Web.CommonAPI - alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.StatusView @@ -240,7 +239,7 @@ test "a note activity" do object_data = Object.normalize(note, fetch: false).data user = User.get_cached_by_ap_id(note.data["actor"]) - convo_id = Utils.context_to_conversation_id(object_data["context"]) + convo_id = :erlang.crc32(object_data["context"]) status = StatusView.render("show.json", %{activity: note}) From b9bb0936001b64c3a693f6d2ac5813b655148322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9l=C3=A8ne?= Date: Sun, 7 Aug 2022 20:37:17 +0200 Subject: [PATCH 63/82] StatusView: clear MSB on calculated conversation_id This field seems to be a left-over from the StatusNet era. If your application uses `pleroma.conversation_id`: this field is deprecated. It is currently stubbed instead by doing a CRC32 of the context, and clearing the MSB to avoid overflow exceptions with signed integers on the different clients using this field (Java/Kotlin code, mostly; see Husky and probably other mobile clients.) This should be removed in a future version of Pleroma. Pleroma-FE currently depends on this field, as well. --- lib/pleroma/web/mastodon_api/views/status_view.ex | 15 +++++++++++++-- .../web/mastodon_api/views/status_view_test.exs | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index f0ecf685b..2153c757d 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -57,8 +57,19 @@ defp get_replied_to_activities(activities) do end) end - defp get_context_id(%{data: %{"context" => context}}) when is_binary(context), - do: :erlang.crc32(context) + # DEPRECATED This field seems to be a left-over from the StatusNet era. + # If your application uses `pleroma.conversation_id`: this field is deprecated. + # It is currently stubbed instead by doing a CRC32 of the context, and + # clearing the MSB to avoid overflow exceptions with signed integers on the + # different clients using this field (Java/Kotlin code, mostly; see Husky.) + # This should be removed in a future version of Pleroma. Pleroma-FE currently + # depends on this field, as well. + defp get_context_id(%{data: %{"context" => context}}) when is_binary(context) do + use Bitwise + + :erlang.crc32(context) + |> band(bnot(0x8000_0000)) + end defp get_context_id(_), do: nil diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 130de1b17..e56d095c4 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -239,7 +239,7 @@ test "a note activity" do object_data = Object.normalize(note, fetch: false).data user = User.get_cached_by_ap_id(note.data["actor"]) - convo_id = :erlang.crc32(object_data["context"]) + convo_id = :erlang.crc32(object_data["context"]) |> Bitwise.band(Bitwise.bnot(0x8000_0000)) status = StatusView.render("show.json", %{activity: note}) From b3e4d813626608994b24224667904e7fdbf6b0be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9l=C3=A8ne?= Date: Sun, 7 Aug 2022 20:39:35 +0200 Subject: [PATCH 64/82] StatusView: implement pleroma.context field This field replaces the now deprecated conversation_id field, and now exposes the ActivityPub object `context` directly via the MastoAPI instead of relying on StatusNet-era data concepts. --- lib/pleroma/web/api_spec/schemas/status.ex | 8 +++++++- lib/pleroma/web/mastodon_api/views/status_view.ex | 1 + .../mastodon_api/controllers/status_controller_test.exs | 2 ++ test/pleroma/web/mastodon_api/views/status_view_test.exs | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index 60db8ad6f..dd4025555 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -152,9 +152,14 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do description: "A map consisting of alternate representations of the `content` property with the key being it's mimetype. Currently the only alternate representation supported is `text/plain`" }, + context: %Schema{ + type: :string, + description: "The thread identifier the status is associated with" + }, conversation_id: %Schema{ type: :integer, - description: "The ID of the AP context the status is associated with (if any)" + deprecated: true, + description: "The ID of the AP context the status is associated with (if any); deprecated, please use `context` instead" }, direct_conversation_id: %Schema{ type: :integer, @@ -356,6 +361,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do "pinned" => false, "pleroma" => %{ "content" => %{"text/plain" => "foobar"}, + "context" => "http://localhost:4001/objects/8b4c0c80-6a37-4d2a-b1b9-05a19e3875aa", "conversation_id" => 345_972, "direct_conversation_id" => nil, "emoji_reactions" => [], diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 2153c757d..f0fe9a4ba 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -378,6 +378,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity} pleroma: %{ local: activity.local, conversation_id: get_context_id(activity), + context: object.data["context"], in_reply_to_account_acct: reply_to_user && reply_to_user.nickname, content: %{"text/plain" => content_plaintext}, spoiler_text: %{"text/plain" => summary}, diff --git a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs index 1a3bc2990..ea168f6c5 100644 --- a/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs +++ b/test/pleroma/web/mastodon_api/controllers/status_controller_test.exs @@ -264,6 +264,7 @@ test "posting a fake status", %{conn: conn} do |> Map.put("url", nil) |> Map.put("uri", nil) |> Map.put("created_at", nil) + |> Kernel.put_in(["pleroma", "context"], nil) |> Kernel.put_in(["pleroma", "conversation_id"], nil) fake_conn = @@ -287,6 +288,7 @@ test "posting a fake status", %{conn: conn} do |> Map.put("url", nil) |> Map.put("uri", nil) |> Map.put("created_at", nil) + |> Kernel.put_in(["pleroma", "context"], nil) |> Kernel.put_in(["pleroma", "conversation_id"], nil) assert real_status == fake_status diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index e56d095c4..fb3255927 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -292,6 +292,7 @@ test "a note activity" do pleroma: %{ local: true, conversation_id: convo_id, + context: object_data["context"], in_reply_to_account_acct: nil, content: %{"text/plain" => HTML.strip_tags(object_data["content"])}, spoiler_text: %{"text/plain" => HTML.strip_tags(object_data["summary"])}, From 5d23df84c9ba781258daefa50fd82b7fa9f220e8 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Sun, 7 Aug 2022 20:49:56 +0100 Subject: [PATCH 65/82] Mix format --- lib/pleroma/web/api_spec/schemas/status.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/pleroma/web/api_spec/schemas/status.ex b/lib/pleroma/web/api_spec/schemas/status.ex index dd4025555..c5d9119ef 100644 --- a/lib/pleroma/web/api_spec/schemas/status.ex +++ b/lib/pleroma/web/api_spec/schemas/status.ex @@ -159,7 +159,8 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Status do conversation_id: %Schema{ type: :integer, deprecated: true, - description: "The ID of the AP context the status is associated with (if any); deprecated, please use `context` instead" + description: + "The ID of the AP context the status is associated with (if any); deprecated, please use `context` instead" }, direct_conversation_id: %Schema{ type: :integer, From 1245141779e8a1e7237af65c152dc15cbc735f0f Mon Sep 17 00:00:00 2001 From: floatingghost Date: Mon, 8 Aug 2022 15:47:57 +0000 Subject: [PATCH 66/82] treat rejections in MRF as a reject in federator (#155) Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma/pulls/155 --- lib/pleroma/workers/receiver_worker.ex | 8 +++++- test/pleroma/web/federator_test.exs | 4 +-- test/pleroma/workers/receiver_worker_test.exs | 25 +++++++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 test/pleroma/workers/receiver_worker_test.exs diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex index 69125dcd0..b8905deb5 100644 --- a/lib/pleroma/workers/receiver_worker.ex +++ b/lib/pleroma/workers/receiver_worker.ex @@ -9,6 +9,12 @@ defmodule Pleroma.Workers.ReceiverWorker do @impl Oban.Worker def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do - Federator.perform(:incoming_ap_doc, params) + with {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do + {:ok, res} + else + {:error, :origin_containment_failed} -> {:cancel, :origin_containment_failed} + {:error, {:reject, reason}} -> {:cancel, reason} + e -> e + end end end diff --git a/test/pleroma/web/federator_test.exs b/test/pleroma/web/federator_test.exs index 372b6a73a..3ae266ecd 100644 --- a/test/pleroma/web/federator_test.exs +++ b/test/pleroma/web/federator_test.exs @@ -153,7 +153,7 @@ test "rejects incoming AP docs with incorrect origin" do } assert {:ok, job} = Federator.incoming_ap_doc(params) - assert {:error, :origin_containment_failed} = ObanHelpers.perform(job) + assert {:cancel, :origin_containment_failed} = ObanHelpers.perform(job) end test "it does not crash if MRF rejects the post" do @@ -169,7 +169,7 @@ test "it does not crash if MRF rejects the post" do |> Jason.decode!() assert {:ok, job} = Federator.incoming_ap_doc(params) - assert {:error, _} = ObanHelpers.perform(job) + assert {:cancel, _} = ObanHelpers.perform(job) end end end diff --git a/test/pleroma/workers/receiver_worker_test.exs b/test/pleroma/workers/receiver_worker_test.exs new file mode 100644 index 000000000..283beee4d --- /dev/null +++ b/test/pleroma/workers/receiver_worker_test.exs @@ -0,0 +1,25 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2022 Pleroma Authors +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Workers.ReceiverWorkerTest do + use Pleroma.DataCase, async: true + use Oban.Testing, repo: Pleroma.Repo + + import Mock + import Pleroma.Factory + + alias Pleroma.Workers.ReceiverWorker + + test "it ignores MRF reject" do + params = insert(:note).data + + with_mock Pleroma.Web.ActivityPub.Transmogrifier, + handle_incoming: fn _ -> {:reject, "MRF"} end do + assert {:cancel, "MRF"} = + ReceiverWorker.perform(%Oban.Job{ + args: %{"op" => "incoming_ap_doc", "params" => params} + }) + end + end +end From e5a25485211d22cd624b66357c11076299e140ac Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Tue, 9 Aug 2022 12:57:39 +0100 Subject: [PATCH 67/82] remove warning that breaks update --- rel/files/bin/pleroma_ctl | 1 - 1 file changed, 1 deletion(-) diff --git a/rel/files/bin/pleroma_ctl b/rel/files/bin/pleroma_ctl index 176287fcb..d2949e8fe 100755 --- a/rel/files/bin/pleroma_ctl +++ b/rel/files/bin/pleroma_ctl @@ -2,7 +2,6 @@ # XXX: This should be removed when elixir's releases get custom command support detect_flavour() { - echo "Trying to autodetect flavour, you may want to override this with --flavour" arch="$(uname -m)" if [ "$arch" = "x86_64" ]; then arch="amd64" From 55179d42147eb69e49d6f2102817ceff988805cb Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 10:25:03 +0100 Subject: [PATCH 68/82] set soapbox-fe v2 by default fixes #157 --- config/config.exs | 2 +- lib/pleroma/web/plugs/http_signature_plug.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/config.exs b/config/config.exs index 947ff0ecc..f49ec861c 100644 --- a/config/config.exs +++ b/config/config.exs @@ -746,7 +746,7 @@ "git" => "https://gitlab.com/soapbox-pub/soapbox-fe", "build_url" => "https://gitlab.com/soapbox-pub/soapbox-fe/-/jobs/artifacts/${ref}/download?job=build-production", - "ref" => "v1.0.0", + "ref" => "v2.0.0", "build_dir" => "static" }, # For developers - enables a swagger frontend to view the openapi spec diff --git a/lib/pleroma/web/plugs/http_signature_plug.ex b/lib/pleroma/web/plugs/http_signature_plug.ex index 79030be5f..cfee392c8 100644 --- a/lib/pleroma/web/plugs/http_signature_plug.ex +++ b/lib/pleroma/web/plugs/http_signature_plug.ex @@ -27,7 +27,7 @@ def call(conn, _opts) do end end - def route_aliases(%{path_info: ["objects", id]} = conn) do + def route_aliases(%{path_info: ["objects", id]}) do ap_id = Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :object, id) with %Activity{} = activity <- Activity.get_by_object_ap_id_with_object(ap_id) do From d16eff1c0f71b7554c787afdbaf4783b9594a685 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 10:28:59 +0100 Subject: [PATCH 69/82] describe color keys fixes #126 --- config/description.exs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/description.exs b/config/description.exs index 9cbd0024d..176cae58b 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1442,13 +1442,13 @@ %{ key: :theme_color, type: :string, - description: "Describe the theme color of the app", + description: "Describe the theme color of the app - this is only used for mastodon-fe", suggestions: ["#282c37", "mediumpurple"] }, %{ key: :background_color, type: :string, - description: "Describe the background color of the app", + description: "Describe the background color of the app - this is only used for mastodon-fe", suggestions: ["#191b22", "aliceblue"] } ] From 5022ecd766329f2ddd5a52859092873abc5c6918 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 8 Aug 2022 15:48:02 +0000 Subject: [PATCH 70/82] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ Translation: Pleroma fe/Akkoma Backend (Static pages) --- .../es/LC_MESSAGES/config_descriptions.po | 6396 +++++++++++++++++ 1 file changed, 6396 insertions(+) create mode 100644 priv/gettext/es/LC_MESSAGES/config_descriptions.po diff --git a/priv/gettext/es/LC_MESSAGES/config_descriptions.po b/priv/gettext/es/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..9c1acae20 --- /dev/null +++ b/priv/gettext/es/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6396 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-08-06 22:23+0000\n" +"PO-Revision-Date: 2022-08-06 22:24+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" +"Before enabling this you must add :esshd to mix.exs as one of the " +"extra_applications and generate host keys in your priv dir with ssh-keygen -" +"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "Mime Types settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" +"Allows setting a token that can be used to authenticate requests with admin " +"privileges without a normal user account token. Append the `admin_token` " +"parameter to requests to utilize it. (Please reconsider using HTTP Basic " +"Auth or OAuth-based authentication if possible)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "Quack-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "CORS plug config" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "ESSHD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger" +msgid "Logger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "Mime Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "Pleroma Admin Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "Pleroma Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "Quack Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "Console logger settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "ExSyslogger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "ActivityPub-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" +"This section configures assets to be used with various frontends. Currently " +"the only option relates to mascots on the mastodon frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "Authentication / authorization settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "Advanced settings for `Gun` connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "Email notifications settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "Customizable features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "Configure feed rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe are configured. If you want to add your own configuration your " +"settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "Installed frontends management" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "Gopher settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "Advanced settings for `Hackney` connections pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "HTTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "HTTP security settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "Instance-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" +"Use LDAP for user authentication. When a user logs in to the Pleroma " +"instance, the name and password will be verified by trying to authenticate " +"(bind) to a LDAP server. If a user exists in the LDAP directory but there is " +"no account with the same name yet on the Pleroma instance then a new Pleroma " +"account will be created with the same name as the LDAP user name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "Majic/libmagic configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" +"This section describe PWA manifest instance-specific values. Currently this " +"option relate only for MastoFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "Custom Runtime Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "Adds automatic expiration to all local activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "Automatically follows newly discovered accounts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (" +"without the leading #)\n" +"\n" +"Note: This MRF Policy is always enabled, if you want to disable it you have " +"to set empty lists.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "Block messages with excessive user mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" +"Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs" +".pm/elixir/Regex.html)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "Block messages which mention a specific user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "MRF NormalizeMarkup settings. Scrub configured hypertext markup." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" +"Rejects or delists posts based on their timestamp deviance from your " +"server's clock." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "RejectNonPublic drops posts with non-public visibility settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "Simple ingress policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "Steals emojis from selected instances when it sees them." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" +"This policy processes messages through an alternate pipeline when a given " +"message matches certain criteria. All criteria are configured as a map of " +"regular expressions to lists of policy modules." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "Filter messages which belong to certain activity vocabularies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "Configure OAuth 2 provider capabilities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "Advanced settings for `Gun` workers pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "`populate_hashtags_table` background migration settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" +"Rate limit settings. This is an advanced feature enabled only for :" +"authentication by default." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" +"If enabled the instance will parse metadata from attached links to generate " +"link previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "Pleroma shout settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" +"Render profiles and posts using server-generated HTML that is viewable " +"without using JavaScript" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "Settings for notifications streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "URI schemes related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" +"The expiration time for the web responses cache. Values should be in " +"milliseconds or `nil` to disable expiration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "Welcome messages settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "Includes custom worker options not interpretable directly by `Oban`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "Limits configuration for background tasks." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" +"[Oban](https://github.com/sorentwo/oban) asynchronous job processor " +"configuration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "Captcha-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" +"Kocaptcha is a very simple captcha service with a single API endpoint, the " +"source code is here: https://github.com/koto-bank/kocaptcha. The default " +"endpoint (https://captcha.kotobank.ch) is hosted by the developer." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "New users admin email digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" +"Configuration for Pleroma's link formatter which parses mentions, hashtags, " +"and URLs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "Scheduled activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "Upload general settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "Filter replaces the filename of the upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "Uploads mogrify filter settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "Local uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "S3 uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "Account Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "HTTP invalidate settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "Metadata-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" +"`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." +"pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" +"**If your instance is not behind at least one reverse proxy, you should not " +"enable this plug.**\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "Expired activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "Prometheus app metrics endpoint configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" +"Web Push Notifications configuration. You can use the mix task mix " +"web_push.gen.keypair to generate it." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "Console Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "ExSyslogger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "ActivityPub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "Assets" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "Connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "Email notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "Emoji" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "Features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "Feed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "Frontend configurations" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "Frontends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "Gopher" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "Hackney pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "HTTP security" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "Instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "LDAP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "Majic pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "Manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "MRF" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "MRF Activity Expiration Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "MRF FollowBot Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "MRF Hashtag" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "MRF Hellthread" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "MRF Keyword" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "MRF Mention" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "MRF Normalize Markup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "MRF Object Age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "MRF Reject Non Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "MRF Simple" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "MRF Emojis" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "MRF Subchain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "MRF Vocabulary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "OAuth2" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "Populate hashtags table" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "Rate limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "Restrict Unauthenticated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "Rich media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "Shout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "Static FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "Streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "URI Schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "Web cache TTL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "Welcome" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "ConcurrentLimiter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "Oban" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "Pleroma.Captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "Pleroma.Captcha.Kocaptcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "Pleroma.Emails.NewUsersDigestEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "Pleroma.Emails.UserEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "Linkify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "Pleroma.ScheduledActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "Pleroma.Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "Pleroma.Upload.Filter.AnonymizeFilename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "Pleroma.Upload.Filter.Mogrify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "Pleroma.Uploaders.Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "Pleroma.Uploaders.S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "Pleroma.User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "Pleroma.User.Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "Pleroma.Web.ApiSpec.CastAndValidate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Http" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Script" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "Pleroma.Web.Plugs.RemoteIp" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "Pleroma.Web.Preload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "Pleroma.Workers.PurgeExpiredActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "Vapid Details" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "Enables SSH" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "Port to connect" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "Dir with SSH keys" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "S3 access key ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "S3 host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "S3 region (for AWS)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" +"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" +"ex_syslogger } - to syslog, Quack.Logger - to Slack." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" +"A string that's prepended to every message, and is typically set to the app " +"name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "Whether a user can see someone who has blocked them" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "Following handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" +"The number of Note replies' URIs to be included with outgoing federation (`5`" +" to match Mastodon hardcoded value, `0` to disable the output)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "Whether to federate blocks to other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "Sign object fetches with HTTP signatures" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "Whether blocks result in people getting unfollowed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" +"This will be used as the default mascot on MastoFE. Default: " +"`:pleroma_fox_tan`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "URL of the default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" +"Keyword of mascots, each element must contain both an URL and a mime_type key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" +"Authentication form template. By default it's `show.html` which corresponds " +"to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" +"OAuth admin scope requirement toggle. If enabled, admin actions explicitly " +"demand admin OAuth scope(s) presence in OAuth token (client app must support " +"admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` " +"user flag grants access to admin-specific actions." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" +"The list of enabled OAuth consumer strategies. By default it's set by " +"OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" +"delimited string should be of format \"strategy\" or \"strategy:dependency\" " +"(e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is " +"named differently than ueberauth_)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" +"OAuth consumer mode authentication form template. By default it's `consumer." +"html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." +"html.eex`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" +"Number of attempts to acquire the connection from the pool if it is " +"overloaded. Default: 5" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" +"Timeout to acquire a connection from pool. The total max time is this value " +"multiplied by the number of retries. Default: 250ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "Maximum number of connections in the pool. Default: 250 connections." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" +"Multiplier for the number of idle connection to be reclaimed if the pool is " +"full. For example if the pool maxes out at 250 connections and this setting " +"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " +"overloaded. Default: 0.1" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" +"emails of \"what you've missed\" for users who have been inactive for a while" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "Globally enable or disable digest emails" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "Minimum user inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "Minimum interval between digest emails to one user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" +"When to send digest email, in crontab format. \"0 0 0\" is the default, " +"meaning \"once a week at midnight on Sunday morning\"." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" +"Location of the JSON-manifest. This manifest contains information about the " +"emoji-packs you can download. Currently only one manifest can be added (no " +"arrays)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" +"Emojis are ordered in groups (tags). This is an array of key-value pairs " +"where the key is the group name and the value is the location or array of " +"locations. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" +"A list of file extensions for emojis, when no emoji.txt for a pack is present" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "Location of custom emoji files. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" +"Setting to force toggle / force disable improved hashtags timeline. " +"`:enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +"timeline. `:disabled` forces object-embedded hashtags to be used (slower). " +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [" +"unless overridden] when HashtagsTableMigrator completes)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "Configure title rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "Maximum number of characters before truncating title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "Replacement which will be used after truncating string" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "When disabled, auto-hide the subject field if it's empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" +"URL of the background, unless viewing a user profile with a background that " +"is set" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" +"When a message has a subject (aka Content Warning), collapse it by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "Enables green text on lines prefixed with the > character" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "Hides filtered statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "Hides muted statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "Hide notices statistics (repeats, favorites, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "Hides instance name from PleromaFE banner" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" +"Hide profile statistics (posts, posts per day, followers, followings, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "URL of the logo, defaults to Pleroma's logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" +"Allows you to adjust vertical margins between logo boundary and navbar " +"borders. The idea is that to have logo's image without any extra margins and " +"instead adjust them to your need in layout." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" +"By default it assumes logo used will be monochrome with alpha channel to be " +"compatible with both light and dark themes. If you want a colorful logo you " +"must disable logoMask." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" +"Limit scope selection to Direct, User default, and Scope of post replying " +"to. Also prevents replying to a DM with a public post from PleromaFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" +"URL of the image to use for hiding NSFW media attachments in the timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "Default post formatting option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "Relative URL which indicates where to redirect when a user is logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" +"Relative URL which indicates where to redirect when a user isn't logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "Copy the scope (private/unlisted/public) in replies to posts by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" +"Enables panel displaying functionality of the instance on the About page" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "Change alignment of sidebar and panels to the right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" +"Allows changing the default behaviour of subject lines in replies.\n" +" `email`: copy and preprend re:, as in email,\n" +" `masto`: copy verbatim, as in Mastodon,\n" +" `noop`: don't copy the subject." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "Which theme to use. Available themes are defined in styles.json" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" +"A map containing available frontends and parameters for their installation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "The directory inside the zip file " + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" +"Either an url to a zip file containing the frontend or a template to build " +"it by inserting the `ref`. The string `${ref}` will be replaced by the " +"configured `ref`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "The custom HTTP headers for the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "URL of the git repository of the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "Name of the frontend." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "Reference of the frontend to be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "Primary frontend, the one that is served for all pages by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "Port advertised in URLs (optional, defaults to port)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "Enables the gopher interface" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "IP address to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "Port to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "Adapter specific options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "SSL options for HTTP adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "List of TLS version to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" +"What user agent to use. Must be a string or an atom `:default`. Default " +"value is `:default`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "The maximum age for the Expect-CT header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "Whether the managed content security policy is enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "Adds the specified URL to report-uri and report-to group in CSP header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "Whether to additionally send a Strict-Transport-Security header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "The maximum age for the Strict-Transport-Security header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "Require users to confirm their emails before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "Require users to be manually approved by an admin before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "An account field name maximum length. Default: 512." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "An account field value maximum length. Default: 2048." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" +"Permits remote instances to subscribe to all public posts of your instance. " +"(Important!) This may increase the visibility of your instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "MIME-type list of formats allowed to be posted (transformed into HTML)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "Enable to automatically add attachment link text to statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" +"Set to nicknames of (local) users that every new user should automatically " +"follow" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" +"Set to nicknames of (local) users that automatically follows every newly " +"registered user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "File size limit of user's profile avatars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "File size limit of user's profile backgrounds" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "File size limit of user's profile banners" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" +"Minimum required age for users to create account. Only used if birthday is " +"required." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "Require users to enter their birthday." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" +"Enable to remove associated attachments when status is removed.\n" +"This will not affect duplicates and attachments without status.\n" +"Enabling this will increase load to database when deleting statuses on " +"larger instances.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" +"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "Email used to reach an Administrator/Moderator of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" +"Enable to use extended local nicknames format (allows underscores/dashes). " +"This will break federation with older software for theses nicknames." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" +"Enabling following/followers counters synchronization for external users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "Enable federation with other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" +"Max. depth of reply-to and reply activities fetching on incoming federation, " +"to prevent out-of-memory situations while fetching very long threads. If set " +"to `nil`, threads of any depth will be fetched. Lower this value if you " +"experience out-of-memory crashes." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" +"Timeout (in days) of each external federation target being unreachable prior " +"to pausing federating to it" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" +"The instance thumbnail can be any image that represents your instance and is " +"used by some apps or services when they display information about your " +"instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" +"Enable user invitations for admins (depends on `registrations_open` being " +"disabled)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "Posts character limit (CW/Subject included in the counter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" +"Limit unauthenticated users to search for local statutes and users only. " +"Default: `:unauthenticated`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "The maximum number of custom fields in the user profile. Default: 10." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "The maximum number of recommended accounts. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "Maximum number of post media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "The maximum number of pinned statuses. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" +"The maximum number of custom fields in the remote user profile. Default: 20." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "The maximum size of the report comment. Default: 1000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "Multi-factor authentication settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "MFA backup codes settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" +"Determines the length of backup one-time pass-codes, in characters. Defaults " +"to 16 characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "Number of backup codes to generate." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" +"Determines the length of a one-time pass-code, in characters. Defaults to 6 " +"characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" +"A period for which the TOTP code will be valid, in seconds. Defaults to 30 " +"seconds." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "Envelope FROM address for mail sent via Pleroma" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "A map with poll limits for local polls" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "Maximum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "Maximum number of characters per option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "Maximum number of options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "Minimum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "Enable profile directory." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "Maximum registration reason length. Default: 500." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" +"Enable registrations for anyone. Invitations require this setting to be " +"disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "Hard character limit beyond which remote posts will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" +"The default amount of days to retain remote posts when pruning the database" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" +"If enabled, only mentions at the beginning of a post will be used to address " +"people in direct messages. This is to prevent accidental mentioning of " +"people when talking about them (e.g. \"@admin please keep an eye on @" +"bad_actor\"). Default: disabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "Let favourites and emoji reactions be viewed through the API." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "Skip filtering out broken threads. Default: enabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "Instance static directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "File size limit of uploads (except for avatar, background, banner)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "A user bio maximum length. Default: 5000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "A user name maximum length. Default: 100." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "LDAP base, e.g. \"dc=example,dc=com\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "Enables LDAP authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "LDAP server hostname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "LDAP port, e.g. 389 or 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "Enable to use SSL, usually implies the port 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "Additional SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "Enable to use STARTTLS, usually implies the port 389" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "Additional TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" +"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " +"will be \"cn=username,base\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "Number of majic workers to start." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "Describe the icons of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" +"Module names are shortened (removed leading `Pleroma.HTML.` part), but on " +"adding custom module you need to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" +"Enables proxying of remote media preview to the instance's proxy. Requires " +"enabled media proxy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" +"Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" +"Min content length (in bytes) to perform preview. Media smaller in size will " +"be served without thumbnailing." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max height of preview thumbnail for images (video preview always has " +"original dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max width of preview thumbnail for images (video preview always has original " +"dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" +"The base URL to access a user-uploaded file. Useful when you want to proxy " +"the media files via another host/CDN fronts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "Enables proxying of remote media via the instance's proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "Enables media cache object invalidation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "Module which will be used to purge objects from the cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "Internal Pleroma.ReverseProxy settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" +"Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "Timeout (in milliseconds) of GET request to the remote URI." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" +"Redirects the client to the origin server upon encountering HTTP errors.\n" +"\n" +"Note that files larger than Max Body Length will trigger an error. (e.g., " +"Peertube videos)\n" +"\n" +"\n" +"**WARNING:** This setting will allow larger files to be accessed, but " +"exposes the\n" +"\n" +"IP addresses of your users to the other servers, bypassing the MediaProxy.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "List of hosts with scheme to bypass the MediaProxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "A path to custom Elixir modules (such as MRF policies)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" +"A list of MRF policies enabled. Module names are shortened (removed leading " +"`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" +"Make the content of your Message Rewrite Facility settings public (via " +"nodeinfo)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" +"Exclude specific instance names from MRF transparency. The use of the " +"exclusions feature will be disclosed in nodeinfo as a boolean value. You can " +"also provide a reason for excluding these instance names. The instances and " +"reasons won't be publicly disclosed." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "Default global expiration time for all local activities (in days)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" +"The name of the bot account to use for following newly discovered users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" +"A list of hashtags which result in message being removed from federated " +"timelines (a.k.a unlisted)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "A list of hashtags which result in message being rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" +"A list of hashtags which result in message being set as sensitive (a.k.a " +"NSFW/R-18)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the message gets removed from " +"timelines anddisables notifications. Set to 0 to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the messaged gets rejected. Set to 0 " +"to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being removed from federated " +"timelines (a.k.a unlisted).\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being rejected.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" +" **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " +"the format of `~r/PATTERN/`.\n" +"\n" +" **Replacement**: a string. Leaving the field empty is permitted.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "A list of actors for which any post mentioning them will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" +"A list of actions to apply to the post. `:delist` removes the post from " +"public timelines; `:strip_followers` removes followers from the ActivityPub " +"recipient list ensuring they won't be delivered to home timelines; `:reject` " +"rejects the message entirely" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "Required age (in seconds) of a post before actions are taken." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "Whether to allow direct messages" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "Whether to allow followers-only posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to only accept activities from (except deletes) and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "List of instances to strip avatars from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "List of instances to strip banners from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" +"List of instances to remove from the Federated (aka The Whole Known Network) " +"Timeline and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" +"Force posts from the given instances to be visible by followers only and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" +"List of instances to tag all media as NSFW (sensitive) from and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" +"List of instances to strip media attachments from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to reject activities from (except deletes) and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "List of instances to reject deletions from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "List of instances to reject reports from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "List of hosts to steal emojis from" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns or matches to reject shortcodes with.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" +"File size limit (in bytes), checked before an emoji is saved to the disk" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "Matches a series of regular expressions against the actor field" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" +"A list of ActivityStreams terms to accept. If empty, all supported messages " +"are accepted." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" +"A list of ActivityStreams terms to reject. If empty, no messages are " +"rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" +"Enable a background job to clean expired OAuth tokens. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" +"Keeps old refresh token or generate new refresh token when to obtain an " +"access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "The lifetime in seconds of the access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "Settings for default pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" +"Max accepted rate of objects that failed in the migration. Any value from " +"0.0 which tolerates no errors to 1.0 which will enable the feature even if " +"hashtags transfer failed for all records." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" +"Sleep interval between each chunk of processed records in order to decrease " +"the load on the system (defaults to 0 and should be keep default on most " +"instances)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "For registering user accounts from the same IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" +"For authentication create / password check / user existence check requests" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "For actions on relation with a specific user (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "For actions on relationships with all users (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "For the search requests (account & status search etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" +"For fav / unfav or reblog / unreblog actions on the same status by the same " +"user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" +"For create / delete / fav / unfav / reblog / unreblog actions on any statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "For requests to timelines (each timeline has it's own limiter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "Settings for user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "Settings for public and federated timelines." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "Enables RichMedia parsing of URLs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" +"Amount of milliseconds after request failure, during which the request will " +"not be retried." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "List of hosts which will be ignored by the metadata parser" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "List TLDs (top-level domains) which will ignore for parse metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" +"List of Rich Media parsers. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" +"List of rich media TTL setters. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "Enables the backend Shoutbox chat feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "Shout message character limit." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "Enables the rendering of static HTML. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "Maximum number of workers created if pool is empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "Number of workers to send notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "List of the scheme part that is considered valid to be an URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" +"Activity pub routes (except question activities). Default: `nil` (no " +"expiration)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" +"Activity pub routes (question activities). Default: `30_000` (30 seconds)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "Enables sending a chat message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "A message that will be sent to newly registered users as a chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "The nickname of the local user that sends a welcome chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "Enables sending a direct message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "A message that will be sent to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "The nickname of the local user that sends a welcome message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "Enables sending an email to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"HTML content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" +"Email address and/or nickname that will be used to send the welcome email." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Subject of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Text content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "Concurrent limits configuration for MediaProxyWarmingPolicy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "Concurrent limits configuration for getting RichMedia for activities." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "Settings for cron background jobs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "Logs verbose mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" +"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "Activity expiration queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "Attachment deletion queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "Background queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "Backup queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "Incoming federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "Outgoing federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "Email sender queue, see Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "Scheduled activities queue, see Pleroma.ScheduledActivities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "Transmogrifier queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "Web push notifications queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "Whether the captcha should be shown on registration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "The method/service to use for captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "The time in seconds for which the captcha is valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "The kocaptcha endpoint to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" +"One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" +"swoosh/Swoosh.html#module-adapters)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "SMTP AUTH enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "SMTP AUTH password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "SMTP port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "Hostname or IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "SMTP temporary (4xx) error retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "Use Implicit SSL/TLS. e.g. port 465" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "Explicit TLS (STARTTLS) enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "SMTP AUTH username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "Enables new users admin digest email when `true`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" +"A path to a custom logo. Set it to `nil` to use the default Pleroma logo." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "A map with color settings for email templates." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "Specify the class to be added to the generated link. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "Link URLs will open in a new window/tab." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "Override the rel attribute. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "Strip the scheme prefix." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" +"Set to a number to truncate URLs longer than the number. Truncated URLs will " +"end in `...`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" +"Set to false to disable TLD validation for URLs/emails. Can be set to :" +"no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " +"will be validated, but `http://example.loki` won't)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" +"The number of scheduled activities a user is allowed to create in a single " +"day. Default: 25." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "Whether scheduled activities are sent to the job queue to be executed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" +"The number of scheduled activities a user is allowed to create in total. " +"Default: 300." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" +"Base URL for the uploads. Required if you use a CDN or host attachments " +"under a different domain." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "Set max length of a filename to display. 0 = no limit. Default: 30" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" +"List of filter modules for uploads. Module names are shortened (removed " +"leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" +"If enabled, a name parameter will be added to the URL of the upload. For " +"example `https://instance.tld/media/imagehash.png?name=realname.png`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" +"Proxy requests to the remote uploader.\n" +"\n" +"Useful if media upload endpoint is not internet accessible.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "Module which will be used for uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" +"Text to replace filenames in links. If no setting, {random}.extension will " +"be used. You can get the original filename extension by using {extension}, " +"for example custom-file-name.{extension}." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" +"List of actions for the mogrify command. It's possible to add self-written " +"settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080" +">\"}` value will be parsed into valid list of the settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "Path where user's uploads will be saved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "S3 bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "S3 bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" +"Enable streaming uploads, when enabled the file will be sent to the server " +"in chunks as it's being read. This may be unsupported by some providers, try " +"disabling this if you have upload problems." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" +"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " +"folder name or \"\" etc. For example, when using CDN to S3 virtual host " +"format, set \"\". At this time, write CNAME to CDN in Upload base_url." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "List of email domains users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "List of nicknames users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "Limit user to export not more often than once per N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "Remove backup achives after N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" +"Enables strict input validation (useful in development, not recommended in " +"production)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "HTTP headers of request" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "HTTP method of request. Default: :purge" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "Request options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "Path to executable script which will purge cached items." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" +"Optional URL format preprocessing. Only required for Apache's htcacheclean." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "List of metadata providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "When enabled NSFW attachments will be shown in previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "Enable/disable the plug. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" +" A list of strings naming the HTTP headers to use when deriving the true " +"client IP. Default: `[\"x-forwarded-for\"]`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" +"A list of upstream proxy IP subnets in CIDR notation from which we will " +"parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " +"bitmask will be assumed to be /32 and IPv6 /128." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" +" A list of reserved IP subnets in CIDR notation which should be ignored if " +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\"" +", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "List of preload providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "Enables expired activities addition & deletion" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "Minimum lifetime for ephemeral activity (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "[Pleroma extension] Enables app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "App metrics endpoint output format." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "Restrict access of app metrics endpoint to the specified IP addresses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "App metrics endpoint URI path." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "Configure which metadata you want to report on" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "Configure the Slack incoming webhook" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "VAPID private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" +"A mailto link for the administrative contact. It's best if this email is not " +"a personal email address, but rather a group email to the instance " +"moderation team." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "Credentials" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "Expose" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "Max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "Methods" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "Handler" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "Password authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "Priv dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "Access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "Backends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "Ident" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "\"application/activity+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "\"application/jrd+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "\"application/ld+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "\"application/xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "\"application/xrd+xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "Pleroma.Web.Auth.Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "Blockers visible" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "Follow handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "Note replies output limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "Outgoing blocks" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "Sign object fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "Unfollow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "Default mascot" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "Default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "Mascots" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "Auth template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "Enforce OAuth admin scope usage" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "OAuth consumer strategies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "OAuth consumer template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "Connect timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "Connection acquisition retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "Connection acquisition wait" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "Reclaim multiplier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "Digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "Inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "Interval" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "Schedule" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "Default manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "Groups" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "Pack extensions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "Shared pack cache s/file" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "Shortcode globs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "Improved hashtag timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "Post title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "Max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "Omission" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "Always show subject input" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "Collapse message with subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "Greentext" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "Hide Filtered Statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "Hide Muted Posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "Hide post stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "Hide user stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "Logo margin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "Logo mask" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "Minimal scopes mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "NSFW Censor Image" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "Post Content Type" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "Redirect root login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "Redirect root no login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "Scope copy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "Show instance features panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "Sidebar on Right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "Subject line behavior" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "Theme" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "Admin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "Available" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "Build directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "Build URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "Custom HTTP headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "Git Repository URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "Primary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "Dstport" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "IP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "SSL Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "Versions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "Send user agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "User agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "CT max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "Referrer policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "Report URI" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "STS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "STS max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "Account activation required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "Account approval required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "Account field name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "Account field value length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "Allow relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "Allowed post formats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "Attachment links" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "Autofollowed nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "Autofollowing nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "Avatar upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "Background upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "Banner upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "Birthday min age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "Birthday required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "Cleanup attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "Description" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "Admin Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "Extended nickname format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "External user synchronization" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "Federating" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "Fed. incoming replies max depth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "Fed. reachability timeout days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "Healthcheck" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "Instance thumbnail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "Invites enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "Limit to local content" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "Max account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "Max endorsed users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "Max media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "Max pinned statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "Max remote account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "Max report comment size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "Multi factor authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "Backup codes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "Length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "Number" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "Digits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "Period" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "Sender Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "Poll limits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "Max expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "Max option chars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "Max options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "Min expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "Privileged staff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "Profile directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "Quarantined instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "Registration reason length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "Registrations open" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "Remote limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "Remote post retention days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "Safe DM mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "Show reactions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "Skip thread containment" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "Static dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "Upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "User bio length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "User name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "Base" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "TLS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "UID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "Icons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "Allow fonts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "Allow headings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "Allow inline images" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "Allow tables" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "Image quality" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "Min content length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "Thumbnail max height" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "Thumbnail max width" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "Invalidation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "Provider" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "Advanced MediaProxy Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "Max body length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "Max read duration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "Redirect on failure" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "Runtime dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "Policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "MRF transparency" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "MRF transparency exclusions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "Days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "Follower nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "Sensitive" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "Delist threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "Reject threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "Replace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "Actors" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "Actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "Threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "Allow direct" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "Allow followers-only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "Avatar removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "Banner removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "Followers only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "Media NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "Media removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "Reject deletes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "Report removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "Hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "Size limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "Match actor" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "Clean expired tokens" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "Issue new refresh token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "Token expires in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "Default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "Fault rate allowance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "Sleep interval ms" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "App account creation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "Authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "Relation ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "Relations actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "Status ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "Statuses actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "Timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "Profiles" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "Timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "Federated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "Failure backoff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "Ignore hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "Ignore TLD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "Parsers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "TTL setters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "Overflow workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "Valid schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "Deny follow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "Activity pub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "Activity pub question" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "Chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "Direct message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "Email" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "Html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "Sender" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "Pleroma.Web.RichMedia.Helpers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "Crontab" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "Log" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "Queues" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "Activity expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "Attachments cleanup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "Federator incoming" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "Federator outgoing" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "Scheduled activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "Transmogrifier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "Web push" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "Seconds valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "Mailer Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "AWS Access Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "AWS Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "AWS Secret Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "Dyn API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "GMail API Access Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "Mailgun API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "Domain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "MailJet Public API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "MailJet Private API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "Mandrill API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "Postmark API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "AUTH Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "Relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "Use SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "STARTTLS Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "SendGrid API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "Cmd path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "Qmail compat mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "SocketLabs API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "Server ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "SparkPost API key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "Styling" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "Content background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "Header color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "Link color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "Text color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "Text muted color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "Class" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "Extra" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "New window" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "Rel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "Strip prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "Truncate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "Validate tld" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "Daily user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "Total user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "Filename display max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "Filters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "Link name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "Proxy remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "Uploader" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "Args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "Uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "Bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "Bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "Truncated namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "Email blacklist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "Restricted nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "Limit days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "Purge after days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "Params" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "Script path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "URL Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "Unfurl NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "Proxies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "Reserved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "Min lifetime" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "IP Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "Path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "Meta" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "Webhook URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "Public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures for AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :short_description" +msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgstr "" +"Shorter version of instance description. It can be seen on `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "Authorized fetch mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :short_description" +msgid "Short description" +msgstr "Short description" From fd35a663128b0d192d571091c43a6be5a1496103 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 8 Aug 2022 15:48:02 +0000 Subject: [PATCH 71/82] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ Translation: Pleroma fe/Akkoma Backend (Static pages) --- priv/gettext/es/LC_MESSAGES/posix_errors.po | 163 ++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 priv/gettext/es/LC_MESSAGES/posix_errors.po diff --git a/priv/gettext/es/LC_MESSAGES/posix_errors.po b/priv/gettext/es/LC_MESSAGES/posix_errors.po new file mode 100644 index 000000000..4118c8ee1 --- /dev/null +++ b/priv/gettext/es/LC_MESSAGES/posix_errors.po @@ -0,0 +1,163 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-08-06 22:24+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Translate Toolkit 3.7.1\n" + +## This file is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here as no +## effect: edit them in PO (`.po`) files instead. +msgid "eperm" +msgstr "" + +msgid "eacces" +msgstr "" + +msgid "eagain" +msgstr "" + +msgid "ebadf" +msgstr "" + +msgid "ebadmsg" +msgstr "" + +msgid "ebusy" +msgstr "" + +msgid "edeadlk" +msgstr "" + +msgid "edeadlock" +msgstr "" + +msgid "edquot" +msgstr "" + +msgid "eexist" +msgstr "" + +msgid "efault" +msgstr "" + +msgid "efbig" +msgstr "" + +msgid "eftype" +msgstr "" + +msgid "eintr" +msgstr "" + +msgid "einval" +msgstr "" + +msgid "eio" +msgstr "" + +msgid "eisdir" +msgstr "" + +msgid "eloop" +msgstr "" + +msgid "emfile" +msgstr "" + +msgid "emlink" +msgstr "" + +msgid "emultihop" +msgstr "" + +msgid "enametoolong" +msgstr "" + +msgid "enfile" +msgstr "" + +msgid "enobufs" +msgstr "" + +msgid "enodev" +msgstr "" + +msgid "enolck" +msgstr "" + +msgid "enolink" +msgstr "" + +msgid "enoent" +msgstr "" + +msgid "enomem" +msgstr "" + +msgid "enospc" +msgstr "" + +msgid "enosr" +msgstr "" + +msgid "enostr" +msgstr "" + +msgid "enosys" +msgstr "" + +msgid "enotblk" +msgstr "" + +msgid "enotdir" +msgstr "" + +msgid "enotsup" +msgstr "" + +msgid "enxio" +msgstr "" + +msgid "eopnotsupp" +msgstr "" + +msgid "eoverflow" +msgstr "" + +msgid "epipe" +msgstr "" + +msgid "erange" +msgstr "" + +msgid "erofs" +msgstr "" + +msgid "espipe" +msgstr "" + +msgid "esrch" +msgstr "" + +msgid "estale" +msgstr "" + +msgid "etxtbsy" +msgstr "" + +msgid "exdev" +msgstr "" From 2f074a6966790e782bccfcea86109cc92b281149 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 8 Aug 2022 15:48:02 +0000 Subject: [PATCH 72/82] Translated using Weblate (Catalan) Currently translated at 2.9% (30 of 1002 strings) Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Co-authored-by: sola Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-config-descriptions/ca/ Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ Translation: Pleroma fe/Akkoma Backend (Config Descriptions) Translation: Pleroma fe/Akkoma Backend (Static pages) --- .../ca/LC_MESSAGES/config_descriptions.po | 3582 ++++++++++------- 1 file changed, 2136 insertions(+), 1446 deletions(-) diff --git a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po index 789ff54d0..3a25f067e 100644 --- a/priv/gettext/ca/LC_MESSAGES/config_descriptions.po +++ b/priv/gettext/ca/LC_MESSAGES/config_descriptions.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2022-07-28 09:35+0000\n" -"PO-Revision-Date: 2022-07-30 21:58+0000\n" +"PO-Revision-Date: 2022-08-08 15:48+0000\n" "Last-Translator: sola \n" "Language-Team: Catalan \n" @@ -14,212 +14,202 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.13.1\n" -## This file is a PO Template file. -## -## "msgid"s here are often extracted from source code. -## Add new translations manually only if they're dynamic -## translations that can't be statically extracted. -## -## Run "mix gettext.extract" to bring this file up to -## date. Leave "msgstr"s empty as changing them here has no -## effect: edit them in PO (.po) files instead. +# # This file is a PO Template file. +# # +# # "msgid"s here are often extracted from source code. +# # Add new translations manually only if they're dynamic +# # translations that can't be statically extracted. +# # +# # Run "mix gettext.extract" to bring this file up to +# # date. Leave "msgstr"s empty as changing them here has no +# # effect: edit them in PO (.po) files instead. #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :esshd" -msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" -msgstr "" +msgid "" "Before enabling this you must add :esshd to mix.exs as one of the " "extra_applications and generate host keys in your priv dir with ssh-keygen -" "m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" +"Abans d'activar això has d'afegir :esshd a mix.exs com a una de les " +"extra_applications i generar les claus del hoste en el teu directori priv " +"amb ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format msgctxt "config description at :logger" msgid "Logger-related settings" msgstr "Configuració relacionada amb el registrador(Log)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format msgctxt "config description at :mime" msgid "Mime Types settings" msgstr "Configuració de tipus Mime" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma" -msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" -msgstr "" +msgid "" "Allows setting a token that can be used to authenticate requests with admin " "privileges without a normal user account token. Append the `admin_token` " "parameter to requests to utilize it. (Please reconsider using HTTP Basic " "Auth or OAuth-based authentication if possible)" +msgstr "" +"Permet configurar un token que pot ser usat per a autenticar sol·licituds " +"amb privilegis d'admin sense el token d'un usuari normal. Annexa el " +"paràmetre `admin_token` a les sol·licituds per a utilitzar-lo. (Si us plau " +"reconsidera usar HTTP Basic Auth o autenticació basada en OAuth si és " +"possible)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format msgctxt "config description at :pleroma" msgid "Authenticator" msgstr "Autenticador" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format msgctxt "config description at :quack" msgid "Quack-related settings" msgstr "Configuració relacionada amb Quack" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :cors_plug" msgid "CORS plug config" -msgstr "CORS plug config" +msgstr "configuració CORS plug" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :esshd" msgid "ESSHD" msgstr "ESSHD" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :logger" msgid "Logger" msgstr "Logger" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :mime" msgid "Mime Types" -msgstr "Mime Types" +msgstr "Tipus Mime" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :pleroma" msgid "Pleroma Admin Token" -msgstr "Pleroma Admin Token" +msgstr "Token d'Admin Akkoma" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :pleroma" msgid "Pleroma Authenticator" -msgstr "Pleroma Authenticator" +msgstr "Autenticador Akkoma" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config label at :quack" msgid "Quack Logger" -msgstr "Quack Logger" +msgstr "Logger Quack" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :logger-:console" msgid "Console logger settings" -msgstr "Console logger settings" +msgstr "Ajustos de consola logger" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :logger-:ex_syslogger" msgid "ExSyslogger-related settings" -msgstr "ExSyslogger-related settings" +msgstr "Ajustos relacionats amb ExSyslogger" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:activitypub" msgid "ActivityPub-related settings" -msgstr "ActivityPub-related settings" +msgstr "Ajusto relacionats amb ActivityPub" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:assets" -msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" -msgstr "" +msgid "" "This section configures assets to be used with various frontends. Currently " "the only option relates to mascots on the mastodon frontend" +msgstr "" +"Aquesta secció configura els assets per a ser usats en diversos frontends. " +"Actualment l'única opció està relacionada amb les mascotes en el frontend " +"mastodon" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:auth" msgid "Authentication / authorization settings" -msgstr "Authentication / authorization settings" +msgstr "Ajustos d' autenticació / autorització" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:connections_pool" msgid "Advanced settings for `Gun` connections pool" -msgstr "Advanced settings for `Gun` connections pool" +msgstr "Ajustos avançats per el grup de connexions `Gun`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:email_notifications" msgid "Email notifications settings" -msgstr "Email notifications settings" +msgstr "Configuració de notificacions per correu electrònic" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:features" msgid "Customizable features" -msgstr "Customizable features" +msgstr "Característiques personalitzables" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:feed" msgid "Configure feed rendering" -msgstr "Configure feed rendering" +msgstr "Configurar el renderitzat del feed" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:frontend_configurations" -msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." -msgstr "" +msgid "" "This form can be used to configure a keyword list that keeps the " "configuration data for any kind of frontend. By default, settings for " "pleroma_fe are configured. If you want to add your own configuration your " "settings all fields must be complete." +msgstr "" +"Aquest formulari es pot fer servir per a configurar un llistat de paraules " +"clau per a qualsevol tipus de \"frontend\". Per defecte es configuren els de " +"pleroma_fe. Si vols afegir la teva pròpia configuració i els teus ajustos, " +"tots els camps han d'estar complets." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:frontends" msgid "Installed frontends management" -msgstr "Installed frontends management" +msgstr "Gestió dels \"frontend\" instal·lats" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:gopher" msgid "Gopher settings" -msgstr "Gopher settings" +msgstr "Configuració Gopher" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:hackney_pools" msgid "Advanced settings for `Hackney` connections pools" -msgstr "Advanced settings for `Hackney` connections pools" +msgstr "Configuració avançada per el grup de connexions `Hackney`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:http" msgid "HTTP settings" -msgstr "HTTP settings" +msgstr "Ajustos HTTP" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:http_security" msgid "HTTP security settings" -msgstr "HTTP security settings" +msgstr "Ajustos de seguretat HTTP" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:instance" msgid "Instance-related settings" -msgstr "Instance-related settings" +msgstr "Configuració relacionada amb l'instància" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy msgctxt "config description at :pleroma-:instances_favicons" msgid "Control favicons for instances" -msgstr "Control favicons for instances" +msgstr "Control dels favicons per instàncies" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap" -msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgid "" +"Use LDAP for user authentication. When a user logs in to the Pleroma " +"instance, the name and password will be verified by trying to authenticate " +"(bind) to a LDAP server. If a user exists in the LDAP directory but there is " +"no account with the same name yet on the Pleroma instance then a new Pleroma " +"account will be created with the same name as the LDAP user name." msgstr "" "Use LDAP for user authentication. When a user logs in to the Pleroma " "instance, the name and password will be verified by trying to authenticate " @@ -228,340 +218,378 @@ msgstr "" "account will be created with the same name as the LDAP user name." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:majic_pool" msgid "Majic/libmagic configuration" msgstr "Majic/libmagic configuration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:manifest" -msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgid "" +"This section describe PWA manifest instance-specific values. Currently this " +"option relate only for MastoFE." msgstr "" "This section describe PWA manifest instance-specific values. Currently this " "option relate only for MastoFE." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_preview_proxy" msgid "Media preview proxy" msgstr "Media preview proxy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_proxy" msgid "Media proxy" msgstr "Media proxy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:modules" msgid "Custom Runtime Modules" msgstr "Custom Runtime Modules" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf" msgid "General MRF settings" msgstr "General MRF settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_activity_expiration" msgid "Adds automatic expiration to all local activities" msgstr "Adds automatic expiration to all local activities" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_follow_bot" msgid "Automatically follows newly discovered accounts." msgstr "Automatically follows newly discovered accounts." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_hashtag" -msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgid "" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags " +"(without the leading #)\n" +"\n" +"Note: This MRF Policy is always enabled, if you want to disable it you have " +"to set empty lists.\n" msgstr "" -"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (" -"without the leading #)\n" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags " +"(without the leading #)\n" "\n" "Note: This MRF Policy is always enabled, if you want to disable it you have " "to set empty lists.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_hellthread" msgid "Block messages with excessive user mentions" msgstr "Block messages with excessive user mentions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_keyword" -msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgid "" +"Reject or Word-Replace messages matching a keyword or [Regex](https://" +"hexdocs.pm/elixir/Regex.html)." msgstr "" -"Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs" -".pm/elixir/Regex.html)." +"Reject or Word-Replace messages matching a keyword or [Regex](https://" +"hexdocs.pm/elixir/Regex.html)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_mention" msgid "Block messages which mention a specific user" msgstr "Block messages which mention a specific user" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_normalize_markup" msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." msgstr "MRF NormalizeMarkup settings. Scrub configured hypertext markup." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_object_age" -msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgid "" +"Rejects or delists posts based on their timestamp deviance from your " +"server's clock." msgstr "" "Rejects or delists posts based on their timestamp deviance from your " "server's clock." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_rejectnonpublic" msgid "RejectNonPublic drops posts with non-public visibility settings." msgstr "RejectNonPublic drops posts with non-public visibility settings." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple" msgid "Simple ingress policies" msgstr "Simple ingress policies" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_steal_emoji" msgid "Steals emojis from selected instances when it sees them." msgstr "Steals emojis from selected instances when it sees them." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_subchain" -msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgid "" +"This policy processes messages through an alternate pipeline when a given " +"message matches certain criteria. All criteria are configured as a map of " +"regular expressions to lists of policy modules." msgstr "" "This policy processes messages through an alternate pipeline when a given " "message matches certain criteria. All criteria are configured as a map of " "regular expressions to lists of policy modules." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_vocabulary" msgid "Filter messages which belong to certain activity vocabularies" msgstr "Filter messages which belong to certain activity vocabularies" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:oauth2" msgid "Configure OAuth 2 provider capabilities" msgstr "Configure OAuth 2 provider capabilities" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools" msgid "Advanced settings for `Gun` workers pools" msgstr "Advanced settings for `Gun` workers pools" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:populate_hashtags_table" msgid "`populate_hashtags_table` background migration settings" msgstr "`populate_hashtags_table` background migration settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit" -msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgid "" +"Rate limit settings. This is an advanced feature enabled only for :" +"authentication by default." msgstr "" "Rate limit settings. This is an advanced feature enabled only for :" "authentication by default." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated" -msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgid "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." msgstr "" "Disallow viewing timelines, user profiles and statuses for unauthenticated " "users." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media" -msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgid "" +"If enabled the instance will parse metadata from attached links to generate " +"link previews" msgstr "" "If enabled the instance will parse metadata from attached links to generate " "link previews" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:shout" msgid "Pleroma shout settings" msgstr "Pleroma shout settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:static_fe" -msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgid "" +"Render profiles and posts using server-generated HTML that is viewable " +"without using JavaScript" msgstr "" "Render profiles and posts using server-generated HTML that is viewable " "without using JavaScript" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:streamer" msgid "Settings for notifications streamer" msgstr "Settings for notifications streamer" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:uri_schemes" msgid "URI schemes related settings" msgstr "URI schemes related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:web_cache_ttl" -msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgid "" +"The expiration time for the web responses cache. Values should be in " +"milliseconds or `nil` to disable expiration." msgstr "" "The expiration time for the web responses cache. Values should be in " "milliseconds or `nil` to disable expiration." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome" msgid "Welcome messages settings" msgstr "Welcome messages settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:workers" msgid "Includes custom worker options not interpretable directly by `Oban`" msgstr "Includes custom worker options not interpretable directly by `Oban`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-ConcurrentLimiter" msgid "Limits configuration for background tasks." msgstr "Limits configuration for background tasks." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban" -msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgid "" +"[Oban](https://github.com/sorentwo/oban) asynchronous job processor " +"configuration." msgstr "" "[Oban](https://github.com/sorentwo/oban) asynchronous job processor " "configuration." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Captcha" msgid "Captcha-related settings" msgstr "Captcha-related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" -msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgid "" +"Kocaptcha is a very simple captcha service with a single API endpoint, the " +"source code is here: https://github.com/koto-bank/kocaptcha. The default " +"endpoint (https://captcha.kotobank.ch) is hosted by the developer." msgstr "" "Kocaptcha is a very simple captcha service with a single API endpoint, the " "source code is here: https://github.com/koto-bank/kocaptcha. The default " "endpoint (https://captcha.kotobank.ch) is hosted by the developer." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" msgid "Mailer-related settings" msgstr "Mailer-related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" msgid "New users admin email digest" msgstr "New users admin email digest" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" msgid "Email template settings" msgstr "Email template settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter" -msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgid "" +"Configuration for Pleroma's link formatter which parses mentions, hashtags, " +"and URLs." msgstr "" "Configuration for Pleroma's link formatter which parses mentions, hashtags, " "and URLs." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" msgid "Scheduled activities settings" msgstr "Scheduled activities settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload" msgid "Upload general settings" msgstr "Upload general settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" msgid "Filter replaces the filename of the upload" msgstr "Filter replaces the filename of the upload" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" msgid "Uploads mogrify filter settings" msgstr "Uploads mogrify filter settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" msgid "Local uploader-related settings" msgstr "Local uploader-related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" msgid "S3 uploader-related settings" msgstr "S3 uploader-related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.User.Backup" msgid "Account Backup" msgstr "Account Backup" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" msgid "HTTP invalidate settings" msgstr "HTTP invalidate settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" msgid "Invalidation script settings" msgstr "Invalidation script settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Metadata" msgid "Metadata-related settings" msgstr "Metadata-related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" -msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgid "" +"`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." +"pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" +"**If your instance is not behind at least one reverse proxy, you should not " +"enable this plug.**\n" msgstr "" "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." "pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" @@ -569,676 +597,697 @@ msgstr "" "enable this plug.**\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Preload" msgid "Preload-related settings" msgstr "Preload-related settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Expired activities settings" msgstr "Expired activities settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +#, fuzzy +msgctxt "" +"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" msgid "Prometheus app metrics endpoint configuration" msgstr "Prometheus app metrics endpoint configuration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :web_push_encryption-:vapid_details" -msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgid "" +"Web Push Notifications configuration. You can use the mix task mix web_push." +"gen.keypair to generate it." msgstr "" -"Web Push Notifications configuration. You can use the mix task mix " -"web_push.gen.keypair to generate it." +"Web Push Notifications configuration. You can use the mix task mix web_push." +"gen.keypair to generate it." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :ex_aws-:s3" msgid "S3" msgstr "S3" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:console" msgid "Console Logger" msgstr "Console Logger" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:ex_syslogger" msgid "ExSyslogger" msgstr "ExSyslogger" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub" msgid "ActivityPub" msgstr "ActivityPub" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:assets" msgid "Assets" msgstr "Assets" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:auth" msgid "Auth" msgstr "Auth" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:connections_pool" msgid "Connections pool" msgstr "Connections pool" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:email_notifications" msgid "Email notifications" msgstr "Email notifications" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:emoji" msgid "Emoji" msgstr "Emoji" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:features" msgid "Features" msgstr "Features" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:feed" msgid "Feed" msgstr "Feed" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontend_configurations" msgid "Frontend configurations" msgstr "Frontend configurations" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends" msgid "Frontends" msgstr "Frontends" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:gopher" msgid "Gopher" msgstr "Gopher" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools" msgid "Hackney pools" msgstr "Hackney pools" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http" msgid "HTTP" msgstr "HTTP" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security" msgid "HTTP security" msgstr "HTTP security" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance" msgid "Instance" msgstr "Instance" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instances_favicons" msgid "Instances favicons" msgstr "Instances favicons" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap" msgid "LDAP" msgstr "LDAP" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:majic_pool" msgid "Majic pool" msgstr "Majic pool" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:manifest" msgid "Manifest" msgstr "Manifest" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:markup" msgid "Markup Settings" msgstr "Markup Settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_preview_proxy" msgid "Media preview proxy" msgstr "Media preview proxy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy" msgid "Media proxy" msgstr "Media proxy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:modules" msgid "Modules" msgstr "Modules" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf" msgid "MRF" msgstr "MRF" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_activity_expiration" msgid "MRF Activity Expiration Policy" msgstr "MRF Activity Expiration Policy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_follow_bot" msgid "MRF FollowBot Policy" msgstr "MRF FollowBot Policy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hashtag" msgid "MRF Hashtag" msgstr "MRF Hashtag" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hellthread" msgid "MRF Hellthread" msgstr "MRF Hellthread" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_keyword" msgid "MRF Keyword" msgstr "MRF Keyword" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_mention" msgid "MRF Mention" msgstr "MRF Mention" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_normalize_markup" msgid "MRF Normalize Markup" msgstr "MRF Normalize Markup" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_object_age" msgid "MRF Object Age" msgstr "MRF Object Age" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_rejectnonpublic" msgid "MRF Reject Non Public" msgstr "MRF Reject Non Public" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple" msgid "MRF Simple" msgstr "MRF Simple" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_steal_emoji" msgid "MRF Emojis" msgstr "MRF Emojis" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_subchain" msgid "MRF Subchain" msgstr "MRF Subchain" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_vocabulary" msgid "MRF Vocabulary" msgstr "MRF Vocabulary" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:oauth2" msgid "OAuth2" msgstr "OAuth2" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools" msgid "Pools" msgstr "Pools" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:populate_hashtags_table" msgid "Populate hashtags table" msgstr "Populate hashtags table" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit" msgid "Rate limit" msgstr "Rate limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:restrict_unauthenticated" msgid "Restrict Unauthenticated" msgstr "Restrict Unauthenticated" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media" msgid "Rich media" msgstr "Rich media" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:shout" msgid "Shout" msgstr "Shout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:static_fe" msgid "Static FE" msgstr "Static FE" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:streamer" msgid "Streamer" msgstr "Streamer" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:uri_schemes" msgid "URI Schemes" msgstr "URI Schemes" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:user" msgid "User" msgstr "User" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:web_cache_ttl" msgid "Web cache TTL" msgstr "Web cache TTL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome" msgid "Welcome" msgstr "Welcome" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:workers" msgid "Workers" msgstr "Workers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-ConcurrentLimiter" msgid "ConcurrentLimiter" msgstr "ConcurrentLimiter" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban" msgid "Oban" msgstr "Oban" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Captcha" msgid "Pleroma.Captcha" msgstr "Pleroma.Captcha" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" msgid "Pleroma.Captcha.Kocaptcha" msgstr "Pleroma.Captcha.Kocaptcha" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" msgid "Pleroma.Emails.Mailer" msgstr "Pleroma.Emails.Mailer" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" msgid "Pleroma.Emails.NewUsersDigestEmail" msgstr "Pleroma.Emails.NewUsersDigestEmail" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" msgid "Pleroma.Emails.UserEmail" msgstr "Pleroma.Emails.UserEmail" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter" msgid "Linkify" msgstr "Linkify" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" msgid "Pleroma.ScheduledActivity" msgstr "Pleroma.ScheduledActivity" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload" msgid "Pleroma.Upload" msgstr "Pleroma.Upload" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" msgid "Pleroma.Upload.Filter.AnonymizeFilename" msgstr "Pleroma.Upload.Filter.AnonymizeFilename" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" msgid "Pleroma.Upload.Filter.Mogrify" msgstr "Pleroma.Upload.Filter.Mogrify" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" msgid "Pleroma.Uploaders.Local" msgstr "Pleroma.Uploaders.Local" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" msgid "Pleroma.Uploaders.S3" msgstr "Pleroma.Uploaders.S3" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.User" msgid "Pleroma.User" msgstr "Pleroma.User" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.User.Backup" msgid "Pleroma.User.Backup" msgstr "Pleroma.User.Backup" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" msgid "Pleroma.Web.ApiSpec.CastAndValidate" msgstr "Pleroma.Web.ApiSpec.CastAndValidate" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" msgid "Pleroma.Web.MediaProxy.Invalidation.Http" msgstr "Pleroma.Web.MediaProxy.Invalidation.Http" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" msgid "Pleroma.Web.MediaProxy.Invalidation.Script" msgstr "Pleroma.Web.MediaProxy.Invalidation.Script" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Metadata" msgid "Pleroma.Web.Metadata" msgstr "Pleroma.Web.Metadata" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" msgid "Pleroma.Web.Plugs.RemoteIp" msgstr "Pleroma.Web.Plugs.RemoteIp" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Preload" msgid "Pleroma.Web.Preload" msgstr "Pleroma.Web.Preload" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" msgid "Pleroma.Workers.PurgeExpiredActivity" msgstr "Pleroma.Workers.PurgeExpiredActivity" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" msgid "Pleroma.Web.Endpoint.MetricsExporter" msgstr "Pleroma.Web.Endpoint.MetricsExporter" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details" msgid "Vapid Details" msgstr "Vapid Details" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :esshd > :enabled" msgid "Enables SSH" msgstr "Enables SSH" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :esshd > :handler" msgid "Handler module" msgstr "Handler module" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :esshd > :password_authenticator" msgid "Authenticator module" msgstr "Authenticator module" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :esshd > :port" msgid "Port to connect" msgstr "Port to connect" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :esshd > :priv_dir" msgid "Dir with SSH keys" msgstr "Dir with SSH keys" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :ex_aws-:s3 > :access_key_id" msgid "S3 access key ID" msgstr "S3 access key ID" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :ex_aws-:s3 > :host" msgid "S3 host" msgstr "S3 host" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :ex_aws-:s3 > :region" msgid "S3 region (for AWS)" msgstr "S3 region (for AWS)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :ex_aws-:s3 > :secret_access_key" msgid "Secret access key" msgstr "Secret access key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :logger > :backends" -msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgid "" +"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" +"ex_syslogger } - to syslog, Quack.Logger - to Slack." msgstr "" "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" "ex_syslogger } - to syslog, Quack.Logger - to Slack." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :logger-:console > :format" msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :logger-:console > :level" msgid "Log level" msgstr "Log level" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :logger-:ex_syslogger > :format" msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :logger-:ex_syslogger > :ident" -msgid "A string that's prepended to every message, and is typically set to the app name" +msgid "" +"A string that's prepended to every message, and is typically set to the app " +"name" msgstr "" "A string that's prepended to every message, and is typically set to the app " "name" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :logger-:ex_syslogger > :level" msgid "Log level" msgstr "Log level" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma > :admin_token" msgid "Admin token" msgstr "Admin token" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:activitypub > :blockers_visible" msgid "Whether a user can see someone who has blocked them" msgstr "Whether a user can see someone who has blocked them" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +#, fuzzy +msgctxt "" +"config description at :pleroma-:activitypub > :follow_handshake_timeout" msgid "Following handshake timeout" msgstr "Following handshake timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" -msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +#, fuzzy +msgctxt "" +"config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "" +"The number of Note replies' URIs to be included with outgoing federation " +"(`5` to match Mastodon hardcoded value, `0` to disable the output)" msgstr "" -"The number of Note replies' URIs to be included with outgoing federation (`5`" -" to match Mastodon hardcoded value, `0` to disable the output)" +"The number of Note replies' URIs to be included with outgoing federation " +"(`5` to match Mastodon hardcoded value, `0` to disable the output)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" msgid "Whether to federate blocks to other instances" msgstr "Whether to federate blocks to other instances" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" msgid "Sign object fetches with HTTP signatures" msgstr "Sign object fetches with HTTP signatures" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" msgid "Whether blocks result in people getting unfollowed" msgstr "Whether blocks result in people getting unfollowed" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:assets > :default_mascot" -msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgid "" +"This will be used as the default mascot on MastoFE. Default: `:" +"pleroma_fox_tan`" msgstr "" -"This will be used as the default mascot on MastoFE. Default: " -"`:pleroma_fox_tan`" +"This will be used as the default mascot on MastoFE. Default: `:" +"pleroma_fox_tan`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:assets > :default_user_avatar" msgid "URL of the default user avatar" msgstr "URL of the default user avatar" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:assets > :mascots" -msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgid "" +"Keyword of mascots, each element must contain both an URL and a mime_type key" msgstr "" "Keyword of mascots, each element must contain both an URL and a mime_type key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:auth > :auth_template" -msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgid "" +"Authentication form template. By default it's `show.html` which corresponds " +"to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." msgstr "" "Authentication form template. By default it's `show.html` which corresponds " "to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" -msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +#, fuzzy +msgctxt "" +"config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "" +"OAuth admin scope requirement toggle. If enabled, admin actions explicitly " +"demand admin OAuth scope(s) presence in OAuth token (client app must support " +"admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` " +"user flag grants access to admin-specific actions." msgstr "" "OAuth admin scope requirement toggle. If enabled, admin actions explicitly " "demand admin OAuth scope(s) presence in OAuth token (client app must support " @@ -1246,57 +1295,78 @@ msgstr "" "user flag grants access to admin-specific actions." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" -msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgid "" +"The list of enabled OAuth consumer strategies. By default it's set by " +"OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" +"delimited string should be of format \"strategy\" or \"strategy:dependency" +"\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency " +"is named differently than ueberauth_)." msgstr "" "The list of enabled OAuth consumer strategies. By default it's set by " "OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" -"delimited string should be of format \"strategy\" or \"strategy:dependency\" " -"(e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is " -"named differently than ueberauth_)." +"delimited string should be of format \"strategy\" or \"strategy:dependency" +"\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency " +"is named differently than ueberauth_)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" -msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgid "" +"OAuth consumer mode authentication form template. By default it's `consumer." +"html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." +"html.eex`." msgstr "" "OAuth consumer mode authentication form template. By default it's `consumer." "html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." "html.eex`." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" -msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +#, fuzzy +msgctxt "" +"config description at :pleroma-:connections_pool > :" +"connection_acquisition_retries" +msgid "" +"Number of attempts to acquire the connection from the pool if it is " +"overloaded. Default: 5" msgstr "" "Number of attempts to acquire the connection from the pool if it is " "overloaded. Default: 5" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" -msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +#, fuzzy +msgctxt "" +"config description at :pleroma-:connections_pool > :" +"connection_acquisition_wait" +msgid "" +"Timeout to acquire a connection from pool. The total max time is this value " +"multiplied by the number of retries. Default: 250ms." msgstr "" "Timeout to acquire a connection from pool. The total max time is this value " "multiplied by the number of retries. Default: 250ms." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:connections_pool > :max_connections" msgid "Maximum number of connections in the pool. Default: 250 connections." msgstr "Maximum number of connections in the pool. Default: 250 connections." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" -msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +#, fuzzy +msgctxt "" +"config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "" +"Multiplier for the number of idle connection to be reclaimed if the pool is " +"full. For example if the pool maxes out at 250 connections and this setting " +"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " +"overloaded. Default: 0.1" msgstr "" "Multiplier for the number of idle connection to be reclaimed if the pool is " "full. For example if the pool maxes out at 250 connections and this setting " @@ -1304,249 +1374,333 @@ msgstr "" "overloaded. Default: 0.1" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:email_notifications > :digest" -msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgid "" +"emails of \"what you've missed\" for users who have been inactive for a while" msgstr "" "emails of \"what you've missed\" for users who have been inactive for a while" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +#, fuzzy +msgctxt "" +"config description at :pleroma-:email_notifications > :digest > :active" msgid "Globally enable or disable digest emails" msgstr "Globally enable or disable digest emails" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +#, fuzzy +msgctxt "" +"config description at :pleroma-:email_notifications > :digest > :" +"inactivity_threshold" msgid "Minimum user inactivity threshold" msgstr "Minimum user inactivity threshold" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +#, fuzzy +msgctxt "" +"config description at :pleroma-:email_notifications > :digest > :interval" msgid "Minimum interval between digest emails to one user" msgstr "Minimum interval between digest emails to one user" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" -msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +#, fuzzy +msgctxt "" +"config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "" +"When to send digest email, in crontab format. \"0 0 0\" is the default, " +"meaning \"once a week at midnight on Sunday morning\"." msgstr "" "When to send digest email, in crontab format. \"0 0 0\" is the default, " "meaning \"once a week at midnight on Sunday morning\"." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:emoji > :default_manifest" -msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgid "" +"Location of the JSON-manifest. This manifest contains information about the " +"emoji-packs you can download. Currently only one manifest can be added (no " +"arrays)." msgstr "" "Location of the JSON-manifest. This manifest contains information about the " "emoji-packs you can download. Currently only one manifest can be added (no " "arrays)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:emoji > :groups" -msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgid "" +"Emojis are ordered in groups (tags). This is an array of key-value pairs " +"where the key is the group name and the value is the location or array of " +"locations. * can be used as a wildcard." msgstr "" "Emojis are ordered in groups (tags). This is an array of key-value pairs " "where the key is the group name and the value is the location or array of " "locations. * can be used as a wildcard." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:emoji > :pack_extensions" -msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgid "" +"A list of file extensions for emojis, when no emoji.txt for a pack is present" msgstr "" "A list of file extensions for emojis, when no emoji.txt for a pack is present" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:emoji > :shortcode_globs" msgid "Location of custom emoji files. * can be used as a wildcard." msgstr "Location of custom emoji files. * can be used as a wildcard." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" -msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." -msgstr "" -"Setting to force toggle / force disable improved hashtags timeline. " -"`:enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +msgid "" +"Setting to force toggle / force disable improved hashtags timeline. `:" +"enabled` forces hashtags to be fetched from `hashtags` table for hashtags " "timeline. `:disabled` forces object-embedded hashtags to be used (slower). " -"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [" -"unless overridden] when HashtagsTableMigrator completes)." +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` " +"[unless overridden] when HashtagsTableMigrator completes)." +msgstr "" +"Setting to force toggle / force disable improved hashtags timeline. `:" +"enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +"timeline. `:disabled` forces object-embedded hashtags to be used (slower). " +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` " +"[unless overridden] when HashtagsTableMigrator completes)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:feed > :post_title" msgid "Configure title rendering" msgstr "Configure title rendering" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:feed > :post_title > :max_length" msgid "Maximum number of characters before truncating title" msgstr "Maximum number of characters before truncating title" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:feed > :post_title > :omission" msgid "Replacement which will be used after truncating string" msgstr "Replacement which will be used after truncating string" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" msgid "Settings for Pleroma FE" msgstr "Settings for Pleroma FE" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"alwaysShowSubjectInput" msgid "When disabled, auto-hide the subject field if it's empty" msgstr "When disabled, auto-hide the subject field if it's empty" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" -msgid "URL of the background, unless viewing a user profile with a background that is set" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"background" +msgid "" +"URL of the background, unless viewing a user profile with a background that " +"is set" msgstr "" "URL of the background, unless viewing a user profile with a background that " "is set" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" -msgid "When a message has a subject (aka Content Warning), collapse it by default" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"collapseMessageWithSubject" +msgid "" +"When a message has a subject (aka Content Warning), collapse it by default" msgstr "" "When a message has a subject (aka Content Warning), collapse it by default" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"greentext" msgid "Enables green text on lines prefixed with the > character" msgstr "Enables green text on lines prefixed with the > character" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideFilteredStatuses" msgid "Hides filtered statuses from timelines" msgstr "Hides filtered statuses from timelines" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideMutedPosts" msgid "Hides muted statuses from timelines" msgstr "Hides muted statuses from timelines" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hidePostStats" msgid "Hide notices statistics (repeats, favorites, ...)" msgstr "Hide notices statistics (repeats, favorites, ...)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSitename" msgid "Hides instance name from PleromaFE banner" msgstr "Hides instance name from PleromaFE banner" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" -msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideUserStats" +msgid "" +"Hide profile statistics (posts, posts per day, followers, followings, ...)" msgstr "" "Hide profile statistics (posts, posts per day, followers, followings, ...)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" msgid "URL of the logo, defaults to Pleroma's logo" msgstr "URL of the logo, defaults to Pleroma's logo" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" -msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"logoMargin" +msgid "" +"Allows you to adjust vertical margins between logo boundary and navbar " +"borders. The idea is that to have logo's image without any extra margins and " +"instead adjust them to your need in layout." msgstr "" "Allows you to adjust vertical margins between logo boundary and navbar " "borders. The idea is that to have logo's image without any extra margins and " "instead adjust them to your need in layout." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" -msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"logoMask" +msgid "" +"By default it assumes logo used will be monochrome with alpha channel to be " +"compatible with both light and dark themes. If you want a colorful logo you " +"must disable logoMask." msgstr "" "By default it assumes logo used will be monochrome with alpha channel to be " "compatible with both light and dark themes. If you want a colorful logo you " "must disable logoMask." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" -msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"minimalScopesMode" +msgid "" +"Limit scope selection to Direct, User default, and Scope of post replying " +"to. Also prevents replying to a DM with a public post from PleromaFE." msgstr "" "Limit scope selection to Direct, User default, and Scope of post replying " "to. Also prevents replying to a DM with a public post from PleromaFE." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" -msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"nsfwCensorImage" +msgid "" +"URL of the image to use for hiding NSFW media attachments in the timeline" msgstr "" "URL of the image to use for hiding NSFW media attachments in the timeline" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"postContentType" msgid "Default post formatting option" msgstr "Default post formatting option" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"redirectRootLogin" msgid "Relative URL which indicates where to redirect when a user is logged in" -msgstr "Relative URL which indicates where to redirect when a user is logged in" +msgstr "" +"Relative URL which indicates where to redirect when a user is logged in" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" -msgid "Relative URL which indicates where to redirect when a user isn't logged in" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"redirectRootNoLogin" +msgid "" +"Relative URL which indicates where to redirect when a user isn't logged in" msgstr "" "Relative URL which indicates where to redirect when a user isn't logged in" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"scopeCopy" msgid "Copy the scope (private/unlisted/public) in replies to posts by default" -msgstr "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "" +"Copy the scope (private/unlisted/public) in replies to posts by default" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" -msgid "Enables panel displaying functionality of the instance on the About page" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showFeaturesPanel" +msgid "" +"Enables panel displaying functionality of the instance on the About page" msgstr "" "Enables panel displaying functionality of the instance on the About page" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showInstanceSpecificPanel" msgid "Whether to show the instance's custom panel" msgstr "Whether to show the instance's custom panel" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"sidebarRight" msgid "Change alignment of sidebar and panels to the right" msgstr "Change alignment of sidebar and panels to the right" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" -msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"subjectLineBehavior" +msgid "" +"Allows changing the default behaviour of subject lines in replies.\n" +" `email`: copy and preprend re:, as in email,\n" +" `masto`: copy verbatim, as in Mastodon,\n" +" `noop`: don't copy the subject." msgstr "" "Allows changing the default behaviour of subject lines in replies.\n" " `email`: copy and preprend re:, as in email,\n" @@ -1554,343 +1708,380 @@ msgstr "" " `noop`: don't copy the subject." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontend_configurations > :pleroma_fe > :" +"theme" msgid "Which theme to use. Available themes are defined in styles.json" msgstr "Which theme to use. Available themes are defined in styles.json" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :admin" msgid "Admin frontend" msgstr "Admin frontend" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :admin > name" -msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." msgstr "" "Name of the installed frontend. Valid config must include both `Name` and " "`Reference` values." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :admin > ref" -msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." msgstr "" "Reference of the installed frontend to be used. Valid config must include " "both `Name` and `Reference` values." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :available" -msgid "A map containing available frontends and parameters for their installation." +msgid "" +"A map containing available frontends and parameters for their installation." msgstr "" "A map containing available frontends and parameters for their installation." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :available > build_dir" msgid "The directory inside the zip file " msgstr "The directory inside the zip file " #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :available > build_url" -msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgid "" +"Either an url to a zip file containing the frontend or a template to build " +"it by inserting the `ref`. The string `${ref}` will be replaced by the " +"configured `ref`." msgstr "" "Either an url to a zip file containing the frontend or a template to build " "it by inserting the `ref`. The string `${ref}` will be replaced by the " "configured `ref`." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +#, fuzzy +msgctxt "" +"config description at :pleroma-:frontends > :available > custom-http-headers" msgid "The custom HTTP headers for the frontend" msgstr "The custom HTTP headers for the frontend" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :available > git" msgid "URL of the git repository of the frontend" msgstr "URL of the git repository of the frontend" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :available > name" msgid "Name of the frontend." msgstr "Name of the frontend." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :available > ref" msgid "Reference of the frontend to be used." msgstr "Reference of the frontend to be used." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :primary" msgid "Primary frontend, the one that is served for all pages by default" msgstr "Primary frontend, the one that is served for all pages by default" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :primary > name" -msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgid "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." msgstr "" "Name of the installed frontend. Valid config must include both `Name` and " "`Reference` values." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:frontends > :primary > ref" -msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgid "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." msgstr "" "Reference of the installed frontend to be used. Valid config must include " "both `Name` and `Reference` values." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:gopher > :dstport" msgid "Port advertised in URLs (optional, defaults to port)" msgstr "Port advertised in URLs (optional, defaults to port)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:gopher > :enabled" msgid "Enables the gopher interface" msgstr "Enables the gopher interface" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:gopher > :ip" msgid "IP address to bind to" msgstr "IP address to bind to" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:gopher > :port" msgid "Port to bind to" msgstr "Port to bind to" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:hackney_pools > :federation" msgid "Settings for federation pool." msgstr "Settings for federation pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +#, fuzzy +msgctxt "" +"config description at :pleroma-:hackney_pools > :federation > :" +"max_connections" msgid "Number workers in the pool." msgstr "Number workers in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +#, fuzzy +msgctxt "" +"config description at :pleroma-:hackney_pools > :federation > :timeout" msgid "Timeout while `hackney` will wait for response." msgstr "Timeout while `hackney` will wait for response." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:hackney_pools > :media" msgid "Settings for media pool." msgstr "Settings for media pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +#, fuzzy +msgctxt "" +"config description at :pleroma-:hackney_pools > :media > :max_connections" msgid "Number workers in the pool." msgstr "Number workers in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" msgid "Timeout while `hackney` will wait for response." msgstr "Timeout while `hackney` will wait for response." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:hackney_pools > :upload" msgid "Settings for upload pool." msgstr "Settings for upload pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +#, fuzzy +msgctxt "" +"config description at :pleroma-:hackney_pools > :upload > :max_connections" msgid "Number workers in the pool." msgstr "Number workers in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" msgid "Timeout while `hackney` will wait for response." msgstr "Timeout while `hackney` will wait for response." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http > :adapter" msgid "Adapter specific options" msgstr "Adapter specific options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" msgid "SSL options for HTTP adapter" msgstr "SSL options for HTTP adapter" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +#, fuzzy +msgctxt "" +"config description at :pleroma-:http > :adapter > :ssl_options > :versions" msgid "List of TLS version to use" msgstr "List of TLS version to use" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http > :proxy_url" msgid "Proxy URL" msgstr "Proxy URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http > :user_agent" -msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgid "" +"What user agent to use. Must be a string or an atom `:default`. Default " +"value is `:default`." msgstr "" "What user agent to use. Must be a string or an atom `:default`. Default " "value is `:default`." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http_security > :ct_max_age" msgid "The maximum age for the Expect-CT header if sent" msgstr "The maximum age for the Expect-CT header if sent" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http_security > :enabled" msgid "Whether the managed content security policy is enabled" msgstr "Whether the managed content security policy is enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http_security > :referrer_policy" msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" msgstr "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http_security > :report_uri" msgid "Adds the specified URL to report-uri and report-to group in CSP header" msgstr "Adds the specified URL to report-uri and report-to group in CSP header" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http_security > :sts" msgid "Whether to additionally send a Strict-Transport-Security header" msgstr "Whether to additionally send a Strict-Transport-Security header" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:http_security > :sts_max_age" msgid "The maximum age for the Strict-Transport-Security header if sent" msgstr "The maximum age for the Strict-Transport-Security header if sent" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :account_activation_required" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :account_activation_required" msgid "Require users to confirm their emails before signing in" msgstr "Require users to confirm their emails before signing in" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :account_approval_required" msgid "Require users to be manually approved by an admin before signing in" msgstr "Require users to be manually approved by an admin before signing in" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :account_field_name_length" msgid "An account field name maximum length. Default: 512." msgstr "An account field name maximum length. Default: 512." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :account_field_value_length" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :account_field_value_length" msgid "An account field value maximum length. Default: 2048." msgstr "An account field value maximum length. Default: 2048." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :allow_relay" -msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgid "" +"Permits remote instances to subscribe to all public posts of your instance. " +"(Important!) This may increase the visibility of your instance." msgstr "" "Permits remote instances to subscribe to all public posts of your instance. " "(Important!) This may increase the visibility of your instance." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :allowed_post_formats" msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" msgstr "MIME-type list of formats allowed to be posted (transformed into HTML)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :attachment_links" msgid "Enable to automatically add attachment link text to statuses" msgstr "Enable to automatically add attachment link text to statuses" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" -msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgid "" +"Set to nicknames of (local) users that every new user should automatically " +"follow" msgstr "" "Set to nicknames of (local) users that every new user should automatically " "follow" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" -msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgid "" +"Set to nicknames of (local) users that automatically follows every newly " +"registered user" msgstr "" "Set to nicknames of (local) users that automatically follows every newly " "registered user" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" msgid "File size limit of user's profile avatars" msgstr "File size limit of user's profile avatars" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :background_upload_limit" msgid "File size limit of user's profile backgrounds" msgstr "File size limit of user's profile backgrounds" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :banner_upload_limit" msgid "File size limit of user's profile banners" msgstr "File size limit of user's profile banners" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :birthday_min_age" -msgid "Minimum required age for users to create account. Only used if birthday is required." +msgid "" +"Minimum required age for users to create account. Only used if birthday is " +"required." msgstr "" "Minimum required age for users to create account. Only used if birthday is " "required." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :birthday_required" msgid "Require users to enter their birthday." msgstr "Require users to enter their birthday." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :cleanup_attachments" -msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgid "" +"Enable to remove associated attachments when status is removed.\n" +"This will not affect duplicates and attachments without status.\n" +"Enabling this will increase load to database when deleting statuses on " +"larger instances.\n" msgstr "" "Enable to remove associated attachments when status is removed.\n" "This will not affect duplicates and attachments without status.\n" @@ -1898,43 +2089,54 @@ msgstr "" "larger instances.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :description" -msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgid "" +"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" msgstr "" "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :email" msgid "Email used to reach an Administrator/Moderator of the instance" msgstr "Email used to reach an Administrator/Moderator of the instance" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :extended_nickname_format" -msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgid "" +"Enable to use extended local nicknames format (allows underscores/dashes). " +"This will break federation with older software for theses nicknames." msgstr "" "Enable to use extended local nicknames format (allows underscores/dashes). " "This will break federation with older software for theses nicknames." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :external_user_synchronization" -msgid "Enabling following/followers counters synchronization for external users" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :external_user_synchronization" +msgid "" +"Enabling following/followers counters synchronization for external users" msgstr "" "Enabling following/followers counters synchronization for external users" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :federating" msgid "Enable federation with other instances" msgstr "Enable federation with other instances" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" -msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :" +"federation_incoming_replies_max_depth" +msgid "" +"Max. depth of reply-to and reply activities fetching on incoming federation, " +"to prevent out-of-memory situations while fetching very long threads. If set " +"to `nil`, threads of any depth will be fetched. Lower this value if you " +"experience out-of-memory crashes." msgstr "" "Max. depth of reply-to and reply activities fetching on incoming federation, " "to prevent out-of-memory situations while fetching very long threads. If set " @@ -1942,196 +2144,239 @@ msgstr "" "experience out-of-memory crashes." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" -msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :" +"federation_reachability_timeout_days" +msgid "" +"Timeout (in days) of each external federation target being unreachable prior " +"to pausing federating to it" msgstr "" "Timeout (in days) of each external federation target being unreachable prior " "to pausing federating to it" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :healthcheck" msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :instance_thumbnail" -msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgid "" +"The instance thumbnail can be any image that represents your instance and is " +"used by some apps or services when they display information about your " +"instance." msgstr "" "The instance thumbnail can be any image that represents your instance and is " "used by some apps or services when they display information about your " "instance." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :invites_enabled" -msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgid "" +"Enable user invitations for admins (depends on `registrations_open` being " +"disabled)" msgstr "" "Enable user invitations for admins (depends on `registrations_open` being " "disabled)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :limit" msgid "Posts character limit (CW/Subject included in the counter)" msgstr "Posts character limit (CW/Subject included in the counter)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :limit_to_local_content" -msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgid "" +"Limit unauthenticated users to search for local statutes and users only. " +"Default: `:unauthenticated`." msgstr "" "Limit unauthenticated users to search for local statutes and users only. " "Default: `:unauthenticated`." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :max_account_fields" msgid "The maximum number of custom fields in the user profile. Default: 10." msgstr "The maximum number of custom fields in the user profile. Default: 10." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :max_endorsed_users" msgid "The maximum number of recommended accounts. 0 will disable the feature." -msgstr "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "" +"The maximum number of recommended accounts. 0 will disable the feature." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :max_media_attachments" msgid "Maximum number of post media attachments" msgstr "Maximum number of post media attachments" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" msgid "The maximum number of pinned statuses. 0 will disable the feature." msgstr "The maximum number of pinned statuses. 0 will disable the feature." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" -msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgid "" +"The maximum number of custom fields in the remote user profile. Default: 20." msgstr "" "The maximum number of custom fields in the remote user profile. Default: 20." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :max_report_comment_size" msgid "The maximum size of the report comment. Default: 1000." msgstr "The maximum size of the report comment. Default: 1000." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication" msgid "Multi-factor authentication settings" msgstr "Multi-factor authentication settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication > :" +"backup_codes" msgid "MFA backup codes settings" msgstr "MFA backup codes settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" -msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication > :" +"backup_codes > :length" +msgid "" +"Determines the length of backup one-time pass-codes, in characters. Defaults " +"to 16 characters." msgstr "" "Determines the length of backup one-time pass-codes, in characters. Defaults " "to 16 characters." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication > :" +"backup_codes > :number" msgid "Number of backup codes to generate." msgstr "Number of backup codes to generate." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication > :" +"totp" msgid "TOTP settings" msgstr "TOTP settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" -msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication > :" +"totp > :digits" +msgid "" +"Determines the length of a one-time pass-code, in characters. Defaults to 6 " +"characters." msgstr "" "Determines the length of a one-time pass-code, in characters. Defaults to 6 " "characters." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" -msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :multi_factor_authentication > :" +"totp > :period" +msgid "" +"A period for which the TOTP code will be valid, in seconds. Defaults to 30 " +"seconds." msgstr "" "A period for which the TOTP code will be valid, in seconds. Defaults to 30 " "seconds." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :name" msgid "Name of the instance" msgstr "Name of the instance" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :notify_email" msgid "Envelope FROM address for mail sent via Pleroma" msgstr "Envelope FROM address for mail sent via Pleroma" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :poll_limits" msgid "A map with poll limits for local polls" msgstr "A map with poll limits for local polls" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :poll_limits > :max_expiration" msgid "Maximum expiration time (in seconds)" msgstr "Maximum expiration time (in seconds)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :poll_limits > :max_option_chars" msgid "Maximum number of characters per option" msgstr "Maximum number of characters per option" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :poll_limits > :max_options" msgid "Maximum number of options" msgstr "Maximum number of options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :poll_limits > :min_expiration" msgid "Minimum expiration time (in seconds)" msgstr "Minimum expiration time (in seconds)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :privileged_staff" -msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgid "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" msgstr "" "Let moderators access sensitive data (e.g. updating user credentials, get " "password reset token, delete users, index and read private statuses and " "chats)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :profile_directory" msgid "Enable profile directory." msgstr "Enable profile directory." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :public" -msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgid "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." msgstr "" "Makes the client API in authenticated mode-only except for user-profiles. " "Useful for disabling the Local Timeline and The Whole Known Network. Note: " @@ -2139,292 +2384,339 @@ msgstr "" "setting." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :quarantined_instances" -msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgid "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" msgstr "" "List of ActivityPub instances where private (DMs, followers-only) activities " "will not be sent and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :registration_reason_length" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :registration_reason_length" msgid "Maximum registration reason length. Default: 500." msgstr "Maximum registration reason length. Default: 500." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :registrations_open" -msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgid "" +"Enable registrations for anyone. Invitations require this setting to be " +"disabled." msgstr "" "Enable registrations for anyone. Invitations require this setting to be " "disabled." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :remote_limit" msgid "Hard character limit beyond which remote posts will be dropped" msgstr "Hard character limit beyond which remote posts will be dropped" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" -msgid "The default amount of days to retain remote posts when pruning the database" +#, fuzzy +msgctxt "" +"config description at :pleroma-:instance > :remote_post_retention_days" +msgid "" +"The default amount of days to retain remote posts when pruning the database" msgstr "" "The default amount of days to retain remote posts when pruning the database" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" -msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgid "" +"If enabled, only mentions at the beginning of a post will be used to address " +"people in direct messages. This is to prevent accidental mentioning of " +"people when talking about them (e.g. \"@admin please keep an eye on " +"@bad_actor\"). Default: disabled" msgstr "" "If enabled, only mentions at the beginning of a post will be used to address " "people in direct messages. This is to prevent accidental mentioning of " -"people when talking about them (e.g. \"@admin please keep an eye on @" -"bad_actor\"). Default: disabled" +"people when talking about them (e.g. \"@admin please keep an eye on " +"@bad_actor\"). Default: disabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :show_reactions" msgid "Let favourites and emoji reactions be viewed through the API." msgstr "Let favourites and emoji reactions be viewed through the API." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :skip_thread_containment" msgid "Skip filtering out broken threads. Default: enabled." msgstr "Skip filtering out broken threads. Default: enabled." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :static_dir" msgid "Instance static directory" msgstr "Instance static directory" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :upload_limit" msgid "File size limit of uploads (except for avatar, background, banner)" msgstr "File size limit of uploads (except for avatar, background, banner)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :user_bio_length" msgid "A user bio maximum length. Default: 5000." msgstr "A user bio maximum length. Default: 5000." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :user_name_length" msgid "A user name maximum length. Default: 100." msgstr "A user name maximum length. Default: 100." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instances_favicons > :enabled" msgid "Allow/disallow displaying and getting instances favicons" msgstr "Allow/disallow displaying and getting instances favicons" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :base" msgid "LDAP base, e.g. \"dc=example,dc=com\"" msgstr "LDAP base, e.g. \"dc=example,dc=com\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :enabled" msgid "Enables LDAP authentication" msgstr "Enables LDAP authentication" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :host" msgid "LDAP server hostname" msgstr "LDAP server hostname" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :port" msgid "LDAP port, e.g. 389 or 636" msgstr "LDAP port, e.g. 389 or 636" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :ssl" msgid "Enable to use SSL, usually implies the port 636" msgstr "Enable to use SSL, usually implies the port 636" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :sslopts" msgid "Additional SSL options" msgstr "Additional SSL options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" msgid "Path to file with PEM encoded cacerts" msgstr "Path to file with PEM encoded cacerts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" msgid "Type of cert verification" msgstr "Type of cert verification" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :tls" msgid "Enable to use STARTTLS, usually implies the port 389" msgstr "Enable to use STARTTLS, usually implies the port 389" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :tlsopts" msgid "Additional TLS options" msgstr "Additional TLS options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" msgid "Path to file with PEM encoded cacerts" msgstr "Path to file with PEM encoded cacerts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" msgid "Type of cert verification" msgstr "Type of cert verification" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:ldap > :uid" -msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgid "" +"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " +"will be \"cn=username,base\"" msgstr "" "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " "will be \"cn=username,base\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:majic_pool > :size" msgid "Number of majic workers to start." msgstr "Number of majic workers to start." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:manifest > :background_color" msgid "Describe the background color of the app" msgstr "Describe the background color of the app" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:manifest > :icons" msgid "Describe the icons of the app" msgstr "Describe the icons of the app" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:manifest > :theme_color" msgid "Describe the theme color of the app" msgstr "Describe the theme color of the app" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:markup > :scrub_policy" -msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgid "" +"Module names are shortened (removed leading `Pleroma.HTML.` part), but on " +"adding custom module you need to use full name." msgstr "" "Module names are shortened (removed leading `Pleroma.HTML.` part), but on " "adding custom module you need to use full name." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" -msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgid "" +"Enables proxying of remote media preview to the instance's proxy. Requires " +"enabled media proxy." msgstr "" "Enables proxying of remote media preview to the instance's proxy. Requires " "enabled media proxy." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" -msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgid "" +"Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." msgstr "" "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" -msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "" +"Min content length (in bytes) to perform preview. Media smaller in size will " +"be served without thumbnailing." msgstr "" "Min content length (in bytes) to perform preview. Media smaller in size will " "be served without thumbnailing." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" -msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "" +"Max height of preview thumbnail for images (video preview always has " +"original dimensions)." msgstr "" "Max height of preview thumbnail for images (video preview always has " "original dimensions)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" -msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "" +"Max width of preview thumbnail for images (video preview always has original " +"dimensions)." msgstr "" "Max width of preview thumbnail for images (video preview always has original " "dimensions)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_proxy > :base_url" -msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgid "" +"The base URL to access a user-uploaded file. Useful when you want to proxy " +"the media files via another host/CDN fronts." msgstr "" "The base URL to access a user-uploaded file. Useful when you want to proxy " "the media files via another host/CDN fronts." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_proxy > :enabled" msgid "Enables proxying of remote media via the instance's proxy" msgstr "Enables proxying of remote media via the instance's proxy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_proxy > :invalidation > :enabled" msgid "Enables media cache object invalidation." msgstr "Enables media cache object invalidation." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_proxy > :invalidation > :provider" msgid "Module which will be used to purge objects from the cache." msgstr "Module which will be used to purge objects from the cache." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" msgid "Internal Pleroma.ReverseProxy settings" msgstr "Internal Pleroma.ReverseProxy settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" -msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "" +"Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." msgstr "" "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_proxy > :proxy_opts > :" +"max_read_duration" msgid "Timeout (in milliseconds) of GET request to the remote URI." msgstr "Timeout (in milliseconds) of GET request to the remote URI." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" -msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +#, fuzzy +msgctxt "" +"config description at :pleroma-:media_proxy > :proxy_opts > :" +"redirect_on_failure" +msgid "" +"Redirects the client to the origin server upon encountering HTTP errors.\n" +"\n" +"Note that files larger than Max Body Length will trigger an error. (e.g., " +"Peertube videos)\n" +"\n" +"\n" +"**WARNING:** This setting will allow larger files to be accessed, but " +"exposes the\n" +"\n" +"IP addresses of your users to the other servers, bypassing the MediaProxy.\n" msgstr "" "Redirects the client to the origin server upon encountering HTTP errors.\n" "\n" @@ -2438,38 +2730,47 @@ msgstr "" "IP addresses of your users to the other servers, bypassing the MediaProxy.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:media_proxy > :whitelist" msgid "List of hosts with scheme to bypass the MediaProxy" msgstr "List of hosts with scheme to bypass the MediaProxy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:modules > :runtime_dir" msgid "A path to custom Elixir modules (such as MRF policies)." msgstr "A path to custom Elixir modules (such as MRF policies)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf > :policies" -msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgid "" +"A list of MRF policies enabled. Module names are shortened (removed leading " +"`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " +"to use full name." msgstr "" "A list of MRF policies enabled. Module names are shortened (removed leading " "`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " "to use full name." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf > :transparency" -msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgid "" +"Make the content of your Message Rewrite Facility settings public (via " +"nodeinfo)" msgstr "" "Make the content of your Message Rewrite Facility settings public (via " "nodeinfo)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" -msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgid "" +"Exclude specific instance names from MRF transparency. The use of the " +"exclusions feature will be disclosed in nodeinfo as a boolean value. You can " +"also provide a reason for excluding these instance names. The instances and " +"reasons won't be publicly disclosed." msgstr "" "Exclude specific instance names from MRF transparency. The use of the " "exclusions feature will be disclosed in nodeinfo as a boolean value. You can " @@ -2477,60 +2778,76 @@ msgstr "" "reasons won't be publicly disclosed." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" msgid "Default global expiration time for all local activities (in days)" msgstr "Default global expiration time for all local activities (in days)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" -msgid "The name of the bot account to use for following newly discovered users." +msgid "" +"The name of the bot account to use for following newly discovered users." msgstr "" "The name of the bot account to use for following newly discovered users." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" -msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +#, fuzzy +msgctxt "" +"config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "" +"A list of hashtags which result in message being removed from federated " +"timelines (a.k.a unlisted)." msgstr "" "A list of hashtags which result in message being removed from federated " "timelines (a.k.a unlisted)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_hashtag > :reject" msgid "A list of hashtags which result in message being rejected." msgstr "A list of hashtags which result in message being rejected." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" -msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgid "" +"A list of hashtags which result in message being set as sensitive (a.k.a " +"NSFW/R-18)" msgstr "" "A list of hashtags which result in message being set as sensitive (a.k.a " "NSFW/R-18)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" -msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgid "" +"Number of mentioned users after which the message gets removed from " +"timelines anddisables notifications. Set to 0 to disable." msgstr "" "Number of mentioned users after which the message gets removed from " "timelines anddisables notifications. Set to 0 to disable." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" -msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgid "" +"Number of mentioned users after which the messaged gets rejected. Set to 0 " +"to disable." msgstr "" "Number of mentioned users after which the messaged gets rejected. Set to 0 " "to disable." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" -msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +#, fuzzy +msgctxt "" +"config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "" +" A list of patterns which result in message being removed from federated " +"timelines (a.k.a unlisted).\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" msgstr "" " A list of patterns which result in message being removed from federated " "timelines (a.k.a unlisted).\n" @@ -2539,9 +2856,13 @@ msgstr "" "html) in the format of `~r/PATTERN/`.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_keyword > :reject" -msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgid "" +" A list of patterns which result in message being rejected.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" msgstr "" " A list of patterns which result in message being rejected.\n" "\n" @@ -2549,9 +2870,13 @@ msgstr "" "html) in the format of `~r/PATTERN/`.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_keyword > :replace" -msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgid "" +" **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " +"the format of `~r/PATTERN/`.\n" +"\n" +" **Replacement**: a string. Leaving the field empty is permitted.\n" msgstr "" " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " "the format of `~r/PATTERN/`.\n" @@ -2559,15 +2884,19 @@ msgstr "" " **Replacement**: a string. Leaving the field empty is permitted.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_mention > :actors" msgid "A list of actors for which any post mentioning them will be dropped" msgstr "A list of actors for which any post mentioning them will be dropped" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_object_age > :actions" -msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgid "" +"A list of actions to apply to the post. `:delist` removes the post from " +"public timelines; `:strip_followers` removes followers from the ActivityPub " +"recipient list ensuring they won't be delivered to home timelines; `:reject` " +"rejects the message entirely" msgstr "" "A list of actions to apply to the post. `:delist` removes the post from " "public timelines; `:strip_followers` removes followers from the ActivityPub " @@ -2575,104 +2904,122 @@ msgstr "" "rejects the message entirely" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_object_age > :threshold" msgid "Required age (in seconds) of a post before actions are taken." msgstr "Required age (in seconds) of a post before actions are taken." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" msgid "Whether to allow direct messages" msgstr "Whether to allow direct messages" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +#, fuzzy +msgctxt "" +"config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" msgid "Whether to allow followers-only posts" msgstr "Whether to allow followers-only posts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :accept" -msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgid "" +"List of instances to only accept activities from (except deletes) and the " +"reason for doing so" msgstr "" "List of instances to only accept activities from (except deletes) and the " "reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" msgid "List of instances to strip avatars from and the reason for doing so" msgstr "List of instances to strip avatars from and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" msgid "List of instances to strip banners from and the reason for doing so" msgstr "List of instances to strip banners from and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" -msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +#, fuzzy +msgctxt "" +"config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "" +"List of instances to remove from the Federated (aka The Whole Known Network) " +"Timeline and the reason for doing so" msgstr "" "List of instances to remove from the Federated (aka The Whole Known Network) " "Timeline and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :followers_only" -msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgid "" +"Force posts from the given instances to be visible by followers only and the " +"reason for doing so" msgstr "" "Force posts from the given instances to be visible by followers only and the " "reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" -msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgid "" +"List of instances to tag all media as NSFW (sensitive) from and the reason " +"for doing so" msgstr "" "List of instances to tag all media as NSFW (sensitive) from and the reason " "for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :media_removal" -msgid "List of instances to strip media attachments from and the reason for doing so" +msgid "" +"List of instances to strip media attachments from and the reason for doing so" msgstr "" "List of instances to strip media attachments from and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :reject" -msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgid "" +"List of instances to reject activities from (except deletes) and the reason " +"for doing so" msgstr "" "List of instances to reject activities from (except deletes) and the reason " "for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" msgid "List of instances to reject deletions from and the reason for doing so" msgstr "List of instances to reject deletions from and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_simple > :report_removal" msgid "List of instances to reject reports from and the reason for doing so" msgstr "List of instances to reject reports from and the reason for doing so" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" msgid "List of hosts to steal emojis from" msgstr "List of hosts to steal emojis from" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" -msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +#, fuzzy +msgctxt "" +"config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "" +" A list of patterns or matches to reject shortcodes with.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" msgstr "" " A list of patterns or matches to reject shortcodes with.\n" "\n" @@ -2680,3717 +3027,4060 @@ msgstr "" "html) in the format of `~r/PATTERN/`.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" -msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgid "" +"File size limit (in bytes), checked before an emoji is saved to the disk" msgstr "" "File size limit (in bytes), checked before an emoji is saved to the disk" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" msgid "Matches a series of regular expressions against the actor field" msgstr "Matches a series of regular expressions against the actor field" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" -msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgid "" +"A list of ActivityStreams terms to accept. If empty, all supported messages " +"are accepted." msgstr "" "A list of ActivityStreams terms to accept. If empty, all supported messages " "are accepted." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" -msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgid "" +"A list of ActivityStreams terms to reject. If empty, no messages are " +"rejected." msgstr "" "A list of ActivityStreams terms to reject. If empty, no messages are " "rejected." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" -msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgid "" +"Enable a background job to clean expired OAuth tokens. Default: disabled." msgstr "" "Enable a background job to clean expired OAuth tokens. Default: disabled." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" -msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgid "" +"Keeps old refresh token or generate new refresh token when to obtain an " +"access token" msgstr "" "Keeps old refresh token or generate new refresh token when to obtain an " "access token" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" msgid "The lifetime in seconds of the access token" msgstr "The lifetime in seconds of the access token" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :default" msgid "Settings for default pool." msgstr "Settings for default pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :default > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgid "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" msgstr "" "Maximum number of requests waiting for other requests to finish. After this " "number is reached, the pool will start returning errrors when a new request " "is made" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" msgid "Timeout for the pool while gun will wait for response" msgstr "Timeout for the pool while gun will wait for response" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :default > :size" msgid "Maximum number of concurrent requests in the pool." msgstr "Maximum number of concurrent requests in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :federation" msgid "Settings for federation pool." msgstr "Settings for federation pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgid "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" msgstr "" "Maximum number of requests waiting for other requests to finish. After this " "number is reached, the pool will start returning errrors when a new request " "is made" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" msgid "Timeout for the pool while gun will wait for response" msgstr "Timeout for the pool while gun will wait for response" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :federation > :size" msgid "Maximum number of concurrent requests in the pool." msgstr "Maximum number of concurrent requests in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :media" msgid "Settings for media pool." msgstr "Settings for media pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :media > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgid "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" msgstr "" "Maximum number of requests waiting for other requests to finish. After this " "number is reached, the pool will start returning errrors when a new request " "is made" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" msgid "Timeout for the pool while gun will wait for response" msgstr "Timeout for the pool while gun will wait for response" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :media > :size" msgid "Maximum number of concurrent requests in the pool." msgstr "Maximum number of concurrent requests in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :upload" msgid "Settings for upload pool." msgstr "Settings for upload pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" -msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgid "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" msgstr "" "Maximum number of requests waiting for other requests to finish. After this " "number is reached, the pool will start returning errrors when a new request " "is made" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" msgid "Timeout for the pool while gun will wait for response" msgstr "Timeout for the pool while gun will wait for response" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:pools > :upload > :size" msgid "Maximum number of concurrent requests in the pool." msgstr "Maximum number of concurrent requests in the pool." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" -msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +#, fuzzy +msgctxt "" +"config description at :pleroma-:populate_hashtags_table > :" +"fault_rate_allowance" +msgid "" +"Max accepted rate of objects that failed in the migration. Any value from " +"0.0 which tolerates no errors to 1.0 which will enable the feature even if " +"hashtags transfer failed for all records." msgstr "" "Max accepted rate of objects that failed in the migration. Any value from " "0.0 which tolerates no errors to 1.0 which will enable the feature even if " "hashtags transfer failed for all records." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" -msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +#, fuzzy +msgctxt "" +"config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "" +"Sleep interval between each chunk of processed records in order to decrease " +"the load on the system (defaults to 0 and should be keep default on most " +"instances)." msgstr "" "Sleep interval between each chunk of processed records in order to decrease " "the load on the system (defaults to 0 and should be keep default on most " "instances)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" msgid "For registering user accounts from the same IP address" msgstr "For registering user accounts from the same IP address" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :authentication" -msgid "For authentication create / password check / user existence check requests" +msgid "" +"For authentication create / password check / user existence check requests" msgstr "" "For authentication create / password check / user existence check requests" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" msgid "For actions on relation with a specific user (follow, unfollow)" msgstr "For actions on relation with a specific user (follow, unfollow)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :relations_actions" msgid "For actions on relationships with all users (follow, unfollow)" msgstr "For actions on relationships with all users (follow, unfollow)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :search" msgid "For the search requests (account & status search etc.)" msgstr "For the search requests (account & status search etc.)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :status_id_action" -msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgid "" +"For fav / unfav or reblog / unreblog actions on the same status by the same " +"user" msgstr "" "For fav / unfav or reblog / unreblog actions on the same status by the same " "user" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" -msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgid "" +"For create / delete / fav / unfav / reblog / unreblog actions on any statuses" msgstr "" "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rate_limit > :timeline" msgid "For requests to timelines (each timeline has it's own limiter)" msgstr "For requests to timelines (each timeline has it's own limiter)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities" msgid "Settings for statuses." msgstr "Settings for statuses." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"local" msgid "Disallow view local statuses." msgstr "Disallow view local statuses." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :activities > :" +"remote" msgid "Disallow view remote statuses." msgstr "Disallow view remote statuses." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" msgid "Settings for user profiles." msgstr "Settings for user profiles." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :local" msgid "Disallow view local user profiles." msgstr "Disallow view local user profiles." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :profiles > :" +"remote" msgid "Disallow view remote user profiles." msgstr "Disallow view remote user profiles." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" msgid "Settings for public and federated timelines." msgstr "Settings for public and federated timelines." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"federated" msgid "Disallow view federated timeline." msgstr "Disallow view federated timeline." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +#, fuzzy +msgctxt "" +"config description at :pleroma-:restrict_unauthenticated > :timelines > :" +"local" msgid "Disallow view public timeline." msgstr "Disallow view public timeline." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media > :enabled" msgid "Enables RichMedia parsing of URLs" msgstr "Enables RichMedia parsing of URLs" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media > :failure_backoff" -msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgid "" +"Amount of milliseconds after request failure, during which the request will " +"not be retried." msgstr "" "Amount of milliseconds after request failure, during which the request will " "not be retried." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" msgid "List of hosts which will be ignored by the metadata parser" msgstr "List of hosts which will be ignored by the metadata parser" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media > :ignore_tld" msgid "List TLDs (top-level domains) which will ignore for parse metadata" msgstr "List TLDs (top-level domains) which will ignore for parse metadata" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media > :parsers" -msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgid "" +"List of Rich Media parsers. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " +"to use full name." msgstr "" "List of Rich Media parsers. Module names are shortened (removed leading " "`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " "to use full name." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:rich_media > :ttl_setters" -msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgid "" +"List of rich media TTL setters. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " +"to use full name." msgstr "" "List of rich media TTL setters. Module names are shortened (removed leading " "`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " "to use full name." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:shout > :enabled" msgid "Enables the backend Shoutbox chat feature." msgstr "Enables the backend Shoutbox chat feature." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:shout > :limit" msgid "Shout message character limit." msgstr "Shout message character limit." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:static_fe > :enabled" msgid "Enables the rendering of static HTML. Default: disabled." msgstr "Enables the rendering of static HTML. Default: disabled." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:streamer > :overflow_workers" msgid "Maximum number of workers created if pool is empty" msgstr "Maximum number of workers created if pool is empty" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:streamer > :workers" msgid "Number of workers to send notifications" msgstr "Number of workers to send notifications" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" msgid "List of the scheme part that is considered valid to be an URL" msgstr "List of the scheme part that is considered valid to be an URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" -msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgid "" +"Activity pub routes (except question activities). Default: `nil` (no " +"expiration)." msgstr "" "Activity pub routes (except question activities). Default: `nil` (no " "expiration)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" -msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +#, fuzzy +msgctxt "" +"config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "" +"Activity pub routes (question activities). Default: `30_000` (30 seconds)." msgstr "" "Activity pub routes (question activities). Default: `30_000` (30 seconds)." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" msgid "Enables sending a chat message to newly registered users" msgstr "Enables sending a chat message to newly registered users" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :chat_message > :message" msgid "A message that will be sent to newly registered users as a chat message" -msgstr "A message that will be sent to newly registered users as a chat message" +msgstr "" +"A message that will be sent to newly registered users as a chat message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +#, fuzzy +msgctxt "" +"config description at :pleroma-:welcome > :chat_message > :sender_nickname" msgid "The nickname of the local user that sends a welcome chat message" msgstr "The nickname of the local user that sends a welcome chat message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" msgid "Enables sending a direct message to newly registered users" msgstr "Enables sending a direct message to newly registered users" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :direct_message > :message" msgid "A message that will be sent to newly registered users" msgstr "A message that will be sent to newly registered users" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +#, fuzzy +msgctxt "" +"config description at :pleroma-:welcome > :direct_message > :sender_nickname" msgid "The nickname of the local user that sends a welcome message" msgstr "The nickname of the local user that sends a welcome message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :email > :enabled" msgid "Enables sending an email to newly registered users" msgstr "Enables sending an email to newly registered users" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :email > :html" -msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgid "" +"HTML content of the welcome email. EEX template with user and instance_name " +"variables can be used." msgstr "" "HTML content of the welcome email. EEX template with user and instance_name " "variables can be used." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :email > :sender" -msgid "Email address and/or nickname that will be used to send the welcome email." +msgid "" +"Email address and/or nickname that will be used to send the welcome email." msgstr "" "Email address and/or nickname that will be used to send the welcome email." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :email > :subject" -msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgid "" +"Subject of the welcome email. EEX template with user and instance_name " +"variables can be used." msgstr "" "Subject of the welcome email. EEX template with user and instance_name " "variables can be used." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:welcome > :email > :text" -msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgid "" +"Text content of the welcome email. EEX template with user and instance_name " +"variables can be used." msgstr "" "Text content of the welcome email. EEX template with user and instance_name " "variables can be used." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:workers > :retries" msgid "Max retry attempts for failed jobs, per `Oban` queue" msgstr "Max retry attempts for failed jobs, per `Oban` queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +#, fuzzy +msgctxt "" +"config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub." +"MRF.MediaProxyWarmingPolicy" msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." msgstr "Concurrent limits configuration for MediaProxyWarmingPolicy." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +#, fuzzy +msgctxt "" +"config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub." +"MRF.MediaProxyWarmingPolicy > :max_running" msgid "Max running concurrently jobs." msgstr "Max running concurrently jobs." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +#, fuzzy +msgctxt "" +"config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub." +"MRF.MediaProxyWarmingPolicy > :max_waiting" msgid "Max waiting jobs." msgstr "Max waiting jobs." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +#, fuzzy +msgctxt "" +"config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia." +"Helpers" msgid "Concurrent limits configuration for getting RichMedia for activities." msgstr "Concurrent limits configuration for getting RichMedia for activities." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +#, fuzzy +msgctxt "" +"config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia." +"Helpers > :max_running" msgid "Max running concurrently jobs." msgstr "Max running concurrently jobs." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +#, fuzzy +msgctxt "" +"config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia." +"Helpers > :max_waiting" msgid "Max waiting jobs." msgstr "Max waiting jobs." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :crontab" msgid "Settings for cron background jobs" msgstr "Settings for cron background jobs" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :log" msgid "Logs verbose mode" msgstr "Logs verbose mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues" -msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgid "" +"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" msgstr "" "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" msgid "Activity expiration queue" msgstr "Activity expiration queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" msgid "Attachment deletion queue" msgstr "Attachment deletion queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :background" msgid "Background queue" msgstr "Background queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :backup" msgid "Backup queue" msgstr "Backup queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" msgid "Incoming federation queue" msgstr "Incoming federation queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" msgid "Outgoing federation queue" msgstr "Outgoing federation queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :mailer" msgid "Email sender queue, see Pleroma.Emails.Mailer" msgstr "Email sender queue, see Pleroma.Emails.Mailer" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" msgstr "Scheduled activities queue, see Pleroma.ScheduledActivities" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" msgid "Transmogrifier queue" msgstr "Transmogrifier queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Oban > :queues > :web_push" msgid "Web push notifications queue" msgstr "Web push notifications queue" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" msgid "Whether the captcha should be shown on registration" msgstr "Whether the captcha should be shown on registration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Captcha > :method" msgid "The method/service to use for captcha" msgstr "The method/service to use for captcha" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" msgid "The time in seconds for which the captcha is valid" msgstr "The time in seconds for which the captcha is valid" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" msgid "The kocaptcha endpoint to use" msgstr "The kocaptcha endpoint to use" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" -msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgid "" +"One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" +"swoosh/Swoosh.html#module-adapters)" msgstr "" "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" "swoosh/Swoosh.html#module-adapters)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"auth" msgid "SMTP AUTH enforcement mode" msgstr "SMTP AUTH enforcement mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"password" msgid "SMTP AUTH password" msgstr "SMTP AUTH password" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"port" msgid "SMTP port" msgstr "SMTP port" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"relay" msgid "Hostname or IP address" msgstr "Hostname or IP address" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"retries" msgid "SMTP temporary (4xx) error retries" msgstr "SMTP temporary (4xx) error retries" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"ssl" msgid "Use Implicit SSL/TLS. e.g. port 465" msgstr "Use Implicit SSL/TLS. e.g. port 465" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"tls" msgid "Explicit TLS (STARTTLS) enforcement mode" msgstr "Explicit TLS (STARTTLS) enforcement mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"username" msgid "SMTP AUTH username" msgstr "SMTP AUTH username" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" msgid "Enables new users admin digest email when `true`" msgstr "Enables new users admin digest email when `true`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" -msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgid "" +"A path to a custom logo. Set it to `nil` to use the default Pleroma logo." msgstr "" "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" msgid "A map with color settings for email templates." msgstr "A map with color settings for email templates." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :class" msgid "Specify the class to be added to the generated link. Disable to clear." msgstr "Specify the class to be added to the generated link. Disable to clear." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" msgstr "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" msgid "Link URLs will open in a new window/tab." msgstr "Link URLs will open in a new window/tab." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" msgid "Override the rel attribute. Disable to clear." msgstr "Override the rel attribute. Disable to clear." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" msgid "Strip the scheme prefix." msgstr "Strip the scheme prefix." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" -msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgid "" +"Set to a number to truncate URLs longer than the number. Truncated URLs will " +"end in `...`" msgstr "" "Set to a number to truncate URLs longer than the number. Truncated URLs will " "end in `...`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" -msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgid "" +"Set to false to disable TLD validation for URLs/emails. Can be set to :" +"no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " +"will be validated, but `http://example.loki` won't)" msgstr "" "Set to false to disable TLD validation for URLs/emails. Can be set to :" "no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " "will be validated, but `http://example.loki` won't)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" -msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "" +"The number of scheduled activities a user is allowed to create in a single " +"day. Default: 25." msgstr "" "The number of scheduled activities a user is allowed to create in a single " "day. Default: 25." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" msgid "Whether scheduled activities are sent to the job queue to be executed" msgstr "Whether scheduled activities are sent to the job queue to be executed" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" -msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "" +"The number of scheduled activities a user is allowed to create in total. " +"Default: 300." msgstr "" "The number of scheduled activities a user is allowed to create in total. " "Default: 300." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" -msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgid "" +"Base URL for the uploads. Required if you use a CDN or host attachments " +"under a different domain." msgstr "" "Base URL for the uploads. Required if you use a CDN or host attachments " "under a different domain." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Upload > :filename_display_max_length" msgid "Set max length of a filename to display. 0 = no limit. Default: 30" msgstr "Set max length of a filename to display. 0 = no limit. Default: 30" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload > :filters" -msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgid "" +"List of filter modules for uploads. Module names are shortened (removed " +"leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " +"to use full name." msgstr "" "List of filter modules for uploads. Module names are shortened (removed " "leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " "to use full name." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" -msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgid "" +"If enabled, a name parameter will be added to the URL of the upload. For " +"example `https://instance.tld/media/imagehash.png?name=realname.png`." msgstr "" "If enabled, a name parameter will be added to the URL of the upload. For " "example `https://instance.tld/media/imagehash.png?name=realname.png`." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" -msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgid "" +"Proxy requests to the remote uploader.\n" +"\n" +"Useful if media upload endpoint is not internet accessible.\n" msgstr "" "Proxy requests to the remote uploader.\n" "\n" "Useful if media upload endpoint is not internet accessible.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" msgid "Module which will be used for uploads" msgstr "Module which will be used for uploads" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" -msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :" +"text" +msgid "" +"Text to replace filenames in links. If no setting, {random}.extension will " +"be used. You can get the original filename extension by using {extension}, " +"for example custom-file-name.{extension}." msgstr "" "Text to replace filenames in links. If no setting, {random}.extension will " "be used. You can get the original filename extension by using {extension}, " "for example custom-file-name.{extension}." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" -msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgid "" +"List of actions for the mogrify command. It's possible to add self-written " +"settings as string. For example `auto-orient, strip, {\"resize\", " +"\"3840x1080>\"}` value will be parsed into valid list of the settings." msgstr "" "List of actions for the mogrify command. It's possible to add self-written " -"settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080" -">\"}` value will be parsed into valid list of the settings." +"settings as string. For example `auto-orient, strip, {\"resize\", " +"\"3840x1080>\"}` value will be parsed into valid list of the settings." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" msgid "Path where user's uploads will be saved" msgstr "Path where user's uploads will be saved" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" msgid "S3 bucket" msgstr "S3 bucket" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" msgid "S3 bucket namespace" msgstr "S3 bucket namespace" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" -msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "" +"Enable streaming uploads, when enabled the file will be sent to the server " +"in chunks as it's being read. This may be unsupported by some providers, try " +"disabling this if you have upload problems." msgstr "" "Enable streaming uploads, when enabled the file will be sent to the server " "in chunks as it's being read. This may be unsupported by some providers, try " "disabling this if you have upload problems." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" -msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "" +"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " +"folder name or \"\" etc. For example, when using CDN to S3 virtual host " +"format, set \"\". At this time, write CNAME to CDN in Upload base_url." msgstr "" "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " "folder name or \"\" etc. For example, when using CDN to S3 virtual host " "format, set \"\". At this time, write CNAME to CDN in Upload base_url." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" msgid "List of email domains users may not register with." msgstr "List of email domains users may not register with." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" msgid "List of nicknames users may not register with." msgstr "List of nicknames users may not register with." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" msgid "Limit user to export not more often than once per N days" msgstr "Limit user to export not more often than once per N days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.User.Backup > :purge_after_days" msgid "Remove backup achives after N days" msgstr "Remove backup achives after N days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" -msgid "Enables strict input validation (useful in development, not recommended in production)" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "" +"Enables strict input validation (useful in development, not recommended in " +"production)" msgstr "" "Enables strict input validation (useful in development, not recommended in " "production)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :" +"headers" msgid "HTTP headers of request" msgstr "HTTP headers of request" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :" +"method" msgid "HTTP method of request. Default: :purge" msgstr "HTTP method of request. Default: :purge" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :" +"options" msgid "Request options" msgstr "Request options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :" +"script_path" msgid "Path to executable script which will purge cached items." msgstr "Path to executable script which will purge cached items." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" -msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :" +"url_format" +msgid "" +"Optional URL format preprocessing. Only required for Apache's htcacheclean." msgstr "" "Optional URL format preprocessing. Only required for Apache's htcacheclean." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" msgid "List of metadata providers to enable" msgstr "List of metadata providers to enable" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" msgid "When enabled NSFW attachments will be shown in previews" msgstr "When enabled NSFW attachments will be shown in previews" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" msgid "Enable/disable the plug. Default: disabled." msgstr "Enable/disable the plug. Default: disabled." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" -msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgid "" +" A list of strings naming the HTTP headers to use when deriving the true " +"client IP. Default: `[\"x-forwarded-for\"]`.\n" msgstr "" " A list of strings naming the HTTP headers to use when deriving the true " "client IP. Default: `[\"x-forwarded-for\"]`.\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" -msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgid "" +"A list of upstream proxy IP subnets in CIDR notation from which we will " +"parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " +"bitmask will be assumed to be /32 and IPv6 /128." msgstr "" "A list of upstream proxy IP subnets in CIDR notation from which we will " "parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " "bitmask will be assumed to be /32 and IPv6 /128." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" -msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgid "" +" A list of reserved IP subnets in CIDR notation which should be ignored if " +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", " +"\"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" msgstr "" " A list of reserved IP subnets in CIDR notation which should be ignored if " -"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\"" -", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", " +"\"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" msgid "List of preload providers to enable" msgstr "List of preload providers to enable" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :" +"enabled" msgid "Enables expired activities addition & deletion" msgstr "Enables expired activities addition & deletion" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +#, fuzzy +msgctxt "" +"config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :" +"min_lifetime" msgid "Minimum lifetime for ephemeral activity (in seconds)" msgstr "Minimum lifetime for ephemeral activity (in seconds)" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +#, fuzzy +msgctxt "" +"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +"auth" msgid "Enables HTTP Basic Auth for app metrics endpoint." msgstr "Enables HTTP Basic Auth for app metrics endpoint." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +#, fuzzy +msgctxt "" +"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +"enabled" msgid "[Pleroma extension] Enables app metrics endpoint." msgstr "[Pleroma extension] Enables app metrics endpoint." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +#, fuzzy +msgctxt "" +"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +"format" msgid "App metrics endpoint output format." msgstr "App metrics endpoint output format." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +#, fuzzy +msgctxt "" +"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +"ip_whitelist" msgid "Restrict access of app metrics endpoint to the specified IP addresses." msgstr "Restrict access of app metrics endpoint to the specified IP addresses." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +#, fuzzy +msgctxt "" +"config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +"path" msgid "App metrics endpoint URI path." msgstr "App metrics endpoint URI path." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :quack > :level" msgid "Log level" msgstr "Log level" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :quack > :meta" msgid "Configure which metadata you want to report on" msgstr "Configure which metadata you want to report on" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :quack > :webhook_url" msgid "Configure the Slack incoming webhook" msgstr "Configure the Slack incoming webhook" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +#, fuzzy +msgctxt "" +"config description at :web_push_encryption-:vapid_details > :private_key" msgid "VAPID private key" msgstr "VAPID private key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +#, fuzzy +msgctxt "" +"config description at :web_push_encryption-:vapid_details > :public_key" msgid "VAPID public key" msgstr "VAPID public key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :web_push_encryption-:vapid_details > :subject" -msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgid "" +"A mailto link for the administrative contact. It's best if this email is not " +"a personal email address, but rather a group email to the instance " +"moderation team." msgstr "" "A mailto link for the administrative contact. It's best if this email is not " "a personal email address, but rather a group email to the instance " "moderation team." #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :cors_plug > :credentials" msgid "Credentials" msgstr "Credentials" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :cors_plug > :expose" msgid "Expose" msgstr "Expose" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :cors_plug > :headers" msgid "Headers" msgstr "Headers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :cors_plug > :max_age" msgid "Max age" msgstr "Max age" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :cors_plug > :methods" msgid "Methods" msgstr "Methods" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :esshd > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :esshd > :handler" msgid "Handler" msgstr "Handler" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :esshd > :password_authenticator" msgid "Password authenticator" msgstr "Password authenticator" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :esshd > :port" msgid "Port" msgstr "Port" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :esshd > :priv_dir" msgid "Priv dir" msgstr "Priv dir" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :ex_aws-:s3 > :access_key_id" msgid "Access key" msgstr "Access key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :ex_aws-:s3 > :host" msgid "Host" msgstr "Host" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :ex_aws-:s3 > :region" msgid "Region" msgstr "Region" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :ex_aws-:s3 > :secret_access_key" msgid "Secret access key" msgstr "Secret access key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger > :backends" msgid "Backends" msgstr "Backends" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:console > :format" msgid "Format" msgstr "Format" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:console > :level" msgid "Level" msgstr "Level" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:console > :metadata" msgid "Metadata" msgstr "Metadata" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:ex_syslogger > :format" msgid "Format" msgstr "Format" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:ex_syslogger > :ident" msgid "Ident" msgstr "Ident" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:ex_syslogger > :level" msgid "Level" msgstr "Level" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :logger-:ex_syslogger > :metadata" msgid "Metadata" msgstr "Metadata" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :mime > :types" msgid "Types" msgstr "Types" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :mime > :types > application/activity+json" msgid "\"application/activity+json\"" msgstr "\"application/activity+json\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :mime > :types > application/jrd+json" msgid "\"application/jrd+json\"" msgstr "\"application/jrd+json\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :mime > :types > application/ld+json" msgid "\"application/ld+json\"" msgstr "\"application/ld+json\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :mime > :types > application/xml" msgid "\"application/xml\"" msgstr "\"application/xml\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :mime > :types > application/xrd+xml" msgid "\"application/xrd+xml\"" msgstr "\"application/xrd+xml\"" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma > :admin_token" msgid "Admin token" msgstr "Admin token" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" msgid "Pleroma.Web.Auth.Authenticator" msgstr "Pleroma.Web.Auth.Authenticator" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :blockers_visible" msgid "Blockers visible" msgstr "Blockers visible" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" msgid "Follow handshake timeout" msgstr "Follow handshake timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" msgid "Note replies output limit" msgstr "Note replies output limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" msgid "Outgoing blocks" msgstr "Outgoing blocks" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" msgid "Sign object fetches" msgstr "Sign object fetches" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" msgid "Unfollow blocked" msgstr "Unfollow blocked" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:assets > :default_mascot" msgid "Default mascot" msgstr "Default mascot" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:assets > :default_user_avatar" msgid "Default user avatar" msgstr "Default user avatar" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:assets > :mascots" msgid "Mascots" msgstr "Mascots" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:auth > :auth_template" msgid "Auth template" msgstr "Auth template" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" msgid "Enforce OAuth admin scope usage" msgstr "Enforce OAuth admin scope usage" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" msgid "OAuth consumer strategies" msgstr "OAuth consumer strategies" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" msgid "OAuth consumer template" msgstr "OAuth consumer template" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" msgid "Connect timeout" msgstr "Connect timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +#, fuzzy +msgctxt "" +"config label at :pleroma-:connections_pool > :connection_acquisition_retries" msgid "Connection acquisition retries" msgstr "Connection acquisition retries" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +#, fuzzy +msgctxt "" +"config label at :pleroma-:connections_pool > :connection_acquisition_wait" msgid "Connection acquisition wait" msgstr "Connection acquisition wait" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:connections_pool > :max_connections" msgid "Max connections" msgstr "Max connections" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" msgid "Reclaim multiplier" msgstr "Reclaim multiplier" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest" msgid "Digest" msgstr "Digest" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest > :active" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +#, fuzzy +msgctxt "" +"config label at :pleroma-:email_notifications > :digest > :" +"inactivity_threshold" msgid "Inactivity threshold" msgstr "Inactivity threshold" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" msgid "Interval" msgstr "Interval" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" msgid "Schedule" msgstr "Schedule" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:emoji > :default_manifest" msgid "Default manifest" msgstr "Default manifest" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:emoji > :groups" msgid "Groups" msgstr "Groups" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:emoji > :pack_extensions" msgid "Pack extensions" msgstr "Pack extensions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" msgid "Shared pack cache s/file" msgstr "Shared pack cache s/file" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:emoji > :shortcode_globs" msgid "Shortcode globs" msgstr "Shortcode globs" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" msgid "Improved hashtag timeline" msgstr "Improved hashtag timeline" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:feed > :post_title" msgid "Post title" msgstr "Post title" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:feed > :post_title > :max_length" msgid "Max length" msgstr "Max length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:feed > :post_title > :omission" msgid "Omission" msgstr "Omission" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" msgid "Pleroma FE" msgstr "Pleroma FE" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"alwaysShowSubjectInput" msgid "Always show subject input" msgstr "Always show subject input" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" msgid "Background" msgstr "Background" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"collapseMessageWithSubject" msgid "Collapse message with subject" msgstr "Collapse message with subject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" msgid "Greentext" msgstr "Greentext" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideFilteredStatuses" msgid "Hide Filtered Statuses" msgstr "Hide Filtered Statuses" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideMutedPosts" msgid "Hide Muted Posts" msgstr "Hide Muted Posts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hidePostStats" msgid "Hide post stats" msgstr "Hide post stats" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideSitename" msgid "Hide Sitename" msgstr "Hide Sitename" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"hideUserStats" msgid "Hide user stats" msgstr "Hide user stats" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" msgid "Logo" msgstr "Logo" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" msgid "Logo margin" msgstr "Logo margin" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" msgid "Logo mask" msgstr "Logo mask" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"minimalScopesMode" msgid "Minimal scopes mode" msgstr "Minimal scopes mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"nsfwCensorImage" msgid "NSFW Censor Image" msgstr "NSFW Censor Image" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"postContentType" msgid "Post Content Type" msgstr "Post Content Type" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"redirectRootLogin" msgid "Redirect root login" msgstr "Redirect root login" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"redirectRootNoLogin" msgid "Redirect root no login" msgstr "Redirect root no login" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" msgid "Scope copy" msgstr "Scope copy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showFeaturesPanel" msgid "Show instance features panel" msgstr "Show instance features panel" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"showInstanceSpecificPanel" msgid "Show instance specific panel" msgstr "Show instance specific panel" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"sidebarRight" msgid "Sidebar on Right" msgstr "Sidebar on Right" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :" +"subjectLineBehavior" msgid "Subject line behavior" msgstr "Subject line behavior" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" msgid "Theme" msgstr "Theme" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :admin" msgid "Admin" msgstr "Admin" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :admin > name" msgid "Name" msgstr "Name" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :admin > ref" msgid "Reference" msgstr "Reference" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :available" msgid "Available" msgstr "Available" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :available > build_dir" msgid "Build directory" msgstr "Build directory" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :available > build_url" msgid "Build URL" msgstr "Build URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +#, fuzzy +msgctxt "" +"config label at :pleroma-:frontends > :available > custom-http-headers" msgid "Custom HTTP headers" msgstr "Custom HTTP headers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :available > git" msgid "Git Repository URL" msgstr "Git Repository URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :available > name" msgid "Name" msgstr "Name" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :available > ref" msgid "Reference" msgstr "Reference" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :primary" msgid "Primary" msgstr "Primary" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :primary > name" msgid "Name" msgstr "Name" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:frontends > :primary > ref" msgid "Reference" msgstr "Reference" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:gopher > :dstport" msgid "Dstport" msgstr "Dstport" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:gopher > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:gopher > :ip" msgid "IP" msgstr "IP" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:gopher > :port" msgid "Port" msgstr "Port" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :federation" msgid "Federation" msgstr "Federation" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +#, fuzzy +msgctxt "" +"config label at :pleroma-:hackney_pools > :federation > :max_connections" msgid "Max connections" msgstr "Max connections" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" msgid "Timeout" msgstr "Timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :media" msgid "Media" msgstr "Media" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" msgid "Max connections" msgstr "Max connections" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" msgid "Timeout" msgstr "Timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :upload" msgid "Upload" msgstr "Upload" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" msgid "Max connections" msgstr "Max connections" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" msgid "Timeout" msgstr "Timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http > :adapter" msgid "Adapter" msgstr "Adapter" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" msgid "SSL Options" msgstr "SSL Options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" msgid "Versions" msgstr "Versions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http > :proxy_url" msgid "Proxy URL" msgstr "Proxy URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http > :send_user_agent" msgid "Send user agent" msgstr "Send user agent" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http > :user_agent" msgid "User agent" msgstr "User agent" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security > :ct_max_age" msgid "CT max age" msgstr "CT max age" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security > :referrer_policy" msgid "Referrer policy" msgstr "Referrer policy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security > :report_uri" msgid "Report URI" msgstr "Report URI" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security > :sts" msgid "STS" msgstr "STS" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:http_security > :sts_max_age" msgid "STS max age" msgstr "STS max age" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :account_activation_required" msgid "Account activation required" msgstr "Account activation required" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :account_approval_required" msgid "Account approval required" msgstr "Account approval required" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :account_field_name_length" msgid "Account field name length" msgstr "Account field name length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :account_field_value_length" msgid "Account field value length" msgstr "Account field value length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :allow_relay" msgid "Allow relay" msgstr "Allow relay" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :allowed_post_formats" msgid "Allowed post formats" msgstr "Allowed post formats" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :attachment_links" msgid "Attachment links" msgstr "Attachment links" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" msgid "Autofollowed nicknames" msgstr "Autofollowed nicknames" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" msgid "Autofollowing nicknames" msgstr "Autofollowing nicknames" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" msgid "Avatar upload limit" msgstr "Avatar upload limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :background_upload_limit" msgid "Background upload limit" msgstr "Background upload limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :banner_upload_limit" msgid "Banner upload limit" msgstr "Banner upload limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :birthday_min_age" msgid "Birthday min age" msgstr "Birthday min age" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :birthday_required" msgid "Birthday required" msgstr "Birthday required" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :cleanup_attachments" msgid "Cleanup attachments" msgstr "Cleanup attachments" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :description" msgid "Description" msgstr "Description" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :email" msgid "Admin Email Address" msgstr "Admin Email Address" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :extended_nickname_format" msgid "Extended nickname format" msgstr "Extended nickname format" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :external_user_synchronization" msgid "External user synchronization" msgstr "External user synchronization" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :federating" msgid "Federating" msgstr "Federating" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :federation_incoming_replies_max_depth" msgid "Fed. incoming replies max depth" msgstr "Fed. incoming replies max depth" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :federation_reachability_timeout_days" msgid "Fed. reachability timeout days" msgstr "Fed. reachability timeout days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :healthcheck" msgid "Healthcheck" msgstr "Healthcheck" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :instance_thumbnail" msgid "Instance thumbnail" msgstr "Instance thumbnail" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :invites_enabled" msgid "Invites enabled" msgstr "Invites enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :limit" msgid "Limit" msgstr "Limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :limit_to_local_content" msgid "Limit to local content" msgstr "Limit to local content" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :max_account_fields" msgid "Max account fields" msgstr "Max account fields" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :max_endorsed_users" msgid "Max endorsed users" msgstr "Max endorsed users" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :max_media_attachments" msgid "Max media attachments" msgstr "Max media attachments" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" msgid "Max pinned statuses" msgstr "Max pinned statuses" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" msgid "Max remote account fields" msgstr "Max remote account fields" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :max_report_comment_size" msgid "Max report comment size" msgstr "Max report comment size" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" msgid "Multi factor authentication" msgstr "Multi factor authentication" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :multi_factor_authentication > :" +"backup_codes" msgid "Backup codes" msgstr "Backup codes" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :multi_factor_authentication > :" +"backup_codes > :length" msgid "Length" msgstr "Length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :multi_factor_authentication > :" +"backup_codes > :number" msgid "Number" msgstr "Number" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :multi_factor_authentication > :totp" msgid "TOTP settings" msgstr "TOTP settings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :multi_factor_authentication > :totp > :" +"digits" msgid "Digits" msgstr "Digits" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +#, fuzzy +msgctxt "" +"config label at :pleroma-:instance > :multi_factor_authentication > :totp > :" +"period" msgid "Period" msgstr "Period" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :name" msgid "Name" msgstr "Name" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :notify_email" msgid "Sender Email Address" msgstr "Sender Email Address" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :poll_limits" msgid "Poll limits" msgstr "Poll limits" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" msgid "Max expiration" msgstr "Max expiration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" msgid "Max option chars" msgstr "Max option chars" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" msgid "Max options" msgstr "Max options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" msgid "Min expiration" msgstr "Min expiration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :privileged_staff" msgid "Privileged staff" msgstr "Privileged staff" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :profile_directory" msgid "Profile directory" msgstr "Profile directory" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :public" msgid "Public" msgstr "Public" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :quarantined_instances" msgid "Quarantined instances" msgstr "Quarantined instances" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :registration_reason_length" msgid "Registration reason length" msgstr "Registration reason length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :registrations_open" msgid "Registrations open" msgstr "Registrations open" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :remote_limit" msgid "Remote limit" msgstr "Remote limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" msgid "Remote post retention days" msgstr "Remote post retention days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" msgid "Safe DM mentions" msgstr "Safe DM mentions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :show_reactions" msgid "Show reactions" msgstr "Show reactions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :skip_thread_containment" msgid "Skip thread containment" msgstr "Skip thread containment" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :static_dir" msgid "Static dir" msgstr "Static dir" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :upload_limit" msgid "Upload limit" msgstr "Upload limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :user_bio_length" msgid "User bio length" msgstr "User bio length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :user_name_length" msgid "User name length" msgstr "User name length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instances_favicons > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :base" msgid "Base" msgstr "Base" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :host" msgid "Host" msgstr "Host" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :port" msgid "Port" msgstr "Port" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :ssl" msgid "SSL" msgstr "SSL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :sslopts" msgid "SSL options" msgstr "SSL options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" msgid "Cacertfile" msgstr "Cacertfile" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" msgid "Verify" msgstr "Verify" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :tls" msgid "TLS" msgstr "TLS" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :tlsopts" msgid "TLS options" msgstr "TLS options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" msgid "Cacertfile" msgstr "Cacertfile" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" msgid "Verify" msgstr "Verify" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:ldap > :uid" msgid "UID" msgstr "UID" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:majic_pool > :size" msgid "Size" msgstr "Size" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:manifest > :background_color" msgid "Background color" msgstr "Background color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:manifest > :icons" msgid "Icons" msgstr "Icons" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:manifest > :theme_color" msgid "Theme color" msgstr "Theme color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:markup > :allow_fonts" msgid "Allow fonts" msgstr "Allow fonts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:markup > :allow_headings" msgid "Allow headings" msgstr "Allow headings" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:markup > :allow_inline_images" msgid "Allow inline images" msgstr "Allow inline images" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:markup > :allow_tables" msgid "Allow tables" msgstr "Allow tables" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:markup > :scrub_policy" msgid "Scrub policy" msgstr "Scrub policy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" msgid "Image quality" msgstr "Image quality" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" msgid "Min content length" msgstr "Min content length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" msgid "Thumbnail max height" msgstr "Thumbnail max height" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" msgid "Thumbnail max width" msgstr "Thumbnail max width" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :base_url" msgid "Base URL" msgstr "Base URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :invalidation" msgid "Invalidation" msgstr "Invalidation" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" msgid "Provider" msgstr "Provider" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" msgid "Advanced MediaProxy Options" msgstr "Advanced MediaProxy Options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +#, fuzzy +msgctxt "" +"config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" msgid "Max body length" msgstr "Max body length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +#, fuzzy +msgctxt "" +"config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" msgid "Max read duration" msgstr "Max read duration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +#, fuzzy +msgctxt "" +"config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" msgid "Redirect on failure" msgstr "Redirect on failure" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:media_proxy > :whitelist" msgid "Whitelist" msgstr "Whitelist" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:modules > :runtime_dir" msgid "Runtime dir" msgstr "Runtime dir" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf > :policies" msgid "Policies" msgstr "Policies" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf > :transparency" msgid "MRF transparency" msgstr "MRF transparency" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" msgid "MRF transparency exclusions" msgstr "MRF transparency exclusions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" msgid "Days" msgstr "Days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" msgid "Follower nickname" msgstr "Follower nickname" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" msgid "Federated timeline removal" msgstr "Federated timeline removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hashtag > :reject" msgid "Reject" msgstr "Reject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" msgid "Sensitive" msgstr "Sensitive" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" msgid "Delist threshold" msgstr "Delist threshold" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" msgid "Reject threshold" msgstr "Reject threshold" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" msgid "Federated timeline removal" msgstr "Federated timeline removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_keyword > :reject" msgid "Reject" msgstr "Reject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_keyword > :replace" msgid "Replace" msgstr "Replace" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_mention > :actors" msgid "Actors" msgstr "Actors" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" msgid "Scrub policy" msgstr "Scrub policy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_object_age > :actions" msgid "Actions" msgstr "Actions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_object_age > :threshold" msgid "Threshold" msgstr "Threshold" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" msgid "Allow direct" msgstr "Allow direct" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" msgid "Allow followers-only" msgstr "Allow followers-only" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :accept" msgid "Accept" msgstr "Accept" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" msgid "Avatar removal" msgstr "Avatar removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" msgid "Banner removal" msgstr "Banner removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" msgid "Federated timeline removal" msgstr "Federated timeline removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :followers_only" msgid "Followers only" msgstr "Followers only" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" msgid "Media NSFW" msgstr "Media NSFW" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :media_removal" msgid "Media removal" msgstr "Media removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :reject" msgid "Reject" msgstr "Reject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" msgid "Reject deletes" msgstr "Reject deletes" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_simple > :report_removal" msgid "Report removal" msgstr "Report removal" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" msgid "Hosts" msgstr "Hosts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" msgid "Rejected shortcodes" msgstr "Rejected shortcodes" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" msgid "Size limit" msgstr "Size limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" msgid "Match actor" msgstr "Match actor" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" msgid "Accept" msgstr "Accept" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" msgid "Reject" msgstr "Reject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" msgid "Clean expired tokens" msgstr "Clean expired tokens" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" msgid "Issue new refresh token" msgstr "Issue new refresh token" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" msgid "Token expires in" msgstr "Token expires in" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :default" msgid "Default" msgstr "Default" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :default > :max_waiting" msgid "Max waiting" msgstr "Max waiting" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" msgid "Recv timeout" msgstr "Recv timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :default > :size" msgid "Size" msgstr "Size" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :federation" msgid "Federation" msgstr "Federation" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" msgid "Max waiting" msgstr "Max waiting" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" msgid "Recv timeout" msgstr "Recv timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :federation > :size" msgid "Size" msgstr "Size" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :media" msgid "Media" msgstr "Media" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :media > :max_waiting" msgid "Max waiting" msgstr "Max waiting" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" msgid "Recv timeout" msgstr "Recv timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :media > :size" msgid "Size" msgstr "Size" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :upload" msgid "Upload" msgstr "Upload" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" msgid "Max waiting" msgstr "Max waiting" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" msgid "Recv timeout" msgstr "Recv timeout" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:pools > :upload > :size" msgid "Size" msgstr "Size" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +#, fuzzy +msgctxt "" +"config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" msgid "Fault rate allowance" msgstr "Fault rate allowance" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +#, fuzzy +msgctxt "" +"config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" msgid "Sleep interval ms" msgstr "Sleep interval ms" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" msgid "App account creation" msgstr "App account creation" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :authentication" msgid "Authentication" msgstr "Authentication" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" msgid "Relation ID action" msgstr "Relation ID action" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :relations_actions" msgid "Relations actions" msgstr "Relations actions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :search" msgid "Search" msgstr "Search" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :status_id_action" msgid "Status ID action" msgstr "Status ID action" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" msgid "Statuses actions" msgstr "Statuses actions" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rate_limit > :timeline" msgid "Timeline" msgstr "Timeline" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" msgid "Activities" msgstr "Activities" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +#, fuzzy +msgctxt "" +"config label at :pleroma-:restrict_unauthenticated > :activities > :local" msgid "Local" msgstr "Local" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +#, fuzzy +msgctxt "" +"config label at :pleroma-:restrict_unauthenticated > :activities > :remote" msgid "Remote" msgstr "Remote" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" msgid "Profiles" msgstr "Profiles" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +#, fuzzy +msgctxt "" +"config label at :pleroma-:restrict_unauthenticated > :profiles > :local" msgid "Local" msgstr "Local" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +#, fuzzy +msgctxt "" +"config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" msgid "Remote" msgstr "Remote" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" msgid "Timelines" msgstr "Timelines" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +#, fuzzy +msgctxt "" +"config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" msgid "Federated" msgstr "Federated" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +#, fuzzy +msgctxt "" +"config label at :pleroma-:restrict_unauthenticated > :timelines > :local" msgid "Local" msgstr "Local" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media > :failure_backoff" msgid "Failure backoff" msgstr "Failure backoff" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" msgid "Ignore hosts" msgstr "Ignore hosts" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media > :ignore_tld" msgid "Ignore TLD" msgstr "Ignore TLD" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media > :parsers" msgid "Parsers" msgstr "Parsers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:rich_media > :ttl_setters" msgid "TTL setters" msgstr "TTL setters" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:shout > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:shout > :limit" msgid "Limit" msgstr "Limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:static_fe > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:streamer > :overflow_workers" msgid "Overflow workers" msgstr "Overflow workers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:streamer > :workers" msgid "Workers" msgstr "Workers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" msgid "Valid schemes" msgstr "Valid schemes" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:user > :deny_follow_blocked" msgid "Deny follow blocked" msgstr "Deny follow blocked" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" msgid "Activity pub" msgstr "Activity pub" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" msgid "Activity pub question" msgstr "Activity pub question" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :chat_message" msgid "Chat message" msgstr "Chat message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :chat_message > :message" msgid "Message" msgstr "Message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" msgid "Sender nickname" msgstr "Sender nickname" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :direct_message" msgid "Direct message" msgstr "Direct message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :direct_message > :message" msgid "Message" msgstr "Message" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +#, fuzzy +msgctxt "" +"config label at :pleroma-:welcome > :direct_message > :sender_nickname" msgid "Sender nickname" msgstr "Sender nickname" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :email" msgid "Email" msgstr "Email" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :email > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :email > :html" msgid "Html" msgstr "Html" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :email > :sender" msgid "Sender" msgstr "Sender" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :email > :subject" msgid "Subject" msgstr "Subject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:welcome > :email > :text" msgid "Text" msgstr "Text" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:workers > :retries" msgid "Retries" msgstr "Retries" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +#, fuzzy +msgctxt "" +"config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF." +"MediaProxyWarmingPolicy" msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" msgstr "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +#, fuzzy +msgctxt "" +"config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF." +"MediaProxyWarmingPolicy > :max_running" msgid "Max running" msgstr "Max running" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +#, fuzzy +msgctxt "" +"config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF." +"MediaProxyWarmingPolicy > :max_waiting" msgid "Max waiting" msgstr "Max waiting" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +#, fuzzy +msgctxt "" +"config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" msgid "Pleroma.Web.RichMedia.Helpers" msgstr "Pleroma.Web.RichMedia.Helpers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +#, fuzzy +msgctxt "" +"config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers " +"> :max_running" msgid "Max running" msgstr "Max running" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +#, fuzzy +msgctxt "" +"config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers " +"> :max_waiting" msgid "Max waiting" msgstr "Max waiting" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :crontab" msgid "Crontab" msgstr "Crontab" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :log" msgid "Log" msgstr "Log" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues" msgid "Queues" msgstr "Queues" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" msgid "Activity expiration" msgstr "Activity expiration" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" msgid "Attachments cleanup" msgstr "Attachments cleanup" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :background" msgid "Background" msgstr "Background" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :backup" msgid "Backup" msgstr "Backup" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" msgid "Federator incoming" msgstr "Federator incoming" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" msgid "Federator outgoing" msgstr "Federator outgoing" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :mailer" msgid "Mailer" msgstr "Mailer" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" msgid "Scheduled activities" msgstr "Scheduled activities" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" msgid "Transmogrifier" msgstr "Transmogrifier" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Oban > :queues > :web_push" msgid "Web push" msgstr "Web push" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Captcha > :method" msgid "Method" msgstr "Method" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" msgid "Seconds valid" msgstr "Seconds valid" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" msgid "Endpoint" msgstr "Endpoint" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" msgid "Adapter" msgstr "Adapter" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" msgid "Mailer Enabled" msgstr "Mailer Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:" +"access_key" msgid "AWS Access Key" msgstr "AWS Access Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:" +"region" msgid "AWS Region" msgstr "AWS Region" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:" +"secret" msgid "AWS Secret Key" msgstr "AWS Secret Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" msgid "Dyn API Key" msgstr "Dyn API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:" +"access_token" msgid "GMail API Access Token" msgstr "GMail API Access Token" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:" +"api_key" msgid "Mailgun API Key" msgstr "Mailgun API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:" +"domain" msgid "Domain" msgstr "Domain" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:" +"api_key" msgid "MailJet Public API Key" msgstr "MailJet Public API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:" +"secret" msgid "MailJet Private API Key" msgstr "MailJet Private API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:" +"api_key" msgid "Mandrill API Key" msgstr "Mandrill API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:" +"api_key" msgid "Postmark API Key" msgstr "Postmark API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" msgid "AUTH Mode" msgstr "AUTH Mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"password" msgid "Password" msgstr "Password" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" msgid "Port" msgstr "Port" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" msgid "Relay" msgstr "Relay" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"retries" msgid "Retries" msgstr "Retries" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" msgid "Use SSL" msgstr "Use SSL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" msgid "STARTTLS Mode" msgstr "STARTTLS Mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:" +"username" msgid "Username" msgstr "Username" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:" +"api_key" msgid "SendGrid API Key" msgstr "SendGrid API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:" +"cmd_args" msgid "Cmd args" msgstr "Cmd args" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:" +"cmd_path" msgid "Cmd path" msgstr "Cmd path" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:" +"qmail" msgid "Qmail compat mode" msgstr "Qmail compat mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:" +"api_key" msgid "SocketLabs API Key" msgstr "SocketLabs API Key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:" +"server_id" msgid "Server ID" msgstr "Server ID" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:" +"api_key" msgid "SparkPost API key" msgstr "SparkPost API key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:" +"endpoint" msgid "Endpoint" msgstr "Endpoint" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" msgid "Logo" msgstr "Logo" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" msgid "Styling" msgstr "Styling" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :" +"background_color" msgid "Background color" msgstr "Background color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :" +"content_background_color" msgid "Content background color" msgstr "Content background color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" msgid "Header color" msgstr "Header color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" msgid "Link color" msgstr "Link color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" msgid "Text color" msgstr "Text color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :" +"text_muted_color" msgid "Text muted color" msgstr "Text muted color" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :class" msgid "Class" msgstr "Class" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" msgid "Extra" msgstr "Extra" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" msgid "New window" msgstr "New window" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" msgid "Rel" msgstr "Rel" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" msgid "Strip prefix" msgstr "Strip prefix" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" msgid "Truncate" msgstr "Truncate" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" msgid "Validate tld" msgstr "Validate tld" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" msgid "Daily user limit" msgstr "Daily user limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" msgid "Total user limit" msgstr "Total user limit" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" msgid "Base URL" msgstr "Base URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Upload > :filename_display_max_length" msgid "Filename display max length" msgstr "Filename display max length" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload > :filters" msgid "Filters" msgstr "Filters" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" msgid "Link name" msgstr "Link name" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" msgid "Proxy remote" msgstr "Proxy remote" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" msgid "Uploader" msgstr "Uploader" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" msgid "Text" msgstr "Text" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" msgid "Args" msgstr "Args" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" msgid "Uploads" msgstr "Uploads" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" msgid "Bucket" msgstr "Bucket" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" msgid "Bucket namespace" msgstr "Bucket namespace" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" msgid "Streaming enabled" msgstr "Streaming enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" msgid "Truncated namespace" msgstr "Truncated namespace" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" msgid "Email blacklist" msgstr "Email blacklist" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" msgid "Restricted nicknames" msgstr "Restricted nicknames" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" msgid "Limit days" msgstr "Limit days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" msgid "Purge after days" msgstr "Purge after days" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" msgid "Strict" msgstr "Strict" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" msgid "Headers" msgstr "Headers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" msgid "Method" msgstr "Method" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" msgid "Options" msgstr "Options" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options " +"> :params" msgid "Params" msgstr "Params" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :" +"script_path" msgid "Script path" msgstr "Script path" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :" +"url_format" msgid "URL Format" msgstr "URL Format" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" msgid "Providers" msgstr "Providers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" msgid "Unfurl NSFW" msgstr "Unfurl NSFW" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" msgid "Headers" msgstr "Headers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" msgid "Proxies" msgstr "Proxies" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" msgid "Reserved" msgstr "Reserved" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" msgid "Providers" msgstr "Providers" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +#, fuzzy +msgctxt "" +"config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" msgid "Min lifetime" msgstr "Min lifetime" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +#, fuzzy +msgctxt "" +"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" msgid "Auth" msgstr "Auth" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +#, fuzzy +msgctxt "" +"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" msgid "Enabled" msgstr "Enabled" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +#, fuzzy +msgctxt "" +"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" msgid "Format" msgstr "Format" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +#, fuzzy +msgctxt "" +"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :" +"ip_whitelist" msgid "IP Whitelist" msgstr "IP Whitelist" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy -msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +#, fuzzy +msgctxt "" +"config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" msgid "Path" msgstr "Path" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :quack > :level" msgid "Level" msgstr "Level" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :quack > :meta" msgid "Meta" msgstr "Meta" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :quack > :webhook_url" msgid "Webhook URL" msgstr "Webhook URL" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" msgid "Private key" msgstr "Private key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" msgid "Public key" msgstr "Public key" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :web_push_encryption-:vapid_details > :subject" msgid "Subject" msgstr "Subject" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" msgid "Require HTTP signatures for AP fetches" msgstr "Require HTTP signatures for AP fetches" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config description at :pleroma-:instance > :short_description" -msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgid "" +"Shorter version of instance description. It can be seen on `/api/v1/instance`" msgstr "" "Shorter version of instance description. It can be seen on `/api/v1/instance`" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" msgid "Authorized fetch mode" msgstr "Authorized fetch mode" #: lib/pleroma/docs/translator.ex:5 -#, elixir-autogen, elixir-format, fuzzy +#, fuzzy msgctxt "config label at :pleroma-:instance > :short_description" msgid "Short description" msgstr "Short description" From b1e2f3f646ce644ce82ee5221cc5eaf572f4bb7f Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 8 Aug 2022 15:48:02 +0000 Subject: [PATCH 73/82] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ Translation: Pleroma fe/Akkoma Backend (Static pages) --- .../nl/LC_MESSAGES/config_descriptions.po | 6396 +++++++++++++++++ 1 file changed, 6396 insertions(+) create mode 100644 priv/gettext/nl/LC_MESSAGES/config_descriptions.po diff --git a/priv/gettext/nl/LC_MESSAGES/config_descriptions.po b/priv/gettext/nl/LC_MESSAGES/config_descriptions.po new file mode 100644 index 000000000..4def37366 --- /dev/null +++ b/priv/gettext/nl/LC_MESSAGES/config_descriptions.po @@ -0,0 +1,6396 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-08-06 21:54+0000\n" +"PO-Revision-Date: 2022-08-06 21:55+0000\n" +"Last-Translator: Anonymous \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here has no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd" +msgid "Before enabling this you must add :esshd to mix.exs as one of the extra_applications and generate host keys in your priv dir with ssh-keygen -m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" +msgstr "" +"Before enabling this you must add :esshd to mix.exs as one of the " +"extra_applications and generate host keys in your priv dir with ssh-keygen -" +"m PEM -N \"\" -b 2048 -t rsa -f ssh_host_rsa_key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger" +msgid "Logger-related settings" +msgstr "Logger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :mime" +msgid "Mime Types settings" +msgstr "Mime Types settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Allows setting a token that can be used to authenticate requests with admin privileges without a normal user account token. Append the `admin_token` parameter to requests to utilize it. (Please reconsider using HTTP Basic Auth or OAuth-based authentication if possible)" +msgstr "" +"Allows setting a token that can be used to authenticate requests with admin " +"privileges without a normal user account token. Append the `admin_token` " +"parameter to requests to utilize it. (Please reconsider using HTTP Basic " +"Auth or OAuth-based authentication if possible)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma" +msgid "Authenticator" +msgstr "Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack" +msgid "Quack-related settings" +msgstr "Quack-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug" +msgid "CORS plug config" +msgstr "CORS plug config" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd" +msgid "ESSHD" +msgstr "ESSHD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger" +msgid "Logger" +msgstr "Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime" +msgid "Mime Types" +msgstr "Mime Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Admin Token" +msgstr "Pleroma Admin Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma" +msgid "Pleroma Authenticator" +msgstr "Pleroma Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack" +msgid "Quack Logger" +msgstr "Quack Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console" +msgid "Console logger settings" +msgstr "Console logger settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger" +msgid "ExSyslogger-related settings" +msgstr "ExSyslogger-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub" +msgid "ActivityPub-related settings" +msgstr "ActivityPub-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets" +msgid "This section configures assets to be used with various frontends. Currently the only option relates to mascots on the mastodon frontend" +msgstr "" +"This section configures assets to be used with various frontends. Currently " +"the only option relates to mascots on the mastodon frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth" +msgid "Authentication / authorization settings" +msgstr "Authentication / authorization settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool" +msgid "Advanced settings for `Gun` connections pool" +msgstr "Advanced settings for `Gun` connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications" +msgid "Email notifications settings" +msgstr "Email notifications settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features" +msgid "Customizable features" +msgstr "Customizable features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed" +msgid "Configure feed rendering" +msgstr "Configure feed rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations" +msgid "This form can be used to configure a keyword list that keeps the configuration data for any kind of frontend. By default, settings for pleroma_fe are configured. If you want to add your own configuration your settings all fields must be complete." +msgstr "" +"This form can be used to configure a keyword list that keeps the " +"configuration data for any kind of frontend. By default, settings for " +"pleroma_fe are configured. If you want to add your own configuration your " +"settings all fields must be complete." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends" +msgid "Installed frontends management" +msgstr "Installed frontends management" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher" +msgid "Gopher settings" +msgstr "Gopher settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools" +msgid "Advanced settings for `Hackney` connections pools" +msgstr "Advanced settings for `Hackney` connections pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http" +msgid "HTTP settings" +msgstr "HTTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security" +msgid "HTTP security settings" +msgstr "HTTP security settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance" +msgid "Instance-related settings" +msgstr "Instance-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons" +msgid "Control favicons for instances" +msgstr "Control favicons for instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap" +msgid "Use LDAP for user authentication. When a user logs in to the Pleroma instance, the name and password will be verified by trying to authenticate (bind) to a LDAP server. If a user exists in the LDAP directory but there is no account with the same name yet on the Pleroma instance then a new Pleroma account will be created with the same name as the LDAP user name." +msgstr "" +"Use LDAP for user authentication. When a user logs in to the Pleroma " +"instance, the name and password will be verified by trying to authenticate " +"(bind) to a LDAP server. If a user exists in the LDAP directory but there is " +"no account with the same name yet on the Pleroma instance then a new Pleroma " +"account will be created with the same name as the LDAP user name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool" +msgid "Majic/libmagic configuration" +msgstr "Majic/libmagic configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest" +msgid "This section describe PWA manifest instance-specific values. Currently this option relate only for MastoFE." +msgstr "" +"This section describe PWA manifest instance-specific values. Currently this " +"option relate only for MastoFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules" +msgid "Custom Runtime Modules" +msgstr "Custom Runtime Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf" +msgid "General MRF settings" +msgstr "General MRF settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration" +msgid "Adds automatic expiration to all local activities" +msgstr "Adds automatic expiration to all local activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot" +msgid "Automatically follows newly discovered accounts." +msgstr "Automatically follows newly discovered accounts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag" +msgid "Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (without the leading #)\n\nNote: This MRF Policy is always enabled, if you want to disable it you have to set empty lists.\n" +msgstr "" +"Reject, TWKN-remove or Set-Sensitive messsages with specific hashtags (" +"without the leading #)\n" +"\n" +"Note: This MRF Policy is always enabled, if you want to disable it you have " +"to set empty lists.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread" +msgid "Block messages with excessive user mentions" +msgstr "Block messages with excessive user mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword" +msgid "Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs.pm/elixir/Regex.html)." +msgstr "" +"Reject or Word-Replace messages matching a keyword or [Regex](https://hexdocs" +".pm/elixir/Regex.html)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention" +msgid "Block messages which mention a specific user" +msgstr "Block messages which mention a specific user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_normalize_markup" +msgid "MRF NormalizeMarkup settings. Scrub configured hypertext markup." +msgstr "MRF NormalizeMarkup settings. Scrub configured hypertext markup." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age" +msgid "Rejects or delists posts based on their timestamp deviance from your server's clock." +msgstr "" +"Rejects or delists posts based on their timestamp deviance from your " +"server's clock." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic" +msgid "RejectNonPublic drops posts with non-public visibility settings." +msgstr "RejectNonPublic drops posts with non-public visibility settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple" +msgid "Simple ingress policies" +msgstr "Simple ingress policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji" +msgid "Steals emojis from selected instances when it sees them." +msgstr "Steals emojis from selected instances when it sees them." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain" +msgid "This policy processes messages through an alternate pipeline when a given message matches certain criteria. All criteria are configured as a map of regular expressions to lists of policy modules." +msgstr "" +"This policy processes messages through an alternate pipeline when a given " +"message matches certain criteria. All criteria are configured as a map of " +"regular expressions to lists of policy modules." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary" +msgid "Filter messages which belong to certain activity vocabularies" +msgstr "Filter messages which belong to certain activity vocabularies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2" +msgid "Configure OAuth 2 provider capabilities" +msgstr "Configure OAuth 2 provider capabilities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools" +msgid "Advanced settings for `Gun` workers pools" +msgstr "Advanced settings for `Gun` workers pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table" +msgid "`populate_hashtags_table` background migration settings" +msgstr "`populate_hashtags_table` background migration settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit" +msgid "Rate limit settings. This is an advanced feature enabled only for :authentication by default." +msgstr "" +"Rate limit settings. This is an advanced feature enabled only for :" +"authentication by default." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated" +msgid "Disallow viewing timelines, user profiles and statuses for unauthenticated users." +msgstr "" +"Disallow viewing timelines, user profiles and statuses for unauthenticated " +"users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media" +msgid "If enabled the instance will parse metadata from attached links to generate link previews" +msgstr "" +"If enabled the instance will parse metadata from attached links to generate " +"link previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout" +msgid "Pleroma shout settings" +msgstr "Pleroma shout settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe" +msgid "Render profiles and posts using server-generated HTML that is viewable without using JavaScript" +msgstr "" +"Render profiles and posts using server-generated HTML that is viewable " +"without using JavaScript" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer" +msgid "Settings for notifications streamer" +msgstr "Settings for notifications streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes" +msgid "URI schemes related settings" +msgstr "URI schemes related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl" +msgid "The expiration time for the web responses cache. Values should be in milliseconds or `nil` to disable expiration." +msgstr "" +"The expiration time for the web responses cache. Values should be in " +"milliseconds or `nil` to disable expiration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome" +msgid "Welcome messages settings" +msgstr "Welcome messages settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers" +msgid "Includes custom worker options not interpretable directly by `Oban`" +msgstr "Includes custom worker options not interpretable directly by `Oban`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter" +msgid "Limits configuration for background tasks." +msgstr "Limits configuration for background tasks." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban" +msgid "[Oban](https://github.com/sorentwo/oban) asynchronous job processor configuration." +msgstr "" +"[Oban](https://github.com/sorentwo/oban) asynchronous job processor " +"configuration." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha" +msgid "Captcha-related settings" +msgstr "Captcha-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Kocaptcha is a very simple captcha service with a single API endpoint, the source code is here: https://github.com/koto-bank/kocaptcha. The default endpoint (https://captcha.kotobank.ch) is hosted by the developer." +msgstr "" +"Kocaptcha is a very simple captcha service with a single API endpoint, the " +"source code is here: https://github.com/koto-bank/kocaptcha. The default " +"endpoint (https://captcha.kotobank.ch) is hosted by the developer." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer" +msgid "Mailer-related settings" +msgstr "Mailer-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "New users admin email digest" +msgstr "New users admin email digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail" +msgid "Email template settings" +msgstr "Email template settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter" +msgid "Configuration for Pleroma's link formatter which parses mentions, hashtags, and URLs." +msgstr "" +"Configuration for Pleroma's link formatter which parses mentions, hashtags, " +"and URLs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity" +msgid "Scheduled activities settings" +msgstr "Scheduled activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload" +msgid "Upload general settings" +msgstr "Upload general settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Filter replaces the filename of the upload" +msgstr "Filter replaces the filename of the upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Uploads mogrify filter settings" +msgstr "Uploads mogrify filter settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local" +msgid "Local uploader-related settings" +msgstr "Local uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3" +msgid "S3 uploader-related settings" +msgstr "S3 uploader-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup" +msgid "Account Backup" +msgstr "Account Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "HTTP invalidate settings" +msgstr "HTTP invalidate settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Invalidation script settings" +msgstr "Invalidation script settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata" +msgid "Metadata-related settings" +msgstr "Metadata-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git.pleroma.social/pleroma/remote_ip) but with runtime configuration.\n**If your instance is not behind at least one reverse proxy, you should not enable this plug.**\n" +msgstr "" +"`Pleroma.Web.Plugs.RemoteIp` is a shim to call [`RemoteIp`](https://git." +"pleroma.social/pleroma/remote_ip) but with runtime configuration.\n" +"**If your instance is not behind at least one reverse proxy, you should not " +"enable this plug.**\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload" +msgid "Preload-related settings" +msgstr "Preload-related settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Expired activities settings" +msgstr "Expired activities settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Prometheus app metrics endpoint configuration" +msgstr "Prometheus app metrics endpoint configuration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details" +msgid "Web Push Notifications configuration. You can use the mix task mix web_push.gen.keypair to generate it." +msgstr "" +"Web Push Notifications configuration. You can use the mix task mix " +"web_push.gen.keypair to generate it." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3" +msgid "S3" +msgstr "S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console" +msgid "Console Logger" +msgstr "Console Logger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger" +msgid "ExSyslogger" +msgstr "ExSyslogger" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub" +msgid "ActivityPub" +msgstr "ActivityPub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets" +msgid "Assets" +msgstr "Assets" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool" +msgid "Connections pool" +msgstr "Connections pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications" +msgid "Email notifications" +msgstr "Email notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji" +msgid "Emoji" +msgstr "Emoji" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features" +msgid "Features" +msgstr "Features" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed" +msgid "Feed" +msgstr "Feed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations" +msgid "Frontend configurations" +msgstr "Frontend configurations" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends" +msgid "Frontends" +msgstr "Frontends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher" +msgid "Gopher" +msgstr "Gopher" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools" +msgid "Hackney pools" +msgstr "Hackney pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http" +msgid "HTTP" +msgstr "HTTP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security" +msgid "HTTP security" +msgstr "HTTP security" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance" +msgid "Instance" +msgstr "Instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons" +msgid "Instances favicons" +msgstr "Instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap" +msgid "LDAP" +msgstr "LDAP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool" +msgid "Majic pool" +msgstr "Majic pool" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest" +msgid "Manifest" +msgstr "Manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup" +msgid "Markup Settings" +msgstr "Markup Settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy" +msgid "Media preview proxy" +msgstr "Media preview proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy" +msgid "Media proxy" +msgstr "Media proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules" +msgid "Modules" +msgstr "Modules" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf" +msgid "MRF" +msgstr "MRF" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration" +msgid "MRF Activity Expiration Policy" +msgstr "MRF Activity Expiration Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot" +msgid "MRF FollowBot Policy" +msgstr "MRF FollowBot Policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag" +msgid "MRF Hashtag" +msgstr "MRF Hashtag" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread" +msgid "MRF Hellthread" +msgstr "MRF Hellthread" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword" +msgid "MRF Keyword" +msgstr "MRF Keyword" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention" +msgid "MRF Mention" +msgstr "MRF Mention" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup" +msgid "MRF Normalize Markup" +msgstr "MRF Normalize Markup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age" +msgid "MRF Object Age" +msgstr "MRF Object Age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic" +msgid "MRF Reject Non Public" +msgstr "MRF Reject Non Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple" +msgid "MRF Simple" +msgstr "MRF Simple" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji" +msgid "MRF Emojis" +msgstr "MRF Emojis" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain" +msgid "MRF Subchain" +msgstr "MRF Subchain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary" +msgid "MRF Vocabulary" +msgstr "MRF Vocabulary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2" +msgid "OAuth2" +msgstr "OAuth2" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools" +msgid "Pools" +msgstr "Pools" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table" +msgid "Populate hashtags table" +msgstr "Populate hashtags table" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit" +msgid "Rate limit" +msgstr "Rate limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated" +msgid "Restrict Unauthenticated" +msgstr "Restrict Unauthenticated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media" +msgid "Rich media" +msgstr "Rich media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout" +msgid "Shout" +msgstr "Shout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe" +msgid "Static FE" +msgstr "Static FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer" +msgid "Streamer" +msgstr "Streamer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes" +msgid "URI Schemes" +msgstr "URI Schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user" +msgid "User" +msgstr "User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl" +msgid "Web cache TTL" +msgstr "Web cache TTL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome" +msgid "Welcome" +msgstr "Welcome" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter" +msgid "ConcurrentLimiter" +msgstr "ConcurrentLimiter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban" +msgid "Oban" +msgstr "Oban" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha" +msgid "Pleroma.Captcha" +msgstr "Pleroma.Captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha" +msgid "Pleroma.Captcha.Kocaptcha" +msgstr "Pleroma.Captcha.Kocaptcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer" +msgid "Pleroma.Emails.Mailer" +msgstr "Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail" +msgid "Pleroma.Emails.NewUsersDigestEmail" +msgstr "Pleroma.Emails.NewUsersDigestEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail" +msgid "Pleroma.Emails.UserEmail" +msgstr "Pleroma.Emails.UserEmail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter" +msgid "Linkify" +msgstr "Linkify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity" +msgid "Pleroma.ScheduledActivity" +msgstr "Pleroma.ScheduledActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload" +msgid "Pleroma.Upload" +msgstr "Pleroma.Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename" +msgid "Pleroma.Upload.Filter.AnonymizeFilename" +msgstr "Pleroma.Upload.Filter.AnonymizeFilename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify" +msgid "Pleroma.Upload.Filter.Mogrify" +msgstr "Pleroma.Upload.Filter.Mogrify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local" +msgid "Pleroma.Uploaders.Local" +msgstr "Pleroma.Uploaders.Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3" +msgid "Pleroma.Uploaders.S3" +msgstr "Pleroma.Uploaders.S3" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User" +msgid "Pleroma.User" +msgstr "Pleroma.User" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup" +msgid "Pleroma.User.Backup" +msgstr "Pleroma.User.Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate" +msgid "Pleroma.Web.ApiSpec.CastAndValidate" +msgstr "Pleroma.Web.ApiSpec.CastAndValidate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http" +msgid "Pleroma.Web.MediaProxy.Invalidation.Http" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Http" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script" +msgid "Pleroma.Web.MediaProxy.Invalidation.Script" +msgstr "Pleroma.Web.MediaProxy.Invalidation.Script" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata" +msgid "Pleroma.Web.Metadata" +msgstr "Pleroma.Web.Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp" +msgid "Pleroma.Web.Plugs.RemoteIp" +msgstr "Pleroma.Web.Plugs.RemoteIp" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload" +msgid "Pleroma.Web.Preload" +msgstr "Pleroma.Web.Preload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity" +msgid "Pleroma.Workers.PurgeExpiredActivity" +msgstr "Pleroma.Workers.PurgeExpiredActivity" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter" +msgid "Pleroma.Web.Endpoint.MetricsExporter" +msgstr "Pleroma.Web.Endpoint.MetricsExporter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details" +msgid "Vapid Details" +msgstr "Vapid Details" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :enabled" +msgid "Enables SSH" +msgstr "Enables SSH" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :handler" +msgid "Handler module" +msgstr "Handler module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :password_authenticator" +msgid "Authenticator module" +msgstr "Authenticator module" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :port" +msgid "Port to connect" +msgstr "Port to connect" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :esshd > :priv_dir" +msgid "Dir with SSH keys" +msgstr "Dir with SSH keys" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :access_key_id" +msgid "S3 access key ID" +msgstr "S3 access key ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :host" +msgid "S3 host" +msgstr "S3 host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :region" +msgid "S3 region (for AWS)" +msgstr "S3 region (for AWS)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger > :backends" +msgid "Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :ex_syslogger } - to syslog, Quack.Logger - to Slack." +msgstr "" +"Where logs will be sent, :console - send logs to stdout, { ExSyslogger, :" +"ex_syslogger } - to syslog, Quack.Logger - to Slack." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:console > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :format" +msgid "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" +msgstr "Default: \"$date $time [$level] $levelpad$node $metadata $message\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :ident" +msgid "A string that's prepended to every message, and is typically set to the app name" +msgstr "" +"A string that's prepended to every message, and is typically set to the app " +"name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :logger-:ex_syslogger > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :blockers_visible" +msgid "Whether a user can see someone who has blocked them" +msgstr "Whether a user can see someone who has blocked them" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Following handshake timeout" +msgstr "Following handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :note_replies_output_limit" +msgid "The number of Note replies' URIs to be included with outgoing federation (`5` to match Mastodon hardcoded value, `0` to disable the output)" +msgstr "" +"The number of Note replies' URIs to be included with outgoing federation (`5`" +" to match Mastodon hardcoded value, `0` to disable the output)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :outgoing_blocks" +msgid "Whether to federate blocks to other instances" +msgstr "Whether to federate blocks to other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches with HTTP signatures" +msgstr "Sign object fetches with HTTP signatures" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :unfollow_blocked" +msgid "Whether blocks result in people getting unfollowed" +msgstr "Whether blocks result in people getting unfollowed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_mascot" +msgid "This will be used as the default mascot on MastoFE. Default: `:pleroma_fox_tan`" +msgstr "" +"This will be used as the default mascot on MastoFE. Default: " +"`:pleroma_fox_tan`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :default_user_avatar" +msgid "URL of the default user avatar" +msgstr "URL of the default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:assets > :mascots" +msgid "Keyword of mascots, each element must contain both an URL and a mime_type key" +msgstr "" +"Keyword of mascots, each element must contain both an URL and a mime_type key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :auth_template" +msgid "Authentication form template. By default it's `show.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." +msgstr "" +"Authentication form template. By default it's `show.html` which corresponds " +"to `lib/pleroma/web/templates/o_auth/o_auth/show.html.ee`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "OAuth admin scope requirement toggle. If enabled, admin actions explicitly demand admin OAuth scope(s) presence in OAuth token (client app must support admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` user flag grants access to admin-specific actions." +msgstr "" +"OAuth admin scope requirement toggle. If enabled, admin actions explicitly " +"demand admin OAuth scope(s) presence in OAuth token (client app must support " +"admin scopes). If disabled and token doesn't have admin scope(s), `is_admin` " +"user flag grants access to admin-specific actions." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_strategies" +msgid "The list of enabled OAuth consumer strategies. By default it's set by OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-delimited string should be of format \"strategy\" or \"strategy:dependency\" (e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is named differently than ueberauth_)." +msgstr "" +"The list of enabled OAuth consumer strategies. By default it's set by " +"OAUTH_CONSUMER_STRATEGIES environment variable. Each entry in this space-" +"delimited string should be of format \"strategy\" or \"strategy:dependency\" " +"(e.g. twitter or keycloak:ueberauth_keycloak_strategy in case dependency is " +"named differently than ueberauth_)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer mode authentication form template. By default it's `consumer.html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex`." +msgstr "" +"OAuth consumer mode authentication form template. By default it's `consumer." +"html` which corresponds to `lib/pleroma/web/templates/o_auth/o_auth/consumer." +"html.eex`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connect_timeout" +msgid "Timeout while `gun` will wait until connection is up. Default: 5000ms." +msgstr "Timeout while `gun` will wait until connection is up. Default: 5000ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Number of attempts to acquire the connection from the pool if it is overloaded. Default: 5" +msgstr "" +"Number of attempts to acquire the connection from the pool if it is " +"overloaded. Default: 5" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Timeout to acquire a connection from pool. The total max time is this value multiplied by the number of retries. Default: 250ms." +msgstr "" +"Timeout to acquire a connection from pool. The total max time is this value " +"multiplied by the number of retries. Default: 250ms." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :max_connections" +msgid "Maximum number of connections in the pool. Default: 250 connections." +msgstr "Maximum number of connections in the pool. Default: 250 connections." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Multiplier for the number of idle connection to be reclaimed if the pool is full. For example if the pool maxes out at 250 connections and this setting is set to 0.3, the pool will reclaim at most 75 idle connections if it's overloaded. Default: 0.1" +msgstr "" +"Multiplier for the number of idle connection to be reclaimed if the pool is " +"full. For example if the pool maxes out at 250 connections and this setting " +"is set to 0.3, the pool will reclaim at most 75 idle connections if it's " +"overloaded. Default: 0.1" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest" +msgid "emails of \"what you've missed\" for users who have been inactive for a while" +msgstr "" +"emails of \"what you've missed\" for users who have been inactive for a while" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :active" +msgid "Globally enable or disable digest emails" +msgstr "Globally enable or disable digest emails" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Minimum user inactivity threshold" +msgstr "Minimum user inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :interval" +msgid "Minimum interval between digest emails to one user" +msgstr "Minimum interval between digest emails to one user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:email_notifications > :digest > :schedule" +msgid "When to send digest email, in crontab format. \"0 0 0\" is the default, meaning \"once a week at midnight on Sunday morning\"." +msgstr "" +"When to send digest email, in crontab format. \"0 0 0\" is the default, " +"meaning \"once a week at midnight on Sunday morning\"." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :default_manifest" +msgid "Location of the JSON-manifest. This manifest contains information about the emoji-packs you can download. Currently only one manifest can be added (no arrays)." +msgstr "" +"Location of the JSON-manifest. This manifest contains information about the " +"emoji-packs you can download. Currently only one manifest can be added (no " +"arrays)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :groups" +msgid "Emojis are ordered in groups (tags). This is an array of key-value pairs where the key is the group name and the value is the location or array of locations. * can be used as a wildcard." +msgstr "" +"Emojis are ordered in groups (tags). This is an array of key-value pairs " +"where the key is the group name and the value is the location or array of " +"locations. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :pack_extensions" +msgid "A list of file extensions for emojis, when no emoji.txt for a pack is present" +msgstr "" +"A list of file extensions for emojis, when no emoji.txt for a pack is present" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:emoji > :shortcode_globs" +msgid "Location of custom emoji files. * can be used as a wildcard." +msgstr "Location of custom emoji files. * can be used as a wildcard." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:features > :improved_hashtag_timeline" +msgid "Setting to force toggle / force disable improved hashtags timeline. `:enabled` forces hashtags to be fetched from `hashtags` table for hashtags timeline. `:disabled` forces object-embedded hashtags to be used (slower). Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [unless overridden] when HashtagsTableMigrator completes)." +msgstr "" +"Setting to force toggle / force disable improved hashtags timeline. " +"`:enabled` forces hashtags to be fetched from `hashtags` table for hashtags " +"timeline. `:disabled` forces object-embedded hashtags to be used (slower). " +"Keep it `:auto` for automatic behaviour (it is auto-set to `:enabled` [" +"unless overridden] when HashtagsTableMigrator completes)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title" +msgid "Configure title rendering" +msgstr "Configure title rendering" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :max_length" +msgid "Maximum number of characters before truncating title" +msgstr "Maximum number of characters before truncating title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:feed > :post_title > :omission" +msgid "Replacement which will be used after truncating string" +msgstr "Replacement which will be used after truncating string" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Settings for Pleroma FE" +msgstr "Settings for Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "When disabled, auto-hide the subject field if it's empty" +msgstr "When disabled, auto-hide the subject field if it's empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "URL of the background, unless viewing a user profile with a background that is set" +msgstr "" +"URL of the background, unless viewing a user profile with a background that " +"is set" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "When a message has a subject (aka Content Warning), collapse it by default" +msgstr "" +"When a message has a subject (aka Content Warning), collapse it by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Enables green text on lines prefixed with the > character" +msgstr "Enables green text on lines prefixed with the > character" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hides filtered statuses from timelines" +msgstr "Hides filtered statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hides muted statuses from timelines" +msgstr "Hides muted statuses from timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide notices statistics (repeats, favorites, ...)" +msgstr "Hide notices statistics (repeats, favorites, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hides instance name from PleromaFE banner" +msgstr "Hides instance name from PleromaFE banner" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide profile statistics (posts, posts per day, followers, followings, ...)" +msgstr "" +"Hide profile statistics (posts, posts per day, followers, followings, ...)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "URL of the logo, defaults to Pleroma's logo" +msgstr "URL of the logo, defaults to Pleroma's logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Allows you to adjust vertical margins between logo boundary and navbar borders. The idea is that to have logo's image without any extra margins and instead adjust them to your need in layout." +msgstr "" +"Allows you to adjust vertical margins between logo boundary and navbar " +"borders. The idea is that to have logo's image without any extra margins and " +"instead adjust them to your need in layout." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "By default it assumes logo used will be monochrome with alpha channel to be compatible with both light and dark themes. If you want a colorful logo you must disable logoMask." +msgstr "" +"By default it assumes logo used will be monochrome with alpha channel to be " +"compatible with both light and dark themes. If you want a colorful logo you " +"must disable logoMask." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Limit scope selection to Direct, User default, and Scope of post replying to. Also prevents replying to a DM with a public post from PleromaFE." +msgstr "" +"Limit scope selection to Direct, User default, and Scope of post replying " +"to. Also prevents replying to a DM with a public post from PleromaFE." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "URL of the image to use for hiding NSFW media attachments in the timeline" +msgstr "" +"URL of the image to use for hiding NSFW media attachments in the timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Default post formatting option" +msgstr "Default post formatting option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Relative URL which indicates where to redirect when a user is logged in" +msgstr "Relative URL which indicates where to redirect when a user is logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Relative URL which indicates where to redirect when a user isn't logged in" +msgstr "" +"Relative URL which indicates where to redirect when a user isn't logged in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Copy the scope (private/unlisted/public) in replies to posts by default" +msgstr "Copy the scope (private/unlisted/public) in replies to posts by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Enables panel displaying functionality of the instance on the About page" +msgstr "" +"Enables panel displaying functionality of the instance on the About page" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Whether to show the instance's custom panel" +msgstr "Whether to show the instance's custom panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Change alignment of sidebar and panels to the right" +msgstr "Change alignment of sidebar and panels to the right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Allows changing the default behaviour of subject lines in replies.\n `email`: copy and preprend re:, as in email,\n `masto`: copy verbatim, as in Mastodon,\n `noop`: don't copy the subject." +msgstr "" +"Allows changing the default behaviour of subject lines in replies.\n" +" `email`: copy and preprend re:, as in email,\n" +" `masto`: copy verbatim, as in Mastodon,\n" +" `noop`: don't copy the subject." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Which theme to use. Available themes are defined in styles.json" +msgstr "Which theme to use. Available themes are defined in styles.json" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin" +msgid "Admin frontend" +msgstr "Admin frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :admin > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available" +msgid "A map containing available frontends and parameters for their installation." +msgstr "" +"A map containing available frontends and parameters for their installation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_dir" +msgid "The directory inside the zip file " +msgstr "The directory inside the zip file " + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > build_url" +msgid "Either an url to a zip file containing the frontend or a template to build it by inserting the `ref`. The string `${ref}` will be replaced by the configured `ref`." +msgstr "" +"Either an url to a zip file containing the frontend or a template to build " +"it by inserting the `ref`. The string `${ref}` will be replaced by the " +"configured `ref`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > custom-http-headers" +msgid "The custom HTTP headers for the frontend" +msgstr "The custom HTTP headers for the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > git" +msgid "URL of the git repository of the frontend" +msgstr "URL of the git repository of the frontend" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > name" +msgid "Name of the frontend." +msgstr "Name of the frontend." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :available > ref" +msgid "Reference of the frontend to be used." +msgstr "Reference of the frontend to be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary" +msgid "Primary frontend, the one that is served for all pages by default" +msgstr "Primary frontend, the one that is served for all pages by default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > name" +msgid "Name of the installed frontend. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Name of the installed frontend. Valid config must include both `Name` and " +"`Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:frontends > :primary > ref" +msgid "Reference of the installed frontend to be used. Valid config must include both `Name` and `Reference` values." +msgstr "" +"Reference of the installed frontend to be used. Valid config must include " +"both `Name` and `Reference` values." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :dstport" +msgid "Port advertised in URLs (optional, defaults to port)" +msgstr "Port advertised in URLs (optional, defaults to port)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :enabled" +msgid "Enables the gopher interface" +msgstr "Enables the gopher interface" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :ip" +msgid "IP address to bind to" +msgstr "IP address to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:gopher > :port" +msgid "Port to bind to" +msgstr "Port to bind to" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Number workers in the pool." +msgstr "Number workers in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout while `hackney` will wait for response." +msgstr "Timeout while `hackney` will wait for response." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter" +msgid "Adapter specific options" +msgstr "Adapter specific options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL options for HTTP adapter" +msgstr "SSL options for HTTP adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "List of TLS version to use" +msgstr "List of TLS version to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http > :user_agent" +msgid "What user agent to use. Must be a string or an atom `:default`. Default value is `:default`." +msgstr "" +"What user agent to use. Must be a string or an atom `:default`. Default " +"value is `:default`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :ct_max_age" +msgid "The maximum age for the Expect-CT header if sent" +msgstr "The maximum age for the Expect-CT header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :enabled" +msgid "Whether the managed content security policy is enabled" +msgstr "Whether the managed content security policy is enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :referrer_policy" +msgid "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" +msgstr "The referrer policy to use, either \"same-origin\" or \"no-referrer\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :report_uri" +msgid "Adds the specified URL to report-uri and report-to group in CSP header" +msgstr "Adds the specified URL to report-uri and report-to group in CSP header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts" +msgid "Whether to additionally send a Strict-Transport-Security header" +msgstr "Whether to additionally send a Strict-Transport-Security header" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:http_security > :sts_max_age" +msgid "The maximum age for the Strict-Transport-Security header if sent" +msgstr "The maximum age for the Strict-Transport-Security header if sent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_activation_required" +msgid "Require users to confirm their emails before signing in" +msgstr "Require users to confirm their emails before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_approval_required" +msgid "Require users to be manually approved by an admin before signing in" +msgstr "Require users to be manually approved by an admin before signing in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_name_length" +msgid "An account field name maximum length. Default: 512." +msgstr "An account field name maximum length. Default: 512." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :account_field_value_length" +msgid "An account field value maximum length. Default: 2048." +msgstr "An account field value maximum length. Default: 2048." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allow_relay" +msgid "Permits remote instances to subscribe to all public posts of your instance. (Important!) This may increase the visibility of your instance." +msgstr "" +"Permits remote instances to subscribe to all public posts of your instance. " +"(Important!) This may increase the visibility of your instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :allowed_post_formats" +msgid "MIME-type list of formats allowed to be posted (transformed into HTML)" +msgstr "MIME-type list of formats allowed to be posted (transformed into HTML)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :attachment_links" +msgid "Enable to automatically add attachment link text to statuses" +msgstr "Enable to automatically add attachment link text to statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowed_nicknames" +msgid "Set to nicknames of (local) users that every new user should automatically follow" +msgstr "" +"Set to nicknames of (local) users that every new user should automatically " +"follow" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :autofollowing_nicknames" +msgid "Set to nicknames of (local) users that automatically follows every newly registered user" +msgstr "" +"Set to nicknames of (local) users that automatically follows every newly " +"registered user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :avatar_upload_limit" +msgid "File size limit of user's profile avatars" +msgstr "File size limit of user's profile avatars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :background_upload_limit" +msgid "File size limit of user's profile backgrounds" +msgstr "File size limit of user's profile backgrounds" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :banner_upload_limit" +msgid "File size limit of user's profile banners" +msgstr "File size limit of user's profile banners" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_min_age" +msgid "Minimum required age for users to create account. Only used if birthday is required." +msgstr "" +"Minimum required age for users to create account. Only used if birthday is " +"required." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :birthday_required" +msgid "Require users to enter their birthday." +msgstr "Require users to enter their birthday." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :cleanup_attachments" +msgid "Enable to remove associated attachments when status is removed.\nThis will not affect duplicates and attachments without status.\nEnabling this will increase load to database when deleting statuses on larger instances.\n" +msgstr "" +"Enable to remove associated attachments when status is removed.\n" +"This will not affect duplicates and attachments without status.\n" +"Enabling this will increase load to database when deleting statuses on " +"larger instances.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :description" +msgid "The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" +msgstr "" +"The instance's description. It can be seen in nodeinfo and `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :email" +msgid "Email used to reach an Administrator/Moderator of the instance" +msgstr "Email used to reach an Administrator/Moderator of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :extended_nickname_format" +msgid "Enable to use extended local nicknames format (allows underscores/dashes). This will break federation with older software for theses nicknames." +msgstr "" +"Enable to use extended local nicknames format (allows underscores/dashes). " +"This will break federation with older software for theses nicknames." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :external_user_synchronization" +msgid "Enabling following/followers counters synchronization for external users" +msgstr "" +"Enabling following/followers counters synchronization for external users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federating" +msgid "Enable federation with other instances" +msgstr "Enable federation with other instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Max. depth of reply-to and reply activities fetching on incoming federation, to prevent out-of-memory situations while fetching very long threads. If set to `nil`, threads of any depth will be fetched. Lower this value if you experience out-of-memory crashes." +msgstr "" +"Max. depth of reply-to and reply activities fetching on incoming federation, " +"to prevent out-of-memory situations while fetching very long threads. If set " +"to `nil`, threads of any depth will be fetched. Lower this value if you " +"experience out-of-memory crashes." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Timeout (in days) of each external federation target being unreachable prior to pausing federating to it" +msgstr "" +"Timeout (in days) of each external federation target being unreachable prior " +"to pausing federating to it" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :healthcheck" +msgid "If enabled, system data will be shown on `/api/pleroma/healthcheck`" +msgstr "If enabled, system data will be shown on `/api/pleroma/healthcheck`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :instance_thumbnail" +msgid "The instance thumbnail can be any image that represents your instance and is used by some apps or services when they display information about your instance." +msgstr "" +"The instance thumbnail can be any image that represents your instance and is " +"used by some apps or services when they display information about your " +"instance." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :invites_enabled" +msgid "Enable user invitations for admins (depends on `registrations_open` being disabled)" +msgstr "" +"Enable user invitations for admins (depends on `registrations_open` being " +"disabled)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit" +msgid "Posts character limit (CW/Subject included in the counter)" +msgstr "Posts character limit (CW/Subject included in the counter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :limit_to_local_content" +msgid "Limit unauthenticated users to search for local statutes and users only. Default: `:unauthenticated`." +msgstr "" +"Limit unauthenticated users to search for local statutes and users only. " +"Default: `:unauthenticated`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_account_fields" +msgid "The maximum number of custom fields in the user profile. Default: 10." +msgstr "The maximum number of custom fields in the user profile. Default: 10." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_endorsed_users" +msgid "The maximum number of recommended accounts. 0 will disable the feature." +msgstr "The maximum number of recommended accounts. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_media_attachments" +msgid "Maximum number of post media attachments" +msgstr "Maximum number of post media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_pinned_statuses" +msgid "The maximum number of pinned statuses. 0 will disable the feature." +msgstr "The maximum number of pinned statuses. 0 will disable the feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_remote_account_fields" +msgid "The maximum number of custom fields in the remote user profile. Default: 20." +msgstr "" +"The maximum number of custom fields in the remote user profile. Default: 20." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :max_report_comment_size" +msgid "The maximum size of the report comment. Default: 1000." +msgstr "The maximum size of the report comment. Default: 1000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi-factor authentication settings" +msgstr "Multi-factor authentication settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "MFA backup codes settings" +msgstr "MFA backup codes settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Determines the length of backup one-time pass-codes, in characters. Defaults to 16 characters." +msgstr "" +"Determines the length of backup one-time pass-codes, in characters. Defaults " +"to 16 characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number of backup codes to generate." +msgstr "Number of backup codes to generate." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Determines the length of a one-time pass-code, in characters. Defaults to 6 characters." +msgstr "" +"Determines the length of a one-time pass-code, in characters. Defaults to 6 " +"characters." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "A period for which the TOTP code will be valid, in seconds. Defaults to 30 seconds." +msgstr "" +"A period for which the TOTP code will be valid, in seconds. Defaults to 30 " +"seconds." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :name" +msgid "Name of the instance" +msgstr "Name of the instance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :notify_email" +msgid "Envelope FROM address for mail sent via Pleroma" +msgstr "Envelope FROM address for mail sent via Pleroma" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits" +msgid "A map with poll limits for local polls" +msgstr "A map with poll limits for local polls" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Maximum expiration time (in seconds)" +msgstr "Maximum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Maximum number of characters per option" +msgstr "Maximum number of characters per option" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :max_options" +msgid "Maximum number of options" +msgstr "Maximum number of options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Minimum expiration time (in seconds)" +msgstr "Minimum expiration time (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :privileged_staff" +msgid "Let moderators access sensitive data (e.g. updating user credentials, get password reset token, delete users, index and read private statuses and chats)" +msgstr "" +"Let moderators access sensitive data (e.g. updating user credentials, get " +"password reset token, delete users, index and read private statuses and " +"chats)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :profile_directory" +msgid "Enable profile directory." +msgstr "Enable profile directory." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :public" +msgid "Makes the client API in authenticated mode-only except for user-profiles. Useful for disabling the Local Timeline and The Whole Known Network. Note: when setting to `false`, please also check `:restrict_unauthenticated` setting." +msgstr "" +"Makes the client API in authenticated mode-only except for user-profiles. " +"Useful for disabling the Local Timeline and The Whole Known Network. Note: " +"when setting to `false`, please also check `:restrict_unauthenticated` " +"setting." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :quarantined_instances" +msgid "List of ActivityPub instances where private (DMs, followers-only) activities will not be sent and the reason for doing so" +msgstr "" +"List of ActivityPub instances where private (DMs, followers-only) activities " +"will not be sent and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registration_reason_length" +msgid "Maximum registration reason length. Default: 500." +msgstr "Maximum registration reason length. Default: 500." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :registrations_open" +msgid "Enable registrations for anyone. Invitations require this setting to be disabled." +msgstr "" +"Enable registrations for anyone. Invitations require this setting to be " +"disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_limit" +msgid "Hard character limit beyond which remote posts will be dropped" +msgstr "Hard character limit beyond which remote posts will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :remote_post_retention_days" +msgid "The default amount of days to retain remote posts when pruning the database" +msgstr "" +"The default amount of days to retain remote posts when pruning the database" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :safe_dm_mentions" +msgid "If enabled, only mentions at the beginning of a post will be used to address people in direct messages. This is to prevent accidental mentioning of people when talking about them (e.g. \"@admin please keep an eye on @bad_actor\"). Default: disabled" +msgstr "" +"If enabled, only mentions at the beginning of a post will be used to address " +"people in direct messages. This is to prevent accidental mentioning of " +"people when talking about them (e.g. \"@admin please keep an eye on @" +"bad_actor\"). Default: disabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :show_reactions" +msgid "Let favourites and emoji reactions be viewed through the API." +msgstr "Let favourites and emoji reactions be viewed through the API." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :skip_thread_containment" +msgid "Skip filtering out broken threads. Default: enabled." +msgstr "Skip filtering out broken threads. Default: enabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :static_dir" +msgid "Instance static directory" +msgstr "Instance static directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :upload_limit" +msgid "File size limit of uploads (except for avatar, background, banner)" +msgstr "File size limit of uploads (except for avatar, background, banner)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_bio_length" +msgid "A user bio maximum length. Default: 5000." +msgstr "A user bio maximum length. Default: 5000." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :user_name_length" +msgid "A user name maximum length. Default: 100." +msgstr "A user name maximum length. Default: 100." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instances_favicons > :enabled" +msgid "Allow/disallow displaying and getting instances favicons" +msgstr "Allow/disallow displaying and getting instances favicons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :base" +msgid "LDAP base, e.g. \"dc=example,dc=com\"" +msgstr "LDAP base, e.g. \"dc=example,dc=com\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :enabled" +msgid "Enables LDAP authentication" +msgstr "Enables LDAP authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :host" +msgid "LDAP server hostname" +msgstr "LDAP server hostname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :port" +msgid "LDAP port, e.g. 389 or 636" +msgstr "LDAP port, e.g. 389 or 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :ssl" +msgid "Enable to use SSL, usually implies the port 636" +msgstr "Enable to use SSL, usually implies the port 636" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts" +msgid "Additional SSL options" +msgstr "Additional SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :sslopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tls" +msgid "Enable to use STARTTLS, usually implies the port 389" +msgstr "Enable to use STARTTLS, usually implies the port 389" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts" +msgid "Additional TLS options" +msgstr "Additional TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Path to file with PEM encoded cacerts" +msgstr "Path to file with PEM encoded cacerts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :tlsopts > :verify" +msgid "Type of cert verification" +msgstr "Type of cert verification" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:ldap > :uid" +msgid "LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter will be \"cn=username,base\"" +msgstr "" +"LDAP attribute name to authenticate the user, e.g. when \"cn\", the filter " +"will be \"cn=username,base\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:majic_pool > :size" +msgid "Number of majic workers to start." +msgstr "Number of majic workers to start." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :background_color" +msgid "Describe the background color of the app" +msgstr "Describe the background color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :icons" +msgid "Describe the icons of the app" +msgstr "Describe the icons of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:manifest > :theme_color" +msgid "Describe the theme color of the app" +msgstr "Describe the theme color of the app" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:markup > :scrub_policy" +msgid "Module names are shortened (removed leading `Pleroma.HTML.` part), but on adding custom module you need to use full name." +msgstr "" +"Module names are shortened (removed leading `Pleroma.HTML.` part), but on " +"adding custom module you need to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :enabled" +msgid "Enables proxying of remote media preview to the instance's proxy. Requires enabled media proxy." +msgstr "" +"Enables proxying of remote media preview to the instance's proxy. Requires " +"enabled media proxy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :image_quality" +msgid "Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." +msgstr "" +"Quality of the output. Ranges from 0 (min quality) to 100 (max quality)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length (in bytes) to perform preview. Media smaller in size will be served without thumbnailing." +msgstr "" +"Min content length (in bytes) to perform preview. Media smaller in size will " +"be served without thumbnailing." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Max height of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max height of preview thumbnail for images (video preview always has " +"original dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Max width of preview thumbnail for images (video preview always has original dimensions)." +msgstr "" +"Max width of preview thumbnail for images (video preview always has original " +"dimensions)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :base_url" +msgid "The base URL to access a user-uploaded file. Useful when you want to proxy the media files via another host/CDN fronts." +msgstr "" +"The base URL to access a user-uploaded file. Useful when you want to proxy " +"the media files via another host/CDN fronts." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :enabled" +msgid "Enables proxying of remote media via the instance's proxy" +msgstr "Enables proxying of remote media via the instance's proxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enables media cache object invalidation." +msgstr "Enables media cache object invalidation." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Module which will be used to purge objects from the cache." +msgstr "Module which will be used to purge objects from the cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts" +msgid "Internal Pleroma.ReverseProxy settings" +msgstr "Internal Pleroma.ReverseProxy settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." +msgstr "" +"Maximum file size (in bytes) allowed through the Pleroma MediaProxy cache." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Timeout (in milliseconds) of GET request to the remote URI." +msgstr "Timeout (in milliseconds) of GET request to the remote URI." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirects the client to the origin server upon encountering HTTP errors.\n\nNote that files larger than Max Body Length will trigger an error. (e.g., Peertube videos)\n\n\n**WARNING:** This setting will allow larger files to be accessed, but exposes the\n\nIP addresses of your users to the other servers, bypassing the MediaProxy.\n" +msgstr "" +"Redirects the client to the origin server upon encountering HTTP errors.\n" +"\n" +"Note that files larger than Max Body Length will trigger an error. (e.g., " +"Peertube videos)\n" +"\n" +"\n" +"**WARNING:** This setting will allow larger files to be accessed, but " +"exposes the\n" +"\n" +"IP addresses of your users to the other servers, bypassing the MediaProxy.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:media_proxy > :whitelist" +msgid "List of hosts with scheme to bypass the MediaProxy" +msgstr "List of hosts with scheme to bypass the MediaProxy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:modules > :runtime_dir" +msgid "A path to custom Elixir modules (such as MRF policies)." +msgstr "A path to custom Elixir modules (such as MRF policies)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :policies" +msgid "A list of MRF policies enabled. Module names are shortened (removed leading `Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need to use full name." +msgstr "" +"A list of MRF policies enabled. Module names are shortened (removed leading " +"`Pleroma.Web.ActivityPub.MRF.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency" +msgid "Make the content of your Message Rewrite Facility settings public (via nodeinfo)" +msgstr "" +"Make the content of your Message Rewrite Facility settings public (via " +"nodeinfo)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf > :transparency_exclusions" +msgid "Exclude specific instance names from MRF transparency. The use of the exclusions feature will be disclosed in nodeinfo as a boolean value. You can also provide a reason for excluding these instance names. The instances and reasons won't be publicly disclosed." +msgstr "" +"Exclude specific instance names from MRF transparency. The use of the " +"exclusions feature will be disclosed in nodeinfo as a boolean value. You can " +"also provide a reason for excluding these instance names. The instances and " +"reasons won't be publicly disclosed." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_activity_expiration > :days" +msgid "Default global expiration time for all local activities (in days)" +msgstr "Default global expiration time for all local activities (in days)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "The name of the bot account to use for following newly discovered users." +msgstr "" +"The name of the bot account to use for following newly discovered users." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "A list of hashtags which result in message being removed from federated timelines (a.k.a unlisted)." +msgstr "" +"A list of hashtags which result in message being removed from federated " +"timelines (a.k.a unlisted)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :reject" +msgid "A list of hashtags which result in message being rejected." +msgstr "A list of hashtags which result in message being rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hashtag > :sensitive" +msgid "A list of hashtags which result in message being set as sensitive (a.k.a NSFW/R-18)" +msgstr "" +"A list of hashtags which result in message being set as sensitive (a.k.a " +"NSFW/R-18)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Number of mentioned users after which the message gets removed from timelines anddisables notifications. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the message gets removed from " +"timelines anddisables notifications. Set to 0 to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Number of mentioned users after which the messaged gets rejected. Set to 0 to disable." +msgstr "" +"Number of mentioned users after which the messaged gets rejected. Set to 0 " +"to disable." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid " A list of patterns which result in message being removed from federated timelines (a.k.a unlisted).\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being removed from federated " +"timelines (a.k.a unlisted).\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :reject" +msgid " A list of patterns which result in message being rejected.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns which result in message being rejected.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_keyword > :replace" +msgid " **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n\n **Replacement**: a string. Leaving the field empty is permitted.\n" +msgstr "" +" **Pattern**: a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in " +"the format of `~r/PATTERN/`.\n" +"\n" +" **Replacement**: a string. Leaving the field empty is permitted.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_mention > :actors" +msgid "A list of actors for which any post mentioning them will be dropped" +msgstr "A list of actors for which any post mentioning them will be dropped" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :actions" +msgid "A list of actions to apply to the post. `:delist` removes the post from public timelines; `:strip_followers` removes followers from the ActivityPub recipient list ensuring they won't be delivered to home timelines; `:reject` rejects the message entirely" +msgstr "" +"A list of actions to apply to the post. `:delist` removes the post from " +"public timelines; `:strip_followers` removes followers from the ActivityPub " +"recipient list ensuring they won't be delivered to home timelines; `:reject` " +"rejects the message entirely" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_object_age > :threshold" +msgid "Required age (in seconds) of a post before actions are taken." +msgstr "Required age (in seconds) of a post before actions are taken." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Whether to allow direct messages" +msgstr "Whether to allow direct messages" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Whether to allow followers-only posts" +msgstr "Whether to allow followers-only posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :accept" +msgid "List of instances to only accept activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to only accept activities from (except deletes) and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :avatar_removal" +msgid "List of instances to strip avatars from and the reason for doing so" +msgstr "List of instances to strip avatars from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :banner_removal" +msgid "List of instances to strip banners from and the reason for doing so" +msgstr "List of instances to strip banners from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "List of instances to remove from the Federated (aka The Whole Known Network) Timeline and the reason for doing so" +msgstr "" +"List of instances to remove from the Federated (aka The Whole Known Network) " +"Timeline and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :followers_only" +msgid "Force posts from the given instances to be visible by followers only and the reason for doing so" +msgstr "" +"Force posts from the given instances to be visible by followers only and the " +"reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_nsfw" +msgid "List of instances to tag all media as NSFW (sensitive) from and the reason for doing so" +msgstr "" +"List of instances to tag all media as NSFW (sensitive) from and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :media_removal" +msgid "List of instances to strip media attachments from and the reason for doing so" +msgstr "" +"List of instances to strip media attachments from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject" +msgid "List of instances to reject activities from (except deletes) and the reason for doing so" +msgstr "" +"List of instances to reject activities from (except deletes) and the reason " +"for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :reject_deletes" +msgid "List of instances to reject deletions from and the reason for doing so" +msgstr "List of instances to reject deletions from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_simple > :report_removal" +msgid "List of instances to reject reports from and the reason for doing so" +msgstr "List of instances to reject reports from and the reason for doing so" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :hosts" +msgid "List of hosts to steal emojis from" +msgstr "List of hosts to steal emojis from" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid " A list of patterns or matches to reject shortcodes with.\n\n Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex.html) in the format of `~r/PATTERN/`.\n" +msgstr "" +" A list of patterns or matches to reject shortcodes with.\n" +"\n" +" Each pattern can be a string or [Regex](https://hexdocs.pm/elixir/Regex." +"html) in the format of `~r/PATTERN/`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "File size limit (in bytes), checked before an emoji is saved to the disk" +msgstr "" +"File size limit (in bytes), checked before an emoji is saved to the disk" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_subchain > :match_actor" +msgid "Matches a series of regular expressions against the actor field" +msgstr "Matches a series of regular expressions against the actor field" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :accept" +msgid "A list of ActivityStreams terms to accept. If empty, all supported messages are accepted." +msgstr "" +"A list of ActivityStreams terms to accept. If empty, all supported messages " +"are accepted." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:mrf_vocabulary > :reject" +msgid "A list of ActivityStreams terms to reject. If empty, no messages are rejected." +msgstr "" +"A list of ActivityStreams terms to reject. If empty, no messages are " +"rejected." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Enable a background job to clean expired OAuth tokens. Default: disabled." +msgstr "" +"Enable a background job to clean expired OAuth tokens. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Keeps old refresh token or generate new refresh token when to obtain an access token" +msgstr "" +"Keeps old refresh token or generate new refresh token when to obtain an " +"access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:oauth2 > :token_expires_in" +msgid "The lifetime in seconds of the access token" +msgstr "The lifetime in seconds of the access token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default" +msgid "Settings for default pool." +msgstr "Settings for default pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :default > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation" +msgid "Settings for federation pool." +msgstr "Settings for federation pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :federation > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media" +msgid "Settings for media pool." +msgstr "Settings for media pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :media > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload" +msgid "Settings for upload pool." +msgstr "Settings for upload pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :max_waiting" +msgid "Maximum number of requests waiting for other requests to finish. After this number is reached, the pool will start returning errrors when a new request is made" +msgstr "" +"Maximum number of requests waiting for other requests to finish. After this " +"number is reached, the pool will start returning errrors when a new request " +"is made" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :recv_timeout" +msgid "Timeout for the pool while gun will wait for response" +msgstr "Timeout for the pool while gun will wait for response" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:pools > :upload > :size" +msgid "Maximum number of concurrent requests in the pool." +msgstr "Maximum number of concurrent requests in the pool." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Max accepted rate of objects that failed in the migration. Any value from 0.0 which tolerates no errors to 1.0 which will enable the feature even if hashtags transfer failed for all records." +msgstr "" +"Max accepted rate of objects that failed in the migration. Any value from " +"0.0 which tolerates no errors to 1.0 which will enable the feature even if " +"hashtags transfer failed for all records." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval between each chunk of processed records in order to decrease the load on the system (defaults to 0 and should be keep default on most instances)." +msgstr "" +"Sleep interval between each chunk of processed records in order to decrease " +"the load on the system (defaults to 0 and should be keep default on most " +"instances)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :app_account_creation" +msgid "For registering user accounts from the same IP address" +msgstr "For registering user accounts from the same IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :authentication" +msgid "For authentication create / password check / user existence check requests" +msgstr "" +"For authentication create / password check / user existence check requests" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relation_id_action" +msgid "For actions on relation with a specific user (follow, unfollow)" +msgstr "For actions on relation with a specific user (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :relations_actions" +msgid "For actions on relationships with all users (follow, unfollow)" +msgstr "For actions on relationships with all users (follow, unfollow)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :search" +msgid "For the search requests (account & status search etc.)" +msgstr "For the search requests (account & status search etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :status_id_action" +msgid "For fav / unfav or reblog / unreblog actions on the same status by the same user" +msgstr "" +"For fav / unfav or reblog / unreblog actions on the same status by the same " +"user" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :statuses_actions" +msgid "For create / delete / fav / unfav / reblog / unreblog actions on any statuses" +msgstr "" +"For create / delete / fav / unfav / reblog / unreblog actions on any statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rate_limit > :timeline" +msgid "For requests to timelines (each timeline has it's own limiter)" +msgstr "For requests to timelines (each timeline has it's own limiter)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities" +msgid "Settings for statuses." +msgstr "Settings for statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Disallow view local statuses." +msgstr "Disallow view local statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Disallow view remote statuses." +msgstr "Disallow view remote statuses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Settings for user profiles." +msgstr "Settings for user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Disallow view local user profiles." +msgstr "Disallow view local user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Disallow view remote user profiles." +msgstr "Disallow view remote user profiles." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Settings for public and federated timelines." +msgstr "Settings for public and federated timelines." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Disallow view federated timeline." +msgstr "Disallow view federated timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Disallow view public timeline." +msgstr "Disallow view public timeline." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :enabled" +msgid "Enables RichMedia parsing of URLs" +msgstr "Enables RichMedia parsing of URLs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :failure_backoff" +msgid "Amount of milliseconds after request failure, during which the request will not be retried." +msgstr "" +"Amount of milliseconds after request failure, during which the request will " +"not be retried." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_hosts" +msgid "List of hosts which will be ignored by the metadata parser" +msgstr "List of hosts which will be ignored by the metadata parser" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ignore_tld" +msgid "List TLDs (top-level domains) which will ignore for parse metadata" +msgstr "List TLDs (top-level domains) which will ignore for parse metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :parsers" +msgid "List of Rich Media parsers. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need to use full name." +msgstr "" +"List of Rich Media parsers. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parsers.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:rich_media > :ttl_setters" +msgid "List of rich media TTL setters. Module names are shortened (removed leading `Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need to use full name." +msgstr "" +"List of rich media TTL setters. Module names are shortened (removed leading " +"`Pleroma.Web.RichMedia.Parser.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :enabled" +msgid "Enables the backend Shoutbox chat feature." +msgstr "Enables the backend Shoutbox chat feature." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:shout > :limit" +msgid "Shout message character limit." +msgstr "Shout message character limit." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:static_fe > :enabled" +msgid "Enables the rendering of static HTML. Default: disabled." +msgstr "Enables the rendering of static HTML. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :overflow_workers" +msgid "Maximum number of workers created if pool is empty" +msgstr "Maximum number of workers created if pool is empty" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:streamer > :workers" +msgid "Number of workers to send notifications" +msgstr "Number of workers to send notifications" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:uri_schemes > :valid_schemes" +msgid "List of the scheme part that is considered valid to be an URL" +msgstr "List of the scheme part that is considered valid to be an URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub routes (except question activities). Default: `nil` (no expiration)." +msgstr "" +"Activity pub routes (except question activities). Default: `nil` (no " +"expiration)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub routes (question activities). Default: `30_000` (30 seconds)." +msgstr "" +"Activity pub routes (question activities). Default: `30_000` (30 seconds)." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enables sending a chat message to newly registered users" +msgstr "Enables sending a chat message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :message" +msgid "A message that will be sent to newly registered users as a chat message" +msgstr "A message that will be sent to newly registered users as a chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome chat message" +msgstr "The nickname of the local user that sends a welcome chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enables sending a direct message to newly registered users" +msgstr "Enables sending a direct message to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :message" +msgid "A message that will be sent to newly registered users" +msgstr "A message that will be sent to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "The nickname of the local user that sends a welcome message" +msgstr "The nickname of the local user that sends a welcome message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :enabled" +msgid "Enables sending an email to newly registered users" +msgstr "Enables sending an email to newly registered users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :html" +msgid "HTML content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"HTML content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :sender" +msgid "Email address and/or nickname that will be used to send the welcome email." +msgstr "" +"Email address and/or nickname that will be used to send the welcome email." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :subject" +msgid "Subject of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Subject of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:welcome > :email > :text" +msgid "Text content of the welcome email. EEX template with user and instance_name variables can be used." +msgstr "" +"Text content of the welcome email. EEX template with user and instance_name " +"variables can be used." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:workers > :retries" +msgid "Max retry attempts for failed jobs, per `Oban` queue" +msgstr "Max retry attempts for failed jobs, per `Oban` queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Concurrent limits configuration for MediaProxyWarmingPolicy." +msgstr "Concurrent limits configuration for MediaProxyWarmingPolicy." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Concurrent limits configuration for getting RichMedia for activities." +msgstr "Concurrent limits configuration for getting RichMedia for activities." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running concurrently jobs." +msgstr "Max running concurrently jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting jobs." +msgstr "Max waiting jobs." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :crontab" +msgid "Settings for cron background jobs" +msgstr "Settings for cron background jobs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :log" +msgid "Logs verbose mode" +msgstr "Logs verbose mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues" +msgid "Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" +msgstr "" +"Background jobs queues (keys: queues, values: max numbers of concurrent jobs)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration queue" +msgstr "Activity expiration queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachment deletion queue" +msgstr "Attachment deletion queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :background" +msgid "Background queue" +msgstr "Background queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :backup" +msgid "Backup queue" +msgstr "Backup queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_incoming" +msgid "Incoming federation queue" +msgstr "Incoming federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Outgoing federation queue" +msgstr "Outgoing federation queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :mailer" +msgid "Email sender queue, see Pleroma.Emails.Mailer" +msgstr "Email sender queue, see Pleroma.Emails.Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities queue, see Pleroma.ScheduledActivities" +msgstr "Scheduled activities queue, see Pleroma.ScheduledActivities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier queue" +msgstr "Transmogrifier queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Oban > :queues > :web_push" +msgid "Web push notifications queue" +msgstr "Web push notifications queue" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :enabled" +msgid "Whether the captcha should be shown on registration" +msgstr "Whether the captcha should be shown on registration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :method" +msgid "The method/service to use for captcha" +msgstr "The method/service to use for captcha" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "The time in seconds for which the captcha is valid" +msgstr "The time in seconds for which the captcha is valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "The kocaptcha endpoint to use" +msgstr "The kocaptcha endpoint to use" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/swoosh/Swoosh.html#module-adapters)" +msgstr "" +"One of the mail adapters listed in [Swoosh documentation](https://hexdocs.pm/" +"swoosh/Swoosh.html#module-adapters)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "SMTP AUTH enforcement mode" +msgstr "SMTP AUTH enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "SMTP AUTH password" +msgstr "SMTP AUTH password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "SMTP port" +msgstr "SMTP port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Hostname or IP address" +msgstr "Hostname or IP address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "SMTP temporary (4xx) error retries" +msgstr "SMTP temporary (4xx) error retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use Implicit SSL/TLS. e.g. port 465" +msgstr "Use Implicit SSL/TLS. e.g. port 465" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "Explicit TLS (STARTTLS) enforcement mode" +msgstr "Explicit TLS (STARTTLS) enforcement mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "SMTP AUTH username" +msgstr "SMTP AUTH username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enables new users admin digest email when `true`" +msgstr "Enables new users admin digest email when `true`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "A path to a custom logo. Set it to `nil` to use the default Pleroma logo." +msgstr "" +"A path to a custom logo. Set it to `nil` to use the default Pleroma logo." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "A map with color settings for email templates." +msgstr "A map with color settings for email templates." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :class" +msgid "Specify the class to be added to the generated link. Disable to clear." +msgstr "Specify the class to be added to the generated link. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :extra" +msgid "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" +msgstr "Link URLs with rarely used schemes (magnet, ipfs, irc, etc.)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :new_window" +msgid "Link URLs will open in a new window/tab." +msgstr "Link URLs will open in a new window/tab." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :rel" +msgid "Override the rel attribute. Disable to clear." +msgstr "Override the rel attribute. Disable to clear." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip the scheme prefix." +msgstr "Strip the scheme prefix." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :truncate" +msgid "Set to a number to truncate URLs longer than the number. Truncated URLs will end in `...`" +msgstr "" +"Set to a number to truncate URLs longer than the number. Truncated URLs will " +"end in `...`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Set to false to disable TLD validation for URLs/emails. Can be set to :no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` will be validated, but `http://example.loki` won't)" +msgstr "" +"Set to false to disable TLD validation for URLs/emails. Can be set to :" +"no_scheme to validate TLDs only for URLs without a scheme (e.g `example.com` " +"will be validated, but `http://example.loki` won't)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "The number of scheduled activities a user is allowed to create in a single day. Default: 25." +msgstr "" +"The number of scheduled activities a user is allowed to create in a single " +"day. Default: 25." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Whether scheduled activities are sent to the job queue to be executed" +msgstr "Whether scheduled activities are sent to the job queue to be executed" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "The number of scheduled activities a user is allowed to create in total. Default: 300." +msgstr "" +"The number of scheduled activities a user is allowed to create in total. " +"Default: 300." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL for the uploads. Required if you use a CDN or host attachments under a different domain." +msgstr "" +"Base URL for the uploads. Required if you use a CDN or host attachments " +"under a different domain." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Set max length of a filename to display. 0 = no limit. Default: 30" +msgstr "Set max length of a filename to display. 0 = no limit. Default: 30" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :filters" +msgid "List of filter modules for uploads. Module names are shortened (removed leading `Pleroma.Upload.Filter.` part), but on adding custom module you need to use full name." +msgstr "" +"List of filter modules for uploads. Module names are shortened (removed " +"leading `Pleroma.Upload.Filter.` part), but on adding custom module you need " +"to use full name." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :link_name" +msgid "If enabled, a name parameter will be added to the URL of the upload. For example `https://instance.tld/media/imagehash.png?name=realname.png`." +msgstr "" +"If enabled, a name parameter will be added to the URL of the upload. For " +"example `https://instance.tld/media/imagehash.png?name=realname.png`." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy requests to the remote uploader.\n\nUseful if media upload endpoint is not internet accessible.\n" +msgstr "" +"Proxy requests to the remote uploader.\n" +"\n" +"Useful if media upload endpoint is not internet accessible.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload > :uploader" +msgid "Module which will be used for uploads" +msgstr "Module which will be used for uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text to replace filenames in links. If no setting, {random}.extension will be used. You can get the original filename extension by using {extension}, for example custom-file-name.{extension}." +msgstr "" +"Text to replace filenames in links. If no setting, {random}.extension will " +"be used. You can get the original filename extension by using {extension}, " +"for example custom-file-name.{extension}." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "List of actions for the mogrify command. It's possible to add self-written settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080>\"}` value will be parsed into valid list of the settings." +msgstr "" +"List of actions for the mogrify command. It's possible to add self-written " +"settings as string. For example `auto-orient, strip, {\"resize\", \"3840x1080" +">\"}` value will be parsed into valid list of the settings." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Path where user's uploads will be saved" +msgstr "Path where user's uploads will be saved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "S3 bucket" +msgstr "S3 bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "S3 bucket namespace" +msgstr "S3 bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Enable streaming uploads, when enabled the file will be sent to the server in chunks as it's being read. This may be unsupported by some providers, try disabling this if you have upload problems." +msgstr "" +"Enable streaming uploads, when enabled the file will be sent to the server " +"in chunks as it's being read. This may be unsupported by some providers, try " +"disabling this if you have upload problems." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "If you use S3 compatible service such as Digital Ocean Spaces or CDN, set folder name or \"\" etc. For example, when using CDN to S3 virtual host format, set \"\". At this time, write CNAME to CDN in Upload base_url." +msgstr "" +"If you use S3 compatible service such as Digital Ocean Spaces or CDN, set " +"folder name or \"\" etc. For example, when using CDN to S3 virtual host " +"format, set \"\". At this time, write CNAME to CDN in Upload base_url." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :email_blacklist" +msgid "List of email domains users may not register with." +msgstr "List of email domains users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "List of nicknames users may not register with." +msgstr "List of nicknames users may not register with." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit user to export not more often than once per N days" +msgstr "Limit user to export not more often than once per N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Remove backup achives after N days" +msgstr "Remove backup achives after N days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Enables strict input validation (useful in development, not recommended in production)" +msgstr "" +"Enables strict input validation (useful in development, not recommended in " +"production)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "HTTP headers of request" +msgstr "HTTP headers of request" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "HTTP method of request. Default: :purge" +msgstr "HTTP method of request. Default: :purge" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Request options" +msgstr "Request options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Path to executable script which will purge cached items." +msgstr "Path to executable script which will purge cached items." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "Optional URL format preprocessing. Only required for Apache's htcacheclean." +msgstr "" +"Optional URL format preprocessing. Only required for Apache's htcacheclean." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "List of metadata providers to enable" +msgstr "List of metadata providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "When enabled NSFW attachments will be shown in previews" +msgstr "When enabled NSFW attachments will be shown in previews" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enable/disable the plug. Default: disabled." +msgstr "Enable/disable the plug. Default: disabled." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid " A list of strings naming the HTTP headers to use when deriving the true client IP. Default: `[\"x-forwarded-for\"]`.\n" +msgstr "" +" A list of strings naming the HTTP headers to use when deriving the true " +"client IP. Default: `[\"x-forwarded-for\"]`.\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "A list of upstream proxy IP subnets in CIDR notation from which we will parse the content of `headers`. Defaults to `[]`. IPv4 entries without a bitmask will be assumed to be /32 and IPv6 /128." +msgstr "" +"A list of upstream proxy IP subnets in CIDR notation from which we will " +"parse the content of `headers`. Defaults to `[]`. IPv4 entries without a " +"bitmask will be assumed to be /32 and IPv6 /128." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid " A list of reserved IP subnets in CIDR notation which should be ignored if found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" +msgstr "" +" A list of reserved IP subnets in CIDR notation which should be ignored if " +"found in `headers`. Defaults to `[\"127.0.0.0/8\", \"::1/128\", \"fc00::/7\"" +", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"]`\n" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Web.Preload > :providers" +msgid "List of preload providers to enable" +msgstr "List of preload providers to enable" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enables expired activities addition & deletion" +msgstr "Enables expired activities addition & deletion" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Minimum lifetime for ephemeral activity (in seconds)" +msgstr "Minimum lifetime for ephemeral activity (in seconds)" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Enables HTTP Basic Auth for app metrics endpoint." +msgstr "Enables HTTP Basic Auth for app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "[Pleroma extension] Enables app metrics endpoint." +msgstr "[Pleroma extension] Enables app metrics endpoint." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "App metrics endpoint output format." +msgstr "App metrics endpoint output format." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "Restrict access of app metrics endpoint to the specified IP addresses." +msgstr "Restrict access of app metrics endpoint to the specified IP addresses." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "App metrics endpoint URI path." +msgstr "App metrics endpoint URI path." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :level" +msgid "Log level" +msgstr "Log level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :meta" +msgid "Configure which metadata you want to report on" +msgstr "Configure which metadata you want to report on" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :quack > :webhook_url" +msgid "Configure the Slack incoming webhook" +msgstr "Configure the Slack incoming webhook" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :private_key" +msgid "VAPID private key" +msgstr "VAPID private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :public_key" +msgid "VAPID public key" +msgstr "VAPID public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :web_push_encryption-:vapid_details > :subject" +msgid "A mailto link for the administrative contact. It's best if this email is not a personal email address, but rather a group email to the instance moderation team." +msgstr "" +"A mailto link for the administrative contact. It's best if this email is not " +"a personal email address, but rather a group email to the instance " +"moderation team." + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :credentials" +msgid "Credentials" +msgstr "Credentials" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :expose" +msgid "Expose" +msgstr "Expose" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :max_age" +msgid "Max age" +msgstr "Max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :cors_plug > :methods" +msgid "Methods" +msgstr "Methods" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :handler" +msgid "Handler" +msgstr "Handler" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :password_authenticator" +msgid "Password authenticator" +msgstr "Password authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :esshd > :priv_dir" +msgid "Priv dir" +msgstr "Priv dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :access_key_id" +msgid "Access key" +msgstr "Access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :region" +msgid "Region" +msgstr "Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :ex_aws-:s3 > :secret_access_key" +msgid "Secret access key" +msgstr "Secret access key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger > :backends" +msgid "Backends" +msgstr "Backends" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:console > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :ident" +msgid "Ident" +msgstr "Ident" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :logger-:ex_syslogger > :metadata" +msgid "Metadata" +msgstr "Metadata" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types" +msgid "Types" +msgstr "Types" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/activity+json" +msgid "\"application/activity+json\"" +msgstr "\"application/activity+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/jrd+json" +msgid "\"application/jrd+json\"" +msgstr "\"application/jrd+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/ld+json" +msgid "\"application/ld+json\"" +msgstr "\"application/ld+json\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xml" +msgid "\"application/xml\"" +msgstr "\"application/xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :mime > :types > application/xrd+xml" +msgid "\"application/xrd+xml\"" +msgstr "\"application/xrd+xml\"" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > :admin_token" +msgid "Admin token" +msgstr "Admin token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma > Pleroma.Web.Auth.Authenticator" +msgid "Pleroma.Web.Auth.Authenticator" +msgstr "Pleroma.Web.Auth.Authenticator" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :blockers_visible" +msgid "Blockers visible" +msgstr "Blockers visible" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :follow_handshake_timeout" +msgid "Follow handshake timeout" +msgstr "Follow handshake timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :note_replies_output_limit" +msgid "Note replies output limit" +msgstr "Note replies output limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :outgoing_blocks" +msgid "Outgoing blocks" +msgstr "Outgoing blocks" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :sign_object_fetches" +msgid "Sign object fetches" +msgstr "Sign object fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :unfollow_blocked" +msgid "Unfollow blocked" +msgstr "Unfollow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_mascot" +msgid "Default mascot" +msgstr "Default mascot" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :default_user_avatar" +msgid "Default user avatar" +msgstr "Default user avatar" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:assets > :mascots" +msgid "Mascots" +msgstr "Mascots" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :auth_template" +msgid "Auth template" +msgstr "Auth template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :enforce_oauth_admin_scope_usage" +msgid "Enforce OAuth admin scope usage" +msgstr "Enforce OAuth admin scope usage" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_strategies" +msgid "OAuth consumer strategies" +msgstr "OAuth consumer strategies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:auth > :oauth_consumer_template" +msgid "OAuth consumer template" +msgstr "OAuth consumer template" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connect_timeout" +msgid "Connect timeout" +msgstr "Connect timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_retries" +msgid "Connection acquisition retries" +msgstr "Connection acquisition retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :connection_acquisition_wait" +msgid "Connection acquisition wait" +msgstr "Connection acquisition wait" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:connections_pool > :reclaim_multiplier" +msgid "Reclaim multiplier" +msgstr "Reclaim multiplier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest" +msgid "Digest" +msgstr "Digest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :active" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :inactivity_threshold" +msgid "Inactivity threshold" +msgstr "Inactivity threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :interval" +msgid "Interval" +msgstr "Interval" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:email_notifications > :digest > :schedule" +msgid "Schedule" +msgstr "Schedule" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :default_manifest" +msgid "Default manifest" +msgstr "Default manifest" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :groups" +msgid "Groups" +msgstr "Groups" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :pack_extensions" +msgid "Pack extensions" +msgstr "Pack extensions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shared_pack_cache_seconds_per_file" +msgid "Shared pack cache s/file" +msgstr "Shared pack cache s/file" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:emoji > :shortcode_globs" +msgid "Shortcode globs" +msgstr "Shortcode globs" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:features > :improved_hashtag_timeline" +msgid "Improved hashtag timeline" +msgstr "Improved hashtag timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title" +msgid "Post title" +msgstr "Post title" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :max_length" +msgid "Max length" +msgstr "Max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:feed > :post_title > :omission" +msgid "Omission" +msgstr "Omission" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe" +msgid "Pleroma FE" +msgstr "Pleroma FE" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :alwaysShowSubjectInput" +msgid "Always show subject input" +msgstr "Always show subject input" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :collapseMessageWithSubject" +msgid "Collapse message with subject" +msgstr "Collapse message with subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :greentext" +msgid "Greentext" +msgstr "Greentext" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideFilteredStatuses" +msgid "Hide Filtered Statuses" +msgstr "Hide Filtered Statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideMutedPosts" +msgid "Hide Muted Posts" +msgstr "Hide Muted Posts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hidePostStats" +msgid "Hide post stats" +msgstr "Hide post stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideSitename" +msgid "Hide Sitename" +msgstr "Hide Sitename" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :hideUserStats" +msgid "Hide user stats" +msgstr "Hide user stats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMargin" +msgid "Logo margin" +msgstr "Logo margin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :logoMask" +msgid "Logo mask" +msgstr "Logo mask" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :minimalScopesMode" +msgid "Minimal scopes mode" +msgstr "Minimal scopes mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :nsfwCensorImage" +msgid "NSFW Censor Image" +msgstr "NSFW Censor Image" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :postContentType" +msgid "Post Content Type" +msgstr "Post Content Type" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootLogin" +msgid "Redirect root login" +msgstr "Redirect root login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :redirectRootNoLogin" +msgid "Redirect root no login" +msgstr "Redirect root no login" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :scopeCopy" +msgid "Scope copy" +msgstr "Scope copy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showFeaturesPanel" +msgid "Show instance features panel" +msgstr "Show instance features panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :showInstanceSpecificPanel" +msgid "Show instance specific panel" +msgstr "Show instance specific panel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :sidebarRight" +msgid "Sidebar on Right" +msgstr "Sidebar on Right" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :subjectLineBehavior" +msgid "Subject line behavior" +msgstr "Subject line behavior" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontend_configurations > :pleroma_fe > :theme" +msgid "Theme" +msgstr "Theme" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin" +msgid "Admin" +msgstr "Admin" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :admin > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available" +msgid "Available" +msgstr "Available" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_dir" +msgid "Build directory" +msgstr "Build directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > build_url" +msgid "Build URL" +msgstr "Build URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > custom-http-headers" +msgid "Custom HTTP headers" +msgstr "Custom HTTP headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > git" +msgid "Git Repository URL" +msgstr "Git Repository URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :available > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary" +msgid "Primary" +msgstr "Primary" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:frontends > :primary > ref" +msgid "Reference" +msgstr "Reference" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :dstport" +msgid "Dstport" +msgstr "Dstport" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :ip" +msgid "IP" +msgstr "IP" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:gopher > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :federation > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :media > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :max_connections" +msgid "Max connections" +msgstr "Max connections" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:hackney_pools > :upload > :timeout" +msgid "Timeout" +msgstr "Timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options" +msgid "SSL Options" +msgstr "SSL Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :adapter > :ssl_options > :versions" +msgid "Versions" +msgstr "Versions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :proxy_url" +msgid "Proxy URL" +msgstr "Proxy URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :send_user_agent" +msgid "Send user agent" +msgstr "Send user agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http > :user_agent" +msgid "User agent" +msgstr "User agent" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :ct_max_age" +msgid "CT max age" +msgstr "CT max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :referrer_policy" +msgid "Referrer policy" +msgstr "Referrer policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :report_uri" +msgid "Report URI" +msgstr "Report URI" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts" +msgid "STS" +msgstr "STS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:http_security > :sts_max_age" +msgid "STS max age" +msgstr "STS max age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_activation_required" +msgid "Account activation required" +msgstr "Account activation required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_approval_required" +msgid "Account approval required" +msgstr "Account approval required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_name_length" +msgid "Account field name length" +msgstr "Account field name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :account_field_value_length" +msgid "Account field value length" +msgstr "Account field value length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allow_relay" +msgid "Allow relay" +msgstr "Allow relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :allowed_post_formats" +msgid "Allowed post formats" +msgstr "Allowed post formats" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :attachment_links" +msgid "Attachment links" +msgstr "Attachment links" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowed_nicknames" +msgid "Autofollowed nicknames" +msgstr "Autofollowed nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :autofollowing_nicknames" +msgid "Autofollowing nicknames" +msgstr "Autofollowing nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :avatar_upload_limit" +msgid "Avatar upload limit" +msgstr "Avatar upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :background_upload_limit" +msgid "Background upload limit" +msgstr "Background upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :banner_upload_limit" +msgid "Banner upload limit" +msgstr "Banner upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_min_age" +msgid "Birthday min age" +msgstr "Birthday min age" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :birthday_required" +msgid "Birthday required" +msgstr "Birthday required" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :cleanup_attachments" +msgid "Cleanup attachments" +msgstr "Cleanup attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :description" +msgid "Description" +msgstr "Description" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :email" +msgid "Admin Email Address" +msgstr "Admin Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :extended_nickname_format" +msgid "Extended nickname format" +msgstr "Extended nickname format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :external_user_synchronization" +msgid "External user synchronization" +msgstr "External user synchronization" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federating" +msgid "Federating" +msgstr "Federating" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_incoming_replies_max_depth" +msgid "Fed. incoming replies max depth" +msgstr "Fed. incoming replies max depth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :federation_reachability_timeout_days" +msgid "Fed. reachability timeout days" +msgstr "Fed. reachability timeout days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :healthcheck" +msgid "Healthcheck" +msgstr "Healthcheck" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :instance_thumbnail" +msgid "Instance thumbnail" +msgstr "Instance thumbnail" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :invites_enabled" +msgid "Invites enabled" +msgstr "Invites enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :limit_to_local_content" +msgid "Limit to local content" +msgstr "Limit to local content" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_account_fields" +msgid "Max account fields" +msgstr "Max account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_endorsed_users" +msgid "Max endorsed users" +msgstr "Max endorsed users" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_media_attachments" +msgid "Max media attachments" +msgstr "Max media attachments" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_pinned_statuses" +msgid "Max pinned statuses" +msgstr "Max pinned statuses" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_remote_account_fields" +msgid "Max remote account fields" +msgstr "Max remote account fields" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :max_report_comment_size" +msgid "Max report comment size" +msgstr "Max report comment size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication" +msgid "Multi factor authentication" +msgstr "Multi factor authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes" +msgid "Backup codes" +msgstr "Backup codes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :length" +msgid "Length" +msgstr "Length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :backup_codes > :number" +msgid "Number" +msgstr "Number" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp" +msgid "TOTP settings" +msgstr "TOTP settings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :digits" +msgid "Digits" +msgstr "Digits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :multi_factor_authentication > :totp > :period" +msgid "Period" +msgstr "Period" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :name" +msgid "Name" +msgstr "Name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :notify_email" +msgid "Sender Email Address" +msgstr "Sender Email Address" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits" +msgid "Poll limits" +msgstr "Poll limits" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_expiration" +msgid "Max expiration" +msgstr "Max expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_option_chars" +msgid "Max option chars" +msgstr "Max option chars" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :max_options" +msgid "Max options" +msgstr "Max options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :poll_limits > :min_expiration" +msgid "Min expiration" +msgstr "Min expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :privileged_staff" +msgid "Privileged staff" +msgstr "Privileged staff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :profile_directory" +msgid "Profile directory" +msgstr "Profile directory" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :public" +msgid "Public" +msgstr "Public" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :quarantined_instances" +msgid "Quarantined instances" +msgstr "Quarantined instances" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registration_reason_length" +msgid "Registration reason length" +msgstr "Registration reason length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :registrations_open" +msgid "Registrations open" +msgstr "Registrations open" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_limit" +msgid "Remote limit" +msgstr "Remote limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :remote_post_retention_days" +msgid "Remote post retention days" +msgstr "Remote post retention days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :safe_dm_mentions" +msgid "Safe DM mentions" +msgstr "Safe DM mentions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :show_reactions" +msgid "Show reactions" +msgstr "Show reactions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :skip_thread_containment" +msgid "Skip thread containment" +msgstr "Skip thread containment" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :static_dir" +msgid "Static dir" +msgstr "Static dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :upload_limit" +msgid "Upload limit" +msgstr "Upload limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_bio_length" +msgid "User bio length" +msgstr "User bio length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :user_name_length" +msgid "User name length" +msgstr "User name length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instances_favicons > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :base" +msgid "Base" +msgstr "Base" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :host" +msgid "Host" +msgstr "Host" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :ssl" +msgid "SSL" +msgstr "SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts" +msgid "SSL options" +msgstr "SSL options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :sslopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tls" +msgid "TLS" +msgstr "TLS" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts" +msgid "TLS options" +msgstr "TLS options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :cacertfile" +msgid "Cacertfile" +msgstr "Cacertfile" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :tlsopts > :verify" +msgid "Verify" +msgstr "Verify" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:ldap > :uid" +msgid "UID" +msgstr "UID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:majic_pool > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :icons" +msgid "Icons" +msgstr "Icons" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:manifest > :theme_color" +msgid "Theme color" +msgstr "Theme color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_fonts" +msgid "Allow fonts" +msgstr "Allow fonts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_headings" +msgid "Allow headings" +msgstr "Allow headings" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_inline_images" +msgid "Allow inline images" +msgstr "Allow inline images" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :allow_tables" +msgid "Allow tables" +msgstr "Allow tables" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :image_quality" +msgid "Image quality" +msgstr "Image quality" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :min_content_length" +msgid "Min content length" +msgstr "Min content length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_height" +msgid "Thumbnail max height" +msgstr "Thumbnail max height" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_preview_proxy > :thumbnail_max_width" +msgid "Thumbnail max width" +msgstr "Thumbnail max width" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation" +msgid "Invalidation" +msgstr "Invalidation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :invalidation > :provider" +msgid "Provider" +msgstr "Provider" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts" +msgid "Advanced MediaProxy Options" +msgstr "Advanced MediaProxy Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_body_length" +msgid "Max body length" +msgstr "Max body length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :max_read_duration" +msgid "Max read duration" +msgstr "Max read duration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :proxy_opts > :redirect_on_failure" +msgid "Redirect on failure" +msgstr "Redirect on failure" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:media_proxy > :whitelist" +msgid "Whitelist" +msgstr "Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:modules > :runtime_dir" +msgid "Runtime dir" +msgstr "Runtime dir" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :policies" +msgid "Policies" +msgstr "Policies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency" +msgid "MRF transparency" +msgstr "MRF transparency" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf > :transparency_exclusions" +msgid "MRF transparency exclusions" +msgstr "MRF transparency exclusions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_activity_expiration > :days" +msgid "Days" +msgstr "Days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_follow_bot > :follower_nickname" +msgid "Follower nickname" +msgstr "Follower nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hashtag > :sensitive" +msgid "Sensitive" +msgstr "Sensitive" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :delist_threshold" +msgid "Delist threshold" +msgstr "Delist threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_hellthread > :reject_threshold" +msgid "Reject threshold" +msgstr "Reject threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_keyword > :replace" +msgid "Replace" +msgstr "Replace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_mention > :actors" +msgid "Actors" +msgstr "Actors" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_normalize_markup > :scrub_policy" +msgid "Scrub policy" +msgstr "Scrub policy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :actions" +msgid "Actions" +msgstr "Actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_object_age > :threshold" +msgid "Threshold" +msgstr "Threshold" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_direct" +msgid "Allow direct" +msgstr "Allow direct" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_rejectnonpublic > :allow_followersonly" +msgid "Allow followers-only" +msgstr "Allow followers-only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :avatar_removal" +msgid "Avatar removal" +msgstr "Avatar removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :banner_removal" +msgid "Banner removal" +msgstr "Banner removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :federated_timeline_removal" +msgid "Federated timeline removal" +msgstr "Federated timeline removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :followers_only" +msgid "Followers only" +msgstr "Followers only" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_nsfw" +msgid "Media NSFW" +msgstr "Media NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :media_removal" +msgid "Media removal" +msgstr "Media removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :reject_deletes" +msgid "Reject deletes" +msgstr "Reject deletes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_simple > :report_removal" +msgid "Report removal" +msgstr "Report removal" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :hosts" +msgid "Hosts" +msgstr "Hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :rejected_shortcodes" +msgid "Rejected shortcodes" +msgstr "Rejected shortcodes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_steal_emoji > :size_limit" +msgid "Size limit" +msgstr "Size limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_subchain > :match_actor" +msgid "Match actor" +msgstr "Match actor" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :accept" +msgid "Accept" +msgstr "Accept" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:mrf_vocabulary > :reject" +msgid "Reject" +msgstr "Reject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :clean_expired_tokens" +msgid "Clean expired tokens" +msgstr "Clean expired tokens" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :issue_new_refresh_token" +msgid "Issue new refresh token" +msgstr "Issue new refresh token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:oauth2 > :token_expires_in" +msgid "Token expires in" +msgstr "Token expires in" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default" +msgid "Default" +msgstr "Default" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :default > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation" +msgid "Federation" +msgstr "Federation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :federation > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media" +msgid "Media" +msgstr "Media" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :media > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload" +msgid "Upload" +msgstr "Upload" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :recv_timeout" +msgid "Recv timeout" +msgstr "Recv timeout" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:pools > :upload > :size" +msgid "Size" +msgstr "Size" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :fault_rate_allowance" +msgid "Fault rate allowance" +msgstr "Fault rate allowance" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:populate_hashtags_table > :sleep_interval_ms" +msgid "Sleep interval ms" +msgstr "Sleep interval ms" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :app_account_creation" +msgid "App account creation" +msgstr "App account creation" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :authentication" +msgid "Authentication" +msgstr "Authentication" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relation_id_action" +msgid "Relation ID action" +msgstr "Relation ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :relations_actions" +msgid "Relations actions" +msgstr "Relations actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :search" +msgid "Search" +msgstr "Search" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :status_id_action" +msgid "Status ID action" +msgstr "Status ID action" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :statuses_actions" +msgid "Statuses actions" +msgstr "Statuses actions" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rate_limit > :timeline" +msgid "Timeline" +msgstr "Timeline" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities" +msgid "Activities" +msgstr "Activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :activities > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles" +msgid "Profiles" +msgstr "Profiles" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :profiles > :remote" +msgid "Remote" +msgstr "Remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines" +msgid "Timelines" +msgstr "Timelines" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :federated" +msgid "Federated" +msgstr "Federated" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:restrict_unauthenticated > :timelines > :local" +msgid "Local" +msgstr "Local" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :failure_backoff" +msgid "Failure backoff" +msgstr "Failure backoff" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_hosts" +msgid "Ignore hosts" +msgstr "Ignore hosts" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ignore_tld" +msgid "Ignore TLD" +msgstr "Ignore TLD" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :parsers" +msgid "Parsers" +msgstr "Parsers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:rich_media > :ttl_setters" +msgid "TTL setters" +msgstr "TTL setters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:shout > :limit" +msgid "Limit" +msgstr "Limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:static_fe > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :overflow_workers" +msgid "Overflow workers" +msgstr "Overflow workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:streamer > :workers" +msgid "Workers" +msgstr "Workers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:uri_schemes > :valid_schemes" +msgid "Valid schemes" +msgstr "Valid schemes" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:user > :deny_follow_blocked" +msgid "Deny follow blocked" +msgstr "Deny follow blocked" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub" +msgid "Activity pub" +msgstr "Activity pub" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:web_cache_ttl > :activity_pub_question" +msgid "Activity pub question" +msgstr "Activity pub question" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message" +msgid "Chat message" +msgstr "Chat message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :chat_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message" +msgid "Direct message" +msgstr "Direct message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :message" +msgid "Message" +msgstr "Message" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :direct_message > :sender_nickname" +msgid "Sender nickname" +msgstr "Sender nickname" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email" +msgid "Email" +msgstr "Email" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :html" +msgid "Html" +msgstr "Html" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :sender" +msgid "Sender" +msgstr "Sender" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:welcome > :email > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:workers > :retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgid "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" +msgstr "Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.ActivityPub.MRF.MediaProxyWarmingPolicy > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers" +msgid "Pleroma.Web.RichMedia.Helpers" +msgstr "Pleroma.Web.RichMedia.Helpers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_running" +msgid "Max running" +msgstr "Max running" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-ConcurrentLimiter > Pleroma.Web.RichMedia.Helpers > :max_waiting" +msgid "Max waiting" +msgstr "Max waiting" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :crontab" +msgid "Crontab" +msgstr "Crontab" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :log" +msgid "Log" +msgstr "Log" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues" +msgid "Queues" +msgstr "Queues" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :activity_expiration" +msgid "Activity expiration" +msgstr "Activity expiration" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :attachments_cleanup" +msgid "Attachments cleanup" +msgstr "Attachments cleanup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :background" +msgid "Background" +msgstr "Background" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :backup" +msgid "Backup" +msgstr "Backup" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_incoming" +msgid "Federator incoming" +msgstr "Federator incoming" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :federator_outgoing" +msgid "Federator outgoing" +msgstr "Federator outgoing" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :mailer" +msgid "Mailer" +msgstr "Mailer" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :scheduled_activities" +msgid "Scheduled activities" +msgstr "Scheduled activities" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :transmogrifier" +msgid "Transmogrifier" +msgstr "Transmogrifier" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Oban > :queues > :web_push" +msgid "Web push" +msgstr "Web push" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha > :seconds_valid" +msgid "Seconds valid" +msgstr "Seconds valid" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Captcha.Kocaptcha > :endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :adapter" +msgid "Adapter" +msgstr "Adapter" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > :enabled" +msgid "Mailer Enabled" +msgstr "Mailer Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:access_key" +msgid "AWS Access Key" +msgstr "AWS Access Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:region" +msgid "AWS Region" +msgstr "AWS Region" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.AmazonSES-:secret" +msgid "AWS Secret Key" +msgstr "AWS Secret Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Dyn-:api_key" +msgid "Dyn API Key" +msgstr "Dyn API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Gmail-:access_token" +msgid "GMail API Access Token" +msgstr "GMail API Access Token" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:api_key" +msgid "Mailgun API Key" +msgstr "Mailgun API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailgun-:domain" +msgid "Domain" +msgstr "Domain" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:api_key" +msgid "MailJet Public API Key" +msgstr "MailJet Public API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mailjet-:secret" +msgid "MailJet Private API Key" +msgstr "MailJet Private API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Mandrill-:api_key" +msgid "Mandrill API Key" +msgstr "Mandrill API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Postmark-:api_key" +msgid "Postmark API Key" +msgstr "Postmark API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:auth" +msgid "AUTH Mode" +msgstr "AUTH Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:password" +msgid "Password" +msgstr "Password" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:port" +msgid "Port" +msgstr "Port" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:relay" +msgid "Relay" +msgstr "Relay" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:retries" +msgid "Retries" +msgstr "Retries" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:ssl" +msgid "Use SSL" +msgstr "Use SSL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:tls" +msgid "STARTTLS Mode" +msgstr "STARTTLS Mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SMTP-:username" +msgid "Username" +msgstr "Username" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendgrid-:api_key" +msgid "SendGrid API Key" +msgstr "SendGrid API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_args" +msgid "Cmd args" +msgstr "Cmd args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:cmd_path" +msgid "Cmd path" +msgstr "Cmd path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.Sendmail-:qmail" +msgid "Qmail compat mode" +msgstr "Qmail compat mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:api_key" +msgid "SocketLabs API Key" +msgstr "SocketLabs API Key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SocketLabs-:server_id" +msgid "Server ID" +msgstr "Server ID" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:api_key" +msgid "SparkPost API key" +msgstr "SparkPost API key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.Mailer > Swoosh.Adapters.SparkPost-:endpoint" +msgid "Endpoint" +msgstr "Endpoint" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.NewUsersDigestEmail > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :logo" +msgid "Logo" +msgstr "Logo" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling" +msgid "Styling" +msgstr "Styling" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :background_color" +msgid "Background color" +msgstr "Background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :content_background_color" +msgid "Content background color" +msgstr "Content background color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :header_color" +msgid "Header color" +msgstr "Header color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :link_color" +msgid "Link color" +msgstr "Link color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_color" +msgid "Text color" +msgstr "Text color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Emails.UserEmail > :styling > :text_muted_color" +msgid "Text muted color" +msgstr "Text muted color" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :class" +msgid "Class" +msgstr "Class" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :extra" +msgid "Extra" +msgstr "Extra" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :new_window" +msgid "New window" +msgstr "New window" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :rel" +msgid "Rel" +msgstr "Rel" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :strip_prefix" +msgid "Strip prefix" +msgstr "Strip prefix" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :truncate" +msgid "Truncate" +msgstr "Truncate" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Formatter > :validate_tld" +msgid "Validate tld" +msgstr "Validate tld" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :daily_user_limit" +msgid "Daily user limit" +msgstr "Daily user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.ScheduledActivity > :total_user_limit" +msgid "Total user limit" +msgstr "Total user limit" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :base_url" +msgid "Base URL" +msgstr "Base URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filename_display_max_length" +msgid "Filename display max length" +msgstr "Filename display max length" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :filters" +msgid "Filters" +msgstr "Filters" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :link_name" +msgid "Link name" +msgstr "Link name" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :proxy_remote" +msgid "Proxy remote" +msgstr "Proxy remote" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload > :uploader" +msgid "Uploader" +msgstr "Uploader" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.AnonymizeFilename > :text" +msgid "Text" +msgstr "Text" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Upload.Filter.Mogrify > :args" +msgid "Args" +msgstr "Args" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.Local > :uploads" +msgid "Uploads" +msgstr "Uploads" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket" +msgid "Bucket" +msgstr "Bucket" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :bucket_namespace" +msgid "Bucket namespace" +msgstr "Bucket namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :streaming_enabled" +msgid "Streaming enabled" +msgstr "Streaming enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Uploaders.S3 > :truncated_namespace" +msgid "Truncated namespace" +msgstr "Truncated namespace" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :email_blacklist" +msgid "Email blacklist" +msgstr "Email blacklist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User > :restricted_nicknames" +msgid "Restricted nicknames" +msgstr "Restricted nicknames" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :limit_days" +msgid "Limit days" +msgstr "Limit days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.User.Backup > :purge_after_days" +msgid "Purge after days" +msgstr "Purge after days" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.ApiSpec.CastAndValidate > :strict" +msgid "Strict" +msgstr "Strict" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :method" +msgid "Method" +msgstr "Method" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options" +msgid "Options" +msgstr "Options" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Http > :options > :params" +msgid "Params" +msgstr "Params" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :script_path" +msgid "Script path" +msgstr "Script path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.MediaProxy.Invalidation.Script > :url_format" +msgid "URL Format" +msgstr "URL Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Metadata > :unfurl_nsfw" +msgid "Unfurl NSFW" +msgstr "Unfurl NSFW" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :headers" +msgid "Headers" +msgstr "Headers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :proxies" +msgid "Proxies" +msgstr "Proxies" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Plugs.RemoteIp > :reserved" +msgid "Reserved" +msgstr "Reserved" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Web.Preload > :providers" +msgid "Providers" +msgstr "Providers" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-Pleroma.Workers.PurgeExpiredActivity > :min_lifetime" +msgid "Min lifetime" +msgstr "Min lifetime" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :auth" +msgid "Auth" +msgstr "Auth" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :enabled" +msgid "Enabled" +msgstr "Enabled" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :format" +msgid "Format" +msgstr "Format" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :ip_whitelist" +msgid "IP Whitelist" +msgstr "IP Whitelist" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :prometheus-Pleroma.Web.Endpoint.MetricsExporter > :path" +msgid "Path" +msgstr "Path" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :level" +msgid "Level" +msgstr "Level" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :meta" +msgid "Meta" +msgstr "Meta" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :quack > :webhook_url" +msgid "Webhook URL" +msgstr "Webhook URL" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :private_key" +msgid "Private key" +msgstr "Private key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :public_key" +msgid "Public key" +msgstr "Public key" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :web_push_encryption-:vapid_details > :subject" +msgid "Subject" +msgstr "Subject" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Require HTTP signatures for AP fetches" +msgstr "Require HTTP signatures for AP fetches" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config description at :pleroma-:instance > :short_description" +msgid "Shorter version of instance description. It can be seen on `/api/v1/instance`" +msgstr "" +"Shorter version of instance description. It can be seen on `/api/v1/instance`" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:activitypub > :authorized_fetch_mode" +msgid "Authorized fetch mode" +msgstr "Authorized fetch mode" + +#: lib/pleroma/docs/translator.ex:5 +#, elixir-autogen, elixir-format, fuzzy +msgctxt "config label at :pleroma-:instance > :short_description" +msgid "Short description" +msgstr "Short description" From fcb5e4a48db14bf81e8a7b4316fb2b7bee71d4d8 Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 8 Aug 2022 15:48:02 +0000 Subject: [PATCH 74/82] Translated using Weblate (Dutch) Currently translated at 100.0% (83 of 83 strings) Added translation using Weblate (Dutch) Co-authored-by: Fristi Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/nl/ Translation: Pleroma fe/Akkoma Backend (Static pages) --- priv/gettext/nl/LC_MESSAGES/static_pages.po | 567 ++++++++++++++++++++ 1 file changed, 567 insertions(+) create mode 100644 priv/gettext/nl/LC_MESSAGES/static_pages.po diff --git a/priv/gettext/nl/LC_MESSAGES/static_pages.po b/priv/gettext/nl/LC_MESSAGES/static_pages.po new file mode 100644 index 000000000..4c5ed0a7b --- /dev/null +++ b/priv/gettext/nl/LC_MESSAGES/static_pages.po @@ -0,0 +1,567 @@ +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-08-07 10:48+0000\n" +"PO-Revision-Date: 2022-08-07 19:52+0000\n" +"Last-Translator: Fristi \n" +"Language-Team: Dutch \n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.13.1\n" + +## This file is a PO Template file. +## +## "msgid"s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run "mix gettext.extract" to bring this file up to +## date. Leave "msgstr"s empty as changing them here as no +## effect: edit them in PO (.po) files instead. +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:9 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button" +msgid "Authorize" +msgstr "Machtigen" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error fetching user" +msgstr "Fout bij ophalen gebruiker" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remote follow" +msgstr "Extern volgen" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for auth code entry" +msgid "Authentication code" +msgstr "Authenticatiecode" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for password entry" +msgid "Password" +msgstr "Wachtwoord" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for username entry" +msgid "Username" +msgstr "Gebruikersnaam" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for login" +msgid "Authorize" +msgstr "Machtigen" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for mfa" +msgid "Authorize" +msgstr "Machtigen" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error following account" +msgstr "Fout bij volgen van account" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_login.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header, need login" +msgid "Log in to follow" +msgstr "Log in om te volgen" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/follow_mfa.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow mfa header" +msgid "Two-factor authentication" +msgstr "Tweefactor authenticatie" + +#: lib/pleroma/web/templates/twitter_api/remote_follow/followed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow success" +msgid "Account followed!" +msgstr "Account gevolgd!" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:7 +#, elixir-autogen, elixir-format +msgctxt "placeholder text for account id" +msgid "Your account ID, e.g. lain@quitter.se" +msgstr "Je account ID, b.v. gebruiker@instantie.net" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "remote follow authorization button for following with a remote account" +msgid "Follow" +msgstr "Volgen" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "remote follow error" +msgid "Error: %{error}" +msgstr "Fout: %{error}" + +#: lib/pleroma/web/templates/twitter_api/util/subscribe.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "remote follow header" +msgid "Remotely follow %{nickname}" +msgstr "%{nickname} extern volgen" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "password reset button" +msgid "Reset" +msgstr "Herstellen" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset failed homepage link" +msgid "Homepage" +msgstr "Homepagina" + +#: lib/pleroma/web/templates/twitter_api/password/reset_failed.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset failed message" +msgid "Password reset failed" +msgstr "Wachtwoordherstel mislukt" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "password reset form confirm password prompt" +msgid "Confirmation" +msgstr "Bevestiging" + +#: lib/pleroma/web/templates/twitter_api/password/reset.html.eex:4 +#, elixir-autogen, elixir-format +msgctxt "password reset form password prompt" +msgid "Password" +msgstr "Wachtwoord" + +#: lib/pleroma/web/templates/twitter_api/password/invalid_token.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset invalid token message" +msgid "Invalid Token" +msgstr "Ongeldige Token" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "password reset successful homepage link" +msgid "Homepage" +msgstr "Homepagina" + +#: lib/pleroma/web/templates/twitter_api/password/reset_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "password reset successful message" +msgid "Password changed!" +msgstr "Wachtwoord gewijzigd!" + +#: lib/pleroma/web/templates/feed/feed/tag.atom.eex:15 +#: lib/pleroma/web/templates/feed/feed/tag.rss.eex:7 +#, elixir-autogen, elixir-format +msgctxt "tag feed description" +msgid "These are public toots tagged with #%{tag}. You can interact with them if you have an account anywhere in the fediverse." +msgstr "" +"Dit zijn openbare berichten die getagd zijn met #%{tag}. Je kunt op deze " +"reageren indien je een account hebt in de fediverse." + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorization exists page title" +msgid "Authorization exists" +msgstr "Machtiging bestaat" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:32 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize approve button" +msgid "Approve" +msgstr "Goedkeuren" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:30 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize cancel button" +msgid "Cancel" +msgstr "Annuleren" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "oauth authorize message" +msgid "Application %{client_name} is requesting access to your account." +msgstr "" +"Applicatie %{client_name} vraagt om toegang tot je account." + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth authorized page title" +msgid "Successfully authorized" +msgstr "Machtiging is geslaagd" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider page title" +msgid "Sign in with external provider" +msgstr "Inloggen bij externe provider" + +#: lib/pleroma/web/templates/o_auth/o_auth/consumer.html.eex:13 +#, elixir-autogen, elixir-format +msgctxt "oauth external provider sign in button" +msgid "Sign in with %{strategy}" +msgstr "Inloggen met %{strategy}" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:54 +#, elixir-autogen, elixir-format +msgctxt "oauth login button" +msgid "Log In" +msgstr "Inloggen" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:51 +#, elixir-autogen, elixir-format +msgctxt "oauth login password prompt" +msgid "Password" +msgstr "Wachtwoord" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:47 +#, elixir-autogen, elixir-format +msgctxt "oauth login username prompt" +msgid "Username" +msgstr "Gebruikersnaam" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:39 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname prompt" +msgid "Pleroma Handle" +msgstr "Pleroma Gebruiker" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:37 +#, elixir-autogen, elixir-format +msgctxt "oauth register nickname unchangeable warning" +msgid "Choose carefully! You won't be able to change this later. You will be able to change your display name, though." +msgstr "" +"Let op! Je kunt je accountnaam hierna niet meer wijzigen. Je kunt echter wel " +"nog je weergavenaam wijzigen." + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:18 +#, elixir-autogen, elixir-format +msgctxt "oauth register page email prompt" +msgid "Email" +msgstr "E-mail" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:10 +#, elixir-autogen, elixir-format +msgctxt "oauth register page fill form prompt" +msgid "If you'd like to register a new account, please provide the details below." +msgstr "" +"Indien je graag een nieuw account wilt registreren, vul dan a.u.b de " +"onderstaande details in." + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:35 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login button" +msgid "Proceed as existing user" +msgstr "Doorgaan als bestaande gebruiker" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:31 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login password prompt" +msgid "Password" +msgstr "Wachtwoord" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:24 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login prompt" +msgid "Alternatively, sign in to connect to existing account." +msgstr "Alternatief, log in om te verbinden met een bestaand account." + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:27 +#, elixir-autogen, elixir-format +msgctxt "oauth register page login username prompt" +msgid "Name or email" +msgstr "Naam of e-mail" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:14 +#, elixir-autogen, elixir-format +msgctxt "oauth register page nickname prompt" +msgid "Nickname" +msgstr "Weergavenaam" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:22 +#, elixir-autogen, elixir-format +msgctxt "oauth register page register button" +msgid "Proceed as new user" +msgstr "Doorgaan als nieuwe gebruiker" + +#: lib/pleroma/web/templates/o_auth/o_auth/register.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "Registration Details" +msgstr "Registratiegegevens" + +#: lib/pleroma/web/templates/o_auth/o_auth/show.html.eex:36 +#, elixir-autogen, elixir-format +msgctxt "oauth register page title" +msgid "This is the first time you visit! Please enter your Pleroma handle." +msgstr "Dit is je eerste bezoek! Vul a.u.b. je Pleroma gebruikersnaam in." + +#: lib/pleroma/web/templates/o_auth/o_auth/_scopes.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth scopes message" +msgid "The following permissions will be granted" +msgstr "De volgende rechten zullen worden toegekend" + +#: lib/pleroma/web/templates/o_auth/o_auth/oob_authorization_created.html.eex:2 +#: lib/pleroma/web/templates/o_auth/o_auth/oob_token_exists.html.eex:2 +#, elixir-autogen, elixir-format +msgctxt "oauth token code message" +msgid "Token code is
%{token}" +msgstr "Token code is
%{token}" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa auth code prompt" +msgid "Authentication code" +msgstr "Authenticatiecode" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page title" +msgid "Two-factor authentication" +msgstr "Tweefactor authenticatie" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa auth page use recovery code link" +msgid "Enter a two-factor recovery code" +msgstr "Voer een tweefactor herstelcode in" + +#: lib/pleroma/web/templates/o_auth/mfa/totp.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa auth verify code button" +msgid "Verify" +msgstr "Controleren" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "mfa recover page title" +msgid "Two-factor recovery" +msgstr "Tweefactor herstel" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:12 +#, elixir-autogen, elixir-format +msgctxt "mfa recover recovery code prompt" +msgid "Recovery code" +msgstr "Herstelcode" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:23 +#, elixir-autogen, elixir-format +msgctxt "mfa recover use 2fa code link" +msgid "Enter a two-factor code" +msgstr "Voer een tweefactor code in" + +#: lib/pleroma/web/templates/o_auth/mfa/recovery.html.eex:20 +#, elixir-autogen, elixir-format +msgctxt "mfa recover verify recovery code button" +msgid "Verify" +msgstr "Controleren" + +#: lib/pleroma/web/templates/static_fe/static_fe/profile.html.eex:8 +#, elixir-autogen, elixir-format +msgctxt "static fe profile page remote follow button" +msgid "Remote follow" +msgstr "Extern volgen" + +#: lib/pleroma/web/templates/email/digest.html.eex:163 +#, elixir-autogen, elixir-format +msgctxt "digest email header line" +msgid "Hey %{nickname}, here is what you've missed!" +msgstr "Hoi %{nickname}, dit is wat je hebt gemist!" + +#: lib/pleroma/web/templates/email/digest.html.eex:544 +#, elixir-autogen, elixir-format +msgctxt "digest email receiver address" +msgid "The email address you are subscribed as is %{email}. " +msgstr "" +"Het e-mailadres waarmee je bent ingeschreven is %{email}. " + +#: lib/pleroma/web/templates/email/digest.html.eex:538 +#, elixir-autogen, elixir-format +msgctxt "digest email sending reason" +msgid "You have received this email because you have signed up to receive digest emails from %{instance} Pleroma instance." +msgstr "" +"Je ontvangt deze e-mail omdat je bent ingeschreven voor overzichts-mails te " +"ontvangen van %{instance} Pleroma instantie." + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action" +msgid "To unsubscribe, please go %{here}." +msgstr "Je kunt je %{here} uitschrijven voor deze e-mails." + +#: lib/pleroma/web/templates/email/digest.html.eex:547 +#, elixir-autogen, elixir-format +msgctxt "digest email unsubscribe action link text" +msgid "here" +msgstr "hier" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_failure.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe failed message" +msgid "UNSUBSCRIBE FAILURE" +msgstr "UITSCHRIJVEN MISLUKT" + +#: lib/pleroma/web/templates/mailer/subscription/unsubscribe_success.html.eex:1 +#, elixir-autogen, elixir-format +msgctxt "mailer unsubscribe successful message" +msgid "UNSUBSCRIBE SUCCESSFUL" +msgstr "UITSCHRIJVEN GESLAAGD" + +#: lib/pleroma/web/templates/email/digest.html.eex:385 +#, elixir-format +msgctxt "new followers count header" +msgid "%{count} New Follower" +msgid_plural "%{count} New Followers" +msgstr[0] "%{count} Nieuwe Volger" +msgstr[1] "%{count} Nieuwe Volgers" + +#: lib/pleroma/emails/user_email.ex:356 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - self-requested" +msgid "

You requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

Je hebt een verzoek ingediend voor een volledige back-up van je Pleroma " +"account. Deze is gereed om te downloaden:

\n" +"

%{download_url}

\n" + +#: lib/pleroma/emails/user_email.ex:384 +#, elixir-autogen, elixir-format +msgctxt "account archive email subject" +msgid "Your account archive is ready" +msgstr "Je account archief is gereed" + +#: lib/pleroma/emails/user_email.ex:188 +#, elixir-autogen, elixir-format +msgctxt "approval pending email body" +msgid "

Awaiting Approval

\n

Your account at %{instance_name} is being reviewed by staff. You will receive another email once your account is approved.

\n" +msgstr "" +"

Goedkeuring in afwachting

\n" +"

Je account bij %{instance_name} zal worden beoordeeld door de beheerders. " +"Je zult een opvolgende e-mail ontvangen wanneer je account goed gekeurd " +"is.

\n" + +#: lib/pleroma/emails/user_email.ex:202 +#, elixir-autogen, elixir-format +msgctxt "approval pending email subject" +msgid "Your account is awaiting approval" +msgstr "Je account is in afwachting van goedkeuring" + +#: lib/pleroma/emails/user_email.ex:158 +#, elixir-autogen, elixir-format +msgctxt "confirmation email body" +msgid "

Thank you for registering on %{instance_name}

\n

Email confirmation is required to activate the account.

\n

Please click the following link to activate your account.

\n" +msgstr "" +"

Bedankt voor het registreren bij %{instance_name}

\n" +"

Bevestiging via e-mail is vereist om je account te activeren.

\n" +"

Je kunt je account activeren door op deze " +"link te klikken.

\n" + +#: lib/pleroma/emails/user_email.ex:174 +#, elixir-autogen, elixir-format +msgctxt "confirmation email subject" +msgid "%{instance_name} account confirmation" +msgstr "%{instance_name} account bevestiging" + +#: lib/pleroma/emails/user_email.ex:310 +#, elixir-autogen, elixir-format +msgctxt "digest email subject" +msgid "Your digest from %{instance_name}" +msgstr "Je overzicht van %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:81 +#, elixir-autogen, elixir-format +msgctxt "password reset email body" +msgid "

Reset your password at %{instance_name}

\n

Someone has requested password change for your account at %{instance_name}.

\n

If it was you, visit the following link to proceed: reset password.

\n

If it was someone else, nothing to worry about: your data is secure and your password has not been changed.

\n" +msgstr "" +"

Herstel je wachtwoord bij %{instance_name}

\n" +"

Iemand heeft een verzoek ingediend om het wachtwoord van je account bij " +"%{instance_name} te herstellen.

\n" +"

Als je dit zelf geweest bent, volg dan de volgende link om door te gaan: " +"wachtwoord herstellen.

\n" +"

Indien je dit niet geweest bent, hoef je geen verdere acties te " +"ondernemen: je gegevens zijn veilig en je wachtwoord is niet gewijzigd.

\n" + +#: lib/pleroma/emails/user_email.ex:98 +#, elixir-autogen, elixir-format +msgctxt "password reset email subject" +msgid "Password reset" +msgstr "Wachtwoord herstellen" + +#: lib/pleroma/emails/user_email.ex:215 +#, elixir-autogen, elixir-format +msgctxt "successful registration email body" +msgid "

Hello @%{nickname},

\n

Your account at %{instance_name} has been registered successfully.

\n

No further action is required to activate your account.

\n" +msgstr "" +"

Hoi @%{nickname},

\n" +"

Het registreren van je account bij %{instance_name} is gelukt.

\n" +"

Er zijn geen verdere stappen vereist om je account te activeren.

\n" + +#: lib/pleroma/emails/user_email.ex:231 +#, elixir-autogen, elixir-format +msgctxt "successful registration email subject" +msgid "Account registered on %{instance_name}" +msgstr "Account registratie bij %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:119 +#, elixir-autogen, elixir-format +msgctxt "user invitation email body" +msgid "

You are invited to %{instance_name}

\n

%{inviter_name} invites you to join %{instance_name}, an instance of Pleroma federated social networking platform.

\n

Click the following link to register: accept invitation.

\n" +msgstr "" +"

Je bent uitgenodigd bij %{instance_name}

\n" +"

%{inviter_name} nodigt je uit om je te registreren bij %{instance_name}, " +"een instantie van het Pleroma gefedereerde sociale netwerk.

\n" +"

Om je te registreren, klink op de volgende link: uitnodiging accepteren.

\n" + +#: lib/pleroma/emails/user_email.ex:136 +#, elixir-autogen, elixir-format +msgctxt "user invitation email subject" +msgid "Invitation to %{instance_name}" +msgstr "Uitnodiging van %{instance_name}" + +#: lib/pleroma/emails/user_email.ex:53 +#, elixir-autogen, elixir-format +msgctxt "welcome email html body" +msgid "Welcome to %{instance_name}!" +msgstr "Welkom bij %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:41 +#, elixir-autogen, elixir-format +msgctxt "welcome email subject" +msgid "Welcome to %{instance_name}!" +msgstr "Welkom bij %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:65 +#, elixir-autogen, elixir-format +msgctxt "welcome email text body" +msgid "Welcome to %{instance_name}!" +msgstr "Welkom bij %{instance_name}!" + +#: lib/pleroma/emails/user_email.ex:368 +#, elixir-autogen, elixir-format +msgctxt "account archive email body - admin requested" +msgid "

Admin @%{admin_nickname} requested a full backup of your Pleroma account. It's ready for download:

\n

%{download_url}

\n" +msgstr "" +"

Beheerder @%{admin_nickname} heeft een verzoek ingediend voor een " +"volledige back-up van je Pleroma account. Deze is gereed om te " +"downloaden:

\n" +"

%{download_url}

\n" From 8bca9a7dbe3cbf603882953dc54fd9639ee248ce Mon Sep 17 00:00:00 2001 From: Weblate Date: Mon, 8 Aug 2022 15:48:02 +0000 Subject: [PATCH 75/82] Update translation files Updated by "Squash Git commits" hook in Weblate. Co-authored-by: Weblate Translate-URL: http://translate.akkoma.dev/projects/akkoma/akkoma-backend-static-pages/ Translation: Pleroma fe/Akkoma Backend (Static pages) --- priv/gettext/nl/LC_MESSAGES/errors.po | 158 ++++++++++++++------------ 1 file changed, 84 insertions(+), 74 deletions(-) diff --git a/priv/gettext/nl/LC_MESSAGES/errors.po b/priv/gettext/nl/LC_MESSAGES/errors.po index cfcb05fe6..fc7ea0324 100644 --- a/priv/gettext/nl/LC_MESSAGES/errors.po +++ b/priv/gettext/nl/LC_MESSAGES/errors.po @@ -3,16 +3,16 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-05-15 09:37+0000\n" -"PO-Revision-Date: 2020-06-02 07:36+0000\n" +"PO-Revision-Date: 2022-08-07 10:46+0000\n" "Last-Translator: Fristi \n" -"Language-Team: Dutch \n" +"Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.0.4\n" +"X-Generator: Weblate 4.13.1\n" ## This file is a PO Template file. ## @@ -118,7 +118,7 @@ msgstr "Al gestemd" #: lib/pleroma/web/oauth/oauth_controller.ex:360 #, elixir-format msgid "Bad request" -msgstr "Bad request" +msgstr "Ongeldig request" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:425 #, elixir-format @@ -155,7 +155,7 @@ msgstr "Object kan niet geliked worden" #: lib/pleroma/web/common_api/utils.ex:556 #, elixir-format msgid "Cannot post an empty status without attachments" -msgstr "Status kan niet geplaatst worden zonder tekst of bijlagen" +msgstr "Bericht kan niet geplaatst worden zonder tekst of bijlagen" #: lib/pleroma/web/common_api/utils.ex:504 #, elixir-format @@ -165,122 +165,122 @@ msgstr "Opmerking dient maximaal %{max_size} karakters te bevatten" #: lib/pleroma/config/config_db.ex:222 #, elixir-format msgid "Config with params %{params} not found" -msgstr "" +msgstr "Instelling met parameters %{params} kon niet gevonden worden" #: lib/pleroma/web/common_api/common_api.ex:95 #, elixir-format msgid "Could not delete" -msgstr "" +msgstr "Verwijderen mislukt" #: lib/pleroma/web/common_api/common_api.ex:141 #, elixir-format msgid "Could not favorite" -msgstr "" +msgstr "Favoriet maken mislukt" #: lib/pleroma/web/common_api/common_api.ex:370 #, elixir-format msgid "Could not pin" -msgstr "" +msgstr "Vastmaken mislukt" #: lib/pleroma/web/common_api/common_api.ex:112 #, elixir-format msgid "Could not repeat" -msgstr "" +msgstr "Herhalen mislukt" #: lib/pleroma/web/common_api/common_api.ex:188 #, elixir-format msgid "Could not unfavorite" -msgstr "" +msgstr "Favoriet ongedaan maken mislukt" #: lib/pleroma/web/common_api/common_api.ex:380 #, elixir-format msgid "Could not unpin" -msgstr "" +msgstr "Vastmaken ongedaan maken mislukt" #: lib/pleroma/web/common_api/common_api.ex:126 #, elixir-format msgid "Could not unrepeat" -msgstr "" +msgstr "Herhalen ongedaan maken mislukt" #: lib/pleroma/web/common_api/common_api.ex:428 #: lib/pleroma/web/common_api/common_api.ex:437 #, elixir-format msgid "Could not update state" -msgstr "" +msgstr "Status bijwerken mislukt" #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:202 #, elixir-format msgid "Error." -msgstr "" +msgstr "Fout." #: lib/pleroma/web/twitter_api/twitter_api.ex:106 #, elixir-format msgid "Invalid CAPTCHA" -msgstr "" +msgstr "Ongeldige CAPTCHA" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:117 #: lib/pleroma/web/oauth/oauth_controller.ex:569 #, elixir-format msgid "Invalid credentials" -msgstr "" +msgstr "Ongeldige inloggegevens" #: lib/pleroma/plugs/ensure_authenticated_plug.ex:38 #, elixir-format msgid "Invalid credentials." -msgstr "" +msgstr "Ongeldige inloggegevens." #: lib/pleroma/web/common_api/common_api.ex:265 #, elixir-format msgid "Invalid indices" -msgstr "" +msgstr "Ongeldige indexen" #: lib/pleroma/web/admin_api/admin_api_controller.ex:1147 #, elixir-format msgid "Invalid parameters" -msgstr "" +msgstr "Ongeldige parameters" #: lib/pleroma/web/common_api/utils.ex:411 #, elixir-format msgid "Invalid password." -msgstr "" +msgstr "Ongeldig wachtwoord." #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:187 #, elixir-format msgid "Invalid request" -msgstr "" +msgstr "Ongeldig request" #: lib/pleroma/web/twitter_api/twitter_api.ex:109 #, elixir-format msgid "Kocaptcha service unavailable" -msgstr "" +msgstr "Kocaptcha service niet beschikbaar" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:113 #, elixir-format msgid "Missing parameters" -msgstr "" +msgstr "Ontbrekende parameters" #: lib/pleroma/web/common_api/utils.ex:540 #, elixir-format msgid "No such conversation" -msgstr "" +msgstr "Gesprek niet gevonden" #: lib/pleroma/web/admin_api/admin_api_controller.ex:439 #: lib/pleroma/web/admin_api/admin_api_controller.ex:465 lib/pleroma/web/admin_api/admin_api_controller.ex:507 #, elixir-format msgid "No such permission_group" -msgstr "" +msgstr "Permission_group niet gevonden" #: lib/pleroma/plugs/uploaded_media.ex:74 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:485 lib/pleroma/web/admin_api/admin_api_controller.ex:1135 #: lib/pleroma/web/feed/user_controller.ex:73 lib/pleroma/web/ostatus/ostatus_controller.ex:143 #, elixir-format msgid "Not found" -msgstr "" +msgstr "Niet gevonden" #: lib/pleroma/web/common_api/common_api.ex:241 #, elixir-format msgid "Poll's author can't vote" -msgstr "" +msgstr "De peiling-auteur kan niet stemmen" #: lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:20 #: lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:37 lib/pleroma/web/mastodon_api/controllers/poll_controller.ex:49 @@ -288,215 +288,215 @@ msgstr "" #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:71 #, elixir-format msgid "Record not found" -msgstr "" +msgstr "Record niet gevonden" #: lib/pleroma/web/admin_api/admin_api_controller.ex:1153 #: lib/pleroma/web/feed/user_controller.ex:79 lib/pleroma/web/mastodon_api/controllers/fallback_controller.ex:32 #: lib/pleroma/web/ostatus/ostatus_controller.ex:149 #, elixir-format msgid "Something went wrong" -msgstr "" +msgstr "Er is iets misgegaan" #: lib/pleroma/web/common_api/activity_draft.ex:107 #, elixir-format msgid "The message visibility must be direct" -msgstr "" +msgstr "De zichtbaarheid van het bericht dient privé te zijn" #: lib/pleroma/web/common_api/utils.ex:566 #, elixir-format msgid "The status is over the character limit" -msgstr "" +msgstr "Het bericht is langer dan het karakter-limiet" #: lib/pleroma/plugs/ensure_public_or_authenticated_plug.ex:31 #, elixir-format msgid "This resource requires authentication." -msgstr "" +msgstr "Deze gegevens vereisen authenticatie." #: lib/pleroma/plugs/rate_limiter/rate_limiter.ex:206 #, elixir-format msgid "Throttled" -msgstr "" +msgstr "Geremd" #: lib/pleroma/web/common_api/common_api.ex:266 #, elixir-format msgid "Too many choices" -msgstr "" +msgstr "Teveel keuzes" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:442 #, elixir-format msgid "Unhandled activity type" -msgstr "" +msgstr "Niet-ondersteund activiteits-type" #: lib/pleroma/web/admin_api/admin_api_controller.ex:536 #, elixir-format msgid "You can't revoke your own admin status." -msgstr "" +msgstr "Je kan je eigen beheerdersrechten niet intrekken." #: lib/pleroma/web/oauth/oauth_controller.ex:218 #: lib/pleroma/web/oauth/oauth_controller.ex:309 #, elixir-format msgid "Your account is currently disabled" -msgstr "" +msgstr "Je account is momenteel uitgeschakeld" #: lib/pleroma/web/oauth/oauth_controller.ex:180 #: lib/pleroma/web/oauth/oauth_controller.ex:332 #, elixir-format msgid "Your login is missing a confirmed e-mail address" -msgstr "" +msgstr "Je login bevat geen bevestigd e-mailadres" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:389 #, elixir-format msgid "can't read inbox of %{nickname} as %{as_nickname}" -msgstr "" +msgstr "kan de inbox van %{nickname} niet lezen als %{as_nickname}" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:472 #, elixir-format msgid "can't update outbox of %{nickname} as %{as_nickname}" -msgstr "" +msgstr "kan de outbox van %{nickname} niet bijwerken als %{as_nickname}" #: lib/pleroma/web/common_api/common_api.ex:388 #, elixir-format msgid "conversation is already muted" -msgstr "" +msgstr "gesprek is al genegeerd" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:316 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:491 #, elixir-format msgid "error" -msgstr "" +msgstr "fout" #: lib/pleroma/web/pleroma_api/controllers/mascot_controller.ex:29 #, elixir-format msgid "mascots can only be images" -msgstr "" +msgstr "mascottes kunnen alleen afbeeldingen zijn" #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:60 #, elixir-format msgid "not found" -msgstr "" +msgstr "niet gevonden" #: lib/pleroma/web/oauth/oauth_controller.ex:395 #, elixir-format msgid "Bad OAuth request." -msgstr "" +msgstr "Ongeldig OAuth request." #: lib/pleroma/web/twitter_api/twitter_api.ex:115 #, elixir-format msgid "CAPTCHA already used" -msgstr "" +msgstr "CAPTCHA is al gebruikt" #: lib/pleroma/web/twitter_api/twitter_api.ex:112 #, elixir-format msgid "CAPTCHA expired" -msgstr "" +msgstr "CAPTCHA is verlopen" #: lib/pleroma/plugs/uploaded_media.ex:55 #, elixir-format msgid "Failed" -msgstr "" +msgstr "Mislukt" #: lib/pleroma/web/oauth/oauth_controller.ex:411 #, elixir-format msgid "Failed to authenticate: %{message}." -msgstr "" +msgstr "Authenticatie mislukt: %{message}." #: lib/pleroma/web/oauth/oauth_controller.ex:442 #, elixir-format msgid "Failed to set up user account." -msgstr "" +msgstr "Aanmaken van gebruikersaccount is mislukt." #: lib/pleroma/plugs/oauth_scopes_plug.ex:38 #, elixir-format msgid "Insufficient permissions: %{permissions}." -msgstr "" +msgstr "Niet voldoende rechten: %{permissions}." #: lib/pleroma/plugs/uploaded_media.ex:94 #, elixir-format msgid "Internal Error" -msgstr "" +msgstr "Interne Fout" #: lib/pleroma/web/oauth/fallback_controller.ex:22 #: lib/pleroma/web/oauth/fallback_controller.ex:29 #, elixir-format msgid "Invalid Username/Password" -msgstr "" +msgstr "Ongeldige Gebruikersnaam/Wachtwoord" #: lib/pleroma/web/twitter_api/twitter_api.ex:118 #, elixir-format msgid "Invalid answer data" -msgstr "" +msgstr "Ongeldig antwoord" #: lib/pleroma/web/nodeinfo/nodeinfo_controller.ex:128 #, elixir-format msgid "Nodeinfo schema version not handled" -msgstr "" +msgstr "Nodeinfo schema wordt niet ondersteund" #: lib/pleroma/web/oauth/oauth_controller.ex:169 #, elixir-format msgid "This action is outside the authorized scopes" -msgstr "" +msgstr "Deze actie bevindt zich buiten de gemachtigde scopes" #: lib/pleroma/web/oauth/fallback_controller.ex:14 #, elixir-format msgid "Unknown error, please check the details and try again." -msgstr "" +msgstr "Onbekende fout, controleer a.u.b. de details en probeer het opnieuw." #: lib/pleroma/web/oauth/oauth_controller.ex:116 #: lib/pleroma/web/oauth/oauth_controller.ex:155 #, elixir-format msgid "Unlisted redirect_uri." -msgstr "" +msgstr "Niet-vermelde redirect_uri." #: lib/pleroma/web/oauth/oauth_controller.ex:391 #, elixir-format msgid "Unsupported OAuth provider: %{provider}." -msgstr "" +msgstr "Niet ondersteunde OAuth provider: %{provider}." #: lib/pleroma/uploaders/uploader.ex:72 #, elixir-format msgid "Uploader callback timeout" -msgstr "" +msgstr "Uploader terugkoppeling timeout" #: lib/pleroma/web/uploader_controller.ex:23 #, elixir-format msgid "bad request" -msgstr "" +msgstr "ongeldig request" #: lib/pleroma/web/twitter_api/twitter_api.ex:103 #, elixir-format msgid "CAPTCHA Error" -msgstr "" +msgstr "CAPTCHA Fout" #: lib/pleroma/web/common_api/common_api.ex:200 #, elixir-format msgid "Could not add reaction emoji" -msgstr "" +msgstr "Reactie-emoji toevoegen mislukt" #: lib/pleroma/web/common_api/common_api.ex:211 #, elixir-format msgid "Could not remove reaction emoji" -msgstr "" +msgstr "Reactie-emoji verwijderen mislukt" #: lib/pleroma/web/twitter_api/twitter_api.ex:129 #, elixir-format msgid "Invalid CAPTCHA (Missing parameter: %{name})" -msgstr "" +msgstr "Ongeldige CAPTCHA (Ontbrekende parameter: %{name})" #: lib/pleroma/web/mastodon_api/controllers/list_controller.ex:92 #, elixir-format msgid "List not found" -msgstr "" +msgstr "Lijst niet gevonden" #: lib/pleroma/web/mastodon_api/controllers/account_controller.ex:124 #, elixir-format msgid "Missing parameter: %{name}" -msgstr "" +msgstr "Ontbrekende parameter: %{name}" #: lib/pleroma/web/oauth/oauth_controller.ex:207 #: lib/pleroma/web/oauth/oauth_controller.ex:322 #, elixir-format msgid "Password reset is required" -msgstr "" +msgstr "Wachtwoordherstel is vereist" #: lib/pleroma/tests/auth_test_controller.ex:9 #: lib/pleroma/web/activity_pub/activity_pub_controller.ex:6 lib/pleroma/web/admin_api/admin_api_controller.ex:6 @@ -528,53 +528,63 @@ msgstr "" #, elixir-format msgid "Security violation: OAuth scopes check was neither handled nor explicitly skipped." msgstr "" +"Schending van beveiliging: OAuth scope-controle is niet uitgevoerd en niet " +"expliciet overgeslagen." #: lib/pleroma/plugs/ensure_authenticated_plug.ex:28 #, elixir-format msgid "Two-factor authentication enabled, you must use a access token." msgstr "" +"Tweefactor authenticatie is ingeschakeld, een toegangssleutel is verplicht." #: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:210 #, elixir-format msgid "Unexpected error occurred while adding file to pack." msgstr "" +"Er is een onverwachte fout opgetreden tijdens het toevoegen van het bestand." #: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:138 #, elixir-format msgid "Unexpected error occurred while creating pack." msgstr "" +"Er is een onverwachte fout opgetreden tijdens het aanmaken van het pakket." #: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:278 #, elixir-format msgid "Unexpected error occurred while removing file from pack." msgstr "" +"Er is een onverwachte fout opgetreden tijdens het verwijderen van het " +"bestand." #: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:250 #, elixir-format msgid "Unexpected error occurred while updating file in pack." msgstr "" +"Er is een onverwachte fout opgetreden tijdens het bijwerken van het bestand." #: lib/pleroma/web/pleroma_api/controllers/emoji_api_controller.ex:179 #, elixir-format msgid "Unexpected error occurred while updating pack metadata." msgstr "" +"Er is een onverwachte fout opgetreden tijdens het bijwerken van de pakket-" +"metadata." #: lib/pleroma/plugs/user_is_admin_plug.ex:21 #, elixir-format msgid "User is not an admin." -msgstr "" +msgstr "Gebruiker is niet een beheerder." #: lib/pleroma/web/mastodon_api/controllers/subscription_controller.ex:61 #, elixir-format msgid "Web push subscription is disabled on this Pleroma instance" -msgstr "" +msgstr "Web push abbonement is uitgeschakeld op deze Pleroma instantie" #: lib/pleroma/web/admin_api/admin_api_controller.ex:502 #, elixir-format msgid "You can't revoke your own admin/moderator status." -msgstr "" +msgstr "Je kan je eigen beheerders- of moderatorrechten niet intrekken." #: lib/pleroma/web/mastodon_api/controllers/timeline_controller.ex:105 #, elixir-format msgid "authorization required for timeline view" -msgstr "" +msgstr "machtiging is vereist voor de tijdlijn weergave" From 74dbea4cf894ac40119e443f1048ff102125672d Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 17:43:34 +0100 Subject: [PATCH 76/82] add masto-fe docs --- docs/docs/configuration/cheatsheet.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/docs/configuration/cheatsheet.md b/docs/docs/configuration/cheatsheet.md index 83d943c51..71ebf28dc 100644 --- a/docs/docs/configuration/cheatsheet.md +++ b/docs/docs/configuration/cheatsheet.md @@ -283,14 +283,19 @@ config :pleroma, :frontends, "name" => "swagger-ui", "ref" => "stable", "enabled" => true - } + }, + mastodon: %{ + "name" => "mastodon-fe", + "ref" => "akkoma" + } ``` * `:primary` - The frontend that will be served at `/` * `:admin` - The frontend that will be served at `/pleroma/admin` * `:swagger` - Config for developers to act as an API reference to be served at `/akkoma/swaggerui/` (trailing slash _needed_). Disabled by default. +* `:mastodon` - The mastodon-fe configuration. This shouldn't need to be changed. This is served at `/web` when installed. -### :static_fe +### :static\_fe Render profiles and posts using server-generated HTML that is viewable without using JavaScript. From 366889f97c833c13d0f2a66e345a223585aa741f Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 19:05:41 +0100 Subject: [PATCH 77/82] remove default emoji file --- config/emoji.txt | 4 ---- test/config/emoji.txt | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 config/emoji.txt diff --git a/config/emoji.txt b/config/emoji.txt deleted file mode 100644 index 1d13437c9..000000000 --- a/config/emoji.txt +++ /dev/null @@ -1,4 +0,0 @@ -firefox, /emoji/Firefox.gif, Gif,Fun -blank, /emoji/blank.png, Fun -dinosaur, /emoji/dino walking.gif, Gif -100a, /emoji/100a.png, Fun diff --git a/test/config/emoji.txt b/test/config/emoji.txt index 14dd0c332..e14fc720d 100644 --- a/test/config/emoji.txt +++ b/test/config/emoji.txt @@ -1 +1,5 @@ external_emoji, https://example.com/emoji.png +firefox, /emoji/Firefox.gif, Gif,Fun +blank, /emoji/blank.png, Fun +dinosaur, /emoji/dino walking.gif, Gif +100a, /emoji/100a.png, Fun From ceeeefc7076becde96af764017b9cb5701790e13 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 19:06:49 +0100 Subject: [PATCH 78/82] we don't need to purge emoji.txt now --- .woodpecker.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 95ac1c921..32db2f1c5 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -93,7 +93,6 @@ pipeline: MIX_ENV: prod DEBIAN_FRONTEND: noninteractive commands: - - rm config/emoji.txt - apt-get update && apt-get install -y cmake libmagic-dev rclone zip imagemagick libmagic-dev git build-essential g++ wget - *clean - echo "import Config" > config/prod.secret.exs From d3b9cfb03f30cf62666a2206a3b3d30cb53ad17d Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 19:17:50 +0100 Subject: [PATCH 79/82] use :discard instead of cancel --- lib/pleroma/workers/receiver_worker.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/pleroma/workers/receiver_worker.ex b/lib/pleroma/workers/receiver_worker.ex index b8905deb5..9c3d8d1c2 100644 --- a/lib/pleroma/workers/receiver_worker.ex +++ b/lib/pleroma/workers/receiver_worker.ex @@ -12,8 +12,8 @@ def perform(%Job{args: %{"op" => "incoming_ap_doc", "params" => params}}) do with {:ok, res} <- Federator.perform(:incoming_ap_doc, params) do {:ok, res} else - {:error, :origin_containment_failed} -> {:cancel, :origin_containment_failed} - {:error, {:reject, reason}} -> {:cancel, reason} + {:error, :origin_containment_failed} -> {:discard, :origin_containment_failed} + {:error, {:reject, reason}} -> {:discard, reason} e -> e end end From 967c325b0d9d147558e3ebc7a002f092e08afc22 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 19:21:43 +0100 Subject: [PATCH 80/82] fix tests --- test/pleroma/web/federator_test.exs | 4 ++-- test/pleroma/workers/receiver_worker_test.exs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/pleroma/web/federator_test.exs b/test/pleroma/web/federator_test.exs index 3ae266ecd..c32972181 100644 --- a/test/pleroma/web/federator_test.exs +++ b/test/pleroma/web/federator_test.exs @@ -153,7 +153,7 @@ test "rejects incoming AP docs with incorrect origin" do } assert {:ok, job} = Federator.incoming_ap_doc(params) - assert {:cancel, :origin_containment_failed} = ObanHelpers.perform(job) + assert {:discard, :origin_containment_failed} = ObanHelpers.perform(job) end test "it does not crash if MRF rejects the post" do @@ -169,7 +169,7 @@ test "it does not crash if MRF rejects the post" do |> Jason.decode!() assert {:ok, job} = Federator.incoming_ap_doc(params) - assert {:cancel, _} = ObanHelpers.perform(job) + assert {:discard, _} = ObanHelpers.perform(job) end end end diff --git a/test/pleroma/workers/receiver_worker_test.exs b/test/pleroma/workers/receiver_worker_test.exs index 283beee4d..e726e6308 100644 --- a/test/pleroma/workers/receiver_worker_test.exs +++ b/test/pleroma/workers/receiver_worker_test.exs @@ -16,7 +16,7 @@ test "it ignores MRF reject" do with_mock Pleroma.Web.ActivityPub.Transmogrifier, handle_incoming: fn _ -> {:reject, "MRF"} end do - assert {:cancel, "MRF"} = + assert {:discard, "MRF"} = ReceiverWorker.perform(%Oban.Job{ args: %{"op" => "incoming_ap_doc", "params" => params} }) From 19ccdc87628eaf8730b6794c489c02458573834d Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Thu, 11 Aug 2022 19:21:50 +0100 Subject: [PATCH 81/82] mix format --- config/description.exs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/config/description.exs b/config/description.exs index 176cae58b..a44ab2432 100644 --- a/config/description.exs +++ b/config/description.exs @@ -1448,7 +1448,8 @@ %{ key: :background_color, type: :string, - description: "Describe the background color of the app - this is only used for mastodon-fe", + description: + "Describe the background color of the app - this is only used for mastodon-fe", suggestions: ["#191b22", "aliceblue"] } ] From 5192e21e53b32bb128b881ea0ee7caf6749575cf Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Fri, 12 Aug 2022 16:00:40 +0100 Subject: [PATCH 82/82] bump version to 3.1.0 --- mix.exs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mix.exs b/mix.exs index 71384c755..c6bd0e28f 100644 --- a/mix.exs +++ b/mix.exs @@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do def project do [ app: :pleroma, - version: version("3.0.1"), + version: version("3.1.0"), elixir: "~> 1.9", elixirc_paths: elixirc_paths(Mix.env()), compilers: [:phoenix, :gettext] ++ Mix.compilers(),