From dbb80c79d5ba5cc337998226ccafd52daf692593 Mon Sep 17 00:00:00 2001 From: Weblate Date: Sat, 30 Jul 2022 21:58:21 +0000 Subject: [PATCH 1/7] 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 f08241c8ab1b1f920e6c2d179fc1086b0ad10c1d Mon Sep 17 00:00:00 2001 From: Tusooa Zhu Date: Sat, 7 May 2022 00:20:50 -0400 Subject: [PATCH 2/7] 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 359510eebcb3e0d0bec30c6944fa42f41d8c9249 Mon Sep 17 00:00:00 2001 From: FloatingGhost Date: Wed, 3 Aug 2022 11:50:48 +0100 Subject: [PATCH 3/7] 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 4/7] 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 5/7] 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 6/7] 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 7/7] 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)}"}