Merge remote-tracking branch 'origin'

This commit is contained in:
778a69cd 2023-09-28 12:27:34 +02:00
commit 61d98308f4
11 changed files with 225 additions and 192 deletions

View file

@ -131,7 +131,7 @@ config :mobilizon, Mobilizon.Web.Email.Mailer,
cacerts: if :public_key.cacerts_load(System.get_env("SSL_CERT_FILE")) == :ok do
:public_key.cacerts_get()
end,
server_name_indication: "localhost",
server_name_indication: ~c"localhost",
depth: 99
],
retries: 1,

View file

@ -55,7 +55,7 @@ config :mobilizon, Mobilizon.Web.Email.Mailer,
verify: :verify_peer,
versions: [:"tlsv1.2", :"tlsv1.3"],
cacerts: :public_key.cacerts_get(),
server_name_indication: System.get_env("MOBILIZON_SMTP_SERVER", "localhost"),
server_name_indication: ~c"#{System.get_env("MOBILIZON_SMTP_SERVER", "localhost")}",
depth: 99
],
ssl: System.get_env("MOBILIZON_SMTP_SSL", "false"),

View file

@ -58,6 +58,7 @@ RUN pip install weasyprint pyexcel-ods3
RUN mkdir -p /var/lib/mobilizon/uploads && chown nobody:nobody /var/lib/mobilizon/uploads
RUN mkdir -p /var/lib/mobilizon/timezones && chown nobody:nobody /var/lib/mobilizon/timezones
RUN mkdir -p /var/lib/mobilizon/tzdata && chown nobody:nobody /var/lib/mobilizon/tzdata
RUN mkdir -p /var/lib/mobilizon/sitemap && chown nobody:nobody /var/lib/mobilizon/sitemap
RUN mkdir -p /var/lib/mobilizon/uploads/exports/{csv,pdf,ods} && chown -R nobody:nobody /var/lib/mobilizon/uploads/exports
# Get timezone geodata

View file

@ -178,7 +178,7 @@ onBeforeMount(() => {
const username = getValueFromMeta("auth-user-suggested-actor-username");
const name = getValueFromMeta("auth-user-suggested-actor-name");
if (username) {
identity.value.preferredUsername = username;
identity.value.preferredUsername = convertToUsername(username);
}
if (name) {
identity.value.name = name;

View file

@ -49,10 +49,17 @@ defmodule Mobilizon.Federation.ActivityPub.Relay do
%Actor{} = local_actor = get_actor()
with {:ok, target_instance} <- fetch_actor(address),
{:ok, %Actor{} = target_actor} <-
{:ok, %Actor{id: target_actor_id} = target_actor} <-
ActivityPubActor.get_or_fetch_actor_by_url(target_instance),
{:ok, activity, follow} <- Follows.follow(local_actor, target_actor) do
Logger.info("Relay: followed instance #{target_instance}; id=#{activity.data["id"]}")
Background.enqueue("refresh_profile", %{
"actor_id" => target_actor_id
})
Logger.info("Relay: schedule refreshing instance #{target_instance} after follow")
{:ok, activity, follow}
else
{:error, :person_no_follow} ->

View file

@ -979,19 +979,19 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
end
# If the object has been announced by a group let's use one of our members to fetch it
@spec fetch_object_optionnally_authenticated(String.t(), Actor.t() | any()) ::
@spec fetch_object_optionally_authenticated(String.t(), Actor.t() | any()) ::
{:ok, struct()} | {:error, any()}
defp fetch_object_optionnally_authenticated(url, %Actor{type: :Group, id: group_id}) do
defp fetch_object_optionally_authenticated(url, %Actor{type: :Group, id: group_id}) do
case Actors.get_single_group_member_actor(group_id) do
%Actor{} = actor ->
ActivityPub.fetch_object_from_url(url, on_behalf_of: actor, force: true)
_err ->
fetch_object_optionnally_authenticated(url, nil)
fetch_object_optionally_authenticated(url, nil)
end
end
defp fetch_object_optionnally_authenticated(url, _),
defp fetch_object_optionally_authenticated(url, _),
do: ActivityPub.fetch_object_from_url(url, force: true)
defp eventually_create_share(object, entity, actor_id) do
@ -1121,7 +1121,7 @@ defmodule Mobilizon.Federation.ActivityPub.Transmogrifier do
if Utils.are_same_origin?(url, Endpoint.url()) do
ActivityPub.fetch_object_from_url(url, force: false)
else
fetch_object_optionnally_authenticated(url, actor)
fetch_object_optionally_authenticated(url, actor)
end
end

View file

@ -175,25 +175,25 @@ defmodule Mobilizon.Web.ActivityPubController do
end
def errors(conn, {:error, :not_found}) do
conn
|> put_status(404)
|> json("Not found")
send_resp(conn, 404, "Not found")
end
def errors(conn, {:error, :bad_request}) do
send_resp(conn, 400, "Bad request")
end
def errors(conn, e) do
Logger.debug(inspect(e))
conn
|> put_status(500)
|> json("Unknown Error")
send_resp(conn, 500, "Unknown Error")
end
@spec actor_collection(Conn.t(), String.t(), map()) :: Conn.t()
defp actor_collection(conn, collection, %{"name" => name, "page" => page}) do
with {page, ""} <- Integer.parse(page),
with {:page, {page, ""}} <- {:page, Integer.parse(page)},
page <- max(page, 1),
%Actor{} = actor <- Actors.get_local_actor_by_name_with_preload(name) do
{:actor, %Actor{} = actor} <- {:actor, Actors.get_local_actor_by_name_with_preload(name)} do
conn
|> put_resp_content_type("application/activity+json")
|> json(
@ -203,11 +203,18 @@ defmodule Mobilizon.Web.ActivityPubController do
actor_applicant: Map.get(conn.assigns, :actor)
})
)
else
{:page, _} ->
{:error, :bad_request}
{:actor, _} ->
{:error, :not_found}
end
end
defp actor_collection(conn, collection, %{"name" => name}) do
with %Actor{} = actor <- Actors.get_local_actor_by_name_with_preload(name) do
case Actors.get_local_actor_by_name_with_preload(name) do
%Actor{} = actor ->
conn
|> put_resp_content_type("application/activity+json")
|> json(
@ -216,6 +223,9 @@ defmodule Mobilizon.Web.ActivityPubController do
actor_applicant: Map.get(conn.assigns, :actor)
})
)
_ ->
{:error, :not_found}
end
end

View file

@ -6,7 +6,7 @@ defmodule Mobilizon.Web.ActivityPub.ActorView do
alias Mobilizon.Discussions.Discussion
alias Mobilizon.Events.Event
alias Mobilizon.Federation.ActivityPub
alias Mobilizon.Federation.ActivityPub.{Activity, Utils}
alias Mobilizon.Federation.ActivityPub.{Activity, Relay, Utils}
alias Mobilizon.Federation.ActivityStream.Convertible
alias Mobilizon.Posts.Post
alias Mobilizon.Resources.Resource
@ -124,7 +124,21 @@ defmodule Mobilizon.Web.ActivityPub.ActorView do
end
defp fetch_collection(:outbox, actor, page) do
# In the specific case of the relay outbox collection we need to expose public activities as "Announce"
if Relay.get_actor().id == actor.id do
%{total: total, elements: elements} =
ActivityPub.fetch_public_activities_for_actor(actor, page)
%{
total: total,
elements:
Enum.map(elements, fn object ->
Utils.make_announce_data(actor, item(object), nil, true)
end)
}
else
ActivityPub.fetch_public_activities_for_actor(actor, page)
end
end
defp fetch_collection(_, _, _), do: @private_visibility_empty_collection
@ -202,6 +216,7 @@ defmodule Mobilizon.Web.ActivityPub.ActorView do
def item(%Post{} = post), do: Convertible.model_to_as(post)
def item(%Event{} = event), do: Convertible.model_to_as(event)
def item(%TodoList{} = todo_list), do: Convertible.model_to_as(todo_list)
def item(item), do: item
@spec actor_applicant_group_member?(Actor.t(), Actor.t()) :: boolean()
defp actor_applicant_group_member?(%Actor{id: group_id}, %Actor{id: actor_applicant_id}),

View file

@ -70,7 +70,7 @@ msgstr "%{profile} creó la carpeta %{resource}."
#: lib/web/templates/email/activity/_group_activity_item.text.eex:1
#, elixir-autogen, elixir-format
msgid "%{profile} created the group %{group}."
msgstr "%{profile} crfeó el grupo %{group}."
msgstr "%{profile} creó el grupo %{group}."
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:15
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8
@ -88,19 +88,19 @@ msgstr "%{profile} eliminó la discusión %{discussion}."
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40
#, elixir-autogen, elixir-format
msgid "%{profile} deleted the folder %{resource}."
msgstr "%{profile} borró la carpeta %{resource}."
msgstr "%{profile} eliminó la carpeta %{resource}."
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:94
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45
#, elixir-autogen, elixir-format
msgid "%{profile} deleted the resource %{resource}."
msgstr "%{profile} eliminado el recurso %{resource}."
msgstr "%{profile} eliminó el recurso %{resource}."
#: lib/web/templates/email/activity/_member_activity_item.html.heex:48
#: lib/web/templates/email/activity/_member_activity_item.text.eex:45
#, elixir-autogen, elixir-format
msgid "%{profile} excluded member %{member}."
msgstr "%{profile }miembro excluido %{member}."
msgstr "%{profile} excluyó al miembro %{member}."
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:64
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28
@ -118,27 +118,27 @@ msgstr "%{profile} movió el recurso %{resource}."
#: lib/web/templates/email/activity/_member_activity_item.text.eex:51
#, elixir-autogen, elixir-format
msgid "%{profile} quit the group."
msgstr "%{profile} abandona el grupo."
msgstr "%{profile} abandonó el grupo."
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:19
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13
#, elixir-autogen, elixir-format
msgid "%{profile} renamed the discussion %{discussion}."
msgstr "%{profile} renombrado la discusión %{discussion}."
msgstr "%{profile} renombró la discusión %{discussion}."
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:28
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14
#, elixir-autogen, elixir-format
msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
msgstr ""
"%{profile} ha renombrado la carpeta de %{old_resource_title} a %{resource}."
"%{profile} renombró la carpeta de %{old_resource_title} a %{resource}."
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:45
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21
#, elixir-autogen, elixir-format
msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
msgstr ""
"%{profile} ha renombrado el recurso de %{old_resource_title} a %{resource}."
"%{profile} renombró el recurso de %{old_resource_title} a %{resource}."
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:11
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7
@ -170,7 +170,7 @@ msgstr "El evento %{event} fue creado por %{profile}."
#: lib/web/templates/email/activity/_event_activity_item.text.eex:13
#, elixir-autogen, elixir-format
msgid "The event %{event} was deleted by %{profile}."
msgstr "El evento% {event} fue eliminado por % {profile}."
msgstr "El evento %{event} fue eliminado por %{profile}."
#: lib/service/activity/renderer/event.ex:33
#: lib/web/templates/email/activity/_event_activity_item.html.heex:14
@ -221,8 +221,8 @@ msgstr "%{profile} respondió a un comentario sobre el evento %{event}."
#, elixir-autogen, elixir-format
msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
msgstr ""
"¿No quieres recibir notificaciones de actividad? Puede cambiar la frecuencia "
"o deshabilitarlos en su configuración."
"¿No quieres recibir notificaciones de actividad? Puedes cambiar la frecuencia "
"o deshabilitarlos en tu configuración."
#: lib/web/templates/email/email_direct_activity.html.heex:218
#: lib/web/templates/email/email_direct_activity.text.eex:23
@ -230,7 +230,7 @@ msgstr ""
msgid "View one more activity"
msgid_plural "View %{count} more activities"
msgstr[0] "Ver una actividad más"
msgstr[1] "Ver %{count} actividades mas"
msgstr[1] "Ver %{count} actividades más"
#: lib/web/templates/email/email_direct_activity.html.heex:53
#: lib/web/templates/email/email_direct_activity.html.heex:60
@ -240,7 +240,7 @@ msgstr[1] "Ver %{count} actividades mas"
msgid "There has been an activity!"
msgid_plural "There has been some activity!"
msgstr[0] "¡Ha habido una actividad!"
msgstr[1] "¡Ha habido algopúnas actividades!"
msgstr[1] "¡Ha habido algunas actividades!"
#: lib/service/activity/renderer/renderer.ex:46
#, elixir-autogen, elixir-format
@ -254,7 +254,7 @@ msgstr "Actividad en %{instance}"
#: lib/web/templates/email/email_anonymous_activity.text.eex:5
#, elixir-autogen, elixir-format
msgid "%{profile} has posted an announcement under event %{event}."
msgstr "%{profile} ha publicado un anuncio en el evento %{event}."
msgstr "%{profile} publicó un anuncio en el evento %{event}."
#: lib/service/activity/renderer/comment.ex:24
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:3
@ -267,14 +267,14 @@ msgstr "%{profile} te mencionó en un comentario en el evento %{event}."
#, elixir-autogen, elixir-format
msgid "Don't want to receive activity notifications? You may change frequency or disable them in %{tag_start}your settings%{tag_end}."
msgstr ""
"¿No quieres recibir notificaciones de actividad? Puede cambiar la frecuencia "
"o deshabilitarlos en su configuración."
"¿No quieres recibir notificaciones de actividad? Puedes cambiar la frecuencia "
"o deshabilitarlos en tu configuración."
#: lib/web/templates/email/email_direct_activity.html.heex:51
#: lib/web/templates/email/email_direct_activity.text.eex:5
#, elixir-autogen, elixir-format
msgid "Here's your weekly activity recap"
msgstr "Aquí está su resumen de actividad semanal"
msgstr "Aquí está tu resumen de actividad semanal"
#: lib/web/email/activity.ex:121
#: lib/web/email/activity.ex:142
@ -291,7 +291,7 @@ msgstr "Resumen de actividad diaria en %{instance}"
#: lib/web/templates/email/email_direct_activity.text.eex:4
#, elixir-autogen, elixir-format
msgid "Here's your daily activity recap"
msgstr "Aquí está su resumen de actividad diaria"
msgstr "Aquí está tu resumen de actividad diaria"
#: lib/web/email/activity.ex:135
#, elixir-autogen, elixir-format
@ -315,27 +315,27 @@ msgstr "%{profile} ha publicado una nueva respuesta en tu evento %{event}."
#: lib/web/email/activity.ex:46
#, elixir-autogen, elixir-format
msgid "Announcement for your event %{event}"
msgstr "Anuncio para su evento %{event}"
msgstr "Anuncio para tu evento %{event}"
#: lib/service/activity/renderer/group.ex:23
#, elixir-autogen, elixir-format
msgid "The group %{group} was updated by %{profile}."
msgstr "El post %{post} fue actualizado por %{profile}."
msgstr "El grupo %{group} fue actualizado por %{profile}."
#: lib/service/activity/renderer/post.ex:47
#, elixir-autogen, elixir-format
msgid "The post %{post} from group %{group} was deleted by %{profile}."
msgstr "El post %{post} del grupo %{group} fue actualizado por %{profile}."
msgstr "La publicación %{post} del grupo %{group} fue actualizada por %{profile}."
#: lib/service/activity/renderer/post.ex:31
#, elixir-autogen, elixir-format
msgid "The post %{post} from group %{group} was published by %{profile}."
msgstr "El post %{post} del grupo %{group} fue actualizado por %{profile}."
msgstr "La publicación %{post} del grupo %{group} fue actualizada por %{profile}."
#: lib/service/activity/renderer/post.ex:39
#, elixir-autogen, elixir-format
msgid "The post %{post} from group %{group} was updated by %{profile}."
msgstr "El post %{post} del grupo %{group} fue actualizado por %{profile}."
msgstr "La publicación %{post} del grupo %{group} fue actualizada por %{profile}."
#: lib/service/activity/renderer/member.ex:39
#, elixir-autogen, elixir-format
@ -355,117 +355,117 @@ msgstr "%{member} rechazó la invitación para unirse al grupo."
#: lib/service/activity/renderer/member.ex:31
#, elixir-autogen, elixir-format
msgid "%{member} requested to join the group %{group}."
msgstr "%{member} solicitó unirse al grupo."
msgstr "%{member} solicitó unirse al grupo %{group}."
#: lib/service/activity/renderer/member.ex:35
#, elixir-autogen, elixir-format
msgid "%{member} was invited by %{profile} to group %{group}."
msgstr "%{member} fue invitado por %{profile}."
msgstr "%{member} fue invitado por %{profile} al grupo %{group}."
#: lib/service/activity/renderer/member.ex:51
#, elixir-autogen, elixir-format
msgid "%{profile} added the member %{member} to group %{group}."
msgstr "%{profile} agregó el miembro %{member}."
msgstr "%{profile} agregó el miembro %{member} al grupo %{group}."
#: lib/service/activity/renderer/member.ex:55
#, elixir-autogen, elixir-format
msgid "%{profile} approved the membership request from %{member} for group %{group}."
msgstr "%{profile} actualizado el miembro %{member}."
msgstr "%{profile} ha aprobado el pedido de adhesión de %{member} al grupo %{group}."
#: lib/service/activity/renderer/resource.ex:33
#, elixir-autogen, elixir-format
msgid "%{profile} created the folder %{resource} in group %{group}."
msgstr "%{profile} creó la carpeta %{resource}."
msgstr "%{profile} creó la carpeta %{resource} en el grupo %{group}."
#: lib/service/activity/renderer/resource.ex:69
#, elixir-autogen, elixir-format
msgid "%{profile} deleted the folder %{resource} in group %{group}."
msgstr "%{profile} borró la carpeta %{resource}."
msgstr "%{profile} borró la carpeta %{resource} del grupo %{group}."
#: lib/service/activity/renderer/resource.ex:71
#, elixir-autogen, elixir-format
msgid "%{profile} deleted the resource %{resource} in group %{group}."
msgstr "%{profile} eliminado el recurso %{resource}."
msgstr "%{profile} eliminado el recurso %{resource} del grupo %{group}."
#: lib/service/activity/renderer/member.ex:75
#, elixir-autogen, elixir-format
msgid "%{profile} excluded member %{member} from the group %{group}."
msgstr "%{profile }miembro excluido %{member}."
msgstr "%{profile} excluyó al miembro %{member} del grupo %{group}."
#: lib/service/activity/renderer/resource.ex:61
#, elixir-autogen, elixir-format
msgid "%{profile} moved the folder %{resource} in group %{group}."
msgstr "%{profile} movió la carpeta %{resource}."
msgstr "%{profile} movió la carpeta %{resource} en el grupo %{group}."
#: lib/service/activity/renderer/resource.ex:63
#, elixir-autogen, elixir-format
msgid "%{profile} moved the resource %{resource} in group %{group}."
msgstr "%{profile} movió el recurso %{resource}."
msgstr "%{profile} movió el recurso %{resource} en el grupo %{group}."
#: lib/service/activity/renderer/member.ex:79
#, elixir-autogen, elixir-format
msgid "%{profile} quit the group %{group}."
msgstr "%{profile} abandona el grupo."
msgstr "%{profile} salió del grupo %{group}."
#: lib/service/activity/renderer/member.ex:63
#, elixir-autogen, elixir-format
msgid "%{profile} rejected the membership request from %{member} for group %{group}."
msgstr "%{profile} rechazó la solicitud de inscripción de %{member}."
msgstr "%{profile} rechazó la solicitud de adhesión de %{member} al grupo %{group}."
#: lib/service/activity/renderer/resource.ex:45
#, elixir-autogen, elixir-format
msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource} in group %{group}."
msgstr ""
"%{profile} ha renombrado la carpeta de %{old_resource_title} a %{resource}."
"%{profile} renombró la carpeta de %{old_resource_title} a %{resource} en el grupo %{group}."
#: lib/service/activity/renderer/resource.ex:51
#, elixir-autogen, elixir-format
msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource} in group %{group}."
msgstr ""
"%{profile} ha renombrado el recurso de %{old_resource_title} a %{resource}."
"%{profile} renombró el recurso de %{old_resource_title} a %{resource} en el grupo %{group}."
#: lib/service/activity/renderer/member.ex:71
#, elixir-autogen, elixir-format
msgid "%{profile} updated the member %{member} in group %{group}."
msgstr "%{profile} actualizado el miembro %{member}."
msgstr "%{profile} actualizó el miembro %{member} en el grupo %{group}."
#: lib/service/activity/renderer/resource.ex:35
#, elixir-autogen, elixir-format
msgid "%{profile} created the resource %{resource} in group %{group}."
msgstr "%{profile} creó el recurso %{resource}."
msgstr "%{profile} creó el recurso %{resource} en el grupo %{group}."
#: lib/service/activity/renderer/discussion.ex:86
#, elixir-autogen, elixir-format
msgid "%{profile} archived the discussion %{discussion} in group %{group}."
msgstr "%{profile} archivó la discusión %{discussion}."
msgstr "%{profile} archivó la discusión %{discussion} en el grupo %{group}."
#: lib/service/activity/renderer/discussion.ex:26
#, elixir-autogen, elixir-format
msgid "%{profile} created the discussion %{discussion} in group %{group}."
msgstr "%{profile} creó la discusión %{discussion} del grupo %{group}."
msgstr "%{profile} creó la discusión %{discussion} en el grupo %{group}."
#: lib/service/activity/renderer/discussion.ex:101
#, elixir-autogen, elixir-format
msgid "%{profile} deleted the discussion %{discussion} in group %{group}."
msgstr "%{profile} eliminó la discusión %{discussion} en el grupo %{group}."
msgstr "%{profile} eliminó la discusión %{discussion} del grupo %{group}."
#: lib/service/activity/renderer/discussion.ex:56
#, elixir-autogen, elixir-format
msgid "%{profile} mentionned you in the discussion %{discussion} in group %{group}."
msgstr "%{profile} te mencionó en la %{discusión} grupo de discusión %{group}."
msgstr "%{profile} te mencionó en la discusión %{discussion} en el grupo %{group}."
#: lib/service/activity/renderer/discussion.ex:71
#, elixir-autogen, elixir-format
msgid "%{profile} renamed the discussion %{discussion} in group %{group}."
msgstr "%{profile} renombrado la discusión %{discussion} del grupo% {group}.."
msgstr "%{profile} renombró la discusión %{discussion} en el grupo %{group}."
#: lib/service/activity/renderer/discussion.ex:41
#, elixir-autogen, elixir-format
msgid "%{profile} replied to the discussion %{discussion} in group %{group}."
msgstr "%{profile} respondió a la discusión %{discussion}en el grupo %{group}."
msgstr "%{profile} respondió a la discusión %{discussion} del grupo %{group}."
#: lib/web/templates/email/activity/_member_activity_item.html.heex:36
#: lib/web/templates/email/activity/_member_activity_item.text.eex:33
#, elixir-autogen, elixir-format
msgid "%{profile} approved the member %{member}."
msgstr "%{profile} agregó el miembro %{member}."
msgstr "%{profile} aprobó al miembro %{member}."

View file

@ -281,8 +281,8 @@ msgstr ""
"Si este servidor se encuentra en la UE o en el EEE: nuestro sitio, nuestros "
"productos y servicios están dirigidos a personas que tienen al menos 16 años "
"de edad. Si es menor de 16 años, según los requisitos del RGPD (<a href="
"\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\"> "
"Reglamento general de protección de datos </a>) no utilice este sitio ."
"\"https://en.wikipedia.org/wiki/General_Data_Protection_Regulation\">"
"Reglamento general de protección de datos</a>) no utilice este sitio ."
#: lib/web/templates/api/privacy.html.heex:146
#, elixir-autogen, elixir-format
@ -292,8 +292,8 @@ msgstr ""
"Si este servidor está en los EE. UU .: nuestro sitio, nuestros productos y "
"servicios están dirigidos a personas que tienen al menos 13 años de edad. Si "
"es menor de 13 años, según los requisitos de COPPA (<a href=\"https://en."
"wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\"> Ley de "
"protección de la privacidad en línea para niños </a>) no utilice este sitio."
"wikipedia.org/wiki/Children%27s_Online_Privacy_Protection_Act\">Ley de "
"protección de la privacidad en línea para niños</a>) no utilice este sitio."
#: lib/web/templates/api/privacy.html.heex:160
#, elixir-autogen, elixir-format
@ -630,12 +630,12 @@ msgstr "Su contenido y conducta"
msgctxt "terms"
msgid "<b>%{instance_name}</b> makes no claim or representation regarding, and accepts no responsibility for third party websites accessible by hyperlink from the Service or websites linking to the Service. When you leave the Service, you should be aware that these Terms and our policies no longer govern. The inclusion of any link does not imply endorsement by <b>%{instance_name}</b> of the site. Use of any such linked website is at the user's own risk."
msgstr ""
"<b>% {instance_name} </b> no hace ningún reclamo o representación con "
"<b>%{instance_name}</b> no hace ningún reclamo o representación con "
"respecto, y no acepta ninguna responsabilidad por sitios web de terceros "
"accesibles por hipervínculo desde el Servicio o sitios web que enlazan al "
"Servicio. Cuando abandone el Servicio, debe tener en cuenta que estos "
"Términos y nuestras políticas ya no rigen. La inclusión de cualquier enlace "
"no implica la aprobación por <b>% {instance_name} </b> del sitio. El uso de "
"no implica la aprobación por <b>%{instance_name}</b> del sitio. El uso de "
"cualquier sitio web vinculado es bajo el propio riesgo del usuario."
#: lib/web/templates/api/terms.html.heex:224
@ -644,7 +644,7 @@ msgctxt "terms"
msgid "Finally, your use of the Service is also subject to acceptance of <a href=\"/rules\">the instance's own specific rules</a> regarding the code of conduct and moderation rules. Breaking those rules may also result in your account being disabled or suspended."
msgstr ""
"Finalmente, su uso del Servicio también está sujeto a la aceptación de <a "
"href=\"/rules\"> las reglas específicas de la instancia </a> con respecto al "
"href=\"/rules\">las reglas específicas de la instancia</a> con respecto al "
"código de conducta y las reglas de moderación. Romper esas reglas también "
"puede resultar en que su cuenta sea deshabilitada o suspendida."
@ -682,7 +682,7 @@ msgstr ""
msgctxt "terms"
msgid "In order to make <b>%{instance_name}</b> a great place for all of us, please do not post, link and otherwise make available on or through the Service any of the following:"
msgstr ""
"Para que <b>% {instance_name} </b> sea un gran lugar para todos nosotros, no "
"Para que <b>%{instance_name}</b> sea un gran lugar para todos nosotros, no "
"publique, enlace ni ponga a disposición en el Servicio ni a través de él "
"ninguno de los siguientes:"
@ -753,7 +753,7 @@ msgstr ""
msgctxt "terms"
msgid "Questions or comments about the Service may be directed to us at %{contact}"
msgstr ""
"Las preguntas o comentarios sobre el Servicio pueden dirigirse a% {contact}"
"Las preguntas o comentarios sobre el Servicio pueden dirigirse a %{contact}"
#: lib/web/templates/api/terms.html.heex:245
#, elixir-autogen, elixir-format
@ -1012,8 +1012,8 @@ msgid "Hi there! It seems like you wanted to change the email address linked to
msgstr ""
"¡Hola! Parece que desea cambiar la dirección de correo electrónico vinculada "
"a su cuenta en <b>%{instance} </b>. Si aún desea hacerlo, haga clic en el "
"botón de abajo para confirmar el cambio. Luego podrá iniciar sesión en% "
"{instance} con esta nueva dirección de correo electrónico."
"botón de abajo para confirmar el cambio. Luego podrá iniciar sesión en "
"%{instance} con esta nueva dirección de correo electrónico."
#: lib/web/templates/email/email_changed_old.text.eex:3
#, elixir-autogen, elixir-format
@ -1249,14 +1249,14 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "<b>%{inviter}</b> just invited you to join their group %{link_start}<b>%{group}</b>%{link_end}"
msgstr ""
"<b>%{inviter} </b> le acaba de invitar a unirse a su grupo% {link_start} <b>"
"%{group </b>%{link_end}"
"<b>%{inviter}</b> le acaba de invitar a unirse a su grupo %{link_start}<b>"
"%{group}</b>%{link_end}"
#: lib/web/templates/email/group_member_removal.html.heex:47
#, elixir-autogen, elixir-format
msgid "You have been removed from group %{link_start}<b>%{group}</b>%{link_end}. You will not be able to access this group's private content anymore."
msgstr ""
"Ha sido eliminado del grupo% {link_start} <b>%{group} </b>% {link_end}. Ya "
"Ha sido eliminado del grupo %{link_start}<b>%{group}</b>%{link_end}. Ya "
"no podrá acceder al contenido privado de este grupo."
#: lib/web/templates/email/group_suspension.html.heex:81
@ -1678,16 +1678,16 @@ msgstr ""
#: lib/web/email/actor.ex:43
#, elixir-autogen, elixir-format
msgid "Your participation to %{event} has been cancelled!"
msgstr "Su participación en el evento %{title} ¡ha sido cancelada!"
msgstr "Su participación en el evento %{event} ¡ha sido cancelada!"
#: lib/web/templates/email/actor_suspension_participants.html.heex:50
#: lib/web/templates/email/actor_suspension_participants.text.eex:3
#, elixir-autogen, elixir-format
msgid "Your instance's moderation team has decided to suspend %{actor_name} (%{actor_address}). All of their events have been removed and your participation to event %{event} cancelled."
msgstr ""
"El equipo de moderación de tu instancia ha decidido suspender a%{actor_name} "
"El equipo de moderación de tu instancia ha decidido suspender a %{actor_name} "
"(%{actor_address}). Se eliminaron todos sus eventos y se canceló su "
"participación en el evento % {event}."
"participación en el evento %{event}."
#: lib/web/templates/email/group_suspension.html.heex:50
#, elixir-autogen, elixir-format
@ -1747,7 +1747,7 @@ msgstr "Moderador"
#: lib/service/export/participants/common.ex:37
#, elixir-autogen, elixir-format
msgid "Not approved"
msgstr "Sin aprovar"
msgstr "Sin aprobar"
#: lib/service/export/participants/common.ex:40
#, elixir-autogen, elixir-format
@ -1772,7 +1772,7 @@ msgstr "Comienza en"
#: lib/web/templates/export/event_participants.html.heex:125
#, elixir-autogen, elixir-format
msgid "Ends on"
msgstr "Final"
msgstr "Termina en"
#: lib/web/templates/export/event_participants.html.heex:132
#, elixir-autogen, elixir-format
@ -1782,7 +1782,7 @@ msgstr "Número de participantes"
#: lib/web/templates/export/event_participants.html.heex:120
#, elixir-autogen, elixir-format
msgid "Participants for %{event}"
msgstr "Participación aprobada"
msgstr "Participantes para %{event}"
#: lib/service/export/participants/common.ex:88
#, elixir-autogen, elixir-format
@ -1806,13 +1806,13 @@ msgstr "%{date_time} (%{timezone} %{offset})"
#: lib/web/templates/email/date/event_tz_date.text.eex:1
#, elixir-autogen, elixir-format
msgid "%{date_time} (in your timezone %{timezone} %{offset})"
msgstr "%{date_time} (en tu zona horaria% {timezone} %{offset})"
msgstr "%{date_time} (en tu zona horaria %{timezone} %{offset})"
#: lib/web/templates/email/notification_each_week.html.heex:18
#: lib/web/templates/email/notification_each_week.text.eex:1
#, elixir-autogen, elixir-format
msgid "On the agenda this week"
msgstr "Un evento programado para hoy"
msgstr "En la agenda para esta semana"
#: lib/web/templates/email/participation/event_card.html.heex:113
#, elixir-autogen, elixir-format
@ -1834,12 +1834,12 @@ msgstr "Gestiona tu participación"
#: lib/web/templates/email/date/event_tz_date_range.text.eex:1
#, elixir-autogen, elixir-format
msgid "On %{date} from %{start_time} to %{end_time}"
msgstr "El %{date} del % {start_time} al %{end_time}"
msgstr "El %{date} desde %{start_time} hasta %{end_time}"
#: lib/web/templates/email/participation/event_card.html.heex:132
#, elixir-autogen, elixir-format
msgid "Read more"
msgstr "Lee mas"
msgstr "Leer mas"
#: lib/web/templates/email/participation/card/_metadata.html.heex:121
#: lib/web/templates/email/participation/card/_metadata.text.eex:2
@ -1886,7 +1886,7 @@ msgstr "Gestiona tu participación:"
#: lib/web/templates/email/participation/card/_title.text.eex:3
#, elixir-autogen, elixir-format
msgid "Organizer: %{organizer}"
msgstr "Organizador: %{organizer}"
msgstr "Organiza: %{organizer}"
#: lib/web/templates/email/participation/event_card.html.heex:91
#, elixir-autogen, elixir-format
@ -1943,36 +1943,36 @@ msgstr "¡Vas!"
#: lib/web/email/member.ex:61
#, elixir-autogen, elixir-format
msgid "Your membership request for group %{group} has been approved"
msgstr "Su solicitud de adesión para el grupo %{group} ha sido aprobada"
msgstr "Tu solicitud de adhesión para el grupo %{group} ha sido aprobada"
#: lib/web/email/member.ex:88
#, elixir-autogen, elixir-format
msgid "Your membership request for group %{group} has been rejected"
msgstr "Su solicitud de adesión para el grupo %{group} ha sido rechazada"
msgstr "Tu solicitud de adhesión para el grupo %{group} ha sido rechazada"
#: lib/web/templates/email/group_membership_rejection.text.eex:3
#, elixir-autogen, elixir-format
msgid "Your membership request for group %{group} has been rejected."
msgstr "Su solicitud de adesión para el grupo %{group} ha sido rechazada."
msgstr "Tu solicitud de adhesión para el grupo %{group} ha sido rechazada."
#: lib/web/templates/email/group_membership_rejection.html.heex:47
#, elixir-autogen, elixir-format
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
"Su solicitud de membresía para el grupo %{link_start}<b>% {group}</b>% "
"{link_end} ha sido rechazada."
"Tu solicitud de adhesión para el grupo %{link_start}<b>%{group}</"
"b>%{link_end} ha sido rechazada."
#: lib/web/templates/email/group_membership_approval.text.eex:3
#, elixir-autogen, elixir-format
msgid "Your membership request for group %{group} has been approved."
msgstr "Su solicitud de adesión para el grupo% {group} ha sido aprobada."
msgstr "Tu solicitud de adhesión para el grupo %{group} ha sido aprobada."
#: lib/web/templates/email/group_membership_approval.html.heex:47
#, elixir-autogen, elixir-format
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
"Su solicitud de adesión para el grupo %{link_start}<b>%{group}</b>"
"%{link_end} ha sido aprobada."
"Tu solicitud de adhesión para el grupo %{link_start}<b>%{group}</"
"b>%{link_end} ha sido aprobada."
#: lib/web/templates/email/pending_participation_notification.html.heex:47
#: lib/web/templates/email/pending_participation_notification.text.eex:4
@ -1988,12 +1988,12 @@ msgstr[1] ""
#: lib/web/templates/email/admin_user_role_changed.text.eex:1
#, elixir-autogen, elixir-format
msgid "An administrator changed your role"
msgstr "Un administrador cambió su rol"
msgstr "Un administrador cambió tu rol"
#: lib/web/email/admin.ex:122
#, elixir-autogen, elixir-format
msgid "An administrator confirmed your account on %{instance}"
msgstr "Un administrador confirmó su cuenta en %{instance}"
msgstr "Un administrador confirmó tu cuenta en %{instance}"
#: lib/web/templates/email/admin_user_email_changed_new.html.heex:18
#: lib/web/templates/email/admin_user_email_changed_new.text.eex:1
@ -2001,74 +2001,74 @@ msgstr "Un administrador confirmó su cuenta en %{instance}"
#: lib/web/templates/email/admin_user_email_changed_old.text.eex:1
#, elixir-autogen, elixir-format
msgid "An administrator manually changed the email attached to your account"
msgstr "Un administrador confirmó su cuenta en %{instance}"
msgstr "Un administrador confirmó tu cuenta en %{instance}"
#: lib/web/email/admin.ex:43
#: lib/web/email/admin.ex:70
#, elixir-autogen, elixir-format
msgid "An administrator manually changed the email attached to your account on %{instance}"
msgstr ""
"Un administrador cambió manualmente el correo electrónico adjunto a su "
"Un administrador cambió manualmente el correo electrónico adjunto a tu "
"cuenta en %{instance}"
#: lib/web/templates/email/admin_user_confirmation.html.heex:18
#: lib/web/templates/email/admin_user_confirmation.text.eex:1
#, elixir-autogen, elixir-format
msgid "An administrator manually confirmed your account"
msgstr "Un administrador confirmó manualmente su cuenta"
msgstr "Un administrador confirmó manualmente tu cuenta"
#: lib/web/email/admin.ex:98
#, elixir-autogen, elixir-format
msgid "An administrator updated your role on %{instance}"
msgstr "Un administrador actualizó su rol en %{instance}"
msgstr "Un administrador actualizó tu rol en %{instance}"
#: lib/web/templates/email/email_changed_new.text.eex:3
#, elixir-autogen, elixir-format
msgid "Hi there! It seems like you wanted to change the email address linked to your account on %{instance}. If you still wish to do so, please click the button below to confirm the change. You will then be able to log in to %{instance} with this new email address."
msgstr ""
"¡Hola! Parece que desea cambiar la dirección de correo electrónico vinculada "
"a su cuenta en %{instance} . Si aún desea hacerlo, haga clic en el botón de "
"abajo para confirmar el cambio. Luego podrá iniciar sesión en% {instance} "
"con esta nueva dirección de correo electrónico."
"¡Hola! Parece que deseas cambiar la dirección de correo electrónico vinculada "
"a tu cuenta en %{instance}. Si aún deseas hacerlo, haz clic en el botón de "
"abajo para confirmar el cambio. Luego podrás iniciar sesión en %{instance} con "
"esta nueva dirección de correo electrónico."
#: lib/web/templates/email/admin_user_email_changed_new.text.eex:3
#: lib/web/templates/email/admin_user_email_changed_old.text.eex:3
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from %{instance} just manually changed your account email from %{old_email} (this one) to %{new_email}."
msgstr ""
"Hola ! Solo queríamos informarle que un administrador de %{instance} acaba "
"¡Hola! Solo queríamos informarte que un administrador de %{instance}, acaba "
"de cambiar manualmente el correo electrónico de su cuenta de %{old_email} "
"(este) a %{new_mail}."
"(éste) a %{new_email}."
#: lib/web/templates/email/admin_user_confirmation.text.eex:3
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from %{instance} just manually confirmed your account."
msgstr ""
"¡Hola! Solo queríamos informarle que un administrador de %{instance} acaba "
"¡Hola! Solo queríamos informarte que un administrador de %{instance} acaba "
"de confirmar manualmente su cuenta."
#: lib/web/templates/email/admin_user_email_changed_old.html.heex:47
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from <b>%{instance}</b> just manually changed your account email from <b>%{old_email}</b> (this one) to <b>%{new_email}</b>."
msgstr ""
"¡Hola! Solo queríamos informarle que un administrador de<b>%{instance}</b> "
"cambió manualmente el correo electrónico de su cuenta de <b>%{old_email}</b> "
"¡Hola! Solo queríamos informarte que un administrador de <b>%{instance}</b>, "
"cambió manualmente el correo electrónico de tu cuenta de <b>%{old_email}</b> "
"(este) a <b>%{new_email}</b>."
#: lib/web/templates/email/admin_user_email_changed_new.html.heex:47
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from <b>%{instance}</b> just manually changed your account email from <b>%{old_email}</b> to <b>%{new_email}</b> (this one)."
msgstr ""
"¡Hola! Solo queríamos informarles que un administrador de <b>%{instance}</b> "
"acaba de cambiar manualmente el correo electrónico de su cuenta de <b>"
"%{old_email}</b> a <b>%{new_email}</b> (Éste)."
"¡Hola! Solo queríamos informarte que un administrador de <b>%{instance}</b> "
"acaba de cambiar manualmente el correo electrónico de tu cuenta de <b>"
"%{old_email}</b> a <b>%{new_email}</b> (éste)."
#: lib/web/templates/email/admin_user_confirmation.html.heex:47
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from <b>%{instance}</b> just manually confirmed your account."
msgstr ""
"¡Hola! Solo queríamos informarle que un administrador de <b>%{instance}</b> "
"acaba de confirmar manualmente su cuenta."
"¡Hola! Solo queríamos informarte que un administrador de <b>%{instance}</b> "
"acaba de confirmar manualmente tu cuenta."
#: lib/web/templates/email/admin_user_confirmation.html.heex:96
#: lib/web/templates/email/admin_user_email_changed_new.html.heex:62
@ -2077,7 +2077,7 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "If something doesn't feel right to you, please contact the instance administrator through the contact methods %{start_link}on the instance's about page%{end_link}."
msgstr ""
"Si algo no le parece correcto, comuníquese con el administrador de la "
"Si algo no te parece correcto, comunícate con el administrador de la "
"instancia a través de los métodos de contacto %{start_link}en la página de "
"información de la instancia%{end_link}."
@ -2088,14 +2088,14 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "If something doesn't feel right to you, please contact the instance administrator through the contact methods on the instance's about page: %{about_page}."
msgstr ""
"Si algo no le parece correcto, comuníquese con el administrador de la "
"Si algo no te parece correcto, comuníquese con el administrador de la "
"instancia a través de los métodos de contacto en la página acerca de la "
"instancia: %{about_page}."
#: lib/web/templates/email/admin_user_confirmation.html.heex:79
#, elixir-autogen, elixir-format
msgid "Login on %{instance}"
msgstr "Inicia sesión en {instancia}"
msgstr "Inicia sesión en %{instance}"
#: lib/web/templates/email/admin_user_role_changed.html.heex:72
#, elixir-autogen, elixir-format
@ -2110,7 +2110,7 @@ msgstr "Nuevo rol:"
#: lib/web/templates/email/admin_user_role_changed.html.heex:64
#, elixir-autogen, elixir-format
msgid "Old role"
msgstr "Viejo papel"
msgstr "Viejo rol"
#: lib/web/templates/email/admin_user_role_changed.text.eex:5
#, elixir-autogen, elixir-format
@ -2126,26 +2126,26 @@ msgstr "Usuario"
#: lib/web/templates/email/admin_user_confirmation.html.heex:62
#, elixir-autogen, elixir-format
msgid "You may now login using your credentials on the service."
msgstr "Ahora puede iniciar sesión con sus credenciales en el servicio."
msgstr "Ahora puedes iniciar sesión con tus credenciales en el servicio."
#: lib/web/templates/email/admin_user_confirmation.text.eex:5
#, elixir-autogen, elixir-format
msgid "You may now login using your credentials on the service:"
msgstr "Ahora puede iniciar sesión con sus credenciales en el servicio:"
msgstr "Ahora puedes iniciar sesión con tus credenciales en el servicio:"
#: lib/web/templates/email/admin_user_role_changed.text.eex:3
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from %{instance} just changed your account role."
msgstr ""
"¡Hola! Solo queríamos informarle que un administrador de <b%>{instance}</b> "
"acaba de cambiar el rol de su cuenta."
"¡Hola! Solo queríamos informarte que un administrador de <b>%{instance}</b> "
"acaba de cambiar el rol de tu cuenta."
#: lib/web/templates/email/admin_user_role_changed.html.heex:47
#, elixir-autogen, elixir-format
msgid "Hi there! We just wanted to inform you that an administrator from <b>%{instance}</b> just changed your account role."
msgstr ""
"¡Hola! Solo queríamos informarle que un administrador de <b>{instance}</b> "
"acaba de cambiar el rol de su cuenta."
"¡Hola! Solo queríamos informarte que un administrador de <b>%{instance}</b> "
"acaba de cambiar el rol de tu cuenta."
#: lib/web/templates/email/instance_follow.text.eex:5
#, elixir-autogen, elixir-format
@ -2168,7 +2168,7 @@ msgstr "Si acepta, este perfil recibirá todos sus eventos públicos."
#, elixir-autogen, elixir-format
msgid "To accept this invitation, head over to the profile's admin page."
msgstr ""
"Para aceptar esta invitación, diríjase a la página de administración del "
"Para aceptar esta invitación, diríjete a la página de administración del "
"perfil."
#: lib/web/templates/email/instance_follow.html.heex:110
@ -2255,7 +2255,7 @@ msgstr "LGBTQ"
#: lib/mobilizon/events/categories.ex:92
#, elixir-autogen, elixir-format
msgid "Language & Culture"
msgstr "Lenguage y cultura"
msgstr "Lenguaje y cultura"
#: lib/mobilizon/events/categories.ex:96
#, elixir-autogen, elixir-format
@ -2340,7 +2340,7 @@ msgstr "Activar mi cuenta:"
#: lib/web/email/follow.ex:49
#, elixir-autogen, elixir-format
msgid "Instance %{domain} requests to follow your instance"
msgstr "La instancia %{name} (%{domain}) solicita seguir tu instancia"
msgstr "La instancia %{domain} solicita seguir tu instancia"
#: lib/web/templates/email/instance_follow.html.heex:68
#: lib/web/templates/email/instance_follow.text.eex:7
@ -2354,4 +2354,4 @@ msgstr ""
#: lib/web/templates/email/group_member_removal.text.eex:1
#, elixir-autogen, elixir-format
msgid "Until next time!"
msgstr "¡Hasta la proxima vez!"
msgstr "¡Hasta la próxima vez!"

View file

@ -21,7 +21,7 @@ msgstr ""
#: lib/mobilizon/discussions/discussion.ex:69
#, elixir-autogen
msgid "can't be blank"
msgstr "no pueden estar vacíos"
msgstr "no puede estar vacíos"
msgid "has already been taken"
msgstr "ya se ha tomado"
@ -36,13 +36,13 @@ msgid "has invalid format"
msgstr "tiene formato no válido"
msgid "has an invalid entry"
msgstr "tiene una entrada inválida"
msgstr "tiene una entrada no válida"
msgid "is reserved"
msgstr "Está reservado"
msgstr "está reservado"
msgid "does not match confirmation"
msgstr "la confirmación no coincide"
msgstr "no coincide con la confirmación"
msgid "is still associated with this entry"
msgstr "todavía está asociado con esta entrada"
@ -53,47 +53,47 @@ msgstr "todavía están asociados con esta entrada"
msgid "should be %{count} character(s)"
msgid_plural "should be %{count} character(s)"
msgstr[0] "debe tener un carácter"
msgstr[1] "debe tener% {count} caracteres"
msgstr[1] "debe tener %{count} caracteres"
msgid "should have %{count} item(s)"
msgid_plural "should have %{count} item(s)"
msgstr[0] "debería tener un artículo"
msgstr[1] "debería tener% {count} artículos"
msgstr[0] "debe tener un artículo"
msgstr[1] "debe tener %{count} artículos"
msgid "should be at least %{count} character(s)"
msgid_plural "should be at least %{count} character(s)"
msgstr[0] "debe tener al menos un carácter"
msgstr[1] "debe tener al menos% {count} caracteres"
msgstr[1] "debe tener al menos %{count} caracteres"
msgid "should have at least %{count} item(s)"
msgid_plural "should have at least %{count} item(s)"
msgstr[0] "debe tener al menos un elemento"
msgstr[1] "debe tener al menos% {count} elementos"
msgstr[1] "debe tener al menos %{count} elementos"
msgid "should be at most %{count} character(s)"
msgid_plural "should be at most %{count} character(s)"
msgstr[0] "debe tener como máximo un carácter"
msgstr[1] "debe tener como máximo% {count} caracteres"
msgstr[1] "debe tener como máximo %{count} caracteres"
msgid "should have at most %{count} item(s)"
msgid_plural "should have at most %{count} item(s)"
msgstr[0] "debe tener como máximo un artículo"
msgstr[1] "debe tener como máximo% {count} artículos"
msgstr[1] "debe tener como máximo %{count} artículos"
msgid "must be less than %{number}"
msgstr "debe ser inferior a% {number}"
msgstr "debe ser inferior a %{number}"
msgid "must be greater than %{number}"
msgstr "debe ser mayor que% {number}"
msgstr "debe ser mayor que %{number}"
msgid "must be less than or equal to %{number}"
msgstr "debe ser menor o igual que% {number}"
msgstr "debe ser menor o igual que%{number}"
msgid "must be greater than or equal to %{number}"
msgstr "debe ser mayor o igual que% {number}"
msgstr "debe ser mayor o igual que %{number}"
msgid "must be equal to %{number}"
msgstr "debe ser igual a% {number}"
msgstr "debe ser igual a %{number}"
#: lib/graphql/resolvers/user.ex:116
#, elixir-autogen, elixir-format
@ -130,7 +130,7 @@ msgstr "Grupo no encontrado"
#: lib/graphql/resolvers/group.ex:102
#, elixir-autogen, elixir-format
msgid "Group with ID %{id} not found"
msgstr "No se encontró el grupo con ID% {id}"
msgstr "No se encontró el grupo con ID%{id}"
#: lib/graphql/resolvers/user.ex:94
#, elixir-autogen, elixir-format
@ -228,7 +228,7 @@ msgstr "Este usuario ha sido inhabilitado"
#: lib/graphql/resolvers/user.ex:283
#, elixir-autogen, elixir-format
msgid "Unable to validate user"
msgstr "No se puede validar al usuario"
msgstr "No se puede validar el usuario"
#: lib/graphql/resolvers/user.ex:554
#, elixir-autogen, elixir-format
@ -258,7 +258,7 @@ msgstr "No puedes unirte a este grupo"
#: lib/graphql/resolvers/group.ex:132
#, elixir-autogen, elixir-format
msgid "You may not list groups unless moderator."
msgstr "No puedes enumerar grupos a menos que seas moderador."
msgstr "No puedes listar grupos a menos que seas moderador."
#: lib/graphql/resolvers/user.ex:519
#, elixir-autogen, elixir-format
@ -283,7 +283,7 @@ msgstr "Debes iniciar sesión para eliminar su cuenta"
#: lib/graphql/resolvers/group.ex:316
#, elixir-autogen, elixir-format
msgid "You need to be logged-in to join a group"
msgstr "Debes iniciar sesión para eliminar su cuenta"
msgstr "Debes iniciar sesión para unirte a un grupo"
#: lib/graphql/resolvers/group.ex:355
#, elixir-autogen, elixir-format
@ -411,7 +411,7 @@ msgstr "Evento no encontrado"
#: lib/graphql/resolvers/participant.ex:336
#, elixir-autogen, elixir-format
msgid "Event with this ID %{id} doesn't exist"
msgstr "El evento con este ID%{id} no existe"
msgstr "El evento con el ID %{id} no existe"
#: lib/graphql/resolvers/participant.ex:103
#, elixir-autogen, elixir-format
@ -421,7 +421,7 @@ msgstr "Error interno"
#: lib/graphql/resolvers/discussion.ex:219
#, elixir-autogen, elixir-format
msgid "No discussion with ID %{id}"
msgstr "Sin discusión con ID%{id}"
msgstr "Sin discusión con ID %{id}"
#: lib/graphql/resolvers/todos.ex:80
#: lib/graphql/resolvers/todos.ex:107
@ -440,7 +440,7 @@ msgstr "No existe tal token de alimentación"
#: lib/graphql/resolvers/participant.ex:259
#, elixir-autogen, elixir-format
msgid "Participant already has role %{role}"
msgstr "El participante ya tiene el rol%{role}"
msgstr "El participante ya tiene el rol %{role}"
#: lib/graphql/resolvers/participant.ex:187
#: lib/graphql/resolvers/participant.ex:220
@ -452,7 +452,7 @@ msgstr "Participante no encontrado"
#: lib/graphql/resolvers/person.ex:33
#, elixir-autogen, elixir-format
msgid "Person with ID %{id} not found"
msgstr "Persona con ID%{id} no encontrada"
msgstr "Persona con ID %{id} no encontrada"
#: lib/graphql/resolvers/person.ex:57
#, elixir-autogen, elixir-format
@ -530,7 +530,7 @@ msgstr "Este token no es válido"
#: lib/graphql/resolvers/todos.ex:243
#, elixir-autogen, elixir-format
msgid "Todo doesn't exist"
msgstr "Todo no existe"
msgstr "La tarea pendiente no existe"
#: lib/graphql/resolvers/todos.ex:77
#: lib/graphql/resolvers/todos.ex:211
@ -568,7 +568,7 @@ msgstr "Ya eres participante de este evento"
#: lib/graphql/resolvers/member.ex:87
#, elixir-autogen, elixir-format
msgid "You are not a member of this group"
msgstr "no eres un miembro de este grupo"
msgstr "No eres un miembro de este grupo"
#: lib/graphql/resolvers/member.ex:157
#: lib/graphql/resolvers/member.ex:173
@ -641,7 +641,7 @@ msgstr "No tienes permiso para eliminar este token"
#, elixir-autogen, elixir-format
msgid "You need to be logged-in and a moderator to list action logs"
msgstr ""
"Debe iniciar sesión y un moderador para enumerar los registros de acción"
"Debe iniciar sesión y un moderador para listar los registros de acción"
#: lib/graphql/resolvers/report.ex:36
#, elixir-autogen, elixir-format
@ -1150,53 +1150,53 @@ msgstr "El nuevo correo electrónico no parece ser válido"
#: lib/graphql/resolvers/comment.ex:65
#, elixir-autogen, elixir-format
msgid "This comment was detected as spam."
msgstr ""
msgstr "Este comentario fue detectado como spam."
#: lib/graphql/resolvers/event.ex:293
#, elixir-autogen, elixir-format
msgid "This event was detected as spam."
msgstr ""
msgstr "Este evento fue detectado como spam."
#: lib/graphql/api/reports.ex:66
#, elixir-autogen, elixir-format
msgid "Unsupported status for a report"
msgstr ""
msgstr "Estado incompatible para el informe"
#: lib/graphql/api/reports.ex:127
#, elixir-autogen, elixir-format
msgid "You can only remove your own notes"
msgstr ""
msgstr "Solo puedes eliminar tus propias notas"
#: lib/graphql/api/reports.ex:94
#: lib/graphql/api/reports.ex:121
#, elixir-autogen, elixir-format
msgid "You need to be a moderator or an administrator to create a note on a report"
msgstr ""
msgstr "Debes ser un moderador o administrador para crear una nota en un informe"
#: lib/graphql/resolvers/person.ex:330
#, elixir-autogen, elixir-format
msgid "Your profile was detected as spam."
msgstr ""
msgstr "Tu perfil fue detectado como spam."
#: lib/graphql/resolvers/user.ex:191
#, elixir-autogen, elixir-format
msgid "Your registration has been detected as spam and cannot be processed."
msgstr ""
msgstr "Tu registro fue detectado como spam y no puede ser procesado."
#: lib/web/controllers/application_controller.ex:86
#, elixir-autogen, elixir-format
msgid "All of name, scope and redirect_uri parameters are required to create an application"
msgstr ""
msgstr "Los parámetros name, scope y redirect_uri son requeridos para crear una aplicación"
#: lib/graphql/error.ex:118
#, elixir-autogen, elixir-format
msgid "Application not found"
msgstr ""
msgstr "Aplicación no encontrada"
#: lib/graphql/error.ex:121
#, elixir-autogen, elixir-format
msgid "Application token not found"
msgstr ""
msgstr "Token de aplicación no encontrado"
#: lib/graphql/resolvers/application.ex:89
#, elixir-autogen, elixir-format, fuzzy
@ -1206,64 +1206,64 @@ msgstr "Error al guardar el informe"
#: lib/web/controllers/application_controller.ex:59
#, elixir-autogen, elixir-format
msgid "Impossible to create application."
msgstr ""
msgstr "Imposible crear una aplicación"
#: lib/web/controllers/application_controller.ex:356
#, elixir-autogen, elixir-format
msgid "Incorrect parameters sent. You need to provide at least the grant_type and client_id parameters, depending on the grant type being used."
msgstr ""
msgstr "Se enviaron parámetros incorrectos. Debes proporcionar al menos los parámetros grant_type y client_id, dependiendo del grant_type que se esté usando."
#: lib/web/controllers/application_controller.ex:329
#, elixir-autogen, elixir-format
msgid "Invalid client credentials provided"
msgstr ""
msgstr "Se han provisto credenciales de cliente no válidas"
#: lib/web/controllers/application_controller.ex:337
#, elixir-autogen, elixir-format
msgid "Invalid refresh token provided"
msgstr ""
msgstr "Se ha provisto un token de refrescado inválido"
#: lib/web/controllers/application_controller.ex:170
#: lib/web/controllers/application_controller.ex:401
#, elixir-autogen, elixir-format
msgid "No application was found with this client_id"
msgstr ""
msgstr "No se ha encontrado una aplicación con este client_id"
#: lib/graphql/resolvers/application.ex:37
#, elixir-autogen, elixir-format
msgid "No application with this client_id was found"
msgstr ""
msgstr "No se ha encontrado una aplicación con este client_id"
#: lib/graphql/authorization.ex:80
#, elixir-autogen, elixir-format
msgid "Not authorized to access field %{field}"
msgstr ""
msgstr "No está autorizado a acceder al campo %{field}"
#: lib/graphql/authorization.ex:70
#: lib/graphql/authorization.ex:75
#, elixir-autogen, elixir-format
msgid "Not authorized to access object %{object}"
msgstr ""
msgstr "No está autorizado a acceder al objeto %{object}"
#: lib/graphql/authorization.ex:63
#, elixir-autogen, elixir-format
msgid "Not authorized to access this %{object_type}"
msgstr ""
msgstr "No está autorizado a acceder a este %{object_type}"
#: lib/web/controllers/application_controller.ex:279
#, elixir-autogen, elixir-format
msgid "Please slow down the rate of your requests"
msgstr ""
msgstr "Por favor reduce la frecuencia de tus peticiones"
#: lib/web/controllers/application_controller.ex:267
#, elixir-autogen, elixir-format
msgid "The authorization request is still pending"
msgstr ""
msgstr "La solicitud de autorización todavía está pendiente"
#: lib/web/controllers/application_controller.ex:249
#, elixir-autogen, elixir-format
msgid "The client_id provided or the device_code associated is invalid"
msgstr ""
msgstr "El client_id provisto o el device_code asociado es inválido"
#: lib/graphql/resolvers/application.ex:133
#, elixir-autogen, elixir-format
@ -1335,12 +1335,12 @@ msgstr ""
#: lib/web/controllers/application_controller.ex:381
#, elixir-autogen, elixir-format, fuzzy
msgid "Token not found"
msgstr "Evento no encontrado"
msgstr "Token no encontrado"
#: lib/web/controllers/application_controller.ex:72
#, elixir-autogen, elixir-format
msgid "Too many requests"
msgstr ""
msgstr "Demasiadas peticiones"
#: lib/web/controllers/application_controller.ex:184
#, elixir-autogen, elixir-format