Merge branch 'bugs' into 'main'

Various bugs

Closes #803, #884 et #829

See merge request framasoft/mobilizon!1111
This commit is contained in:
Thomas Citharel 2021-11-16 16:13:16 +00:00
commit 5489c54f10
94 changed files with 1933 additions and 1393 deletions

View File

@ -299,12 +299,13 @@ multi-arch-release:
- docker buildx build --platform linux/${ARCH} --output type=local,dest=releases --build-arg APP_ASSET=${APP_ASSET} -f docker/multiarch/Dockerfile .
- ls -alh releases/mobilizon/
- du -sh releases/mobilizon/${APP_ASSET}
- mv releases/mobilizon/${APP_ASSET} .
tags:
- "privileged"
artifacts:
expire_in: 30 days
paths:
- releases/mobilizon/${APP_ASSET}
- ${APP_ASSET}
parallel:
matrix:
- ARCH: ["arm", "arm64"]

View File

@ -1251,5 +1251,7 @@
"Approve member": "Approve member",
"Reject member": "Reject member",
"The membership request from {profile} was rejected": "The membership request from {profile} was rejected",
"The member was approved": "The member was approved"
"The member was approved": "The member was approved",
"Emails usually don't contain capitals, make sure you haven't made a typo.": "Emails usually don't contain capitals, make sure you haven't made a typo.",
"To follow groups and be informed of their latest events": "To follow groups and be informed of their latest events"
}

View File

@ -1355,5 +1355,7 @@
"Approve member": "Approuver le ou la membre",
"Reject member": "Rejeter le ou la membre",
"The membership request from {profile} was rejected": "La demande d'adhésion de {profile} a été rejetée",
"The member was approved": "Le ou la membre a été approuvée"
"The member was approved": "Le ou la membre a été approuvée",
"Emails usually don't contain capitals, make sure you haven't made a typo.": "Les emails ne contiennent d'ordinaire pas de capitales, assurez-vous de n'avoir pas fait de faute de frappe.",
"To follow groups and be informed of their latest events": "Afin de suivre des groupes et être informé de leurs derniers événements"
}

5
js/src/types/apollo.ts Normal file
View File

@ -0,0 +1,5 @@
import { GraphQLError } from "graphql/error/GraphQLError";
export class AbsintheGraphQLError extends GraphQLError {
readonly field: string | undefined;
}

View File

@ -45,7 +45,12 @@
{{ error }}
</b-message>
<form @submit="loginAction">
<b-field :label="$t('Email')" label-for="email">
<b-field
:label="$t('Email')"
label-for="email"
:message="caseWarningText"
:type="caseWarningType"
>
<b-input
aria-required="true"
required
@ -277,6 +282,26 @@ export default class Login extends Vue {
return this.$router.push("/");
}
}
get hasCaseWarning(): boolean {
return this.credentials.email !== this.credentials.email.toLowerCase();
}
get caseWarningText(): string | undefined {
if (this.hasCaseWarning) {
return this.$t(
"Emails usually don't contain capitals, make sure you haven't made a typo."
) as string;
}
return undefined;
}
get caseWarningType(): string | undefined {
if (this.hasCaseWarning) {
return "is-warning";
}
return undefined;
}
}
</script>
@ -284,4 +309,7 @@ export default class Login extends Vue {
.container .columns {
margin: 1rem auto 3rem;
}
::v-deep .help.is-warning {
color: #755033;
}
</style>

View File

@ -53,6 +53,13 @@
)
}}
</li>
<li v-if="config.features.groups">
{{
$t(
"To follow groups and be informed of their latest events"
)
}}
</li>
</ul>
</div>
</div>
@ -83,8 +90,8 @@
<form v-on:submit.prevent="submit()">
<b-field
:label="$t('Email')"
:type="errors.email ? 'is-danger' : null"
:message="errors.email"
:type="errorEmailType"
:message="errorEmailMessages"
label-for="email"
>
<b-input
@ -100,8 +107,8 @@
<b-field
:label="$t('Password')"
:type="errors.password ? 'is-danger' : null"
:message="errors.password"
:type="errorPasswordType"
:message="errorPasswordMessages"
label-for="password"
>
<b-input
@ -178,12 +185,6 @@
<auth-providers :oauthProviders="config.auth.oauthProviders" />
</div>
</form>
<div v-if="errors.length > 0">
<b-message type="is-danger" v-for="error in errors" :key="error">{{
error
}}</b-message>
</div>
</div>
</div>
</section>
@ -191,13 +192,18 @@
</template>
<script lang="ts">
import { Component, Prop, Vue } from "vue-property-decorator";
import { Component, Prop, Vue, Watch } from "vue-property-decorator";
import { CREATE_USER } from "../../graphql/user";
import RouteName from "../../router/name";
import { IConfig } from "../../types/config.model";
import { CONFIG } from "../../graphql/config";
import Subtitle from "../../components/Utils/Subtitle.vue";
import AuthProviders from "../../components/User/AuthProviders.vue";
import { AbsintheGraphQLError } from "../../types/apollo";
type errorType = "is-danger" | "is-warning";
type errorMessage = { type: errorType; message: string };
type credentials = { email: string; password: string; locale: string };
@Component({
components: { Subtitle, AuthProviders },
@ -218,13 +224,14 @@ export default class Register extends Vue {
@Prop({ type: String, required: false, default: "" }) password!: string;
credentials = {
credentials: credentials = {
email: this.email,
password: this.password,
locale: "en",
};
errors: string[] = [];
emailErrors: errorMessage[] = [];
passwordErrors: errorMessage[] = [];
sendingForm = false;
@ -245,7 +252,8 @@ export default class Register extends Vue {
this.sendingForm = true;
this.credentials.locale = this.$i18n.locale;
try {
this.errors = [];
this.emailErrors = [];
this.passwordErrors = [];
await this.$apollo.mutate({
mutation: CREATE_USER,
@ -257,17 +265,67 @@ export default class Register extends Vue {
params: { email: this.credentials.email },
});
} catch (error: any) {
console.error(error);
this.errors = error.graphQLErrors.reduce(
(acc: string[], localError: any) => {
acc.push(localError.message);
return acc;
},
[]
error.graphQLErrors.forEach(
({ field, message }: AbsintheGraphQLError) => {
switch (field) {
case "email":
this.emailErrors.push({
type: "is-danger" as errorType,
message: message[0] as string,
});
break;
case "password":
this.passwordErrors.push({
type: "is-danger" as errorType,
message: message[0] as string,
});
break;
default:
}
}
);
this.sendingForm = false;
}
}
@Watch("credentials", { deep: true })
watchCredentials(credentials: credentials): void {
if (credentials.email !== credentials.email.toLowerCase()) {
const error = {
type: "is-warning" as errorType,
message: this.$t(
"Emails usually don't contain capitals, make sure you haven't made a typo."
) as string,
};
this.emailErrors = [error];
this.$forceUpdate();
}
}
maxErrorType(errors: errorMessage[]): errorType | undefined {
if (!errors || errors.length === 0) return undefined;
return errors.reduce<errorType>((acc, error) => {
if (error.type === "is-danger" || acc === "is-danger") return "is-danger";
return "is-warning";
}, "is-warning");
}
get errorEmailType(): errorType | undefined {
return this.maxErrorType(this.emailErrors);
}
get errorPasswordType(): errorType | undefined {
return this.maxErrorType(this.passwordErrors);
}
get errorEmailMessages(): string[] {
return this.emailErrors.map(({ message }) => message);
}
get errorPasswordMessages(): string[] {
return this.passwordErrors?.map(({ message }) => message);
}
}
</script>
@ -302,4 +360,7 @@ p.create-account {
margin: 1rem auto 2rem;
}
}
::v-deep .help.is-warning {
color: #755033;
}
</style>

View File

@ -29,6 +29,8 @@ defmodule Mobilizon.Federation.ActivityPub.Actor do
end
def get_or_fetch_actor_by_url(url, preload) do
Logger.debug("Getting or fetching actor by URL #{url}")
case Actors.get_actor_by_url(url, preload) do
{:ok, %Actor{} = cached_actor} ->
if Actors.needs_update?(cached_actor) do
@ -51,6 +53,8 @@ defmodule Mobilizon.Federation.ActivityPub.Actor do
@spec make_actor_from_url(url :: String.t(), options :: Keyword.t()) ::
{:ok, Actor.t()} | {:error, make_actor_errors | Ecto.Changeset.t()}
def make_actor_from_url(url, options \\ []) do
Logger.debug("Making actor from url #{url}")
if are_same_origin?(url, Endpoint.url()) do
{:error, :actor_is_local}
else
@ -75,6 +79,8 @@ defmodule Mobilizon.Federation.ActivityPub.Actor do
@spec find_or_make_actor_from_nickname(nickname :: String.t(), type :: atom() | nil) ::
{:ok, Actor.t()} | {:error, make_actor_errors | WebFinger.finger_errors()}
def find_or_make_actor_from_nickname(nickname, type \\ nil) do
Logger.debug("Finding or making actor from nickname #{nickname}")
case Actors.get_actor_by_name_with_preload(nickname, type) do
%Actor{url: actor_url} = actor ->
if Actors.needs_update?(actor) do
@ -98,8 +104,11 @@ defmodule Mobilizon.Federation.ActivityPub.Actor do
@spec make_actor_from_nickname(nickname :: String.t(), preload :: boolean) ::
{:ok, Actor.t()} | {:error, make_actor_errors | WebFinger.finger_errors()}
def make_actor_from_nickname(nickname, preload \\ false) do
Logger.debug("Fingering actor from nickname #{nickname}")
case WebFinger.finger(nickname) do
{:ok, url} when is_binary(url) ->
Logger.debug("Matched #{nickname} to URL #{url}, now making actor")
make_actor_from_url(url, preload: preload)
{:error, e} ->

View File

@ -228,6 +228,14 @@ defmodule Mobilizon.Federation.ActivityPub.Audience do
|> Enum.uniq()
end
defp add_event_contacts(%Event{contacts: contacts}) do
contacts
|> Enum.map(& &1.url)
|> Enum.uniq()
end
defp add_event_contacts(%Event{}), do: []
defp process_mention({_, mentioned_actor}), do: mentioned_actor.url
defp process_mention(%{actor_id: actor_id}) do
@ -255,7 +263,9 @@ defmodule Mobilizon.Federation.ActivityPub.Audience do
{to, cc} =
{to,
Enum.uniq(
cc ++ add_comments_authors(event.comments) ++ add_shares_actors_followers(event.url)
cc ++
add_comments_authors(event.comments) ++
add_shares_actors_followers(event.url) ++ add_event_contacts(event)
)}
%{"to" => to, "cc" => cc}

View File

@ -13,7 +13,7 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do
alias Mobilizon.Service.HTTP.ActivityPub, as: ActivityPubClient
import Mobilizon.Federation.ActivityPub.Utils,
only: [maybe_date_fetch: 2, sign_fetch: 4, origin_check?: 2]
only: [maybe_date_fetch: 2, sign_fetch: 5, origin_check?: 2]
import Mobilizon.Service.Guards, only: [is_valid_string: 1]
@ -28,7 +28,7 @@ defmodule Mobilizon.Federation.ActivityPub.Fetcher do
headers =
[{:Accept, "application/activity+json"}]
|> maybe_date_fetch(date)
|> sign_fetch(on_behalf_of, url, date)
|> sign_fetch(on_behalf_of, url, date, options)
client = ActivityPubClient.client(headers: headers)

View File

@ -36,6 +36,8 @@ defmodule Mobilizon.Federation.ActivityPub.Refresher do
end
def refresh_profile(%Actor{type: type, url: url}) when type in [:Person, :Application] do
Logger.debug("Refreshing profile #{url}")
case ActivityPubActor.make_actor_from_url(url) do
{:error, error} ->
{:error, error}
@ -52,6 +54,8 @@ defmodule Mobilizon.Federation.ActivityPub.Refresher do
@spec fetch_group(String.t(), Actor.t()) :: :ok | {:error, fetch_actor_errors}
def fetch_group(group_url, %Actor{} = on_behalf_of) do
Logger.debug("Fetching group #{group_url}")
case ActivityPubActor.make_actor_from_url(group_url, on_behalf_of: on_behalf_of) do
{:error, err}
when err in [:actor_deleted, :http_error, :json_decode_error, :actor_is_local] ->

View File

@ -98,6 +98,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Actors do
"actor" => actor_url,
"object" => %{
"type" => "Tombstone",
"formerType" => to_string(type),
"deleted" => DateTime.utc_now(),
"id" => target_actor_url
},
"id" => target_actor_url <> "/delete",

View File

@ -84,6 +84,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Comments do
"actor" => actor.url,
"object" => %{
"type" => "Tombstone",
"formerType" => "Note",
"deleted" => DateTime.utc_now(),
"id" => url
},
"id" => url <> "/delete",

View File

@ -117,6 +117,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Discussions do
"actor" => actor.url,
"object" => %{
"type" => "Tombstone",
"formerType" => "Note",
"deleted" => DateTime.utc_now(),
"url" => url
},
"id" => url <> "/delete",

View File

@ -84,6 +84,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Events do
"actor" => actor.url,
"object" => %{
"type" => "Tombstone",
"formerType" => "Event",
"deleted" => DateTime.utc_now(),
"id" => url
},
"to" => [actor.url <> "/followers", "https://www.w3.org/ns/activitystreams#Public"],
@ -231,6 +233,7 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Events do
Mobilizon.Events.get_default_participant_role(event) == :not_approved &&
role == :not_approved ->
Logger.debug("Scheduling a notification to notify of a new pending participation")
Scheduler.pending_participation_notification(event)
{:ok, activity_data, participant}

View File

@ -79,6 +79,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Posts do
"type" => "Delete",
"object" => %{
"type" => "Tombstone",
"formerType" => "Article",
"deleted" => DateTime.utc_now(),
"id" => url
},
"id" => url <> "/delete",

View File

@ -150,7 +150,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Resources do
@spec delete(Resource.t(), Actor.t(), boolean, map()) ::
{:ok, ActivityStream.t(), Actor.t(), Resource.t()} | {:error, Ecto.Changeset.t()}
def delete(
%Resource{url: url, actor: %Actor{url: group_url, members_url: members_url}} = resource,
%Resource{url: url, type: type, actor: %Actor{url: group_url, members_url: members_url}} =
resource,
%Actor{url: actor_url} = actor,
_local,
_additionnal
@ -163,6 +164,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Resources do
"type" => "Delete",
"object" => %{
"type" => "Tombstone",
"formerType" => if(type == :folder, do: "ResourceCollection", else: "Document"),
"deleted" => DateTime.utc_now(),
"id" => url
},
"id" => url <> "/delete",

View File

@ -57,6 +57,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.TodoLists do
"type" => "Delete",
"object" => %{
"type" => "Tombstone",
"formerType" => "TodoList",
"deleted" => DateTime.utc_now(),
"id" => url
},
"id" => url <> "/delete",

View File

@ -97,6 +97,8 @@ defmodule Mobilizon.Federation.ActivityPub.Types.Todos do
"type" => "Delete",
"object" => %{
"type" => "Tombstone",
"formerType" => "Todo",
"deleted" => DateTime.utc_now(),
"id" => url
},
"id" => "#{url}/delete",

View File

@ -650,9 +650,10 @@ defmodule Mobilizon.Federation.ActivityPub.Utils do
@doc """
Sign a request with an actor.
"""
@spec sign_fetch(Enum.t(), Actor.t(), String.t(), String.t()) :: Enum.t()
def sign_fetch(headers, actor, id, date) do
if Mobilizon.Config.get([:activitypub, :sign_object_fetches]) do
@spec sign_fetch(Enum.t(), Actor.t(), String.t(), String.t(), Keyword.t()) :: Enum.t()
def sign_fetch(headers, actor, id, date, options \\ []) do
if Mobilizon.Config.get([:activitypub, :sign_object_fetches]) and
Keyword.get(options, :ignore_sign_object_fetches, false) == false do
headers ++ make_signature(actor, id, date)
else
headers

View File

@ -149,6 +149,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Actor do
name <- name || Parser.get_filename_from_response(response_headers, url) || default_name,
{:ok, file} <- Upload.store(%{body: body, name: name}) do
Map.take(file, [:content_type, :name, :url, :size])
else
_ -> nil
end
end
@ -160,7 +162,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Actor do
@spec maybe_add_avatar_picture(map(), ActorModel.t()) :: map()
defp maybe_add_avatar_picture(actor_data, %ActorModel{avatar: %File{} = avatar}) do
Map.put(actor_data, "image", %{
Map.put(actor_data, "icon", %{
"type" => "Image",
"mediaType" => avatar.content_type,
"url" => avatar.url

View File

@ -18,6 +18,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
alias Mobilizon.Service.TimezoneDetector
alias Mobilizon.Web.Endpoint
import Mobilizon.Federation.ActivityPub.Utils, only: [get_url: 1]
import Mobilizon.Federation.ActivityStream.Converter.Utils,
only: [
fetch_tags: 1,
@ -25,7 +27,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
build_tags: 1,
maybe_fetch_actor_and_attributed_to_id: 1,
process_pictures: 2,
get_address: 1
get_address: 1,
fetch_actor: 1
]
require Logger
@ -56,6 +59,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
visibility = get_visibility(object)
options = get_options(object, address)
metadata = get_metdata(object)
contacts = get_contacts(object)
[description: description, picture_id: picture_id, medias: medias] =
process_pictures(object, actor_id)
@ -72,7 +76,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
category: object["category"],
visibility: visibility,
join_options: Map.get(object, "joinMode", "free"),
local: is_local(object["id"]),
local: is_local?(object["id"]),
options: options,
metadata: metadata,
status: object |> Map.get("ical:status", "CONFIRMED") |> String.downcase(),
@ -86,7 +90,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
physical_address_id: if(address, do: address.id, else: nil),
updated_at: object["updated"],
publish_at: object["published"],
language: object["inLanguage"]
language: object["inLanguage"],
contacts: contacts
}
{:error, err} ->
@ -133,7 +138,8 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
"id" => event.url,
"url" => event.url,
"inLanguage" => event.language,
"timezone" => event.options.timezone
"timezone" => event.options.timezone,
"contacts" => Enum.map(event.contacts, & &1.url)
}
|> maybe_add_physical_address(event)
|> maybe_add_event_picture(event)
@ -281,9 +287,25 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Event do
)
end
defp is_local(url) do
@spec is_local?(String.t()) :: boolean()
defp is_local?(url) do
%URI{host: url_domain} = URI.parse(url)
%URI{host: local_domain} = URI.parse(Endpoint.url())
url_domain == local_domain
end
@spec get_contacts(map()) :: list(Actor.t())
defp get_contacts(object) do
object
|> Map.get("contacts", [])
|> Enum.map(&get_contact/1)
|> Enum.filter(&match?({:ok, _}, &1))
|> Enum.map(fn {:ok, contact} -> contact end)
end
defp get_contact(contact) do
contact
|> get_url()
|> fetch_actor()
end
end

View File

@ -179,7 +179,7 @@ defmodule Mobilizon.Federation.ActivityStream.Converter.Utils do
def maybe_fetch_actor_and_attributed_to_id(_), do: {:error, :no_actor_found}
@spec fetch_actor(String.t()) :: {:ok, Actor.t()} | {:error, atom()}
defp fetch_actor(actor_url) do
def fetch_actor(actor_url) do
case ActivityPubActor.get_or_fetch_actor_by_url(actor_url) do
{:ok, %Actor{suspended: false} = actor} ->
{:ok, actor}

View File

@ -10,10 +10,9 @@ defmodule Mobilizon.Federation.HTTPSignatures.Signature do
@behaviour HTTPSignatures.Adapter
alias Mobilizon.Actors
alias Mobilizon.Actors.Actor
alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor
alias Mobilizon.Service.ErrorReporting.Sentry
require Logger
@ -52,36 +51,37 @@ defmodule Mobilizon.Federation.HTTPSignatures.Signature do
# Gets a public key for a given ActivityPub actor ID (url).
@spec get_public_key_for_url(String.t()) ::
{:ok, String.t()}
| {:error, :actor_fetch_error | :pem_decode_error | :actor_not_fetchable}
| {:error, :actor_not_found | :pem_decode_error}
defp get_public_key_for_url(url) do
case ActivityPubActor.get_or_fetch_actor_by_url(url) do
{:ok, %Actor{keys: keys}} ->
case prepare_public_key(keys) do
{:ok, public_key} ->
{:ok, public_key}
case Actors.get_actor_by_url(url) do
{:ok, %Actor{} = actor} ->
get_actor_public_key(actor)
{:error, :pem_decode_error} ->
Logger.error("Error while decoding PEM")
{:error, :pem_decode_error}
end
{:error, err} ->
Sentry.capture_message("Unable to fetch actor, so no keys for you",
extra: %{url: url}
{:error, :actor_not_found} ->
Logger.info(
"Unable to get actor from URL from local database, returning empty keys to trigger refreshment"
)
Logger.error("Unable to fetch actor, so no keys for you")
Logger.error(inspect(err))
{:ok, ""}
end
end
{:error, :actor_fetch_error}
@spec get_actor_public_key(Actor.t()) :: {:ok, String.t()} | {:error, :pem_decode_error}
defp get_actor_public_key(%Actor{keys: keys}) do
case prepare_public_key(keys) do
{:ok, public_key} ->
{:ok, public_key}
{:error, :pem_decode_error} ->
Logger.error("Error while decoding PEM")
{:error, :pem_decode_error}
end
end
@spec fetch_public_key(Plug.Conn.t()) ::
{:ok, String.t()}
| {:error,
:actor_fetch_error | :actor_not_fetchable | :pem_decode_error | :no_signature_in_conn}
| {:error, :actor_not_found | :pem_decode_error | :no_signature_in_conn}
def fetch_public_key(conn) do
case HTTPSignatures.signature_for_conn(conn) do
%{"keyId" => kid} ->
@ -100,11 +100,12 @@ defmodule Mobilizon.Federation.HTTPSignatures.Signature do
:actor_is_local}
def refetch_public_key(conn) do
%{"keyId" => kid} = HTTPSignatures.signature_for_conn(conn)
actor_id = key_id_to_actor_url(kid)
Logger.debug("Refetching public key for #{actor_id}")
actor_url = key_id_to_actor_url(kid)
Logger.debug("Refetching public key for #{actor_url}")
with {:ok, _actor} <- ActivityPubActor.make_actor_from_url(actor_id) do
get_public_key_for_url(actor_id)
with {:ok, %Actor{} = actor} <-
ActivityPubActor.make_actor_from_url(actor_url, ignore_sign_object_fetches: true) do
get_actor_public_key(actor)
end
end
@ -133,6 +134,8 @@ defmodule Mobilizon.Federation.HTTPSignatures.Signature do
@spec generate_date_header(NaiveDateTime.t()) :: String.t()
def generate_date_header(%NaiveDateTime{} = date) do
# We make sure the format is correct
# TODO: Remove Timex, as this is the only usage (with parsing)
Timex.lformat!(date, "{WDshort}, {0D} {Mshort} {YYYY} {h24}:{m}:{s} GMT", "en")
end

View File

@ -145,13 +145,17 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
"""
@spec create_user(any, %{email: String.t()}, any) :: {:ok, User.t()} | {:error, String.t()}
def create_user(_parent, %{email: email} = args, _resolution) do
with :registration_ok <- check_registration_config(email),
with {:ok, email} <- lowercase_domain(email),
:registration_ok <- check_registration_config(email),
:not_deny_listed <- check_registration_denylist(email),
{:ok, %User{} = user} <- Users.register(args),
{:ok, %User{} = user} <- Users.register(%{args | email: email}),
%Bamboo.Email{} <-
Email.User.send_confirmation_email(user, Map.get(args, :locale, "en")) do
{:ok, user}
else
{:error, :invalid_email} ->
{:error, dgettext("errors", "Your email seems to be using an invalid format")}
:registration_closed ->
{:error, dgettext("errors", "Registrations are not open")}
@ -190,24 +194,40 @@ defmodule Mobilizon.GraphQL.Resolvers.User do
# Remove everything behind the +
email = String.replace(email, ~r/(\+.*)(?=\@)/, "")
if email_in_list(email, Config.instance_registrations_denylist()),
if email_in_list?(email, Config.instance_registrations_denylist()),
do: :deny_listed,
else: :not_deny_listed
end
@spec check_allow_listed_email(String.t()) :: :registration_ok | :not_allowlisted
defp check_allow_listed_email(email) do
if email_in_list(email, Config.instance_registrations_allowlist()),
if email_in_list?(email, Config.instance_registrations_allowlist()),
do: :registration_ok,
else: :not_allowlisted
end
defp email_in_list(email, list) do
[_, domain] = String.split(email, "@", parts: 2, trim: true)
@spec email_in_list?(String.t(), list(String.t())) :: boolean()
defp email_in_list?(email, list) do
[_, domain] = split_email(email)
domain in list or email in list
end
# Domains should always be lower-case, so let's force that
@spec lowercase_domain(String.t()) :: {:ok, String.t()} | {:error, :invalid_email}
defp lowercase_domain(email) do
case split_email(email) do
[user_part, domain_part] ->
{:ok, "#{user_part}@#{String.downcase(domain_part)}"}
_ ->
{:error, :invalid_email}
end
end
@spec split_email(String.t()) :: list(String.t())
defp split_email(email), do: String.split(email, "@", parts: 2, trim: true)
@doc """
Validate an user, get its actor and a token
"""

View File

@ -261,11 +261,6 @@ defmodule Mobilizon.Actors do
data,
preload \\ false
) do
# data =
# data
# |> Map.put(:avatar, transform_media_file(data.avatar))
# |> Map.put(:banner, transform_media_file(data.banner))
insert =
data
|> Actor.remote_actor_creation_changeset()

View File

@ -64,7 +64,8 @@ defmodule Mobilizon.Events.Event do
tags: [Tag.t()],
participants: [Actor.t()],
contacts: [Actor.t()],
language: String.t()
language: String.t(),
metadata: [EventMetadata.t()]
}
@update_required_attrs [:title, :begins_on, :organizer_actor_id]

View File

@ -19,7 +19,6 @@ defmodule Mobilizon.Events do
alias Mobilizon.Events.{
Event,
EventOptions,
EventParticipantStats,
FeedToken,
Participant,
@ -328,38 +327,29 @@ defmodule Mobilizon.Events do
@spec build_changes(map()) :: map()
defp build_changes(changes) do
changes
|> Map.take(Event.__schema__(:fields))
|> maybe_add_address(changes)
|> maybe_add_options(changes)
|> maybe_add_field(:physical_address)
|> maybe_add_field(:options)
|> maybe_add_field(:metadata)
|> Map.drop(Event.__schema__(:associations) -- [:physical_address, :options, :metadata])
end
@spec maybe_add_address(map(), map()) :: map()
defp maybe_add_address(changes, %{physical_address: %Ecto.Changeset{} = changeset}),
do:
Map.put(
changes,
:physical_address,
changeset
|> Ecto.Changeset.apply_changes()
|> Map.from_struct()
|> Map.take(Address.__schema__(:fields))
)
@spec maybe_add_field(map(), atom()) :: map()
defp maybe_add_field(changes, field) do
case Map.get(changes, field) do
%Ecto.Changeset{} = changeset ->
Map.put(
changes,
field,
changeset
|> Ecto.Changeset.apply_changes()
|> Map.from_struct()
|> Map.take(Address.__schema__(:fields))
)
defp maybe_add_address(changes, _), do: Map.drop(changes, [:physical_address])
@spec maybe_add_options(map(), map()) :: map()
defp maybe_add_options(changes, %{options: %Ecto.Changeset{} = changeset}),
do:
Map.put(
changes,
:options,
changeset
|> Ecto.Changeset.apply_changes()
|> Map.from_struct()
|> Map.take(EventOptions.__schema__(:fields))
)
defp maybe_add_options(changes, _), do: Map.drop(changes, [:options])
_ ->
Map.drop(changes, [field])
end
end
@doc """
Deletes an event.

View File

@ -29,7 +29,7 @@ defmodule Mobilizon.Service.Metadata.Utils do
* Slices it to a limit and add an ellipsis character
* Returns a default description if text is empty
"""
@spec process_description(String.t(), String.t(), integer()) :: String.t()
@spec process_description(String.t(), String.t(), integer() | nil) :: String.t()
def process_description(description, locale \\ "en", limit \\ @slice_limit)
def process_description(nil, locale, limit), do: process_description("", locale, limit)
@ -56,6 +56,8 @@ defmodule Mobilizon.Service.Metadata.Utils do
defdelegate datetime_to_string(datetime, locale \\ "en", format \\ :medium), to: DateTime
defdelegate render_address(address), to: Address
defp maybe_slice(description, nil), do: description
defp maybe_slice(description, limit) do
if String.length(description) > limit do
description

View File

@ -182,20 +182,39 @@ defmodule Mobilizon.Service.Notifications.Scheduler do
event_id: event_id
}
Logger.debug("Determining when we should send the pending participation notification")
cond do
# Sending directly
send_at == :direct ->
Notification.enqueue(:pending_participation_notification, params)
Logger.debug("The notification will be sent straight away!")
{:ok, %Oban.Job{id: job_id}} =
Notification.enqueue(:pending_participation_notification, params)
Logger.debug("Job scheduled with ID #{job_id}")
# Not sending
is_nil(send_at) ->
Logger.debug("We will not send any notification")
{:ok, nil}
# Sending to calculated time
DateTime.compare(begins_on, send_at) == :gt ->
Notification.enqueue(:pending_participation_notification, params, scheduled_at: send_at)
Logger.debug("We will send the notification on #{send_at}")
{:ok, %Oban.Job{id: job_id}} =
Notification.enqueue(:pending_participation_notification, params,
scheduled_at: send_at
)
Logger.debug("Job scheduled with ID #{job_id}")
true ->
Logger.debug(
"Something went wrong when determining when to send the pending participation notification"
)
{:ok, nil}
end
else
@ -302,6 +321,7 @@ defmodule Mobilizon.Service.Notifications.Scheduler do
:one_hour ->
compare_to
|> DateTime.add(3600)
|> DateTime.shift_zone!(timezone)
|> (&%{&1 | minute: 0, second: 0, microsecond: {0, 0}}).()
end

View File

@ -9,6 +9,7 @@ defmodule Mobilizon.Service.Workers.Notification do
alias Mobilizon.Storage.Page
alias Mobilizon.Users.{Setting, User}
alias Mobilizon.Web.Email.{Mailer, Notification}
require Logger
import Mobilizon.Service.DateTime,
only: [
@ -114,7 +115,7 @@ defmodule Mobilizon.Service.Workers.Notification do
"event_id" => event_id
}
}) do
with %User{} = user <- Users.get_user(user_id),
with %User{} = user <- Users.get_user_with_settings!(user_id),
{:ok, %Event{} = event} <- Events.get_event_with_preload(event_id),
%Page{total: total} when total > 0 <-
Events.list_participants_for_event(event_id, [:not_approved]) do
@ -125,8 +126,8 @@ defmodule Mobilizon.Service.Workers.Notification do
:ok
else
err ->
require Logger
Logger.debug(inspect(err))
err
end
end

View File

@ -91,6 +91,8 @@ defmodule Mobilizon.Web.Email.Event do
&send_notification_for_event_update_to_participant(&1, old_event, event, diff)
)
end)
else
{:ok, :ok}
end
end

View File

@ -92,7 +92,7 @@ defmodule Mobilizon.Web.Email.Notification do
@spec pending_participation_notification(User.t(), Event.t(), pos_integer()) :: Bamboo.Email.t()
def pending_participation_notification(
%User{locale: locale, email: email},
%User{locale: locale, email: email, settings: %Setting{timezone: timezone}},
%Event{} = event,
total
) do
@ -111,6 +111,7 @@ defmodule Mobilizon.Web.Email.Notification do
|> assign(:locale, locale)
|> assign(:event, event)
|> assign(:total, total)
|> assign(:timezone, timezone)
|> assign(:subject, subject)
|> render(:pending_participation_notification)
end

View File

@ -36,14 +36,7 @@ defmodule Mobilizon.Web.Plugs.HTTPSignatures do
"(request-target)",
String.downcase("#{conn.method}") <> " #{conn.request_path}"
)
conn =
if conn.assigns[:digest] do
conn
|> put_req_header("digest", conn.assigns[:digest])
else
conn
end
|> maybe_put_digest_header()
signature_valid = HTTPSignatures.validate_conn(conn)
Logger.debug("Is signature valid ? #{inspect(signature_valid)}")
@ -53,6 +46,11 @@ defmodule Mobilizon.Web.Plugs.HTTPSignatures do
end
end
defp maybe_put_digest_header(%Plug.Conn{assigns: %{digest: digest}} = conn),
do: put_req_header(conn, "digest", digest)
defp maybe_put_digest_header(%Plug.Conn{} = conn), do: conn
@spec date_valid?(Plug.Conn.t()) :: boolean()
defp date_valid?(conn) do
date = conn |> get_req_header("date") |> List.first()

View File

@ -11,7 +11,6 @@ defmodule Mobilizon.Web.Plugs.MappedSignatureToIdentity do
import Plug.Conn
alias Mobilizon.Actors.Actor
alias Mobilizon.Federation.ActivityPub.Actor, as: ActivityPubActor
alias Mobilizon.Federation.ActivityPub.Utils
alias Mobilizon.Federation.HTTPSignatures.Signature
@ -32,14 +31,20 @@ defmodule Mobilizon.Web.Plugs.MappedSignatureToIdentity do
end
end
@spec actor_from_key_id(Plug.Conn.t()) :: Actor.t() | nil
@spec actor_from_key_id(Plug.Conn.t()) ::
{:ok, Actor.t()} | {:error, :actor_not_found | :no_key_in_conn}
defp actor_from_key_id(conn) do
with key_actor_id when is_binary(key_actor_id) <- key_id_from_conn(conn),
{:ok, %Actor{} = actor} <- ActivityPubActor.get_or_fetch_actor_by_url(key_actor_id) do
actor
else
_ ->
nil
Logger.debug("Determining actor from connection signature")
case key_id_from_conn(conn) do
key_actor_id when is_binary(key_actor_id) ->
# We don't need to call refreshment here since
# the Mobilizon.Federation.HTTPSignatures.Signature plug
# should already have refreshed the actor if needed
ActivityPubActor.make_actor_from_url(key_actor_id, ignore_sign_object_fetches: true)
nil ->
{:error, :no_key_in_conn}
end
end
@ -49,7 +54,7 @@ defmodule Mobilizon.Web.Plugs.MappedSignatureToIdentity do
# if this has payload make sure it is signed by the same actor that made it
def call(%{assigns: %{valid_signature: true}, params: %{"actor" => actor}} = conn, _opts) do
with actor_id when actor_id != nil <- Utils.get_url(actor),
{:actor, %Actor{} = actor} <- {:actor, actor_from_key_id(conn)},
{:ok, %Actor{} = actor} <- actor_from_key_id(conn),
{:actor_match, true} <- {:actor_match, actor.url == actor_id} do
Logger.debug("Mapped identity to #{actor.url} from actor param")
assign(conn, :actor, actor)
@ -59,8 +64,12 @@ defmodule Mobilizon.Web.Plugs.MappedSignatureToIdentity do
Logger.debug("key_id=#{key_id_from_conn(conn)}, actor=#{actor}")
assign(conn, :valid_signature, false)
{:error, :no_key_in_conn} ->
Logger.debug("There was no key in conn")
conn
# TODO: remove me once testsuite uses mapped capabilities instead of what we do now
{:actor, nil} ->
{:error, :actor_not_found} ->
Logger.debug("Failed to map identity from signature (lookup failure)")
Logger.debug("key_id=#{key_id_from_conn(conn)}, actor=#{actor}")
conn
@ -70,11 +79,15 @@ defmodule Mobilizon.Web.Plugs.MappedSignatureToIdentity do
# no payload, probably a signed fetch
def call(%{assigns: %{valid_signature: true}} = conn, _opts) do
case actor_from_key_id(conn) do
%Actor{} = actor ->
{:ok, %Actor{} = actor} ->
Logger.debug("Mapped identity to #{actor.url} from signed fetch")
assign(conn, :actor, actor)
_ ->
{:error, :no_key_in_conn} ->
Logger.debug("There was no key in conn")
assign(conn, :valid_signature, false)
{:error, :actor_not_found} ->
Logger.debug("Failed to map identity from signature (no payload actor mismatch)")
Logger.debug("key_id=#{key_id_from_conn(conn)}")
assign(conn, :valid_signature, false)

View File

@ -16,7 +16,7 @@
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<!-- row for datetime -->
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 12px 12px 0; border: 0;" valign="baseline" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 12px 0 0; border: 0;" valign="baseline" align="left">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABgAAAAYADwa0LPAAAAf0lEQVRIx2NgGEDwH4opUsdEa1eiW+DNwMDwBM1F/wlgZHWPGRgYPPFZ+JgIAwnhR8gGMmIJT2oAuLl0jwOqAxZCXiQRYATx0A+iAYsDfABbUsYZZ0M/iIa+BeREMkmZkO5B9ARKk1tUMzBAinycwJOBsjrhEQMDgwetQ2WYAQCSDEUsvZlgYAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0xMC0xNFQxNDo1MTowNyswMDowMCvAzKIAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMTAtMTRUMTQ6NTE6MDcrMDA6MDBanXQeAAAAAElFTkSuQmCC" style="outline: none; text-decoration: none; width: 21px; max-width: 100%; clear: both; display: block; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
</td>
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 0 12px; border: 0;" valign="top" align="left">
@ -29,7 +29,7 @@
<%= if @event.physical_address do %>
<!-- venue block -->
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 12px 12px 0; border: 0;" valign="baseline" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 12px 0 0; border: 0;" valign="baseline" align="left">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABgAAAAYADwa0LPAAABHklEQVRIx+XUsUoDQRQF0EMUtNPGYGsULMTeNuonqJ8SsNZ/kLSW/kEaLQykMvoJNoKdGkWCQrTYDS6b3c1O1i4XbjHz3rt35u2+YR5Qxznu8RGzj7M4VgnHGOAnhwMcVREfFYiPOZrFpD7l5Gm+YS1LaCHH4BSHqb1XXOIOW1hOxJYwxE3ZGzykTviCjUS8ERsmc/ohLXpPFV9k5LRNfvAJ1HIMvkrk1abUFKKX0aJGIr6Z0aJeltBijsEt9hLrVVGPr+L1CVYyakpjR/lfdMzdEAPoBoh3Q8XhIMBgfxYD6JQQ78wqTjSxnwXiQ2xXMYBWgUGrqjjRQGW16lr+WxaMOp4S4s9Y/y/xMZr4jtksWxRyxUfRk9HxN9FzgF/m1ZTuGrd6hAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0xMC0xNFQxNDo1Mjo0NyswMDowMES9eVsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMTAtMTRUMTQ6NTI6NDcrMDA6MDA14MHnAAAAAElFTkSuQmCC" style="outline: none; text-decoration: none; width: 21px; max-width: 100%; clear: both; display: block; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
</td>
<td class="m_8261046153705514309event__content_local" style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0; border: 0;" valign="top" align="left">
@ -42,7 +42,7 @@
<% end %>
<%= if @event.options.is_online do %>
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 12px 12px 0; border: 0;" valign="baseline" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0 12px 0 0; border: 0;" valign="baseline" align="left">
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAABgAAAAYADwa0LPAAABWUlEQVRIx+WUP04CURDGf5pIQsROOAMHsNSgVmpp9AZ6AG1MiA1CsZ6DCxiwMx5BtKNQGs2uLf9aFov9DC8s++ftNiZOMpmdnW/mm8x78+A/SAVoAa/AVNoDmorlknNgDMwjdAyc5Snuq9ADUAM2pftARzE/C0nF6PwmBlcXZgSUbQhaRucABeAe8AAXcPQPoCvsnQ3Bm5Jq8h3C83cUO5DfsyGYKKkk31tB8K3YFosDD8l6BME8wQeYya7FYCIJBrI7su0VmPYSZoCFNNVRR36BYOYu4UN+FLZhQ2Be03oM7laYIbBtQwDB8vwuWpfgtpSkh0bnPnBqW9wkGRH9VAzzFC/KlgmW6IXg+k703TDGUrQtfgK8A7spsHvAh3JSyQbQN8bwBFwAVRaPXRW4BJ4NXF+5iXIdM/MkvUpD4OUgcJeLrdrkGdklVe4x8JWh+0/gKEdzf1R+ADQolKDXzQqjAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIxLTEwLTE1VDEzOjA5OjAzKzAwOjAwbhSTzgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMS0xMC0xNVQxMzowOTowMyswMDowMB9JK3IAAAAASUVORK5CYII=" style="outline: none; text-decoration: none; width: 21px; max-width: 100%; clear: both; display: block; vertical-align: baseline; margin: 0; padding: 0; border: 0;">
</td>
<td class="m_8261046153705514309event__content_local" style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0; border: 0;" valign="top" align="left">
@ -55,52 +55,6 @@
</tbody>
</table>
</div>
<%= case @action do %>
<% "participation" -> %>
<div class="event__content_attend" style="vertical-align: middle; margin: 0; padding: 0; border: 0;">
<table class="button btn-attend event__content_position" style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; width: auto; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0; border: 0;" valign="baseline" align="left">
<table style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: 500; line-height: 1.3; font-size: 16px; border-radius: 4px; margin: 0; padding: 0px; border: none;" valign="middle" bgcolor="FE3859" align="center">
<a href={Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid)} style="color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: bold; text-align: left; line-height: 14px; text-decoration: none; vertical-align: baseline; font-size: 16px; display: inline-block; border-radius: 3px; white-space: nowrap; margin: 0; padding: 12px 32px; border: none;" target="_blank">
<%= gettext("Manage your participation") %>
</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<% "event" -> %>
<div class="event__content_attend" style="vertical-align: middle; margin: 0; padding: 0; border: 0;">
<table class="button btn-attend event__content_position" style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; width: auto; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0; border: 0;" valign="baseline" align="left">
<table style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: 500; line-height: 1.3; font-size: 16px; border-radius: 4px; margin: 0; padding: 0px; border: none;" valign="middle" bgcolor="FE3859" align="center">
<a href={Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid)} style="color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: bold; text-align: left; line-height: 14px; text-decoration: none; vertical-align: baseline; font-size: 16px; display: inline-block; border-radius: 3px; white-space: nowrap; margin: 0; padding: 12px 32px; border: none;" target="_blank">
<%= gettext("Participate") %>
</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<% end %>
</div>
</td>
</tr>

View File

@ -1,4 +1,2 @@
<%= gettext("Date:") %> <%= render("date/event_tz_date_range.text", event: @event, start_date: datetime_tz_convert(@event.begins_on, @event.options.timezone), end_date: datetime_tz_convert(@event.ends_on, @event.options.timezone), timezone: @timezone, locale: @locale) %>
<%= gettext("Address:") %> <%= if @event.physical_address do %><%= render_address(@event.physical_address) %><% end %><%= if @event.options.is_online do %><%= gettext "Online event" %><% end %>
<%= case @action do %><% "participation" -> %><%= gettext("Manage your participation:") %> <%= Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) %><% "event" -> %><%= gettext("Participate:") %> <%= Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) %><% end %>

View File

@ -5,7 +5,54 @@
<% end %>
<%= render("participation/card/_title.html", event: @event) %>
<%= render("participation/card/_metadata.html", event: @event, timezone: @timezone, locale: @locale, action: @action) %>
<%= if @event.description do %>
<%= case @action do %>
<% "participation" -> %>
<div class="event__content_attend" style="vertical-align: middle; margin: 0; padding: 0; border: 0;">
<table class="button btn-attend event__content_position" style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; width: auto; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0; border: 0;" valign="baseline" align="left">
<table style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: 500; line-height: 1.3; font-size: 16px; border-radius: 4px; margin: 0; padding: 0px; border: none;" valign="middle" bgcolor="FE3859" align="center">
<a href={Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid)} style="color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: bold; text-align: left; line-height: 14px; text-decoration: none; vertical-align: baseline; font-size: 16px; display: inline-block; border-radius: 3px; white-space: nowrap; margin: 0; padding: 12px 32px; border: none;" target="_blank">
<%= gettext("Manage your participation") %>
</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<% "event" -> %>
<div class="event__content_attend" style="vertical-align: middle; margin: 0; padding: 0; border: 0;">
<table class="button btn-attend event__content_position" style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; width: auto; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(10,10,10); font-family: Helvetica,Arial,sans-serif; font-weight: normal; line-height: 1.3; font-size: 16px; margin: 0; padding: 0; border: 0;" valign="baseline" align="left">
<table style="border-spacing: 0; border-collapse: collapse; vertical-align: baseline; text-align: left; margin: 0; padding: 0; border: 0;">
<tbody style="vertical-align: baseline; margin: 0; padding: 0; border: 0;">
<tr style="vertical-align: baseline; margin: 0; padding: 0; border: 0;" align="left">
<td style="word-wrap: break-word; border-collapse: collapse; color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: 500; line-height: 1.3; font-size: 16px; border-radius: 4px; margin: 0; padding: 0px; border: none;" valign="middle" bgcolor="FE3859" align="center">
<a href={Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid)} style="color: rgb(255,255,255); font-family: Helvetica,Arial,sans-serif; font-weight: bold; text-align: left; line-height: 14px; text-decoration: none; vertical-align: baseline; font-size: 16px; display: inline-block; border-radius: 3px; white-space: nowrap; margin: 0; padding: 12px 32px; border: none;" target="_blank">
<%= gettext("Participate") %>
</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</div>
<% nil -> %>
<% end %>
<%= if @event.description && @action != nil do %>
<div class="event-working" style="vertical-align: baseline; margin: 0 0 0 10px; padding: 7.5px 0 15px; border: 0;">
<p style="color: rgb(46,62,72); font-family: Helvetica,Arial,sans-serif; font-weight: 700; line-height: 1.5; font-size: 16px; vertical-align: baseline; margin: 0; padding: 0 0 7.5px; border: 0;" align="left">
<%= gettext("Details") %>

View File

@ -2,6 +2,8 @@
<%= render("participation/card/_metadata.text", event: @event, timezone: @timezone, locale: @locale, action: @action) %>
<%= case @action do %><% "participation" -> %><%= gettext("Manage your participation:") %> <%= Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) %><% "event" -> %><%= gettext("Participate:") %> <%= Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) %><% nil -> %><% end %>
<%= if @event.description do %><%= gettext("Details:") %>
<%= process_description(@event.description) %>
<%= if String.length(@event.description) > 200 do %><%= gettext("Read more : %{url}", url: Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid)) |> raw %><% end %><% end %>

View File

@ -35,15 +35,20 @@
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<p style="margin: 0;">
<%= ngettext "You have one pending attendance request to process:", "You have %{number_participation_requests} attendance requests to process:", @total, number_participation_requests: @total %>
<%= ngettext "You have one pending attendance request to process for the following event:", "You have %{number_participation_requests} attendance requests to process for the following event:", @total, number_participation_requests: @total %>
</p>
</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<%= render("participation/event_card.html", event: @event, timezone: @timezone, locale: @locale, action: nil) %>
</td>
</tr>
<tr>
<td bgcolor="#ffffff" align="left" style="padding: 20px 30px 0px 30px; color: #474467; font-family: 'Roboto', Helvetica, Arial, sans-serif; font-size: 18px; font-weight: 400; line-height: 25px;" >
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#ffffff" align="center" style="padding: 20px 30px 60px 30px;">
<td bgcolor="#ffffff" align="center" style="padding: 20px 30px 30px 30px;">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td align="center" style="border-radius: 3px;" bgcolor="#3C376E">

View File

@ -1,7 +1,9 @@
<%= gettext "A request is pending!" %>
==
<%= ngettext "You have one pending attendance request to process:", "You have %{number_participation_requests} attendance requests to process:", @total, number_participation_requests: @total %>
<%= ngettext "You have one pending attendance request to process for the following event:", "You have %{number_participation_requests} attendance requests to process for the following event:", @total, number_participation_requests: @total %>
<%= render("participation/event_card.text", event: @event, timezone: @timezone, locale: @locale, action: nil) %>
<%= gettext "Manage pending requests" %> <%= Routes.page_url(Mobilizon.Web.Endpoint, :event, @event.uuid) <> "/participations" %>

View File

@ -3,12 +3,15 @@ defmodule Mobilizon.Web.JsonLD.ObjectView do
alias Mobilizon.Actors.Actor
alias Mobilizon.Addresses.Address
alias Mobilizon.Events.{Event, Participant, ParticipantRole}
alias Mobilizon.Events.{Event, EventOptions, Participant, ParticipantRole}
alias Mobilizon.Posts.Post
alias Mobilizon.Web.Endpoint
alias Mobilizon.Web.JsonLD.ObjectView
alias Mobilizon.Web.Router.Helpers, as: Routes
import Mobilizon.Service.Metadata.Utils,
only: [process_description: 3]
@spec render(String.t(), map()) :: map()
def render("group.json", %{group: %Actor{} = group}) do
res = %{
@ -54,11 +57,12 @@ defmodule Mobilizon.Web.JsonLD.ObjectView do
"@context" => "https://schema.org",
"@type" => "Event",
"name" => event.title,
"description" => event.description,
"description" => process_description(event.description, "en", nil),
# We assume for now performer == organizer
"performer" => organizer,
"organizer" => organizer,
"location" => render_location(event),
"location" => render_all_locations(event),
"eventAttendanceMode" => event |> attendance_mode() |> event_attendance_mode(),
"eventStatus" =>
if(event.status == :cancelled,
do: "https://schema.org/EventCancelled",
@ -163,23 +167,66 @@ defmodule Mobilizon.Web.JsonLD.ObjectView do
defp reservation_status(:not_approved), do: "https://schema.org/ReservationHold"
defp reservation_status(_), do: "https://schema.org/ReservationConfirmed"
@spec render_location(map()) :: map() | nil
defp render_location(%{physical_address: %Address{} = address}),
do: render_one(address, ObjectView, "place.json", as: :address)
defp render_all_locations(%Event{} = event) do
[]
|> render_location(event)
|> render_virtual_location(event)
end
@spec render_location(list(), map()) :: list()
defp render_location(locations, %{physical_address: %Address{} = address}),
do: locations ++ [render_one(address, ObjectView, "place.json", as: :address)]
defp render_location(locations, _), do: locations
# For now the Virtual Location of an event is it's own URL,
# but in the future it will be a special field
defp render_location(%Event{url: event_url}) do
%{
"@type" => "VirtualLocation",
"url" => event_url
}
defp render_virtual_location(locations, %Event{
url: event_url,
metadata: metadata,
options: %EventOptions{is_online: is_online}
}) do
links = virtual_location_links(metadata)
fallback_links = if is_online, do: [event_url], else: []
links = if length(links) > 0, do: Enum.map(links, & &1.value), else: fallback_links
locations ++
Enum.map(
links,
&%{
"@type" => "VirtualLocation",
"url" => &1
}
)
end
defp render_location(_), do: nil
defp render_virtual_location(locations, _), do: locations
defp render_address(%{physical_address: %Address{} = address}),
do: render_one(address, ObjectView, "address.json", as: :address)
defp render_address(_), do: nil
defp event_attendance_mode(:online), do: "https://schema.org/OnlineEventAttendanceMode"
defp event_attendance_mode(:offline), do: "https://schema.org/OfflineEventAttendanceMode"
defp event_attendance_mode(:mixed), do: "https://schema.org/MixedEventAttendanceMode"
defp attendance_mode(%Event{options: %EventOptions{is_online: true}}),
do: :online
defp attendance_mode(%Event{physical_address: %Address{}, metadata: metadata}) do
if metadata |> virtual_location_links() |> length() > 0 do
:mixed
else
:offline
end
end
defp attendance_mode(%Event{}),
do: :offline
@livestream_keys ["mz:live", "mz:visio"]
@spec virtual_location_links(list()) :: list()
defp virtual_location_links(metadata),
do: Enum.filter(metadata, &String.contains?(&1.key, @livestream_keys))
end

View File

@ -789,18 +789,6 @@ msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[5] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -903,8 +891,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -1015,8 +1003,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1543,7 +1531,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1554,7 +1542,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1565,7 +1553,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1596,7 +1584,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1606,7 +1594,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1617,17 +1605,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "تم قبول المشاركة"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "تم قبول المشاركة"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1693,12 +1681,24 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
msgstr[5] ""

View File

@ -829,7 +829,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -768,15 +768,6 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -879,8 +870,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -991,8 +982,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1519,7 +1510,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1530,7 +1521,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1541,7 +1532,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1572,7 +1563,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1582,7 +1573,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1593,17 +1584,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1669,12 +1660,21 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""

View File

@ -803,7 +803,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -938,16 +938,6 @@ msgstr[1] ""
"Si has de canceŀlar la teva participació, accedeix a l'activitat per "
"l'enllaç de dalt i clica al botó de participació."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Tens una soŀlicitud de participació pendent de resoldre:"
msgstr[1] ""
"Tens %{number_participation_requests} soŀlicituds de participació pendents "
"de resoldre:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1067,8 +1057,8 @@ msgid "Location address was removed"
msgstr "L'adreça postal ha estat esborrada"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Gestiona les soŀlicituds pendents"
@ -1183,8 +1173,8 @@ msgstr ""
"de l'activitat amb l'enllaç d'amunt i clica al botó de participació."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Has rebut aquest correu perquè tens configurat de rebre notificacions per a "
@ -1775,7 +1765,7 @@ msgid "On the agenda this week"
msgstr "Una activitat planificada per aquesta setmana"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1786,7 +1776,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1797,7 +1787,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1828,7 +1818,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1838,7 +1828,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1849,17 +1839,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "S'ha aprovat la participació"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "S'ha aprovat la participació"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1925,12 +1915,22 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Tens una soŀlicitud de participació pendent de resoldre:"
msgstr[1] ""
"Tens %{number_participation_requests} soŀlicituds de participació pendents "
"de resoldre:"

View File

@ -804,7 +804,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -768,15 +768,6 @@ msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -879,8 +870,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -991,8 +982,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1519,7 +1510,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1530,7 +1521,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1541,7 +1532,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1572,7 +1563,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1582,7 +1573,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1593,17 +1584,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1669,12 +1660,21 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""

View File

@ -803,7 +803,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -972,14 +972,6 @@ msgstr[1] ""
"gehe einfach über obenstehenden Link auf die Veranstaltungs-Seite und klicke "
"auf den Teilnahme-Button."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Sie haben eine ausstehende Anwesenheitsanforderung zu bearbeiten:"
msgstr[1] "Sie haben %{Anzahl_Teilnahmeanträge} Teilnahmeanträge zu bearbeiten:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1100,8 +1092,8 @@ msgid "Location address was removed"
msgstr "Adresse wurde entfernt"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Ausstehende Anfragen verwalten"
@ -1222,8 +1214,8 @@ msgstr ""
"Schaltfläche \"Teilnehmen\"."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Sie erhalten diese E-Mail, weil Sie sich dafür entschieden haben, "
@ -1887,7 +1879,7 @@ msgid "On the agenda this week"
msgstr "Ein Event ist für diese Woche geplant"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1898,7 +1890,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1909,7 +1901,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1940,7 +1932,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1950,7 +1942,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1961,17 +1953,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Teilnahme bestätigt"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Teilnahme bestätigt"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -2037,12 +2029,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Sie haben eine ausstehende Anwesenheitsanforderung zu bearbeiten:"
msgstr[1] "Sie haben %{Anzahl_Teilnahmeanträge} Teilnahmeanträge zu bearbeiten:"

View File

@ -831,7 +831,7 @@ msgid "You don't have the right to remove this member."
msgstr "Sie haben nicht das Recht, dieses Mitglied zu entfernen."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Dieser Benutzername ist bereits vergeben."

View File

@ -748,14 +748,6 @@ msgid_plural "Would you wish to cancel your attendance to one or several events,
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -858,8 +850,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -970,8 +962,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1498,7 +1490,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1509,7 +1501,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1520,7 +1512,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1551,7 +1543,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1561,7 +1553,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1572,17 +1564,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1657,3 +1649,11 @@ msgstr ""
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -801,14 +801,6 @@ msgid_plural "Would you wish to cancel your attendance to one or several events,
msgstr[0] "If you need to cancel your participation, just access the event page through link above and click on the participation button."
msgstr[1] "If you need to cancel your participation, just access the event page through link above and click on the participation button."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -911,8 +903,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -1023,8 +1015,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1551,7 +1543,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1562,7 +1554,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1573,7 +1565,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1604,7 +1596,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1614,7 +1606,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1625,17 +1617,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Participant"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Participant"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1701,12 +1693,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -807,7 +807,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -804,7 +804,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -18,324 +18,324 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.8.1\n"
#, elixir-format
#: lib/service/activity/renderer/member.ex:38
#: lib/web/templates/email/activity/_member_activity_item.html.heex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12
#, elixir-format
msgid "%{member} accepted the invitation to join the group."
msgstr "%{member} aceptó la invitación para unirse al grupo."
#, elixir-format
#: lib/service/activity/renderer/member.ex:42
#: lib/web/templates/email/activity/_member_activity_item.html.heex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17
#, elixir-format
msgid "%{member} rejected the invitation to join the group."
msgstr "%{member} rechazó la invitación para unirse al grupo."
#, elixir-format
#: lib/service/activity/renderer/member.ex:30
#: lib/web/templates/email/activity/_member_activity_item.html.heex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1
#, elixir-format
msgid "%{member} requested to join the group."
msgstr "%{member} solicitó unirse al grupo."
#, elixir-format
#: lib/service/activity/renderer/member.ex:34
#: lib/web/templates/email/activity/_member_activity_item.html.heex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6
#, elixir-format
msgid "%{member} was invited by %{profile}."
msgstr "%{member} fue invitado por %{profile}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:50
#: lib/web/templates/email/activity/_member_activity_item.html.heex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27
#, elixir-format
msgid "%{profile} added the member %{member}."
msgstr "%{profile} agregó el miembro %{member}."
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:65
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19
#, elixir-format
msgid "%{profile} archived the discussion %{discussion}."
msgstr "%{profile} archivó la discusión %{discussion}."
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:25
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:4 lib/web/templates/email/activity/_discussion_activity_item.text.eex:1
#, elixir-format
msgid "%{profile} created the discussion %{discussion}."
msgstr "%{profile} creó la discusión %{discussion}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:24
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2
#, elixir-format
msgid "%{profile} created the folder %{resource}."
msgstr "%{profile} creó la carpeta %{resource}."
#, elixir-format
#: lib/web/templates/email/activity/_group_activity_item.html.heex:4
#: lib/web/templates/email/activity/_group_activity_item.text.eex:1
#, elixir-format
msgid "%{profile} created the group %{group}."
msgstr "%{profile} crfeó el grupo %{group}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:33
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8
#, elixir-format
msgid "%{profile} created the resource %{resource}."
msgstr "%{profile} creó el recurso %{resource}."
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:75
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25
#, elixir-format
msgid "%{profile} deleted the discussion %{discussion}."
msgstr "%{profile} eliminó la discusión %{discussion}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:97
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40
#, elixir-format
msgid "%{profile} deleted the folder %{resource}."
msgstr "%{profile} borró la carpeta %{resource}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:106
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45
#, elixir-format
msgid "%{profile} deleted the resource %{resource}."
msgstr "%{profile} eliminado el recurso %{resource}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:66
#: lib/web/templates/email/activity/_member_activity_item.html.heex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39
#, elixir-format
msgid "%{profile} excluded member %{member}."
msgstr "%{profile }miembro excluido %{member}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:76
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28
#, elixir-format
msgid "%{profile} moved the folder %{resource}."
msgstr "%{profile} movió la carpeta %{resource}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:85
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34
#, elixir-format
msgid "%{profile} moved the resource %{resource}."
msgstr "%{profile} movió el recurso %{resource}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:70
#: lib/web/templates/email/activity/_member_activity_item.html.heex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45
#, elixir-format
msgid "%{profile} quit the group."
msgstr "%{profile} abandona el grupo."
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:55
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13
#, elixir-format
msgid "%{profile} renamed the discussion %{discussion}."
msgstr "%{profile} renombrado la discusión %{discussion}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:45
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14
#, 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}."
#, elixir-format
#: lib/service/activity/renderer/resource.ex:59
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21
#, 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}."
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:35
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:18 lib/web/templates/email/activity/_discussion_activity_item.text.eex:7
#, elixir-format
msgid "%{profile} replied to the discussion %{discussion}."
msgstr "%{profile} respondió a la discusión %{discussion}."
#, elixir-format
#: lib/web/templates/email/activity/_group_activity_item.html.heex:19
#: lib/web/templates/email/activity/_group_activity_item.text.eex:7
#, elixir-format
msgid "%{profile} updated the group %{group}."
msgstr "%{profile} actualizó el grupo %{group}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:62
#: lib/web/templates/email/activity/_member_activity_item.html.heex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33
#, elixir-format
msgid "%{profile} updated the member %{member}."
msgstr "%{profile} actualizado el miembro %{member}."
#, elixir-format
#: lib/service/activity/renderer/event.ex:23
#: lib/web/templates/email/activity/_event_activity_item.html.heex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1
#, elixir-format
msgid "The event %{event} was created by %{profile}."
msgstr "El evento %{event} fue creado por %{profile}."
#, elixir-format
#: lib/service/activity/renderer/event.ex:43
#: lib/web/templates/email/activity/_event_activity_item.html.heex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13
#, elixir-format
msgid "The event %{event} was deleted by %{profile}."
msgstr "El evento% {event} fue eliminado por % {profile}."
#, elixir-format
#: lib/service/activity/renderer/event.ex:33
#: lib/web/templates/email/activity/_event_activity_item.html.heex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7
#, elixir-format
msgid "The event %{event} was updated by %{profile}."
msgstr "El evento %{event} fue actualizado por %{profile}."
#, elixir-format
#: lib/web/templates/email/activity/_post_activity_item.html.heex:4
#: lib/web/templates/email/activity/_post_activity_item.text.eex:1
#, elixir-format
msgid "The post %{post} was created by %{profile}."
msgstr "El cargo %{post} fue creado por %{profile}."
#, elixir-format
#: lib/web/templates/email/activity/_post_activity_item.html.heex:34
#: lib/web/templates/email/activity/_post_activity_item.text.eex:13
#, elixir-format
msgid "The post %{post} was deleted by %{profile}."
msgstr "El post %{post} fue eliminado por %{profile}."
#, elixir-format
#: lib/web/templates/email/activity/_post_activity_item.html.heex:19
#: lib/web/templates/email/activity/_post_activity_item.text.eex:7
#, elixir-format
msgid "The post %{post} was updated by %{profile}."
msgstr "El post %{post} fue actualizado por %{profile}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:46
#: lib/web/templates/email/activity/_member_activity_item.html.heex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22
#, elixir-format
msgid "%{member} joined the group."
msgstr "%{member} se unió al grupo."
#, elixir-format
#: lib/service/activity/renderer/event.ex:63
#: lib/web/templates/email/activity/_event_activity_item.html.heex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25
#, elixir-format
msgid "%{profile} posted a comment on the event %{event}."
msgstr "%{profile} publicó un comentario sobre el evento %{event}."
#, elixir-format
#: lib/service/activity/renderer/event.ex:54
#: lib/web/templates/email/activity/_event_activity_item.html.heex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19
#, elixir-format
msgid "%{profile} replied to a comment on the event %{event}."
msgstr "%{profile} respondió a un comentario sobre el evento %{event}."
#: lib/web/templates/email/email_direct_activity.text.eex:27
#, elixir-format
#: lib/web/templates/email/email_direct_activity.text.eex:27
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."
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:135
#: lib/web/templates/email/email_direct_activity.text.eex:23
#, elixir-format
msgid "View one more activity"
msgid_plural "View %{count} more activities"
msgstr[0] "Ver una actividad más"
msgstr[1] "Ver %{count} actividades mas"
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:44
#: lib/web/templates/email/email_direct_activity.html.heex:46 lib/web/templates/email/email_direct_activity.text.eex:6
#: lib/web/templates/email/email_direct_activity.text.eex:7
#, elixir-format
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!"
#: lib/service/activity/renderer/renderer.ex:46
#, elixir-format
#: lib/service/activity/renderer/renderer.ex:46
msgid "Activity on %{instance}"
msgstr "Actividad en %{instance}"
#, elixir-format
#: lib/service/activity/renderer/comment.ex:38
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:19 lib/web/templates/email/activity/_comment_activity_item.text.eex:7
#: lib/web/templates/email/email_anonymous_activity.html.heex:41 lib/web/templates/email/email_anonymous_activity.text.eex:5
#, elixir-format
msgid "%{profile} has posted an announcement under event %{event}."
msgstr "%{profile} ha publicado un anuncio en el evento %{event}."
#, elixir-format
#: lib/service/activity/renderer/comment.ex:24
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:4 lib/web/templates/email/activity/_comment_activity_item.text.eex:1
#, elixir-format
msgid "%{profile} mentionned you in a comment under event %{event}."
msgstr "%{profile} te mencionó en un comentario en el evento %{event}."
#: lib/service/activity/renderer/discussion.ex:45
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:45
msgid "%{profile} mentionned you in the discussion %{discussion}."
msgstr "%{profile}te mencioné en la discusión %{discussion}."
#: lib/web/templates/email/email_direct_activity.html.heex:155
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:155
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."
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:42
#: lib/web/templates/email/email_direct_activity.text.eex:5
#, elixir-format
msgid "Here's your weekly activity recap"
msgstr "Aquí está su resumen de actividad semanal"
#: lib/web/email/activity.ex:119 lib/web/email/activity.ex:140
#, elixir-format
#: lib/web/email/activity.ex:119 lib/web/email/activity.ex:140
msgid "Activity notification for %{instance}"
msgstr "Actividad en %{instance}"
#: lib/web/email/activity.ex:126
#, elixir-format
#: lib/web/email/activity.ex:126
msgid "Daily activity recap for %{instance}"
msgstr "Resumen de actividad diaria en %{instance}"
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:40
#: lib/web/templates/email/email_direct_activity.text.eex:4
#, elixir-format
msgid "Here's your daily activity recap"
msgstr "Aquí está su resumen de actividad diaria"
#: lib/web/email/activity.ex:133
#, elixir-format
#: lib/web/email/activity.ex:133
msgid "Weekly activity recap for %{instance}"
msgstr "Resumen de actividad semanal para %{instance}"
#, elixir-format
#: lib/service/activity/renderer/comment.ex:66
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:51 lib/web/templates/email/activity/_comment_activity_item.text.eex:19
#, elixir-format
msgid "%{profile} has posted a new comment under your event %{event}."
msgstr "%{profile} ha publicado un nuevo comentario en tu evento %{event}."
#, elixir-format
#: lib/service/activity/renderer/comment.ex:53
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:36 lib/web/templates/email/activity/_comment_activity_item.text.eex:13
#, elixir-format
msgid "%{profile} has posted a new reply under your event %{event}."
msgstr "%{profile} ha publicado una nueva respuesta en tu evento %{event}."
#: lib/web/email/activity.ex:46
#, elixir-format
#: lib/web/email/activity.ex:46
msgid "Announcement for your event %{event}"
msgstr "Anuncio para su evento %{event}"
#: lib/service/activity/renderer/group.ex:23
#, elixir-format
#: lib/service/activity/renderer/group.ex:23
msgid "The group %{group} was updated by %{profile}."
msgstr "El post %{post} fue actualizado por %{profile}."
#: lib/service/activity/renderer/post.ex:47
#, elixir-format
#: lib/service/activity/renderer/post.ex:47
msgid "The post %{post} from group %{group} was deleted by %{profile}."
msgstr "El post %{post} del grupo %{group} fue actualizado por %{profile}."
#: lib/service/activity/renderer/post.ex:31
#, elixir-format
#: lib/service/activity/renderer/post.ex:31
msgid "The post %{post} from group %{group} was published by %{profile}."
msgstr "El post %{post} del grupo %{group} fue actualizado por %{profile}."
#: lib/service/activity/renderer/post.ex:39
#, elixir-format
#: lib/service/activity/renderer/post.ex:39
msgid "The post %{post} from group %{group} was updated by %{profile}."
msgstr "El post %{post} del grupo %{group} fue actualizado por %{profile}."
#: lib/service/activity/renderer/member.ex:54
#, elixir-format
#: lib/service/activity/renderer/member.ex:54
msgid "%{profile} approved the membership request from %{member}."
msgstr "%{profile} actualizado el miembro %{member}."
#: lib/service/activity/renderer/member.ex:58
#, elixir-format
#: lib/service/activity/renderer/member.ex:58
msgid "%{profile} rejected the membership request from %{member}."
msgstr "%{profile} rechazó la solicitud de inscripción de %{member}."

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -933,15 +933,6 @@ msgstr[1] ""
"Jos haluat perua osallistumisesi, siirry tapahtumien sivuille yllä olevista "
"linkeistä ja napsauta niissä osallistumispainiketta."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Yksi osallistujapyyntö odottaa käsittelyäsi:"
msgstr[1] ""
"%{number_participation_requests} osallistujapyyntöä odottaa käsittelyäsi:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1060,8 +1051,8 @@ msgid "Location address was removed"
msgstr "Käyntiosoite poistettiin"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Hallinnoi odottavia osallistujapyyntöjä"
@ -1176,8 +1167,8 @@ msgstr ""
"linkistä tapahtumasivulle ja napsauta osallistumispainiketta."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Saat tämän sähköpostin, koska olet tilannut ilmoitukset tapahtumiesi "
@ -1813,7 +1804,7 @@ msgid "On the agenda this week"
msgstr "Yksi suunniteltu tapahtuma tällä viikolla"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1824,7 +1815,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1835,7 +1826,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1866,7 +1857,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1876,7 +1867,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1887,17 +1878,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Osallistuminen hyväksytty"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Osallistuminen hyväksytty"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1963,12 +1954,21 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Yksi osallistujapyyntö odottaa käsittelyäsi:"
msgstr[1] ""
"%{number_participation_requests} osallistujapyyntöä odottaa käsittelyäsi:"

View File

@ -810,7 +810,7 @@ msgid "You don't have the right to remove this member."
msgstr "Sinulla ei ole oikeutta poistaa jäsentä."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Käyttäjänimi on jo käytössä."

View File

@ -20,257 +20,320 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Poedit 3.0\n"
#: lib/service/activity/renderer/member.ex:38 lib/web/templates/email/activity/_member_activity_item.html.heex:19
#: lib/web/templates/email/activity/_member_activity_item.text.eex:12
#, elixir-format
#: lib/service/activity/renderer/member.ex:38
#: lib/web/templates/email/activity/_member_activity_item.html.heex:19 lib/web/templates/email/activity/_member_activity_item.text.eex:12
msgid "%{member} accepted the invitation to join the group."
msgstr "%{member} a accepté l'invitation à rejoindre le groupe."
#: lib/service/activity/renderer/member.ex:42 lib/web/templates/email/activity/_member_activity_item.html.heex:26
#: lib/web/templates/email/activity/_member_activity_item.text.eex:17
#, elixir-format
#: lib/service/activity/renderer/member.ex:42
#: lib/web/templates/email/activity/_member_activity_item.html.heex:26 lib/web/templates/email/activity/_member_activity_item.text.eex:17
msgid "%{member} rejected the invitation to join the group."
msgstr "%{member} a refusé l'invitation à rejoindre le groupe."
#: lib/service/activity/renderer/member.ex:30 lib/web/templates/email/activity/_member_activity_item.html.heex:4
#: lib/web/templates/email/activity/_member_activity_item.text.eex:1
#, elixir-format
#: lib/service/activity/renderer/member.ex:30
#: lib/web/templates/email/activity/_member_activity_item.html.heex:4 lib/web/templates/email/activity/_member_activity_item.text.eex:1
msgid "%{member} requested to join the group."
msgstr "%{member} a demandé à rejoindre le groupe."
#: lib/service/activity/renderer/member.ex:34 lib/web/templates/email/activity/_member_activity_item.html.heex:11
#: lib/web/templates/email/activity/_member_activity_item.text.eex:6
#, elixir-format
#: lib/service/activity/renderer/member.ex:34
#: lib/web/templates/email/activity/_member_activity_item.html.heex:11 lib/web/templates/email/activity/_member_activity_item.text.eex:6
msgid "%{member} was invited by %{profile}."
msgstr "%{member} a été invité⋅e par %{profile}."
#: lib/service/activity/renderer/member.ex:50 lib/web/templates/email/activity/_member_activity_item.html.heex:40
#: lib/web/templates/email/activity/_member_activity_item.text.eex:27
#, elixir-format
#: lib/service/activity/renderer/member.ex:50
#: lib/web/templates/email/activity/_member_activity_item.html.heex:40 lib/web/templates/email/activity/_member_activity_item.text.eex:27
msgid "%{profile} added the member %{member}."
msgstr "%{profile} a ajouté le ou la membre %{member}."
#: lib/service/activity/renderer/discussion.ex:65 lib/web/templates/email/activity/_discussion_activity_item.html.heex:46
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:19
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:65
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:46 lib/web/templates/email/activity/_discussion_activity_item.text.eex:19
msgid "%{profile} archived the discussion %{discussion}."
msgstr "%{profile} a archivé la discussion %{discussion}."
#: lib/service/activity/renderer/discussion.ex:25 lib/web/templates/email/activity/_discussion_activity_item.html.heex:4
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:1
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:25
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:4 lib/web/templates/email/activity/_discussion_activity_item.text.eex:1
msgid "%{profile} created the discussion %{discussion}."
msgstr "%{profile} a créé la discussion %{discussion}."
#: lib/service/activity/renderer/resource.ex:24 lib/web/templates/email/activity/_resource_activity_item.html.heex:5
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:2
#, elixir-format
#: lib/service/activity/renderer/resource.ex:24
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:5 lib/web/templates/email/activity/_resource_activity_item.text.eex:2
msgid "%{profile} created the folder %{resource}."
msgstr "%{profile} a créé le dossier %{resource}."
#: lib/web/templates/email/activity/_group_activity_item.html.heex:4 lib/web/templates/email/activity/_group_activity_item.text.eex:1
#, elixir-format
#: lib/web/templates/email/activity/_group_activity_item.html.heex:4
#: lib/web/templates/email/activity/_group_activity_item.text.eex:1
msgid "%{profile} created the group %{group}."
msgstr "%{profile} a créé le groupe %{group}."
#: lib/service/activity/renderer/resource.ex:33 lib/web/templates/email/activity/_resource_activity_item.html.heex:20
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:8
#, elixir-format
#: lib/service/activity/renderer/resource.ex:33
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:20 lib/web/templates/email/activity/_resource_activity_item.text.eex:8
msgid "%{profile} created the resource %{resource}."
msgstr "%{profile} a créé la resource %{resource}."
#: lib/service/activity/renderer/discussion.ex:75 lib/web/templates/email/activity/_discussion_activity_item.html.heex:60
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:25
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:75
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:60 lib/web/templates/email/activity/_discussion_activity_item.text.eex:25
msgid "%{profile} deleted the discussion %{discussion}."
msgstr "%{profile} a créé la discussion %{discussion}."
#: lib/service/activity/renderer/resource.ex:97 lib/web/templates/email/activity/_resource_activity_item.html.heex:103
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:40
#, elixir-format
#: lib/service/activity/renderer/resource.ex:97
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:103 lib/web/templates/email/activity/_resource_activity_item.text.eex:40
msgid "%{profile} deleted the folder %{resource}."
msgstr "%{profile} a supprimé le dossier %{resource}."
#: lib/service/activity/renderer/resource.ex:106 lib/web/templates/email/activity/_resource_activity_item.html.heex:111
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:45
#, elixir-format
#: lib/service/activity/renderer/resource.ex:106
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:111 lib/web/templates/email/activity/_resource_activity_item.text.eex:45
msgid "%{profile} deleted the resource %{resource}."
msgstr "%{profile} a supprimé la resource %{resource}."
#: lib/service/activity/renderer/member.ex:66 lib/web/templates/email/activity/_member_activity_item.html.heex:56
#: lib/web/templates/email/activity/_member_activity_item.text.eex:39
#, elixir-format
#: lib/service/activity/renderer/member.ex:66
#: lib/web/templates/email/activity/_member_activity_item.html.heex:56 lib/web/templates/email/activity/_member_activity_item.text.eex:39
msgid "%{profile} excluded member %{member}."
msgstr "%{profile} a exclu le ou la membre %{member}."
#: lib/service/activity/renderer/resource.ex:76 lib/web/templates/email/activity/_resource_activity_item.html.heex:71
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:28
#, elixir-format
#: lib/service/activity/renderer/resource.ex:76
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:71 lib/web/templates/email/activity/_resource_activity_item.text.eex:28
msgid "%{profile} moved the folder %{resource}."
msgstr "%{profile} a déplacé le dossier %{resource}."
#: lib/service/activity/renderer/resource.ex:85 lib/web/templates/email/activity/_resource_activity_item.html.heex:86
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:34
#, elixir-format
#: lib/service/activity/renderer/resource.ex:85
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:86 lib/web/templates/email/activity/_resource_activity_item.text.eex:34
msgid "%{profile} moved the resource %{resource}."
msgstr "%{profile} a déplacé la ressource %{resource}."
#: lib/service/activity/renderer/member.ex:70 lib/web/templates/email/activity/_member_activity_item.html.heex:64
#: lib/web/templates/email/activity/_member_activity_item.text.eex:45
#, elixir-format
#: lib/service/activity/renderer/member.ex:70
#: lib/web/templates/email/activity/_member_activity_item.html.heex:64 lib/web/templates/email/activity/_member_activity_item.text.eex:45
msgid "%{profile} quit the group."
msgstr "%{profile} a quitté le groupe."
#: lib/service/activity/renderer/discussion.ex:55 lib/web/templates/email/activity/_discussion_activity_item.html.heex:32
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:13
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:55
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:32 lib/web/templates/email/activity/_discussion_activity_item.text.eex:13
msgid "%{profile} renamed the discussion %{discussion}."
msgstr "%{profile} a renommé la discussion %{discussion}."
#: lib/service/activity/renderer/resource.ex:45 lib/web/templates/email/activity/_resource_activity_item.html.heex:37
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:14
#, elixir-format
#: lib/service/activity/renderer/resource.ex:45
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:37 lib/web/templates/email/activity/_resource_activity_item.text.eex:14
msgid "%{profile} renamed the folder from %{old_resource_title} to %{resource}."
msgstr "%{profile} a renommé le dossier %{old_resource_title} en %{resource}."
#: lib/service/activity/renderer/resource.ex:59 lib/web/templates/email/activity/_resource_activity_item.html.heex:53
#: lib/web/templates/email/activity/_resource_activity_item.text.eex:21
#, elixir-format
#: lib/service/activity/renderer/resource.ex:59
#: lib/web/templates/email/activity/_resource_activity_item.html.heex:53 lib/web/templates/email/activity/_resource_activity_item.text.eex:21
msgid "%{profile} renamed the resource from %{old_resource_title} to %{resource}."
msgstr "%{profile} a renommé la resource %{old_resource_title} en %{resource}."
#: lib/service/activity/renderer/discussion.ex:35 lib/web/templates/email/activity/_discussion_activity_item.html.heex:18
#: lib/web/templates/email/activity/_discussion_activity_item.text.eex:7
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:35
#: lib/web/templates/email/activity/_discussion_activity_item.html.heex:18 lib/web/templates/email/activity/_discussion_activity_item.text.eex:7
msgid "%{profile} replied to the discussion %{discussion}."
msgstr "%{profile} a répondu à la discussion %{discussion}."
#: lib/web/templates/email/activity/_group_activity_item.html.heex:19 lib/web/templates/email/activity/_group_activity_item.text.eex:7
#, elixir-format
#: lib/web/templates/email/activity/_group_activity_item.html.heex:19
#: lib/web/templates/email/activity/_group_activity_item.text.eex:7
msgid "%{profile} updated the group %{group}."
msgstr "%{profile} a mis à jour le groupe %{group}."
#: lib/service/activity/renderer/member.ex:62 lib/web/templates/email/activity/_member_activity_item.html.heex:48
#: lib/web/templates/email/activity/_member_activity_item.text.eex:33
#, elixir-format
#: lib/service/activity/renderer/member.ex:62
#: lib/web/templates/email/activity/_member_activity_item.html.heex:48 lib/web/templates/email/activity/_member_activity_item.text.eex:33
msgid "%{profile} updated the member %{member}."
msgstr "%{profile} a mis à jour le membre %{member}."
#: lib/service/activity/renderer/event.ex:23 lib/web/templates/email/activity/_event_activity_item.html.heex:4
#: lib/web/templates/email/activity/_event_activity_item.text.eex:1
#, elixir-format
#: lib/service/activity/renderer/event.ex:23
#: lib/web/templates/email/activity/_event_activity_item.html.heex:4 lib/web/templates/email/activity/_event_activity_item.text.eex:1
msgid "The event %{event} was created by %{profile}."
msgstr "L'événement %{event} a été créé par %{profile}."
#: lib/service/activity/renderer/event.ex:43 lib/web/templates/email/activity/_event_activity_item.html.heex:34
#: lib/web/templates/email/activity/_event_activity_item.text.eex:13
#, elixir-format
#: lib/service/activity/renderer/event.ex:43
#: lib/web/templates/email/activity/_event_activity_item.html.heex:34 lib/web/templates/email/activity/_event_activity_item.text.eex:13
msgid "The event %{event} was deleted by %{profile}."
msgstr "L'événement %{event} a été supprimé par %{profile}."
#: lib/service/activity/renderer/event.ex:33 lib/web/templates/email/activity/_event_activity_item.html.heex:19
#: lib/web/templates/email/activity/_event_activity_item.text.eex:7
#, elixir-format
#: lib/service/activity/renderer/event.ex:33
#: lib/web/templates/email/activity/_event_activity_item.html.heex:19 lib/web/templates/email/activity/_event_activity_item.text.eex:7
msgid "The event %{event} was updated by %{profile}."
msgstr "L'événement %{event} a été mis à jour par %{profile}."
#: lib/web/templates/email/activity/_post_activity_item.html.heex:4 lib/web/templates/email/activity/_post_activity_item.text.eex:1
#, elixir-format
#: lib/web/templates/email/activity/_post_activity_item.html.heex:4
#: lib/web/templates/email/activity/_post_activity_item.text.eex:1
msgid "The post %{post} was created by %{profile}."
msgstr "Le billet %{post} a été créé par %{profile}."
#: lib/web/templates/email/activity/_post_activity_item.html.heex:34 lib/web/templates/email/activity/_post_activity_item.text.eex:13
#, elixir-format
#: lib/web/templates/email/activity/_post_activity_item.html.heex:34
#: lib/web/templates/email/activity/_post_activity_item.text.eex:13
msgid "The post %{post} was deleted by %{profile}."
msgstr "Le billet %{post} a été supprimé par %{profile}."
#: lib/web/templates/email/activity/_post_activity_item.html.heex:19 lib/web/templates/email/activity/_post_activity_item.text.eex:7
#, elixir-format
#: lib/web/templates/email/activity/_post_activity_item.html.heex:19
#: lib/web/templates/email/activity/_post_activity_item.text.eex:7
msgid "The post %{post} was updated by %{profile}."
msgstr "Le billet %{post} a été mis à jour par %{profile}."
#: lib/service/activity/renderer/member.ex:46 lib/web/templates/email/activity/_member_activity_item.html.heex:33
#: lib/web/templates/email/activity/_member_activity_item.text.eex:22
#, elixir-format
#: lib/service/activity/renderer/member.ex:46
#: lib/web/templates/email/activity/_member_activity_item.html.heex:33 lib/web/templates/email/activity/_member_activity_item.text.eex:22
msgid "%{member} joined the group."
msgstr "%{member} a rejoint le groupe."
#: lib/service/activity/renderer/event.ex:63 lib/web/templates/email/activity/_event_activity_item.html.heex:58
#: lib/web/templates/email/activity/_event_activity_item.text.eex:25
#, elixir-format
#: lib/service/activity/renderer/event.ex:63
#: lib/web/templates/email/activity/_event_activity_item.html.heex:58 lib/web/templates/email/activity/_event_activity_item.text.eex:25
msgid "%{profile} posted a comment on the event %{event}."
msgstr "%{profile} a posté un commentaire sur l'événement %{event}."
#: lib/service/activity/renderer/event.ex:54 lib/web/templates/email/activity/_event_activity_item.html.heex:43
#: lib/web/templates/email/activity/_event_activity_item.text.eex:19
#, elixir-format
#: lib/service/activity/renderer/event.ex:54
#: lib/web/templates/email/activity/_event_activity_item.html.heex:43 lib/web/templates/email/activity/_event_activity_item.text.eex:19
msgid "%{profile} replied to a comment on the event %{event}."
msgstr "%{profile} a répondu à un commentaire sur l'événement %{event}."
#, elixir-format
#: lib/web/templates/email/email_direct_activity.text.eex:27
msgid "Don't want to receive activity notifications? You may change frequency or disable them in your settings."
msgstr "Vous ne voulez pas recevoir de notifications d'activité ? Vous pouvez changer leur fréquence ou les désactiver dans vos préférences."
#: lib/web/templates/email/email_direct_activity.html.heex:135 lib/web/templates/email/email_direct_activity.text.eex:23
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:135
#: lib/web/templates/email/email_direct_activity.text.eex:23
msgid "View one more activity"
msgid_plural "View %{count} more activities"
msgstr[0] "Voir une activité de plus"
msgstr[1] "Voir %{count} activités de plus"
#: lib/web/templates/email/email_direct_activity.html.heex:44 lib/web/templates/email/email_direct_activity.html.heex:46
#: lib/web/templates/email/email_direct_activity.text.eex:6 lib/web/templates/email/email_direct_activity.text.eex:7
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:44
#: lib/web/templates/email/email_direct_activity.html.heex:46 lib/web/templates/email/email_direct_activity.text.eex:6
#: lib/web/templates/email/email_direct_activity.text.eex:7
msgid "There has been an activity!"
msgid_plural "There has been some activity!"
msgstr[0] "Il y a eu une activité !"
msgstr[1] "Il y a eu de l'activité !"
#, elixir-format
#: lib/service/activity/renderer/renderer.ex:46
msgid "Activity on %{instance}"
msgstr "Activité sur %{instance}"
#: lib/service/activity/renderer/comment.ex:38 lib/web/templates/email/activity/_comment_activity_item.html.heex:19
#: lib/web/templates/email/activity/_comment_activity_item.text.eex:7 lib/web/templates/email/email_anonymous_activity.html.heex:41
#: lib/web/templates/email/email_anonymous_activity.text.eex:5
#, elixir-format
#: lib/service/activity/renderer/comment.ex:38
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:19 lib/web/templates/email/activity/_comment_activity_item.text.eex:7
#: lib/web/templates/email/email_anonymous_activity.html.heex:41 lib/web/templates/email/email_anonymous_activity.text.eex:5
msgid "%{profile} has posted an announcement under event %{event}."
msgstr "%{profile} a posté une annonce sous l'événement %{event}."
#: lib/service/activity/renderer/comment.ex:24 lib/web/templates/email/activity/_comment_activity_item.html.heex:4
#: lib/web/templates/email/activity/_comment_activity_item.text.eex:1
#, elixir-format
#: lib/service/activity/renderer/comment.ex:24
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:4 lib/web/templates/email/activity/_comment_activity_item.text.eex:1
msgid "%{profile} mentionned you in a comment under event %{event}."
msgstr "%{profile} vous a mentionné dans un commentaire sous l'événement %{event}."
#, elixir-format
#: lib/service/activity/renderer/discussion.ex:45
msgid "%{profile} mentionned you in the discussion %{discussion}."
msgstr "%{profile} vous a mentionné dans la discussion %{discussion}."
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:155
msgid "Don't want to receive activity notifications? You may change frequency or disable them in %{tag_start}your settings%{tag_end}."
msgstr ""
"Vous ne voulez pas recevoir de notifications d'activité ? Vous pouvez changer leur fréquence ou les désactiver dans %{tag_start}vos préférences"
"%{tag_end}."
#: lib/web/templates/email/email_direct_activity.html.heex:42 lib/web/templates/email/email_direct_activity.text.eex:5
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:42
#: lib/web/templates/email/email_direct_activity.text.eex:5
msgid "Here's your weekly activity recap"
msgstr "Voici votre récapitulatif hebdomadaire d'activité"
#, elixir-format
#: lib/web/email/activity.ex:119 lib/web/email/activity.ex:140
msgid "Activity notification for %{instance}"
msgstr "Notification d'activité sur %{instance}"
#, elixir-format
#: lib/web/email/activity.ex:126
msgid "Daily activity recap for %{instance}"
msgstr "Récapitulatif quotidien d'activité sur %{instance}"
#: lib/web/templates/email/email_direct_activity.html.heex:40 lib/web/templates/email/email_direct_activity.text.eex:4
#, elixir-format
#: lib/web/templates/email/email_direct_activity.html.heex:40
#: lib/web/templates/email/email_direct_activity.text.eex:4
msgid "Here's your daily activity recap"
msgstr "Voici votre récapitulatif quotidien d'activité"
#, elixir-format
#: lib/web/email/activity.ex:133
msgid "Weekly activity recap for %{instance}"
msgstr "Récapitulatif hebdomadaire d'activité sur %{instance}"
#: lib/service/activity/renderer/comment.ex:66 lib/web/templates/email/activity/_comment_activity_item.html.heex:51
#: lib/web/templates/email/activity/_comment_activity_item.text.eex:19
#, elixir-format
#: lib/service/activity/renderer/comment.ex:66
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:51 lib/web/templates/email/activity/_comment_activity_item.text.eex:19
msgid "%{profile} has posted a new comment under your event %{event}."
msgstr "%{profile} a posté un nouveau commentaire sous votre événement %{event}."
#: lib/service/activity/renderer/comment.ex:53 lib/web/templates/email/activity/_comment_activity_item.html.heex:36
#: lib/web/templates/email/activity/_comment_activity_item.text.eex:13
#, elixir-format
#: lib/service/activity/renderer/comment.ex:53
#: lib/web/templates/email/activity/_comment_activity_item.html.heex:36 lib/web/templates/email/activity/_comment_activity_item.text.eex:13
msgid "%{profile} has posted a new reply under your event %{event}."
msgstr "%{profile} a posté une nouvelle réponse sous votre événement %{event}."
#, elixir-format
#: lib/web/email/activity.ex:46
msgid "Announcement for your event %{event}"
msgstr "Annonce pour votre événement %{event}"
#, elixir-format
#: lib/service/activity/renderer/group.ex:23
msgid "The group %{group} was updated by %{profile}."
msgstr "Le groupe %{group} a été mis à jour par %{profile}."
#, elixir-format
#: lib/service/activity/renderer/post.ex:47
msgid "The post %{post} from group %{group} was deleted by %{profile}."
msgstr "Le billet %{post} du groupe %{group} a été supprimé par %{profile}."
#, elixir-format
#: lib/service/activity/renderer/post.ex:31
msgid "The post %{post} from group %{group} was published by %{profile}."
msgstr "Le billet %{post} du groupe %{group} a été publié par %{profile}."
#, elixir-format
#: lib/service/activity/renderer/post.ex:39
msgid "The post %{post} from group %{group} was updated by %{profile}."
msgstr "Le billet %{post} du groupe %{group} a été mis à jour par %{profile}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:54
msgid "%{profile} approved the membership request from %{member}."
msgstr "%{profile} a approuvé la demande d'adhésion de %{member}."
#, elixir-format
#: lib/service/activity/renderer/member.ex:58
msgid "%{profile} rejected the membership request from %{member}."
msgstr "%{profile} a rejeté la demande d'adhésion de %{member}."

View File

@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2021-11-12 17:13+0100\n"
"PO-Revision-Date: 2021-11-15 15:55+0100\n"
"Last-Translator: Thomas Citharel <thomas.citharel@framasoft.org>\n"
"Language-Team: French <https://weblate.framasoft.org/projects/mobilizon/backend/fr/>\n"
"Language: fr\n"
@ -640,12 +640,6 @@ msgid_plural "Would you wish to cancel your attendance to one or several events,
msgstr[0] "Si vous avez besoin d'annuler votre participation, il suffit d'accéder à la page de l'événement à partir du lien ci-dessus et de cliquer sur le bouton « Je participe »."
msgstr[1] "Si vous avez besoin d'annuler votre participation à un ou plusieurs événements, il suffit d'accéder aux pages des événement grâce aux liens ci-dessus et de cliquer sur le bouton « Je participe »."
#: lib/web/templates/email/pending_participation_notification.html.heex:38 lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Vous avez une demande de participation en attente à traiter :"
msgstr[1] "Vous avez %{number_participation_requests} demandes de participation en attente à traiter :"
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
msgstr "%{instance} est une instance Mobilizon."
@ -656,7 +650,7 @@ msgstr "<b>%{instance}</b> est une instance Mobilizon."
#: lib/web/templates/email/pending_participation_notification.html.heex:13 lib/web/templates/email/pending_participation_notification.text.eex:1
msgid "A request is pending!"
msgstr "Une requête est en attente !"
msgstr "Une demande est en attente !"
#: lib/web/templates/email/before_event_notification.html.heex:13 lib/web/templates/email/before_event_notification.text.eex:1
msgid "An event is upcoming!"
@ -718,7 +712,7 @@ msgstr "Localisation"
msgid "Location address was removed"
msgstr "L'adresse physique a été enlevée"
#: lib/web/templates/email/pending_participation_notification.html.heex:51 lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56 lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Gérer les demandes de participation en attente"
@ -798,7 +792,7 @@ msgstr "Quoi de neuf aujourd'hui ?"
msgid "Would you wish to update or cancel your attendance, simply access the event page through the link above and click on the Attending button."
msgstr "Si vous souhaitez mettre à jour ou annuler votre participation, il vous suffit d'accéder à la page de l'événement par le lien ci-dessus et de cliquer sur le bouton Participer."
#: lib/web/templates/email/pending_participation_notification.html.heex:64 lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69 lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr "Vous recevez ce courriel parce que vous avez choisi de recevoir des notifications pour les demandes de participation en attente à vos événements. Vous pouvez désactiver ou modifier vos paramètres de notification dans les paramètres de votre compte utilisateur dans « Notifications »."
@ -1209,7 +1203,7 @@ msgstr "%{date_time} (dans votre fuseau horaire %{timezone} %{offset})"
msgid "On the agenda this week"
msgstr "Au programme cette semaine"
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr "Détails"
@ -1217,7 +1211,7 @@ msgstr "Détails"
msgid "From the %{start} to the %{end}"
msgstr "Du %{start} au %{end}"
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr "Gérer votre participation"
@ -1225,7 +1219,7 @@ msgstr "Gérer votre participation"
msgid "On %{date} from %{start_time} to %{end_time}"
msgstr "Le %{date} de %{start_time} à %{end_time}"
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr "Lire plus"
@ -1249,7 +1243,7 @@ msgstr "Adresse :"
msgid "Date:"
msgstr "Date :"
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr "Détails :"
@ -1257,7 +1251,7 @@ msgstr "Détails :"
msgid "Manage your notification settings"
msgstr "Gérer vos paramètres de notification"
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr "Gérer votre participation :"
@ -1265,15 +1259,15 @@ msgstr "Gérer votre participation :"
msgid "Organizer: %{organizer}"
msgstr "Organisateur : %{organizer}"
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Participer"
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Participer :"
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr "Lire plus : %{url}"
@ -1332,3 +1326,9 @@ msgstr "Votre demande d'adhésion pour le groupe %{group} a été approuvée."
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr "Votre demande d'adhésion pour le groupe %{link_start}<b>%{group}</b>%{link_end} a été approuvée."
#: lib/web/templates/email/pending_participation_notification.html.heex:38 lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Vous avez une demande de participation en attente à traiter pour l'événement suivant :"
msgstr[1] "Vous avez %{number_participation_requests} demandes de participation en attente à traiter pour l'événement suivant :"

View File

@ -96,747 +96,937 @@ msgstr "doit être supérieur ou égal à %{number}"
msgid "must be equal to %{number}"
msgstr "doit être égal à %{number}"
#, elixir-format
#: lib/graphql/resolvers/user.ex:107
msgid "Cannot refresh the token"
msgstr "Impossible de rafraîchir le jeton"
#, elixir-format
#: lib/graphql/resolvers/group.ex:245
msgid "Current profile is not a member of this group"
msgstr "Le profil actuel n'est pas un membre de ce groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:249
msgid "Current profile is not an administrator of the selected group"
msgstr "Le profil actuel n'est pas un·e administrateur·ice du groupe sélectionné"
#, elixir-format
#: lib/graphql/resolvers/user.ex:593
msgid "Error while saving user settings"
msgstr "Erreur lors de la sauvegarde des paramètres utilisateur"
#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242 lib/graphql/resolvers/group.ex:274
#: lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/group.ex:342 lib/graphql/resolvers/group.ex:391
#: lib/graphql/resolvers/member.ex:79
#, elixir-format
#: lib/graphql/error.ex:99 lib/graphql/resolvers/group.ex:242
#: lib/graphql/resolvers/group.ex:274 lib/graphql/resolvers/group.ex:311 lib/graphql/resolvers/group.ex:342
#: lib/graphql/resolvers/group.ex:391 lib/graphql/resolvers/member.ex:79
msgid "Group not found"
msgstr "Groupe non trouvé"
#, elixir-format
#: lib/graphql/resolvers/group.ex:78 lib/graphql/resolvers/group.ex:82
msgid "Group with ID %{id} not found"
msgstr "Groupe avec l'ID %{id} non trouvé"
#, elixir-format
#: lib/graphql/resolvers/user.ex:85
msgid "Impossible to authenticate, either your email or password are invalid."
msgstr "Impossible de s'authentifier, votre adresse e-mail ou bien votre mot de passe sont invalides."
#, elixir-format
#: lib/graphql/resolvers/group.ex:308
msgid "Member not found"
msgstr "Membre non trouvé"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:94
msgid "No profile found for the moderator user"
msgstr "Aucun profil trouvé pour l'utilisateur modérateur"
#, elixir-format
#: lib/graphql/resolvers/user.ex:253
msgid "No user to validate with this email was found"
msgstr "Aucun·e utilisateur·ice à valider avec cet email n'a été trouvé·e"
#, elixir-format
#: lib/graphql/resolvers/person.ex:314 lib/graphql/resolvers/user.ex:278
msgid "No user with this email was found"
msgstr "Aucun·e utilisateur·ice avec cette adresse e-mail n'a été trouvé·e"
#: lib/graphql/resolvers/feed_token.ex:28 lib/graphql/resolvers/participant.ex:32
#: lib/graphql/resolvers/participant.ex:210 lib/graphql/resolvers/person.ex:236 lib/graphql/resolvers/person.ex:353
#: lib/graphql/resolvers/person.ex:380 lib/graphql/resolvers/person.ex:397 lib/graphql/resolvers/person.ex:425
#: lib/graphql/resolvers/person.ex:440
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:28
#: lib/graphql/resolvers/participant.ex:32 lib/graphql/resolvers/participant.ex:210 lib/graphql/resolvers/person.ex:236
#: lib/graphql/resolvers/person.ex:353 lib/graphql/resolvers/person.ex:380 lib/graphql/resolvers/person.ex:397
#: lib/graphql/resolvers/person.ex:425 lib/graphql/resolvers/person.ex:440
msgid "Profile is not owned by authenticated user"
msgstr "Le profil n'est pas possédé par l'utilisateur connecté"
#, elixir-format
#: lib/graphql/resolvers/user.ex:156
msgid "Registrations are not open"
msgstr "Les inscriptions ne sont pas ouvertes"
#, elixir-format
#: lib/graphql/resolvers/user.ex:408
msgid "The current password is invalid"
msgstr "Le mot de passe actuel est invalid"
#, elixir-format
#: lib/graphql/resolvers/user.ex:451
msgid "The new email doesn't seem to be valid"
msgstr "La nouvelle adresse e-mail ne semble pas être valide"
#, elixir-format
#: lib/graphql/resolvers/user.ex:454
msgid "The new email must be different"
msgstr "La nouvelle adresse e-mail doit être différente"
#, elixir-format
#: lib/graphql/resolvers/user.ex:411
msgid "The new password must be different"
msgstr "Le nouveau mot de passe doit être différent"
#: lib/graphql/resolvers/user.ex:458 lib/graphql/resolvers/user.ex:520 lib/graphql/resolvers/user.ex:523
#, elixir-format
#: lib/graphql/resolvers/user.ex:458 lib/graphql/resolvers/user.ex:520
#: lib/graphql/resolvers/user.ex:523
msgid "The password provided is invalid"
msgstr "Le mot de passe fourni est invalide"
#, elixir-format
#: lib/graphql/resolvers/user.ex:415
msgid "The password you have chosen is too short. Please make sure your password contains at least 6 characters."
msgstr ""
"Le mot de passe que vous avez choisi est trop court. Merci de vous assurer que votre mot de passe contienne au moins "
"6 caractères."
#, elixir-format
#: lib/graphql/resolvers/user.ex:274
msgid "This user can't reset their password"
msgstr "Cet·te utilisateur·ice ne peut pas réinitialiser son mot de passe"
#, elixir-format
#: lib/graphql/resolvers/user.ex:81
msgid "This user has been disabled"
msgstr "Cet·te utilisateur·ice a été désactivé·e"
#, elixir-format
#: lib/graphql/resolvers/user.ex:232 lib/graphql/resolvers/user.ex:237
msgid "Unable to validate user"
msgstr "Impossible de valider l'utilisateur·ice"
#, elixir-format
#: lib/graphql/resolvers/user.ex:501
msgid "User already disabled"
msgstr "L'utilisateur·ice est déjà désactivé·e"
#, elixir-format
#: lib/graphql/resolvers/user.ex:568
msgid "User requested is not logged-in"
msgstr "L'utilisateur·ice demandé·e n'est pas connecté·e"
#, elixir-format
#: lib/graphql/resolvers/group.ex:280
msgid "You are already a member of this group"
msgstr "Vous êtes déjà membre de ce groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:315
msgid "You can't leave this group because you are the only administrator"
msgstr "Vous ne pouvez pas quitter ce groupe car vous en êtes le ou la seul·e administrateur·ice"
#, elixir-format
#: lib/graphql/resolvers/group.ex:277
msgid "You cannot join this group"
msgstr "Vous ne pouvez pas rejoindre ce groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:112
msgid "You may not list groups unless moderator."
msgstr "Vous ne pouvez pas lister les groupes sauf à être modérateur·ice."
#, elixir-format
#: lib/graphql/resolvers/user.ex:466
msgid "You need to be logged-in to change your email"
msgstr "Vous devez être connecté·e pour changer votre adresse e-mail"
#, elixir-format
#: lib/graphql/resolvers/user.ex:423
msgid "You need to be logged-in to change your password"
msgstr "Vous devez être connecté·e pour changer votre mot de passe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:254
msgid "You need to be logged-in to delete a group"
msgstr "Vous devez être connecté·e pour supprimer un groupe"
#, elixir-format
#: lib/graphql/resolvers/user.ex:528
msgid "You need to be logged-in to delete your account"
msgstr "Vous devez être connecté·e pour supprimer votre compte"
#, elixir-format
#: lib/graphql/resolvers/group.ex:285
msgid "You need to be logged-in to join a group"
msgstr "Vous devez être connecté·e pour rejoindre un groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:320
msgid "You need to be logged-in to leave a group"
msgstr "Vous devez être connecté·e pour quitter un groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:218
msgid "You need to be logged-in to update a group"
msgstr "Vous devez être connecté·e pour mettre à jour un groupe"
#, elixir-format
#: lib/graphql/resolvers/user.ex:112
msgid "You need to have an existing token to get a refresh token"
msgstr "Vous devez avoir un jeton existant pour obtenir un jeton de rafraîchissement"
#, elixir-format
#: lib/graphql/resolvers/user.ex:256 lib/graphql/resolvers/user.ex:281
msgid "You requested again a confirmation email too soon"
msgstr "Vous avez à nouveau demandé un email de confirmation trop vite"
#, elixir-format
#: lib/graphql/resolvers/user.ex:159
msgid "Your email is not on the allowlist"
msgstr "Votre adresse e-mail n'est pas sur la liste d'autorisations"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:100
msgid "Error while performing background task"
msgstr "Erreur lors de l'exécution d'une tâche d'arrière-plan"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:32
msgid "No profile found with this ID"
msgstr "Aucun profil trouvé avec cet ID"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:61 lib/graphql/resolvers/actor.ex:97
msgid "No remote profile found with this ID"
msgstr "Aucun profil distant trouvé avec cet ID"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:72
msgid "Only moderators and administrators can suspend a profile"
msgstr "Seul·es les modérateur·ice et les administrateur·ices peuvent suspendre un profil"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:105
msgid "Only moderators and administrators can unsuspend a profile"
msgstr "Seul·es les modérateur·ice et les administrateur·ices peuvent annuler la suspension d'un profil"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:29
msgid "Only remote profiles may be refreshed"
msgstr "Seuls les profils distants peuvent être rafraîchis"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:64
msgid "Profile already suspended"
msgstr "Le profil est déjà suspendu"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:96
msgid "A valid email is required by your instance"
msgstr "Une adresse e-mail valide est requise par votre instance"
#: lib/graphql/resolvers/participant.ex:90 lib/graphql/resolvers/participant.ex:143
#, elixir-format
#: lib/graphql/resolvers/participant.ex:90
#: lib/graphql/resolvers/participant.ex:143
msgid "Anonymous participation is not enabled"
msgstr "La participation anonyme n'est pas activée"
#, elixir-format
#: lib/graphql/resolvers/person.ex:210
msgid "Cannot remove the last administrator of a group"
msgstr "Impossible de supprimer le ou la dernier·ère administrateur·ice d'un groupe"
#, elixir-format
#: lib/graphql/resolvers/person.ex:207
msgid "Cannot remove the last identity of a user"
msgstr "Impossible de supprimer le dernier profil d'un·e utilisateur·ice"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:126
msgid "Comment is already deleted"
msgstr "Le commentaire est déjà supprimé"
#, elixir-format
#: lib/graphql/error.ex:101 lib/graphql/resolvers/discussion.ex:69
msgid "Discussion not found"
msgstr "Discussion non trouvée"
#, elixir-format
#: lib/graphql/resolvers/report.ex:63 lib/graphql/resolvers/report.ex:82
msgid "Error while saving report"
msgstr "Erreur lors de la sauvegarde du signalement"
#, elixir-format
#: lib/graphql/resolvers/report.ex:102
msgid "Error while updating report"
msgstr "Erreur lors de la mise à jour du signalement"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:131
msgid "Event id not found"
msgstr "ID de l'événement non trouvé"
#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:360 lib/graphql/resolvers/event.ex:412
#, elixir-format
#: lib/graphql/error.ex:98 lib/graphql/resolvers/event.ex:360
#: lib/graphql/resolvers/event.ex:412
msgid "Event not found"
msgstr "Événement non trouvé"
#: lib/graphql/resolvers/participant.ex:87 lib/graphql/resolvers/participant.ex:128
#: lib/graphql/resolvers/participant.ex:155 lib/graphql/resolvers/participant.ex:336
#, elixir-format
#: lib/graphql/resolvers/participant.ex:87
#: lib/graphql/resolvers/participant.ex:128 lib/graphql/resolvers/participant.ex:155
#: lib/graphql/resolvers/participant.ex:336
msgid "Event with this ID %{id} doesn't exist"
msgstr "L'événement avec cet ID %{id} n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:103
msgid "Internal Error"
msgstr "Erreur interne"
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:219
msgid "No discussion with ID %{id}"
msgstr "Aucune discussion avec l'ID %{id}"
#: lib/graphql/resolvers/todos.ex:80 lib/graphql/resolvers/todos.ex:107 lib/graphql/resolvers/todos.ex:179
#: lib/graphql/resolvers/todos.ex:208 lib/graphql/resolvers/todos.ex:237
#, elixir-format
#: lib/graphql/resolvers/todos.ex:80 lib/graphql/resolvers/todos.ex:107
#: lib/graphql/resolvers/todos.ex:179 lib/graphql/resolvers/todos.ex:208 lib/graphql/resolvers/todos.ex:237
msgid "No profile found for user"
msgstr "Aucun profil trouvé pour l'utilisateur modérateur"
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:64
msgid "No such feed token"
msgstr "Aucun jeton de flux correspondant"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:259
msgid "Participant already has role %{role}"
msgstr "Le ou la participant·e a déjà le rôle %{role}"
#: lib/graphql/resolvers/participant.ex:187 lib/graphql/resolvers/participant.ex:220
#: lib/graphql/resolvers/participant.ex:263
#, elixir-format
#: lib/graphql/resolvers/participant.ex:187
#: lib/graphql/resolvers/participant.ex:220 lib/graphql/resolvers/participant.ex:263
msgid "Participant not found"
msgstr "Participant·e non trouvé·e"
#, elixir-format
#: lib/graphql/resolvers/person.ex:32
msgid "Person with ID %{id} not found"
msgstr "Personne avec l'ID %{id} non trouvé"
#, elixir-format
#: lib/graphql/resolvers/person.ex:56
msgid "Person with username %{username} not found"
msgstr "Personne avec le nom %{name} non trouvé"
#, elixir-format
#: lib/graphql/resolvers/post.ex:169 lib/graphql/resolvers/post.ex:203
msgid "Post ID is not a valid ID"
msgstr "L'ID du billet n'est pas un ID valide"
#, elixir-format
#: lib/graphql/resolvers/post.ex:172 lib/graphql/resolvers/post.ex:206
msgid "Post doesn't exist"
msgstr "Le billet n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/member.ex:82
msgid "Profile invited doesn't exist"
msgstr "Le profil invité n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/member.ex:91 lib/graphql/resolvers/member.ex:95
msgid "Profile is already a member of this group"
msgstr "Ce profil est déjà membre de ce groupe"
#: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175 lib/graphql/resolvers/post.ex:209
#: lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132 lib/graphql/resolvers/resource.ex:165
#: lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58 lib/graphql/resolvers/todos.ex:83
#: lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182 lib/graphql/resolvers/todos.ex:214
#: lib/graphql/resolvers/todos.ex:246
#, elixir-format
#: lib/graphql/resolvers/post.ex:133 lib/graphql/resolvers/post.ex:175
#: lib/graphql/resolvers/post.ex:209 lib/graphql/resolvers/resource.ex:90 lib/graphql/resolvers/resource.ex:132
#: lib/graphql/resolvers/resource.ex:165 lib/graphql/resolvers/resource.ex:199 lib/graphql/resolvers/todos.ex:58
#: lib/graphql/resolvers/todos.ex:83 lib/graphql/resolvers/todos.ex:110 lib/graphql/resolvers/todos.ex:182
#: lib/graphql/resolvers/todos.ex:214 lib/graphql/resolvers/todos.ex:246
msgid "Profile is not member of group"
msgstr "Le profil n'est pas un·e membre du groupe"
#, elixir-format
#: lib/graphql/resolvers/actor.ex:67 lib/graphql/resolvers/person.ex:233
msgid "Profile not found"
msgstr "Profile non trouvé"
#, elixir-format
#: lib/graphql/resolvers/report.ex:40
msgid "Report not found"
msgstr "Groupe non trouvé"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:169 lib/graphql/resolvers/resource.ex:196
msgid "Resource doesn't exist"
msgstr "La ressource n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:124
msgid "The event has already reached its maximum capacity"
msgstr "L'événement a déjà atteint sa capacité maximale"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:282
msgid "This token is invalid"
msgstr "Ce jeton est invalide"
#, elixir-format
#: lib/graphql/resolvers/todos.ex:176 lib/graphql/resolvers/todos.ex:243
msgid "Todo doesn't exist"
msgstr "Ce todo n'existe pas"
#: lib/graphql/resolvers/todos.ex:77 lib/graphql/resolvers/todos.ex:211 lib/graphql/resolvers/todos.ex:240
#, elixir-format
#: lib/graphql/resolvers/todos.ex:77 lib/graphql/resolvers/todos.ex:211
#: lib/graphql/resolvers/todos.ex:240
msgid "Todo list doesn't exist"
msgstr "Cette todo-liste n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:73
msgid "Token does not exist"
msgstr "Ce jeton n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:67 lib/graphql/resolvers/feed_token.ex:70
msgid "Token is not a valid UUID"
msgstr "Ce jeton n'est pas un UUID valide"
#, elixir-format
#: lib/graphql/error.ex:96 lib/graphql/resolvers/person.ex:458
msgid "User not found"
msgstr "Utilisateur·ice non trouvé·e"
#, elixir-format
#: lib/graphql/resolvers/person.ex:310
msgid "You already have a profile for this user"
msgstr "Vous avez déjà un profil pour cet utilisateur"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:134
msgid "You are already a participant of this event"
msgstr "Vous êtes déjà un·e participant·e à cet événement"
#, elixir-format
#: lib/graphql/resolvers/member.ex:85
msgid "You are not a member of this group"
msgstr "Vous n'êtes pas membre de ce groupe"
#: lib/graphql/resolvers/member.ex:155 lib/graphql/resolvers/member.ex:171 lib/graphql/resolvers/member.ex:186
#, elixir-format
#: lib/graphql/resolvers/member.ex:155 lib/graphql/resolvers/member.ex:171
#: lib/graphql/resolvers/member.ex:186
msgid "You are not a moderator or admin for this group"
msgstr "Vous n'êtes pas administrateur·ice ou modérateur·ice de ce groupe"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:59
msgid "You are not allowed to create a comment if not connected"
msgstr "Vous n'êtes pas autorisé·e à créer un commentaire si non connecté·e"
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:41
msgid "You are not allowed to create a feed token if not connected"
msgstr "Vous n'êtes pas autorisé·e à créer un jeton de flux si non connecté·e"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:134
msgid "You are not allowed to delete a comment if not connected"
msgstr "Vous n'êtes pas autorisé·e à supprimer un commentaire si non connecté·e"
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:82
msgid "You are not allowed to delete a feed token if not connected"
msgstr "Vous n'êtes pas autorisé·e à supprimer un jeton de flux si non connecté·e"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:93
msgid "You are not allowed to update a comment if not connected"
msgstr "Vous n'êtes pas autorisé·e à mettre à jour un commentaire si non connecté·e"
#: lib/graphql/resolvers/participant.ex:181 lib/graphql/resolvers/participant.ex:214
#, elixir-format
#: lib/graphql/resolvers/participant.ex:181
#: lib/graphql/resolvers/participant.ex:214
msgid "You can't leave event because you're the only event creator participant"
msgstr "Vous ne pouvez pas quitter cet événement car vous en êtes le ou la seule créateur·ice participant"
#, elixir-format
#: lib/graphql/resolvers/member.ex:190
msgid "You can't set yourself to a lower member role for this group because you are the only administrator"
msgstr ""
"Vous ne pouvez pas vous définir avec un rôle de membre inférieur pour ce groupe car vous en êtes le ou la seul·e "
"administrateur·ice"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:122
msgid "You cannot delete this comment"
msgstr "Vous ne pouvez pas supprimer ce commentaire"
#, elixir-format
#: lib/graphql/resolvers/event.ex:408
msgid "You cannot delete this event"
msgstr "Vous ne pouvez pas supprimer cet événement"
#, elixir-format
#: lib/graphql/resolvers/member.ex:88
msgid "You cannot invite to this group"
msgstr "Vous ne pouvez pas rejoindre ce groupe"
#, elixir-format
#: lib/graphql/resolvers/feed_token.ex:76
msgid "You don't have permission to delete this token"
msgstr "Vous n'avez pas la permission de supprimer ce jeton"
#, elixir-format
#: lib/graphql/resolvers/admin.ex:54
msgid "You need to be logged-in and a moderator to list action logs"
msgstr "Vous devez être connecté·e et une modérateur·ice pour lister les journaux de modération"
#, elixir-format
#: lib/graphql/resolvers/report.ex:28
msgid "You need to be logged-in and a moderator to list reports"
msgstr "Vous devez être connecté·e et une modérateur·ice pour lister les signalements"
#, elixir-format
#: lib/graphql/resolvers/report.ex:107
msgid "You need to be logged-in and a moderator to update a report"
msgstr "Vous devez être connecté·e et une modérateur·ice pour modifier un signalement"
#, elixir-format
#: lib/graphql/resolvers/report.ex:45
msgid "You need to be logged-in and a moderator to view a report"
msgstr "Vous devez être connecté·e pour et une modérateur·ice pour visionner un signalement"
#, elixir-format
#: lib/graphql/resolvers/admin.ex:255
msgid "You need to be logged-in and an administrator to access admin settings"
msgstr "Vous devez être connecté·e et un·e administrateur·ice pour accéder aux paramètres administrateur"
#, elixir-format
#: lib/graphql/resolvers/admin.ex:239
msgid "You need to be logged-in and an administrator to access dashboard statistics"
msgstr "Vous devez être connecté·e et un·e administrateur·ice pour accéder aux panneau de statistiques"
#, elixir-format
#: lib/graphql/resolvers/admin.ex:281
msgid "You need to be logged-in and an administrator to save admin settings"
msgstr "Vous devez être connecté·e et un·e administrateur·ice pour sauvegarder les paramètres administrateur"
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:84
msgid "You need to be logged-in to access discussions"
msgstr "Vous devez être connecté·e pour accéder aux discussions"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:96
msgid "You need to be logged-in to access resources"
msgstr "Vous devez être connecté·e pour supprimer un groupe"
#, elixir-format
#: lib/graphql/resolvers/event.ex:318
msgid "You need to be logged-in to create events"
msgstr "Vous devez être connecté·e pour créer des événements"
#, elixir-format
#: lib/graphql/resolvers/post.ex:141
msgid "You need to be logged-in to create posts"
msgstr "Vous devez être connecté·e pour quitter un groupe"
#, elixir-format
#: lib/graphql/resolvers/report.ex:79
msgid "You need to be logged-in to create reports"
msgstr "Vous devez être connecté·e pour quitter un groupe"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:137
msgid "You need to be logged-in to create resources"
msgstr "Vous devez être connecté·e pour quitter un groupe"
#, elixir-format
#: lib/graphql/resolvers/event.ex:417
msgid "You need to be logged-in to delete an event"
msgstr "Vous devez être connecté·e pour supprimer un groupe"
#, elixir-format
#: lib/graphql/resolvers/post.ex:214
msgid "You need to be logged-in to delete posts"
msgstr "Vous devez être connecté·e pour supprimer un groupe"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:204
msgid "You need to be logged-in to delete resources"
msgstr "Vous devez être connecté·e pour supprimer un groupe"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:108
msgid "You need to be logged-in to join an event"
msgstr "Vous devez être connecté·e pour rejoindre un événement"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:225
msgid "You need to be logged-in to leave an event"
msgstr "Vous devez être connecté·e pour quitter un groupe"
#, elixir-format
#: lib/graphql/resolvers/event.ex:374
msgid "You need to be logged-in to update an event"
msgstr "Vous devez être connecté·e pour mettre à jour un groupe"
#, elixir-format
#: lib/graphql/resolvers/post.ex:180
msgid "You need to be logged-in to update posts"
msgstr "Vous devez être connecté·e pour mettre à jour un groupe"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:174
msgid "You need to be logged-in to update resources"
msgstr "Vous devez être connecté·e pour mettre à jour un groupe"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:233
msgid "You need to be logged-in to view a resource preview"
msgstr "Vous devez être connecté·e pour supprimer un groupe"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:129
msgid "Parent resource doesn't belong to this group"
msgstr "La ressource parente n'appartient pas à ce groupe"
#, elixir-format
#: lib/mobilizon/users/user.ex:114
msgid "The chosen password is too short."
msgstr "Le mot de passe choisi est trop court."
#, elixir-format
#: lib/mobilizon/users/user.ex:142
msgid "The registration token is already in use, this looks like an issue on our side."
msgstr "Le jeton d'inscription est déjà utilisé, cela ressemble à un problème de notre côté."
#, elixir-format
#: lib/mobilizon/users/user.ex:108
msgid "This email is already used."
msgstr "Cette adresse e-mail est déjà utilisée."
#, elixir-format
#: lib/graphql/error.ex:97
msgid "Post not found"
msgstr "Billet non trouvé"
#, elixir-format
#: lib/graphql/error.ex:84
msgid "Invalid arguments passed"
msgstr "Paramètres fournis invalides"
#, elixir-format
#: lib/graphql/error.ex:90
msgid "Invalid credentials"
msgstr "Identifiants invalides"
#, elixir-format
#: lib/graphql/error.ex:88
msgid "Reset your password to login"
msgstr "Réinitialiser votre mot de passe pour vous connecter"
#, elixir-format
#: lib/graphql/error.ex:95 lib/graphql/error.ex:100
msgid "Resource not found"
msgstr "Ressource non trouvée"
#, elixir-format
#: lib/graphql/error.ex:102
msgid "Something went wrong"
msgstr "Quelque chose s'est mal passé"
#, elixir-format
#: lib/graphql/error.ex:83
msgid "Unknown Resource"
msgstr "Ressource inconnue"
#, elixir-format
#: lib/graphql/error.ex:93
msgid "You don't have permission to do this"
msgstr "Vous n'avez pas la permission de faire ceci"
#, elixir-format
#: lib/graphql/error.ex:85
msgid "You need to be logged in"
msgstr "Vous devez être connecté·e"
#, elixir-format
#: lib/graphql/resolvers/member.ex:116
msgid "You can't accept this invitation with this profile."
msgstr "Vous ne pouvez pas accepter cette invitation avec ce profil."
#, elixir-format
#: lib/graphql/resolvers/member.ex:137
msgid "You can't reject this invitation with this profile."
msgstr "Vous ne pouvez pas rejeter cette invitation avec ce profil."
#, elixir-format
#: lib/graphql/resolvers/media.ex:71
msgid "File doesn't have an allowed MIME type."
msgstr "Le fichier n'a pas un type MIME autorisé."
#, elixir-format
#: lib/graphql/resolvers/group.ex:213
msgid "Profile is not administrator for the group"
msgstr "Le profil n'est pas administrateur·ice pour le groupe"
#, elixir-format
#: lib/graphql/resolvers/event.ex:363
msgid "You can't edit this event."
msgstr "Vous ne pouvez pas éditer cet événement."
#, elixir-format
#: lib/graphql/resolvers/event.ex:366
msgid "You can't attribute this event to this profile."
msgstr "Vous ne pouvez pas attribuer cet événement à ce profil."
#, elixir-format
#: lib/graphql/resolvers/member.ex:140
msgid "This invitation doesn't exist."
msgstr "Cette invitation n'existe pas."
#, elixir-format
#: lib/graphql/resolvers/member.ex:215
msgid "This member already has been rejected."
msgstr "Ce·tte membre a déjà été rejetté·e."
#, elixir-format
#: lib/graphql/resolvers/member.ex:239
msgid "You don't have the right to remove this member."
msgstr "Vous n'avez pas les droits pour supprimer ce·tte membre."
#: lib/mobilizon/actors/actor.ex:350
#, elixir-format
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Cet identifiant est déjà pris."
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:81
msgid "You must provide either an ID or a slug to access a discussion"
msgstr "Vous devez fournir un ID ou bien un slug pour accéder à une discussion"
#, elixir-format
#: lib/graphql/resolvers/event.ex:313
msgid "Organizer profile is not owned by the user"
msgstr "Le profil de l'organisateur·ice n'appartient pas à l'utilisateur·ice"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:93
msgid "Profile ID provided is not the anonymous profile one"
msgstr "L'ID du profil fourni n'est pas celui du profil anonyme"
#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201 lib/graphql/resolvers/person.ex:148
#: lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304
#, elixir-format
#: lib/graphql/resolvers/group.ex:159 lib/graphql/resolvers/group.ex:201
#: lib/graphql/resolvers/person.ex:148 lib/graphql/resolvers/person.ex:182 lib/graphql/resolvers/person.ex:304
msgid "The provided picture is too heavy"
msgstr "L'image fournie est trop lourde"
#, elixir-format
#: lib/web/views/utils.ex:34
msgid "Index file not found. You need to recompile the front-end."
msgstr "Fichier d'index non trouvé. Vous devez recompiler le front-end."
#, elixir-format
#: lib/graphql/resolvers/resource.ex:126
msgid "Error while creating resource"
msgstr "Erreur lors de la création de la resource"
#, elixir-format
#: lib/graphql/resolvers/user.ex:484
msgid "Invalid activation token"
msgstr "Jeton d'activation invalide"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:223
msgid "Unable to fetch resource details from this URL."
msgstr "Impossible de récupérer les détails de la ressource depuis cette URL."
#: lib/graphql/resolvers/event.ex:164 lib/graphql/resolvers/participant.ex:253 lib/graphql/resolvers/participant.ex:328
#, elixir-format
#: lib/graphql/resolvers/event.ex:164 lib/graphql/resolvers/participant.ex:253
#: lib/graphql/resolvers/participant.ex:328
msgid "Provided profile doesn't have moderator permissions on this event"
msgstr "Le profil modérateur fourni n'a pas de permissions sur cet événement"
#, elixir-format
#: lib/graphql/resolvers/event.ex:299
msgid "Organizer profile doesn't have permission to create an event on behalf of this group"
msgstr "Le profil de l'organisateur⋅ice n'a pas la permission de créer un événement au nom de ce groupe"
#, elixir-format
#: lib/graphql/resolvers/event.ex:354
msgid "This profile doesn't have permission to update an event on behalf of this group"
msgstr "Ce profil n'a pas la permission de mettre à jour un événement au nom du groupe"
#, elixir-format
#: lib/graphql/resolvers/user.ex:163
msgid "Your e-mail has been denied registration or uses a disallowed e-mail provider"
msgstr "Votre adresse e-mail a été refusée à l'inscription ou bien utilise un fournisseur d'e-mail interdit"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:129
msgid "Comment not found"
msgstr "Commentaire non trouvé"
#, elixir-format
#: lib/graphql/resolvers/discussion.ex:123
msgid "Error while creating a discussion"
msgstr "Erreur lors de la création de la discussion"
#, elixir-format
#: lib/graphql/resolvers/user.ex:607
msgid "Error while updating locale"
msgstr "Erreur lors de la mise à jour des options linguistiques"
#, elixir-format
#: lib/graphql/resolvers/person.ex:307
msgid "Error while uploading pictures"
msgstr "Erreur lors du téléversement des images"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:190
msgid "Failed to leave the event"
msgstr "Impossible de quitter l'événement"
#, elixir-format
#: lib/graphql/resolvers/group.ex:209
msgid "Failed to update the group"
msgstr "Impossible de mettre à jour le groupe"
#, elixir-format
#: lib/graphql/resolvers/user.ex:448
msgid "Failed to update user email"
msgstr "Impossible de mettre à jour l'adresse e-mail de utilisateur"
#, elixir-format
#: lib/graphql/resolvers/user.ex:480
msgid "Failed to validate user email"
msgstr "Impossible de valider l'adresse e-mail de l'utilisateur·ice"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:146
msgid "The anonymous actor ID is invalid"
msgstr "L'ID de l'acteur anonyme est invalide"
#, elixir-format
#: lib/graphql/resolvers/resource.ex:162
msgid "Unknown error while updating resource"
msgstr "Erreur inconnue lors de la mise à jour de la resource"
#, elixir-format
#: lib/graphql/resolvers/comment.ex:84
msgid "You are not the comment creator"
msgstr "Vous n'êtes pas le ou la createur⋅ice du commentaire"
#, elixir-format
#: lib/graphql/resolvers/user.ex:405
msgid "You cannot change your password."
msgstr "Vous ne pouvez pas changer votre mot de passe."
#, elixir-format
#: lib/graphql/resolvers/participant.ex:321
msgid "Format not supported"
msgstr "Format non supporté"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:305
msgid "A dependency needed to export to %{format} is not installed"
msgstr "Une dépendance nécessaire pour exporter en %{format} n'est pas installée"
#, elixir-format
#: lib/graphql/resolvers/participant.ex:313
msgid "An error occured while saving export"
msgstr "Une erreur est survenue lors de l'enregistrement de l'export"
#, elixir-format
#: lib/web/controllers/export_controller.ex:30
msgid "Export to format %{format} is not enabled on this instance"
msgstr "L'export au format %{format} n'est pas activé sur cette instance"
#, elixir-format
#: lib/graphql/resolvers/group.ex:165
msgid "Only admins can create groups"
msgstr "Seul⋅es les administrateur⋅ices peuvent créer des groupes"
#, elixir-format
#: lib/graphql/resolvers/event.ex:306
msgid "Only groups can create events"
msgstr "Seuls les groupes peuvent créer des événements"
#, elixir-format
#: lib/graphql/resolvers/event.ex:292
msgid "Unknown error while creating event"
msgstr "Erreur inconnue lors de la création de l'événement"
#, elixir-format
#: lib/graphql/resolvers/user.ex:461
msgid "User cannot change email"
msgstr "L'utilisateur ne peut changer son adresse e-mail"
#, elixir-format
#: lib/graphql/resolvers/group.ex:364
msgid "Follow does not match your account"
msgstr "L'abonnement ne correspond pas à votre compte"
#, elixir-format
#: lib/graphql/resolvers/group.ex:368
msgid "Follow not found"
msgstr "Abonnement non trouvé"
#, elixir-format
#: lib/graphql/resolvers/user.ex:327
msgid "Profile with username %{username} not found"
msgstr "Personne avec le nom %{name} non trouvé"
#, elixir-format
#: lib/graphql/resolvers/user.ex:322
msgid "This profile does not belong to you"
msgstr "Ce profil ne vous appartient pas"
#, elixir-format
#: lib/graphql/resolvers/group.ex:338
msgid "You are already following this group"
msgstr "Vous êtes déjà membre de ce groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:347
msgid "You need to be logged-in to follow a group"
msgstr "Vous devez être connecté·e pour rejoindre un groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:396
msgid "You need to be logged-in to unfollow a group"
msgstr "Vous devez être connecté·e pour rejoindre un groupe"
#, elixir-format
#: lib/graphql/resolvers/group.ex:373
msgid "You need to be logged-in to update a group follow"
msgstr "Vous devez être connecté·e pour mettre à jour un groupe"
#, elixir-format
#: lib/graphql/resolvers/member.ex:208
msgid "This member does not exist"
msgstr "Ce membre n'existe pas"
#, elixir-format
#: lib/graphql/resolvers/member.ex:232
msgid "You don't have the role needed to remove this member."
msgstr "Vous n'avez pas les droits pour supprimer ce·tte membre."
#, elixir-format
#: lib/graphql/resolvers/member.ex:250
msgid "You must be logged-in to remove a member"
msgstr "Vous devez être connecté⋅e pour supprimer un⋅e membre"

View File

@ -773,16 +773,6 @@ msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -885,8 +875,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -997,8 +987,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1525,7 +1515,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1536,7 +1526,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1547,7 +1537,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1578,7 +1568,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1588,7 +1578,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1599,17 +1589,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1675,12 +1665,22 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""
msgstr[2] ""
msgstr[3] ""

View File

@ -809,7 +809,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -929,16 +929,6 @@ msgstr[1] ""
"Desexas cancelar a túa participación nun ou en varios eventos, visita as "
"páxinas a través das ligazóns superiores e preme no botón « Attending »."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Tes unha solicitude de participación pendente de atender:"
msgstr[1] ""
"Tes %{number_participation_requests} solicitudes de participación pendentes "
"de atender:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1057,8 +1047,8 @@ msgid "Location address was removed"
msgstr "Eliminouse o enderezo da localización"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Xestionar solicitudes pendentes"
@ -1175,8 +1165,8 @@ msgstr ""
"páxina do evento na ligazón superior e preme no botón Participar."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Recibes este email porque escolleches ser notificada sobre as solicitudes "
@ -1813,7 +1803,7 @@ msgid "On the agenda this week"
msgstr "Un evento previsto nesta semana"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1824,7 +1814,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1835,7 +1825,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1866,7 +1856,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1876,7 +1866,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1887,17 +1877,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Participación aprobada"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Participación aprobada"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1963,12 +1953,22 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Tes unha solicitude de participación pendente de atender:"
msgstr[1] ""
"Tes %{number_participation_requests} solicitudes de participación pendentes "
"de atender:"

View File

@ -819,7 +819,7 @@ msgid "You don't have the right to remove this member."
msgstr "Non tes permiso para eliminar este membro."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Este nome de usuaria xa está pillado."

View File

@ -812,14 +812,6 @@ msgid_plural "Would you wish to cancel your attendance to one or several events,
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -922,8 +914,8 @@ msgid "Location address was removed"
msgstr "A hely eltávolításra került"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Függő kérések kezelése"
@ -1036,8 +1028,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1564,7 +1556,7 @@ msgid "On the agenda this week"
msgstr "Egy esemény tervezve a héten"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1575,7 +1567,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1586,7 +1578,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1617,7 +1609,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1627,7 +1619,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1638,17 +1630,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Részvétel jóváhagyva"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Részvétel jóváhagyva"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1714,12 +1706,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -842,7 +842,7 @@ msgid "You don't have the right to remove this member."
msgstr "Nincs meg a jogosultsága a tag eltávolításához."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Ez a felhasználónév már foglalt."

View File

@ -793,13 +793,6 @@ msgid "Would you wish to cancel your attendance, visit the event page through th
msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button."
msgstr[0] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -902,8 +895,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -1016,8 +1009,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1547,7 +1540,7 @@ msgid "On the agenda this week"
msgstr "%{nb_events} acara direncanakan pekan ini"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1558,7 +1551,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1569,7 +1562,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1600,7 +1593,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1610,7 +1603,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1621,17 +1614,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1697,12 +1690,19 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""

View File

@ -798,7 +798,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -954,16 +954,6 @@ msgstr[1] ""
"pagine dell'evento attraverso il links sotto e seleziona il pulsante "
"'Partecipo'."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Hai una richiesta di partecipazione in sospeso da esaminare:"
msgstr[1] ""
"Hai %{number_participation_requests} richieste di partecipazione in sospeso "
"da esaminare:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1083,8 +1073,8 @@ msgid "Location address was removed"
msgstr "L'indirizzo del luogo è stato rimosso"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Gestisci le richieste in sospeso"
@ -1205,8 +1195,8 @@ msgstr ""
"pulsante Partecipanti."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Hai ricevuto questa email perché hai scelto di ricevere notifiche per "
@ -1854,7 +1844,7 @@ msgid "On the agenda this week"
msgstr "Un evento in programma questa settimana"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1865,7 +1855,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1876,7 +1866,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1907,7 +1897,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1917,7 +1907,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1928,17 +1918,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Partecipazione approvata"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Partecipazione approvata"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -2004,12 +1994,22 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Hai una richiesta di partecipazione in sospeso da esaminare:"
msgstr[1] ""
"Hai %{number_participation_requests} richieste di partecipazione in sospeso "
"da esaminare:"

View File

@ -817,7 +817,7 @@ msgid "You don't have the right to remove this member."
msgstr "Non hai il diritto di rimuovere questo membro."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Questo nome utente è già in uso."

View File

@ -758,13 +758,6 @@ msgid "Would you wish to cancel your attendance, visit the event page through th
msgid_plural "Would you wish to cancel your attendance to one or several events, visit the event pages through the links above and click the « Attending » button."
msgstr[0] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -867,8 +860,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -979,8 +972,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1507,7 +1500,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1518,7 +1511,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1529,7 +1522,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1560,7 +1553,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1570,7 +1563,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1581,17 +1574,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1657,12 +1650,19 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""

View File

@ -791,7 +791,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -779,14 +779,6 @@ msgstr[1] ""
"Als u uw deelname moet annuleren, gaat u naar de pagina van het evenement "
"via de link hierboven, en klikt u op de deelnameknop."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -891,8 +883,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -1003,8 +995,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1532,7 +1524,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1543,7 +1535,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1554,7 +1546,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1585,7 +1577,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1595,7 +1587,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1606,17 +1598,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Deelname goedgekeurd"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Deelname goedgekeurd"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1682,12 +1674,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -797,7 +797,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -924,16 +924,6 @@ msgstr[1] ""
"Viss du vil avbryta deltakinga di på ei eller fleire hendingar, kan du gå "
"til hendingssidene via lenkene over og klikka på «deltek»-knappen."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Du har ein førespurnad om deltaking å handtera:"
msgstr[1] ""
"Du har %{number_participation_requests} førespurnader om deltaking å "
"handtera:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1052,8 +1042,8 @@ msgid "Location address was removed"
msgstr "Adressa vart fjerna"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Sjå over ventande førespurnader"
@ -1169,8 +1159,8 @@ msgstr ""
"hendingssida med lenka over og klikka på Deltek-knappen."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Du får denne eposten fordi du har valt å få varslingar når det er ventande "
@ -1812,7 +1802,7 @@ msgid "On the agenda this week"
msgstr "Ei planlagd hending denne veka"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr "Detaljar"
@ -1823,7 +1813,7 @@ msgid "From the %{start} to the %{end}"
msgstr "Frå %{start} til %{end}"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr "Styr deltakinga di"
@ -1834,7 +1824,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr "%{date} frå %{start_time} til %{end_time}"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr "Les meir"
@ -1865,7 +1855,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr "Detaljar"
@ -1875,7 +1865,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr "Styr deltakinga di"
@ -1886,17 +1876,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Deltakar"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Deltakar"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr "Les meir"
@ -1962,12 +1952,22 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Du har ein førespurnad om deltaking å handtera:"
msgstr[1] ""
"Du har %{number_participation_requests} førespurnader om deltaking å "
"handtera:"

View File

@ -834,7 +834,7 @@ msgid "You don't have the right to remove this member."
msgstr "Du har ikkje løyve til å fjerna denne medlemen."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Dette brukarnamnet er oppteke."

View File

@ -851,14 +851,6 @@ msgstr[1] ""
"vos cal pas quaccedir a las paginas dels eveniment via lo ligam çai-jos e "
"clicar lo boton de participacion."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -964,8 +956,8 @@ msgid "Location address was removed"
msgstr "Ladreça fisica es estada levada"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Gerir las demandas de participacions en espèra"
@ -1079,8 +1071,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1617,7 +1609,7 @@ msgid "On the agenda this week"
msgstr "Un eveniment previst aquesta setmana"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1628,7 +1620,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1639,7 +1631,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1670,7 +1662,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1680,7 +1672,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1691,17 +1683,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Participacion aprovada"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Participacion aprovada"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1767,12 +1759,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -809,7 +809,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -845,19 +845,6 @@ msgstr[2] ""
"Jeżeli musisz anulować swoje uczestnictwo, przejdź na stronę wydarzenia "
"używając powyższego przycisku i naciśnij przycisk zgłaszania udziału."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "Masz jedną prośbę o zatwierdzenie uczestnictwa do przejrzenia:"
msgstr[1] ""
"Masz %{number_participation_requests} prośby o zatwierdzenie uczestnictwa do "
"przejrzenia:"
msgstr[2] ""
"Masz %{number_participation_requests} próśb o zatwierdzenie uczestnictwa do "
"przejrzenia:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -975,8 +962,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Zarządzaj oczekującymi zgłoszeniami"
@ -1089,8 +1076,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1631,7 +1618,7 @@ msgid "On the agenda this week"
msgstr "Jedno wydarzenie zaplanowane na ten tydzień"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1642,7 +1629,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1653,7 +1640,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1684,7 +1671,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1694,7 +1681,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1705,17 +1692,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Uczestnictwo przyjęte"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Uczestnictwo przyjęte"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1781,12 +1768,25 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "Masz jedną prośbę o zatwierdzenie uczestnictwa do przejrzenia:"
msgstr[1] ""
"Masz %{number_participation_requests} prośby o zatwierdzenie uczestnictwa do "
"przejrzenia:"
msgstr[2] ""
"Masz %{number_participation_requests} próśb o zatwierdzenie uczestnictwa do "
"przejrzenia:"

View File

@ -826,7 +826,7 @@ msgid "You don't have the right to remove this member."
msgstr "Nie masz uprawnień do usunięcia tego członka."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -762,14 +762,6 @@ msgid_plural "Would you wish to cancel your attendance to one or several events,
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -872,8 +864,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -984,8 +976,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1512,7 +1504,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1523,7 +1515,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1534,7 +1526,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1565,7 +1557,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1575,7 +1567,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1586,17 +1578,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1662,12 +1654,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -797,7 +797,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -837,14 +837,6 @@ msgstr[1] ""
"Se você precisar cancelar a sua participação apenas acesse a página do "
"evento através do link acima e clique no botão participação."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -949,8 +941,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -1061,8 +1053,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1624,7 +1616,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1635,7 +1627,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1646,7 +1638,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1677,7 +1669,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1687,7 +1679,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1698,17 +1690,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Participação aprovada"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Participação aprovada"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1774,12 +1766,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -797,7 +797,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -955,19 +955,6 @@ msgstr[2] ""
"просто перейдите на страницы мероприятий по указанным выше ссылкам и нажмите "
"кнопку « Я участвую »."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] "У вас есть ожидающий рассмотрения запрос на участие:"
msgstr[1] ""
"У вас есть %{number_participation_requests} ожидающих рассмотрения запроса "
"на участие:"
msgstr[2] ""
"У вас есть %{number_participation_requests} ожидающих рассмотрения запросов "
"на участие:"
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -1087,8 +1074,8 @@ msgid "Location address was removed"
msgstr "Адрес местоположения был удален"
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr "Управление запросами в ожидании"
@ -1203,8 +1190,8 @@ msgstr ""
"страницу мероприятия по ссылке выше и нажмите кнопку « Я участвую »."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
"Вы получили это письмо, потому что выбрали получение уведомлений об "
@ -1857,7 +1844,7 @@ msgid "On the agenda this week"
msgstr "На этой неделе запланировано одно мероприятие"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr "Подробности"
@ -1868,7 +1855,7 @@ msgid "From the %{start} to the %{end}"
msgstr "От %{start} к %{end}"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr "Управление своим участием"
@ -1879,7 +1866,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr "%{date} с %{start_time} по %{end_time}"
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr "Подробнее"
@ -1910,7 +1897,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr "Подробности"
@ -1920,7 +1907,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr "Управление своим участием"
@ -1931,17 +1918,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Участие одобрено"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Участие одобрено"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr "Подробнее"
@ -2007,12 +1994,25 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] "У вас есть ожидающий рассмотрения запрос на участие:"
msgstr[1] ""
"У вас есть %{number_participation_requests} ожидающих рассмотрения запроса "
"на участие:"
msgstr[2] ""
"У вас есть %{number_participation_requests} ожидающих рассмотрения запросов "
"на участие:"

View File

@ -846,7 +846,7 @@ msgid "You don't have the right to remove this member."
msgstr "У вас нет прав на удаление этого участника."
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr "Это имя пользователя уже занято."

View File

@ -784,14 +784,6 @@ msgstr[1] ""
"Om du behöver lämna återbud är det bara att gå till evenemangens sidor, via "
"länkarna ovan, och klicka på deltagande-knappen."
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process:"
msgid_plural "You have %{number_participation_requests} attendance requests to process:"
msgstr[0] ""
msgstr[1] ""
#, elixir-format
#: lib/web/templates/email/email.text.eex:11
msgid "%{instance} is powered by Mobilizon."
@ -897,8 +889,8 @@ msgid "Location address was removed"
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:51
#: lib/web/templates/email/pending_participation_notification.text.eex:6
#: lib/web/templates/email/pending_participation_notification.html.heex:56
#: lib/web/templates/email/pending_participation_notification.text.eex:8
msgid "Manage pending requests"
msgstr ""
@ -1009,8 +1001,8 @@ msgid "Would you wish to update or cancel your attendance, simply access the eve
msgstr ""
#, elixir-format
#: lib/web/templates/email/pending_participation_notification.html.heex:64
#: lib/web/templates/email/pending_participation_notification.text.eex:8
#: lib/web/templates/email/pending_participation_notification.html.heex:69
#: lib/web/templates/email/pending_participation_notification.text.eex:10
msgid "You are receiving this email because you chose to get notifications for pending attendance requests to your events. You can disable or change your notification settings in your user account settings under « Notifications »."
msgstr ""
@ -1540,7 +1532,7 @@ msgid "On the agenda this week"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:11
#: lib/web/templates/email/participation/event_card.html.heex:58
msgid "Details"
msgstr ""
@ -1551,7 +1543,7 @@ msgid "From the %{start} to the %{end}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:70
#: lib/web/templates/email/participation/event_card.html.heex:20
msgid "Manage your participation"
msgstr ""
@ -1562,7 +1554,7 @@ msgid "On %{date} from %{start_time} to %{end_time}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.html.heex:19
#: lib/web/templates/email/participation/event_card.html.heex:66
msgid "Read more"
msgstr ""
@ -1593,7 +1585,7 @@ msgid "Date:"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:5
#: lib/web/templates/email/participation/event_card.text.eex:7
msgid "Details:"
msgstr ""
@ -1603,7 +1595,7 @@ msgid "Manage your notification settings"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Manage your participation:"
msgstr ""
@ -1614,17 +1606,17 @@ msgid "Organizer: %{organizer}"
msgstr ""
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.html.heex:92
#: lib/web/templates/email/participation/event_card.html.heex:42
msgid "Participate"
msgstr "Ditt deltagande har godkänts"
#, elixir-format
#: lib/web/templates/email/participation/card/_metadata.text.eex:4
#: lib/web/templates/email/participation/event_card.text.eex:5
msgid "Participate:"
msgstr "Ditt deltagande har godkänts"
#, elixir-format
#: lib/web/templates/email/participation/event_card.text.eex:7
#: lib/web/templates/email/participation/event_card.text.eex:9
msgid "Read more : %{url}"
msgstr ""
@ -1690,12 +1682,20 @@ msgstr ""
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been rejected."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.text.eex:3
msgid "Your membership request for group %{group} has been approved."
msgstr ""
#, elixir-format, fuzzy
#, elixir-format
#: lib/web/templates/email/group_membership_approval.html.heex:38
msgid "Your membership request for group %{link_start}<b>%{group}</b>%{link_end} has been approved."
msgstr ""
#, elixir-format, fuzzy
#: lib/web/templates/email/pending_participation_notification.html.heex:38
#: lib/web/templates/email/pending_participation_notification.text.eex:4
msgid "You have one pending attendance request to process for the following event:"
msgid_plural "You have %{number_participation_requests} attendance requests to process for the following event:"
msgstr[0] ""
msgstr[1] ""

View File

@ -804,7 +804,7 @@ msgid "You don't have the right to remove this member."
msgstr ""
#, elixir-format
#: lib/mobilizon/actors/actor.ex:350
#: lib/mobilizon/actors/actor.ex:351
msgid "This username is already taken."
msgstr ""

View File

@ -454,6 +454,21 @@ defmodule Mobilizon.GraphQL.Resolvers.UserTest do
Config.put([:instance, :registration_email_denylist], [])
end
test "create_user/3 lowers domain part of email",
%{
conn: conn
} do
res =
conn
|> AbsintheHelpers.graphql_query(
query: @create_user_mutation,
variables: Map.put(@user_creation, :email, "test+alias@DEMO.tld")
)
assert res["errors"] == nil
assert res["data"]["createUser"]["email"] == "test+alias@demo.tld"
end
test "register_person/3 doesn't register a profile from an unknown email", %{conn: conn} do
conn
|> put_req_header("accept-language", "fr")

View File

@ -353,6 +353,7 @@ defmodule Mobilizon.Service.Notifications.SchedulerTest do
scheduled_at =
DateTime.utc_now()
|> DateTime.add(3600)
|> DateTime.shift_zone!("Europe/Paris")
|> (&%{&1 | minute: 0, second: 0, microsecond: {0, 0}}).()

View File

@ -318,6 +318,12 @@ defmodule Mobilizon.Service.Workers.NotificationTest do
test "if there are participants to approve" do
%User{id: user_id} = user = insert(:user)
settings =
insert(:settings,
user_id: user_id,
timezone: "Europe/Paris"
)
%Event{id: event_id} = event = insert(:event)
%Participant{} = insert(:participant, event: event, role: :not_approved)
@ -333,7 +339,7 @@ defmodule Mobilizon.Service.Workers.NotificationTest do
assert_delivered_email(
NotificationMailer.pending_participation_notification(
user,
%User{user | settings: settings},
event,
2
)