diff --git a/lib/mv_web/live/member_live/show.ex b/lib/mv_web/live/member_live/show.ex index 5ac4fee..521bb38 100644 --- a/lib/mv_web/live/member_live/show.ex +++ b/lib/mv_web/live/member_live/show.ex @@ -329,6 +329,14 @@ defmodule MvWeb.MemberLive.Show do <% end %> + <%!-- Deactivate/reactivate sub-flow (gated on :update, owns its own modal) --%> + <.live_component + module={MvWeb.MemberLive.Show.DeactivateComponent} + id="member-deactivate" + member={@member} + current_user={@current_user} + /> + <%!-- Danger zone: same section pattern as section_box (h2 outside border) --%> <%= if can?(@current_user, :destroy, @member) do %>
diff --git a/lib/mv_web/live/member_live/show/deactivate_component.ex b/lib/mv_web/live/member_live/show/deactivate_component.ex new file mode 100644 index 0000000..d3a1dfe --- /dev/null +++ b/lib/mv_web/live/member_live/show/deactivate_component.ex @@ -0,0 +1,203 @@ +defmodule MvWeb.MemberLive.Show.DeactivateComponent do + @moduledoc """ + LiveComponent owning the member deactivate/reactivate sub-flow on the member show page. + + ## Features + - Deactivate control (shown when the member has no exit_date) + - Reactivate control (shown when the member has an exit_date) + - Date-selection modal (default: today, future dates allowed) for deactivation + - Routes both actions through `Membership.update_member/2` with the real user actor, + inheriting the `exit_date > join_date` validation and the cycle-regeneration hook. + + Controls are gated on `:update` permission for the member. On success the component + notifies the parent with `{:member_updated, member}`, which the parent already handles. + """ + use MvWeb, :live_component + + import MvWeb.Authorization, only: [can?: 3] + + alias Mv.Membership + alias MvWeb.Helpers.MemberHelpers + + @impl true + def render(assigns) do + ~H""" +
+ <%= if @can_update do %> +
+

+ {gettext("Membership status")} +

+
+ <%= if @member.exit_date do %> +

+ {gettext( + "This member is deactivated (exit date set). Reactivating clears the exit date." + )} +

+ <.button + id="reactivate-member-trigger" + data-testid="member-reactivate" + variant="primary" + phx-click="reactivate" + phx-target={@myself} + aria-label={ + gettext("Reactivate member %{name}", name: MemberHelpers.display_name(@member)) + } + > + <.icon name="hero-arrow-uturn-left" class="size-4" /> + {gettext("Reactivate member")} + + <% else %> +

+ {gettext( + "Deactivating this member records an exit date. You can reactivate them later." + )} +

+ <.button + id="deactivate-member-trigger" + data-testid="member-deactivate" + variant="outline" + phx-click="open_modal" + phx-target={@myself} + aria-label={ + gettext("Deactivate member %{name}", name: MemberHelpers.display_name(@member)) + } + > + <.icon name="hero-arrow-right-on-rectangle" class="size-4" /> + {gettext("Deactivate member")} + + <% end %> +
+
+ <% end %> + + <%= if @show_modal do %> + + + + <% end %> +
+ """ + end + + @impl true + def update(assigns, socket) do + {:ok, + socket + |> assign(assigns) + |> assign(:can_update, can?(assigns.current_user, :update, assigns.member)) + |> assign_new(:show_modal, fn -> false end) + |> assign_new(:exit_date, fn -> Date.utc_today() end) + |> assign_new(:error, fn -> nil end)} + end + + @impl true + def handle_event("open_modal", _params, socket) do + {:noreply, + socket + |> assign(:show_modal, true) + |> assign(:exit_date, Date.utc_today()) + |> assign(:error, nil)} + end + + def handle_event("cancel_modal", _params, socket) do + {:noreply, close_modal(socket)} + end + + def handle_event("dialog_keydown", %{"key" => key}, socket) when key in ["Escape", "Esc"] do + {:noreply, close_modal(socket)} + end + + def handle_event("dialog_keydown", _params, socket), do: {:noreply, socket} + + def handle_event("deactivate", %{"exit_date" => exit_date_str}, socket) do + case Date.from_iso8601(exit_date_str) do + {:ok, exit_date} -> + apply_exit_date(socket, exit_date, show_inline_error: true) + + {:error, _reason} -> + {:noreply, assign(socket, :error, gettext("Invalid date format"))} + end + end + + def handle_event("reactivate", _params, socket) do + apply_exit_date(socket, nil, show_inline_error: false) + end + + defp apply_exit_date(socket, exit_date, opts) do + member = socket.assigns.member + actor = socket.assigns.current_user + + case Membership.update_member(member, %{exit_date: exit_date}, actor: actor) do + {:ok, updated_member} -> + send(self(), {:member_updated, updated_member}) + + {:noreply, + socket + |> assign(:member, updated_member) + |> close_modal()} + + {:error, error} -> + if opts[:show_inline_error] do + {:noreply, assign(socket, :error, format_error(error))} + else + send(self(), {:put_flash, :error, format_error(error)}) + {:noreply, socket} + end + end + end + + defp close_modal(socket) do + socket + |> assign(:show_modal, false) + |> assign(:error, nil) + end + + defp format_error(%Ash.Error.Invalid{errors: errors}) do + Enum.map_join(errors, ", ", fn + %{message: message} -> message + other -> inspect(other) + end) + end + + defp format_error(%Ash.Error.Forbidden{}) do + gettext("You are not allowed to perform this action.") + end + + defp format_error(_error), do: gettext("An error occurred") +end diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index cf12baf..c8713e9 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -39,6 +39,16 @@ msgstr[1] "%{count} Mitglieder haben Werte für dieses benutzerdefinierte Feld z msgid "%{count} synced" msgstr "%{count} synchronisiert" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{field} from" +msgstr "%{field} von" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{field} to" +msgstr "%{field} bis" + #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format msgid "(ISO-8601 format: YYYY-MM-DD)" @@ -96,6 +106,11 @@ msgstr "Aktionen" msgid "Active members" msgstr "Aktive Mitglieder" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Active only" +msgstr "Nur aktive" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format msgid "Add Member" @@ -153,6 +168,11 @@ msgstr "Alle benutzerdefinierten Feldwerte werden beim Löschen dieses benutzerd msgid "All years combined (pie)" msgstr "Alle Jahre zusammengefasst (Kreis)" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Allow direct registration (/register)" +msgstr "Direkte Registrierung erlauben (/register)" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Already paid cycles will remain with the old amount." @@ -171,6 +191,7 @@ msgstr "Betrag" msgid "An account with this email already exists. Please verify your password to link your OIDC account." msgstr "Ein Konto mit dieser E-Mail existiert bereits. Bitte gib dein Passwort ein, um dein OIDC-Konto zu verknüpfen." +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -184,6 +205,11 @@ msgstr "Ein Fehler ist aufgetreten" msgid "App URL (contact view link)" msgstr "App-URL (Link zur Kontaktansicht)" +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Applicant data" +msgstr "Angaben des Antragstellers" + #: lib/mv_web/live/components/member_filter_component.ex #, elixir-autogen, elixir-format msgid "Apply filters" @@ -273,6 +299,11 @@ msgstr "Verbindung wird wiederhergestellt" msgid "Aug." msgstr "Aug." +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Authentication" +msgstr "Anmeldung" + #: lib/mv_web/controllers/auth_controller.ex #, elixir-autogen, elixir-format msgid "Authentication configuration error. Please contact the administrator." @@ -320,6 +351,11 @@ msgstr "Zurück" msgid "Back to groups list" msgstr "Zurück zur Gruppenübersicht" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Back to join form" +msgstr "Zurück zu den Mitgliedsanträgen" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Back to join requests" @@ -390,6 +426,7 @@ msgstr "Kann jederzeit geändert werden. Änderungen des Betrags betreffen nur z #: lib/mv_web/live/member_field_live/form_component.ex #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #: lib/mv_web/live/membership_fee_type_live/form.ex #: lib/mv_web/live/role_live/show.ex @@ -533,6 +570,11 @@ msgstr "Vereins-ID" msgid "Club Settings" msgstr "Vereinsdaten" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Column" +msgstr "Spalte" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Completed" @@ -563,6 +605,11 @@ msgstr "Änderung bestätigen" msgid "Confirm Password" msgstr "Passwort bestätigen" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Confirm and Import" +msgstr "Bestätigen und importieren" + #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format msgid "Confirm my email" @@ -666,11 +713,21 @@ msgid_plural "Copied %{count} email addresses to clipboard" msgstr[0] "%{count} E-Mail-Adresse in die Zwischenablage kopiert" msgstr[1] "%{count} E-Mail-Adressen in die Zwischenablage kopiert" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Copy" +msgstr "Kopieren" + #: lib/mv_web/components/bulk_actions_dropdown.ex #, elixir-autogen, elixir-format, fuzzy msgid "Copy email addresses" msgstr "E-Mail-Adressen kopieren" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Copy join page URL" +msgstr "URL der Beitrittsseite kopieren" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Could not load data fields. Please check your permissions." @@ -719,6 +776,16 @@ msgstr "Mitglied erstellen" msgid "Create a new cycle manually" msgstr "Einen neuen Zyklus manuell erstellen" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Create custom field" +msgstr "Datenfeld erstellen" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Create fee type" +msgstr "Beitragsart erstellen" + #: lib/mv/membership/members_pdf.ex #, elixir-autogen, elixir-format msgid "Created at:" @@ -759,6 +826,16 @@ msgstr "Benutzerdefiniert" msgid "Custom Fields" msgstr "Benutzerdefinierte Felder" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Custom date fields" +msgstr "Benutzerdefinierte Datumsfelder" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Custom field" +msgstr "Benutzerdefiniertes Feld" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle" @@ -833,6 +910,31 @@ msgstr "Datenfelder" msgid "Date" msgstr "Datum" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Dates" +msgstr "Daten" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate" +msgstr "Deaktivieren" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate member" +msgstr "Mitglied deaktivieren" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate member %{name}" +msgstr "Mitglied %{name} deaktivieren" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivating this member records an exit date. You can reactivate them later." +msgstr "Wenn du dieses Mitglied deaktivierst, wird ein Austrittsdatum gesetzt. Du kannst es später wieder reaktivieren." + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Dec." @@ -1030,6 +1132,16 @@ msgstr "Löschen" msgid "Description" msgstr "Beschreibung" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Description for join form" +msgstr "Beschreibung für das Beitrittsformular" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Direct registration" +msgstr "Direkte Registrierung" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Download CSV templates:" @@ -1179,6 +1291,22 @@ msgstr "Beispiele" msgid "Exit Date" msgstr "Austrittsdatum" +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Exit date" +msgstr "Austrittsdatum" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Exit date from" +msgstr "Austrittsdatum von" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Exit date to" +msgstr "Austrittsdatum bis" + #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "Exits" @@ -1204,6 +1332,16 @@ msgstr "Mitglieder als CSV exportieren" msgid "Export members to PDF" msgstr "Mitglieder als PDF exportieren" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export to CSV" +msgstr "Mitglieder als CSV exportieren" + +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export to PDF" +msgstr "Mitglieder als PDF exportieren" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "Failed members:" @@ -1300,6 +1438,11 @@ msgstr "Test-E-Mail konnte nicht gesendet werden. Bitte prüfe deine SMTP-Konfig msgid "Failed to update cycle status: %{errors}" msgstr "Fehler beim Aktualisieren des Zyklenstatus: %{errors}" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to update setting." +msgstr "Einstellung konnte nicht gespeichert werden." + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Failed: %{count} row(s)" @@ -1316,12 +1459,27 @@ msgstr "Feb." msgid "Fee Type" msgstr "Beitragsart" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Fee status columns (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) are always ignored and cannot be imported." +msgstr "Beitragsstatus-Spalten (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) werden immer ignoriert und können nicht importiert werden." + #: lib/mv_web/live/import_live/components.ex #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "Fee type" msgstr "Beitragsart" +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Fee type '%{name}' not found; using the default fee type." +msgstr "Beitragsart '%{name}' nicht gefunden; Standard-Beitragsart wird verwendet." + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Fee type column (recognized headers): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unknown fee types fall back to the default." +msgstr "Beitragsart-Spalte (erkannte Spaltennamen): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unbekannte Beitragsarten erhalten die Standard-Beitragsart." + #: lib/mv_web/live/components/member_filter_component.ex #, elixir-autogen, elixir-format msgid "Fee types" @@ -1367,6 +1525,11 @@ msgstr "Vorname" msgid "Fixed after creation. Members can only switch between types with the same interval." msgstr "Festgelegt nach der Erstellung. Mitglieder können nur zwischen Beitragsarten mit gleichem Intervall wechseln." +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "From" +msgstr "Von" + #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "From %{first} to %{last} (relevant years with membership data)" @@ -1452,6 +1615,21 @@ msgstr "Generierte Zyklen" msgid "German Template" msgstr "Deutsche Vorlage" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Go to join form" +msgstr "Zum Antragsformular" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Group %{name}" +msgstr "Gruppe %{name}" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Group assignment failed: %{reason}" +msgstr "Gruppenzuordnung fehlgeschlagen: %{reason}" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Group deleted successfully." @@ -1489,6 +1667,11 @@ msgstr "Gruppen" msgid "Groups claim" msgstr "Gruppenclaim" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Groups column (recognized headers): Groups, Gruppen, Gruppe. Comma-separated group names are supported and missing groups are created automatically." +msgstr "Gruppen-Spalte (erkannte Spaltennamen): Groups, Gruppen, Gruppe. Mehrere durch Komma getrennte Gruppennamen werden unterstützt; fehlende Gruppen werden automatisch erstellt." + #: lib/mv_web/helpers/membership_fee_helpers.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/form.ex @@ -1501,6 +1684,11 @@ msgstr "Halbjährlich" msgid "History" msgstr "Historie" +#: lib/mv_web/controllers/page_controller.ex +#, elixir-autogen, elixir-format +msgid "Home" +msgstr "Startseite" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Host" @@ -1512,6 +1700,11 @@ msgstr "Host" msgid "House Number" msgstr "Hausnummer" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "If disabled, users cannot sign up via /register; sign-in and the join form remain available." +msgstr "Wenn deaktiviert, können sich Nutzer*innen nicht über /register anmelden; Anmeldung und Beitrittsformular bleiben verfügbar." + #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format msgid "If you did not create an account, you can ignore this email." @@ -1527,6 +1720,17 @@ msgstr "Wenn du das nicht angefordert hast, kannst du diese E-Mail ignorieren. D msgid "If you did not submit this request, you can ignore this email." msgstr "Wenn du diese Anfrage nicht gestellt hast, kannst du diese E-Mail ignorieren." +#: lib/mv_web/templates/emails/join_already_member.html.heex +#: lib/mv_web/templates/emails/join_already_pending.html.heex +#, elixir-autogen, elixir-format +msgid "If you have any questions, please contact us." +msgstr "Bei Fragen kannst du dich gerne an uns wenden." + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Ignored (system-computed field)" +msgstr "Ignoriert (vom System berechnetes Feld)" + #: lib/mv_web/components/layouts/sidebar.ex #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format, fuzzy @@ -1563,6 +1767,11 @@ msgstr "Import-Status fehlt. Chunk %{idx} kann nicht verarbeitet werden." msgid "Inactive members" msgstr "Inaktive Mitglieder" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Inactive only" +msgstr "Nur ehemalige" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "Include both letters and numbers" @@ -1632,6 +1841,7 @@ msgstr "Ungültiges Betragsformat" msgid "Invalid chunk index: %{idx}" msgstr "Ungültiger Chunk-Index: %{idx}" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Invalid date format" @@ -1642,6 +1852,16 @@ msgstr "Ungültiges Datumsformat" msgid "Invalid email address. Please enter a valid recipient address." msgstr "Ungültige E-Mail-Adresse. Bitte gib eine gültige Empfängeradresse ein." +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Invalid link" +msgstr "Ungültiger oder abgelaufener Link." + +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Invalid or expired link" +msgstr "Ungültiger oder abgelaufener Link." + #: lib/mv_web/controllers/join_confirm_html/confirm.html.heex #, elixir-autogen, elixir-format msgid "Invalid or expired link." @@ -1657,6 +1877,11 @@ msgstr "Rechnung" msgid "Jan." msgstr "Jan." +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Join" +msgstr "Beitritt" + #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/live/member_live/show.ex @@ -1670,11 +1895,46 @@ msgstr "Beitrittsdatum" msgid "Join Form" msgstr "Beitrittsformular" +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Join confirmation" +msgstr "Beitrittsbestätigung" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Join date" +msgstr "Beitrittsdatum" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Join date from" +msgstr "Beitrittsdatum von" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Join date to" +msgstr "Beitrittsdatum bis" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Join form enabled" msgstr "Beitrittsformular aktiv" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Join form:" +msgstr "Beitrittsformular:" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Join page URL" +msgstr "URL der Beitrittsseite" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Join page URL copied to clipboard." +msgstr "URL der Beitrittsseite in die Zwischenablage kopiert." + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Join request" @@ -1764,6 +2024,17 @@ msgstr "Leer lassen, um den aktuellen Wert beizubehalten." msgid "Line %{line}: %{message}" msgstr "Zeile %{line}: %{message}" +#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Link expired" +msgstr "Link abgelaufen" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Link to the public join page (share this with applicants):" +msgstr "Link zur öffentlichen Beitrittsseite (diesen Link mit Interessent*innen teilen):" + #: lib/mv_web/live/user_live/index.html.heex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format, fuzzy @@ -1847,6 +2118,11 @@ msgstr "Mitglied wurde erfolgreich %{action}" msgid "Member %{club_name}" msgstr "Mitglieder %{club_name}" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member %{name}" +msgstr "Mitglied %{name}" + #: lib/mv/membership/members_pdf.ex #, elixir-autogen, elixir-format msgid "Member count:" @@ -1863,6 +2139,11 @@ msgstr "Mitglied wurde erfolgreich erstellt" msgid "Member deleted successfully" msgstr "Mitglied wurde erfolgreich gelöscht" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Member field" +msgstr "Mitgliedsfeld" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Member field %{action} successfully" @@ -1981,6 +2262,16 @@ msgstr "Mitgliedsbeitragsarten" msgid "Membership Fees" msgstr "Mitgliedsbeiträge" +#: lib/mv_web/emails/join_already_member_email.ex +#, elixir-autogen, elixir-format +msgid "Membership application – already a member" +msgstr "Mitgliedsantrag – bereits Mitglied" + +#: lib/mv_web/emails/join_already_pending_email.ex +#, elixir-autogen, elixir-format +msgid "Membership application – already under review" +msgstr "Mitgliedsantrag – wird bereits geprüft" + #: lib/mv_web/components/layouts/sidebar.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -2026,6 +2317,11 @@ msgstr "Mitgliedsbeitragsart aktualisiert. Zyklen regeneriert." msgid "Membership fee types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation." msgstr "Mitgliedsbeitragsarten definieren verschiedene Mitgliedsbeitragsstrukturen. Jede Art hat ein festes Intervall (monatlich, vierteljährlich, halbjährlich, jährlich), das nach der Erstellung nicht geändert werden kann." +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Membership status" +msgstr "Mitgliedsstatus" + #: lib/mv/mailer.ex #, elixir-autogen, elixir-format msgid "Mila – Test email" @@ -2203,6 +2499,11 @@ msgstr "Keine Mitgliedsbeitragszyklen gefunden. Zyklen werden automatisch generi msgid "No membership fee type assigned" msgstr "Keine Mitgliedsbeitragsart zugewiesen" +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "No prepared import to confirm. Please upload again." +msgstr "Kein vorbereiteter Import zum Bestätigen. Bitte erneut hochladen." + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "No receipts" @@ -2329,6 +2630,11 @@ msgstr "Okt." msgid "Only OIDC sign-in (hide password login)" msgstr "Nur OIDC-Anmeldung (Passwort-Login ausblenden)" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Only OIDC sign-in is active. This option is disabled." +msgstr "Nur OIDC-Anmeldung ist aktiv. Diese Option ist deaktiviert." + #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format msgid "Only administrators can import members from CSV files." @@ -2345,6 +2651,11 @@ msgstr "Nur Administrator*innen oder die verknüpfte*n Benutzer*in(nen) können msgid "Only possible if no members are assigned to this type." msgstr "Nur möglich, wenn diesem Typ keine Mitglieder zugewiesen sind." +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Only sign-in via Single Sign-On (SSO) is allowed." +msgstr "Nur Anmeldung per Single Sign-On (SSO) ist erlaubt." + #: lib/mv_web/components/bulk_actions_dropdown.ex #, elixir-autogen, elixir-format msgid "Open in email program" @@ -2489,6 +2800,11 @@ msgstr "Port" msgid "Postal Code" msgstr "Postleitzahl" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Preview import" +msgstr "Importvorschau" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Processing chunk %{current} of %{total}..." @@ -2511,6 +2827,21 @@ msgstr "Vierteljährlich" msgid "Quarterly Interval - Joining Cycle Excluded" msgstr "Vierteljährliches Intervall – Beitrittszeitraum nicht einbezogen" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Range" +msgstr "Zeitraum" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Reactivate member" +msgstr "Mitglied reaktivieren" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Reactivate member %{name}" +msgstr "Mitglied %{name} reaktivieren" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Receipt" @@ -2626,6 +2957,11 @@ msgstr "Geprüft am" msgid "Role" msgstr "Rolle" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role %{name}" +msgstr "Rolle %{name}" + #: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format msgid "Role deleted successfully." @@ -2653,16 +2989,46 @@ msgstr "Rolle erfolgreich gespeichert." msgid "Roles" msgstr "Rollen" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 1" +msgstr "Zeile 1" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 2" +msgstr "Zeile 2" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 3" +msgstr "Zeile 3" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Rows with an empty fee type will get the default fee type." +msgstr "Zeilen ohne Beitragsart erhalten die Standard-Beitragsart." + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP / E-Mail" msgstr "SMTP / E-Mail" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP environment configuration appears incomplete. Missing: %{keys}" +msgstr "Die SMTP-Umgebungs-Konfiguration ist unvollständig. Fehlend: %{keys}" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP error:" msgstr "SMTP-Fehler:" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is fully managed via environment variables. All SMTP fields are read-only." +msgstr "SMTP wird vollständig über Umgebungsvariablen verwaltet. Alle SMTP-Felder sind schreibgeschützt." + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP is not configured. Please set at least the SMTP host." @@ -2918,6 +3284,11 @@ msgstr "In der Übersicht anzeigen" msgid "Show/Hide Columns" msgstr "Spalten ein-/ausblenden" +#: lib/mv_web/live/auth/sign_in_live.ex +#, elixir-autogen, elixir-format +msgid "Sign in" +msgstr "Anmelden" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Slug does not match. Deletion cancelled." @@ -2962,6 +3333,11 @@ msgstr "Statistik" msgid "Status" msgstr "Status" +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Status and review" +msgstr "Status und Prüfung" + #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex @@ -2969,6 +3345,11 @@ msgstr "Status" msgid "Street" msgstr "Straße" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Submit new request" +msgstr "Antrag absenden" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Submit request" @@ -3091,6 +3472,11 @@ msgstr "Wird getestet..." msgid "Text" msgstr "Textfeld" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Thank you" +msgstr "Vielen Dank" + #: lib/mv_web/controllers/join_confirm_html/confirm.html.heex #, elixir-autogen, elixir-format msgid "Thank you, we have received your request." @@ -3121,6 +3507,11 @@ msgstr "Die Absender-E-Mail muss auf den meisten SMTP-Servern dem SMTP-Nutzer ge msgid "These fields are necessary for MILA to handle member identification and payment calculations in the future. Thus you cannot delete these fields but hide them in the member overview." msgstr "Diese Datenfelder sind für MILA notwendig, um Mitglieder zu identifizieren und zukünftig Beitragszahlungen zu berechnen. Aus diesem Grund können sie nicht gelöscht, aber in der Übersicht ausgeblendet werden." +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "These groups will be created automatically: %{names}" +msgstr "Diese Gruppen werden automatisch erstellt: %{names}" + #: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format msgid "These will appear in addition to other data when adding new members." @@ -3169,6 +3560,11 @@ msgstr "Dies ist eine Test-E-Mail von Mila. Wenn du diese erhalten hast, funktio msgid "This link has expired. Please submit the form again." msgstr "Dieser Link ist abgelaufen. Bitte sende das Formular erneut ab." +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "This member is deactivated (exit date set). Reactivating clears the exit date." +msgstr "Dieses Mitglied ist deaktiviert (Austrittsdatum gesetzt). Beim Reaktivieren wird das Austrittsdatum entfernt." + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "This user cannot be edited." @@ -3189,6 +3585,11 @@ msgstr "Diese*r Benutzer*in ist über SSO (Single Sign-On) verbunden. Ein hier f msgid "Tip: Paste email addresses into the BCC field for privacy compliance" msgstr "Tipp: E-Mail-Adressen ins BCC-Feld einfügen, für Datenschutzkonformität" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "To" +msgstr "Bis" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "To confirm deletion, please enter the group name:" @@ -3209,6 +3610,11 @@ msgstr "Dunklen Modus umschalten" msgid "Toggle sidebar" msgstr "Sidebar umschalten" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Too many recipients for this function. Copy the addresses or export the list." +msgstr "Zu viele Empfänger für diese Funktion. Kopiere die Adressen oder exportiere die Liste." + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Too many requests. Please try again later." @@ -3247,6 +3653,11 @@ msgstr "OIDC-Authentifizierung fehlgeschlagen. Bitte versuche es erneut." msgid "Unable to sign in. Please try again." msgstr "Anmeldung fehlgeschlagen. Bitte versuche es erneut." +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Unknown (ignored)" +msgstr "Unbekannt (ignoriert)" + #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format msgid "Unknown column '%{header}' will be ignored. If this is a custom field, create it in Mila before importing." @@ -3258,6 +3669,11 @@ msgstr "Unbekannte Spalte '%{header}' wird ignoriert. Falls dies ein Datenfeld i msgid "Unknown error" msgstr "Unbekannter Fehler" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Unknown fee types (members get the default): %{names}" +msgstr "Unbekannte Beitragsarten (Mitglieder erhalten den Standard): %{names}" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "Unlink Member" @@ -3278,6 +3694,11 @@ msgstr "Aufhebung der Verknüpfung geplant" msgid "Unpaid" msgstr "Unbezahlt" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Use the data field name as the CSV column header in your file. Data fields must exist in Mila before importing, because unknown data field columns will be ignored." +msgstr "Verwende die Namen der Datenfelder als Spaltennamen in der CSV-Datei. Datenfelder müssen in Mila bereits angelegt sein, da unbekannte Spaltennamen ignoriert werden." + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "User" @@ -3288,6 +3709,11 @@ msgstr "Benutzer*in" msgid "User %{action} successfully" msgstr "Benutzer*in wurde erfolgreich %{action}" +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User %{email}" +msgstr "Benutzer*in %{email}" + #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format @@ -3402,11 +3828,26 @@ msgstr "Warnungen" msgid "We can't find the internet" msgstr "Keine Internetverbindung gefunden" +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "We could not send the confirmation email. Please try again later or contact support." +msgstr "Die Bestätigungs-E-Mail konnte nicht versendet werden. Bitte versuche es später erneut oder wende dich an den Support." + #: lib/mv_web/templates/emails/join_confirmation.html.heex #, elixir-autogen, elixir-format msgid "We have received your membership request. To complete it, please click the link below." msgstr "Wir haben deine Mitgliedschaftsanfrage erhalten. Bitte klicke zur Bestätigung auf den folgenden Link." +#: lib/mv_web/templates/emails/join_already_member.html.heex +#, elixir-autogen, elixir-format +msgid "We have received your request. The email address you entered is already registered as a member." +msgstr "Wir haben deine Anfrage erhalten. Die angegebene E-Mail-Adresse ist bereits als Mitglied registriert." + +#: lib/mv_web/templates/emails/join_already_pending.html.heex +#, elixir-autogen, elixir-format +msgid "We have received your request. You already have a membership application that is being reviewed." +msgstr "Wir haben deine Anfrage erhalten. Du hast bereits einen Mitgliedsantrag, der geprüft wird." + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "We have saved your details. To complete your request, please click the link we sent to your email." @@ -3417,6 +3858,11 @@ msgstr "Wir haben deine Angaben gespeichert. Um deinen Antrag abzuschließen, kl msgid "Website" msgstr "Webseite" +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "When did this member leave?" +msgstr "Wann ist dieses Mitglied ausgetreten?" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "When enabled and OIDC is configured, the sign-in page shows only the Single Sign-On button." @@ -3461,11 +3907,17 @@ msgstr "Ja" msgid "Yes/No-Selection" msgstr "Ja/Nein-Auswahl" +#: lib/mv_web/templates/emails/join_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "You already had a pending request. Here is a new confirmation link." +msgstr "Du hattest bereits einen offenen Antrag. Hier ist ein neuer Bestätigungslink." + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "You are about to delete all %{count} cycles for this member." msgstr "Du bist dabei, alle %{count} Zyklen für dieses Mitglied zu löschen." +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "You are not allowed to perform this action." @@ -3481,6 +3933,11 @@ msgstr "Du bist jetzt angemeldet" msgid "You are now signed out" msgstr "Du bist jetzt abgemeldet" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "You can add links: full addresses (https://…) or as [link text](https://…)." +msgstr "Du kannst Links einfügen: ganze Adressen (https://…) oder als [Linktext](https://…)." + #: lib/mv_web/live/member_live/form.ex #, elixir-autogen, elixir-format msgid "You do not have permission to %{action} members." @@ -3525,6 +3982,11 @@ msgstr "Du hast dich bereits auf andere Weise angemeldet, aber dein Konto noch n msgid "You requested a password reset. Click the link below to set a new password." msgstr "Du hast die Zurücksetzung deines Passworts angefordert. Klicke auf den folgenden Link, um ein neues Passwort zu setzen." +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "You will receive an email once your application has been reviewed." +msgstr "Du erhältst eine E-Mail, sobald dein Antrag geprüft wurde." + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Your details are only used to process your membership application and to contact you. To prevent abuse we also process technical data (e.g. IP address) only as necessary." @@ -3603,6 +4065,16 @@ msgstr "E-Mail" msgid "email %{email} has already been taken" msgstr "E-Mail %{email} wurde bereits verwendet" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "filtered" +msgstr "gefiltert" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "join page URL in a new tab" +msgstr "Beitrittslink in einem neuen Tab" + #: lib/mv_web/live/role_live/form.ex #, elixir-autogen, elixir-format msgid "normal_user - Create/Read/Update access" @@ -3649,193 +4121,6 @@ msgstr "aktualisiert" msgid "without %{name}" msgstr "ohne %{name}" -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Applicant data" -msgstr "Angaben des Antragstellers" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Copy" -msgstr "Kopieren" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Copy join page URL" -msgstr "URL der Beitrittsseite kopieren" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Join page URL" -msgstr "URL der Beitrittsseite" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Join page URL copied to clipboard." -msgstr "URL der Beitrittsseite in die Zwischenablage kopiert." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Link to the public join page (share this with applicants):" -msgstr "Link zur öffentlichen Beitrittsseite (diesen Link mit Interessent*innen teilen):" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Status and review" -msgstr "Status und Prüfung" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "We could not send the confirmation email. Please try again later or contact support." -msgstr "Die Bestätigungs-E-Mail konnte nicht versendet werden. Bitte versuche es später erneut oder wende dich an den Support." - -#: lib/mv_web/templates/emails/join_already_member.html.heex -#: lib/mv_web/templates/emails/join_already_pending.html.heex -#, elixir-autogen, elixir-format -msgid "If you have any questions, please contact us." -msgstr "Bei Fragen kannst du dich gerne an uns wenden." - -#: lib/mv_web/emails/join_already_member_email.ex -#, elixir-autogen, elixir-format -msgid "Membership application – already a member" -msgstr "Mitgliedsantrag – bereits Mitglied" - -#: lib/mv_web/emails/join_already_pending_email.ex -#, elixir-autogen, elixir-format -msgid "Membership application – already under review" -msgstr "Mitgliedsantrag – wird bereits geprüft" - -#: lib/mv_web/templates/emails/join_already_member.html.heex -#, elixir-autogen, elixir-format -msgid "We have received your request. The email address you entered is already registered as a member." -msgstr "Wir haben deine Anfrage erhalten. Die angegebene E-Mail-Adresse ist bereits als Mitglied registriert." - -#: lib/mv_web/templates/emails/join_already_pending.html.heex -#, elixir-autogen, elixir-format -msgid "We have received your request. You already have a membership application that is being reviewed." -msgstr "Wir haben deine Anfrage erhalten. Du hast bereits einen Mitgliedsantrag, der geprüft wird." - -#: lib/mv_web/templates/emails/join_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "You already had a pending request. Here is a new confirmation link." -msgstr "Du hattest bereits einen offenen Antrag. Hier ist ein neuer Bestätigungslink." - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Back to join form" -msgstr "Zurück zu den Mitgliedsanträgen" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Go to join form" -msgstr "Zum Antragsformular" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Invalid or expired link" -msgstr "Ungültiger oder abgelaufener Link." - -#: lib/mv_web/controllers/join_confirm_controller.ex -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Link expired" -msgstr "Link abgelaufen" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Submit new request" -msgstr "Antrag absenden" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Thank you" -msgstr "Vielen Dank" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "You will receive an email once your application has been reviewed." -msgstr "Du erhältst eine E-Mail, sobald dein Antrag geprüft wurde." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Allow direct registration (/register)" -msgstr "Direkte Registrierung erlauben (/register)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Authentication" -msgstr "Anmeldung" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Direct registration" -msgstr "Direkte Registrierung" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Failed to update setting." -msgstr "Einstellung konnte nicht gespeichert werden." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "If disabled, users cannot sign up via /register; sign-in and the join form remain available." -msgstr "Wenn deaktiviert, können sich Nutzer*innen nicht über /register anmelden; Anmeldung und Beitrittsformular bleiben verfügbar." - -#: lib/mv_web/controllers/page_controller.ex -#, elixir-autogen, elixir-format -msgid "Home" -msgstr "Startseite" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Invalid link" -msgstr "Ungültiger oder abgelaufener Link." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Join" -msgstr "Beitritt" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format -msgid "Join confirmation" -msgstr "Beitrittsbestätigung" - -#: lib/mv_web/live/auth/sign_in_live.ex -#, elixir-autogen, elixir-format -msgid "Sign in" -msgstr "Anmelden" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Group %{name}" -msgstr "Gruppe %{name}" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member %{name}" -msgstr "Mitglied %{name}" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role %{name}" -msgstr "Rolle %{name}" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "User %{email}" -msgstr "Benutzer*in %{email}" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Only OIDC sign-in is active. This option is disabled." -msgstr "Nur OIDC-Anmeldung ist aktiv. Diese Option ist deaktiviert." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Only sign-in via Single Sign-On (SSO) is allowed." -msgstr "Nur Anmeldung per Single Sign-On (SSO) ist erlaubt." - #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgctxt "action" @@ -3847,268 +4132,3 @@ msgstr "Öffnen" msgctxt "status" msgid "Open" msgstr "Offen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "join page URL in a new tab" -msgstr "Beitrittslink in einem neuen Tab" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "SMTP environment configuration appears incomplete. Missing: %{keys}" -msgstr "Die SMTP-Umgebungs-Konfiguration ist unvollständig. Fehlend: %{keys}" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "SMTP is fully managed via environment variables. All SMTP fields are read-only." -msgstr "SMTP wird vollständig über Umgebungsvariablen verwaltet. Alle SMTP-Felder sind schreibgeschützt." - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{field} from" -msgstr "%{field} von" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{field} to" -msgstr "%{field} bis" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Active only" -msgstr "Nur aktive" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Custom date fields" -msgstr "Benutzerdefinierte Datumsfelder" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Dates" -msgstr "Daten" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Exit date" -msgstr "Austrittsdatum" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Exit date from" -msgstr "Austrittsdatum von" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Exit date to" -msgstr "Austrittsdatum bis" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "From" -msgstr "Von" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Inactive only" -msgstr "Nur ehemalige" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Join date" -msgstr "Beitrittsdatum" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Join date from" -msgstr "Beitrittsdatum von" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Join date to" -msgstr "Beitrittsdatum bis" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Range" -msgstr "Zeitraum" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "To" -msgstr "Bis" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Join form:" -msgstr "Beitrittsformular:" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Description for join form" -msgstr "Beschreibung für das Beitrittsformular" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "You can add links: full addresses (https://…) or as [link text](https://…)." -msgstr "Du kannst Links einfügen: ganze Adressen (https://…) oder als [Linktext](https://…)." - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Fee type '%{name}' not found; using the default fee type." -msgstr "Beitragsart '%{name}' nicht gefunden; Standard-Beitragsart wird verwendet." - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Group assignment failed: %{reason}" -msgstr "Gruppenzuordnung fehlgeschlagen: %{reason}" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Confirm and Import" -msgstr "Bestätigen und importieren" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "No prepared import to confirm. Please upload again." -msgstr "Kein vorbereiteter Import zum Bestätigen. Bitte erneut hochladen." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Preview import" -msgstr "Importvorschau" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Column" -msgstr "Spalte" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Custom field" -msgstr "Benutzerdefiniertes Feld" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Ignored (system-computed field)" -msgstr "Ignoriert (vom System berechnetes Feld)" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Member field" -msgstr "Mitgliedsfeld" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Rows with an empty fee type will get the default fee type." -msgstr "Zeilen ohne Beitragsart erhalten die Standard-Beitragsart." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "These groups will be created automatically: %{names}" -msgstr "Diese Gruppen werden automatisch erstellt: %{names}" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Unknown (ignored)" -msgstr "Unbekannt (ignoriert)" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Unknown fee types (members get the default): %{names}" -msgstr "Unbekannte Beitragsarten (Mitglieder erhalten den Standard): %{names}" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Fee status columns (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) are always ignored and cannot be imported." -msgstr "Beitragsstatus-Spalten (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) werden immer ignoriert und können nicht importiert werden." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Groups column (recognized headers): Groups, Gruppen, Gruppe. Comma-separated group names are supported and missing groups are created automatically." -msgstr "Gruppen-Spalte (erkannte Spaltennamen): Groups, Gruppen, Gruppe. Mehrere durch Komma getrennte Gruppennamen werden unterstützt; fehlende Gruppen werden automatisch erstellt." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Use the data field name as the CSV column header in your file. Data fields must exist in Mila before importing, because unknown data field columns will be ignored." -msgstr "Verwende die Namen der Datenfelder als Spaltennamen in der CSV-Datei. Datenfelder müssen in Mila bereits angelegt sein, da unbekannte Spaltennamen ignoriert werden." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Fee type column (recognized headers): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unknown fee types fall back to the default." -msgstr "Beitragsart-Spalte (erkannte Spaltennamen): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unbekannte Beitragsarten erhalten die Standard-Beitragsart." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Create custom field" -msgstr "Datenfeld erstellen" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Create fee type" -msgstr "Beitragsart erstellen" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 1" -msgstr "Zeile 1" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 2" -msgstr "Zeile 2" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 3" -msgstr "Zeile 3" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export to CSV" -msgstr "Mitglieder als CSV exportieren" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export to PDF" -msgstr "Mitglieder als PDF exportieren" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Too many recipients for this function. Copy the addresses or export the list." -msgstr "Zu viele Empfänger für diese Funktion. Kopiere die Adressen oder exportiere die Liste." - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "filtered" -msgstr "gefiltert" - -#~ #: lib/mv_web/components/export_dropdown.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "CSV" -#~ msgstr "CSV" - -#~ #: lib/mv_web/live/member_live/index.html.heex -#~ #, elixir-autogen, elixir-format -#~ msgid "Copy email addresses of selected members" -#~ msgstr "E-Mail-Adressen der ausgewählten Mitglieder kopieren" - -#~ #: lib/mv_web/components/export_dropdown.ex -#~ #, elixir-autogen, elixir-format, fuzzy -#~ msgid "Export" -#~ msgstr "Export" - -#~ #: lib/mv_web/live/member_live/index.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "No members selected" -#~ msgstr "Keine Mitglieder ausgewählt" - -#~ #: lib/mv_web/live/member_live/index.html.heex -#~ #, elixir-autogen, elixir-format -#~ msgid "Open email program with BCC recipients" -#~ msgstr "E-Mail-Programm mit BCC-Empfänger*innen öffnen" - -#~ #: lib/mv_web/components/export_dropdown.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "PDF" -#~ msgstr "PDF" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 73cb815..7a90bee 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -40,6 +40,16 @@ msgstr[1] "" msgid "%{count} synced" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{field} from" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{field} to" +msgstr "" + #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format msgid "(ISO-8601 format: YYYY-MM-DD)" @@ -97,6 +107,11 @@ msgstr "" msgid "Active members" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Active only" +msgstr "" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format msgid "Add Member" @@ -154,6 +169,11 @@ msgstr "" msgid "All years combined (pie)" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Allow direct registration (/register)" +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Already paid cycles will remain with the old amount." @@ -172,6 +192,7 @@ msgstr "" msgid "An account with this email already exists. Please verify your password to link your OIDC account." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -185,6 +206,11 @@ msgstr "" msgid "App URL (contact view link)" msgstr "" +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Applicant data" +msgstr "" + #: lib/mv_web/live/components/member_filter_component.ex #, elixir-autogen, elixir-format msgid "Apply filters" @@ -274,6 +300,11 @@ msgstr "" msgid "Aug." msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Authentication" +msgstr "" + #: lib/mv_web/controllers/auth_controller.ex #, elixir-autogen, elixir-format msgid "Authentication configuration error. Please contact the administrator." @@ -321,6 +352,11 @@ msgstr "" msgid "Back to groups list" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Back to join form" +msgstr "" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Back to join requests" @@ -391,6 +427,7 @@ msgstr "" #: lib/mv_web/live/member_field_live/form_component.ex #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #: lib/mv_web/live/membership_fee_type_live/form.ex #: lib/mv_web/live/role_live/show.ex @@ -534,6 +571,11 @@ msgstr "" msgid "Club Settings" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Column" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Completed" @@ -564,6 +606,11 @@ msgstr "" msgid "Confirm Password" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Confirm and Import" +msgstr "" + #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format msgid "Confirm my email" @@ -667,11 +714,21 @@ msgid_plural "Copied %{count} email addresses to clipboard" msgstr[0] "" msgstr[1] "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Copy" +msgstr "" + #: lib/mv_web/components/bulk_actions_dropdown.ex #, elixir-autogen, elixir-format msgid "Copy email addresses" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Copy join page URL" +msgstr "" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Could not load data fields. Please check your permissions." @@ -720,6 +777,16 @@ msgstr "" msgid "Create a new cycle manually" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Create custom field" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Create fee type" +msgstr "" + #: lib/mv/membership/members_pdf.ex #, elixir-autogen, elixir-format msgid "Created at:" @@ -760,6 +827,16 @@ msgstr "" msgid "Custom Fields" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Custom date fields" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Custom field" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle" @@ -834,6 +911,31 @@ msgstr "" msgid "Date" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Dates" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate member" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate member %{name}" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivating this member records an exit date. You can reactivate them later." +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Dec." @@ -1031,6 +1133,16 @@ msgstr "" msgid "Description" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Description for join form" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Direct registration" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Download CSV templates:" @@ -1180,6 +1292,22 @@ msgstr "" msgid "Exit Date" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Exit date" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Exit date from" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Exit date to" +msgstr "" + #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "Exits" @@ -1205,6 +1333,16 @@ msgstr "" msgid "Export members to PDF" msgstr "" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Export to CSV" +msgstr "" + +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Export to PDF" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Failed members:" @@ -1301,6 +1439,11 @@ msgstr "" msgid "Failed to update cycle status: %{errors}" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to update setting." +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Failed: %{count} row(s)" @@ -1317,12 +1460,27 @@ msgstr "" msgid "Fee Type" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Fee status columns (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) are always ignored and cannot be imported." +msgstr "" + #: lib/mv_web/live/import_live/components.ex #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "Fee type" msgstr "" +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Fee type '%{name}' not found; using the default fee type." +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Fee type column (recognized headers): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unknown fee types fall back to the default." +msgstr "" + #: lib/mv_web/live/components/member_filter_component.ex #, elixir-autogen, elixir-format msgid "Fee types" @@ -1368,6 +1526,11 @@ msgstr "" msgid "Fixed after creation. Members can only switch between types with the same interval." msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "From" +msgstr "" + #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "From %{first} to %{last} (relevant years with membership data)" @@ -1453,6 +1616,21 @@ msgstr "" msgid "German Template" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Go to join form" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Group %{name}" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Group assignment failed: %{reason}" +msgstr "" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format msgid "Group deleted successfully." @@ -1490,6 +1668,11 @@ msgstr "" msgid "Groups claim" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Groups column (recognized headers): Groups, Gruppen, Gruppe. Comma-separated group names are supported and missing groups are created automatically." +msgstr "" + #: lib/mv_web/helpers/membership_fee_helpers.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/form.ex @@ -1502,6 +1685,11 @@ msgstr "" msgid "History" msgstr "" +#: lib/mv_web/controllers/page_controller.ex +#, elixir-autogen, elixir-format +msgid "Home" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Host" @@ -1513,6 +1701,11 @@ msgstr "" msgid "House Number" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "If disabled, users cannot sign up via /register; sign-in and the join form remain available." +msgstr "" + #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format msgid "If you did not create an account, you can ignore this email." @@ -1528,6 +1721,17 @@ msgstr "" msgid "If you did not submit this request, you can ignore this email." msgstr "" +#: lib/mv_web/templates/emails/join_already_member.html.heex +#: lib/mv_web/templates/emails/join_already_pending.html.heex +#, elixir-autogen, elixir-format +msgid "If you have any questions, please contact us." +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Ignored (system-computed field)" +msgstr "" + #: lib/mv_web/components/layouts/sidebar.ex #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format @@ -1564,6 +1768,11 @@ msgstr "" msgid "Inactive members" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Inactive only" +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "Include both letters and numbers" @@ -1633,6 +1842,7 @@ msgstr "" msgid "Invalid chunk index: %{idx}" msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Invalid date format" @@ -1643,6 +1853,16 @@ msgstr "" msgid "Invalid email address. Please enter a valid recipient address." msgstr "" +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Invalid link" +msgstr "" + +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Invalid or expired link" +msgstr "" + #: lib/mv_web/controllers/join_confirm_html/confirm.html.heex #, elixir-autogen, elixir-format msgid "Invalid or expired link." @@ -1658,6 +1878,11 @@ msgstr "" msgid "Jan." msgstr "" +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Join" +msgstr "" + #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/live/member_live/show.ex @@ -1671,11 +1896,46 @@ msgstr "" msgid "Join Form" msgstr "" +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Join confirmation" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Join date" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Join date from" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Join date to" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Join form enabled" msgstr "" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Join form:" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Join page URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Join page URL copied to clipboard." +msgstr "" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Join request" @@ -1765,6 +2025,17 @@ msgstr "" msgid "Line %{line}: %{message}" msgstr "" +#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Link expired" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Link to the public join page (share this with applicants):" +msgstr "" + #: lib/mv_web/live/user_live/index.html.heex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format @@ -1848,6 +2119,11 @@ msgstr "" msgid "Member %{club_name}" msgstr "" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member %{name}" +msgstr "" + #: lib/mv/membership/members_pdf.ex #, elixir-autogen, elixir-format msgid "Member count:" @@ -1864,6 +2140,11 @@ msgstr "" msgid "Member deleted successfully" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Member field" +msgstr "" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Member field %{action} successfully" @@ -1982,6 +2263,16 @@ msgstr "" msgid "Membership Fees" msgstr "" +#: lib/mv_web/emails/join_already_member_email.ex +#, elixir-autogen, elixir-format +msgid "Membership application – already a member" +msgstr "" + +#: lib/mv_web/emails/join_already_pending_email.ex +#, elixir-autogen, elixir-format +msgid "Membership application – already under review" +msgstr "" + #: lib/mv_web/components/layouts/sidebar.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -2027,6 +2318,11 @@ msgstr "" msgid "Membership fee types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Membership status" +msgstr "" + #: lib/mv/mailer.ex #, elixir-autogen, elixir-format msgid "Mila – Test email" @@ -2204,6 +2500,11 @@ msgstr "" msgid "No membership fee type assigned" msgstr "" +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "No prepared import to confirm. Please upload again." +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "No receipts" @@ -2330,6 +2631,11 @@ msgstr "" msgid "Only OIDC sign-in (hide password login)" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Only OIDC sign-in is active. This option is disabled." +msgstr "" + #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format msgid "Only administrators can import members from CSV files." @@ -2346,6 +2652,11 @@ msgstr "" msgid "Only possible if no members are assigned to this type." msgstr "" +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Only sign-in via Single Sign-On (SSO) is allowed." +msgstr "" + #: lib/mv_web/components/bulk_actions_dropdown.ex #, elixir-autogen, elixir-format msgid "Open in email program" @@ -2490,6 +2801,11 @@ msgstr "" msgid "Postal Code" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Preview import" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Processing chunk %{current} of %{total}..." @@ -2512,6 +2828,21 @@ msgstr "" msgid "Quarterly Interval - Joining Cycle Excluded" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Range" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Reactivate member" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Reactivate member %{name}" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Receipt" @@ -2627,6 +2958,11 @@ msgstr "" msgid "Role" msgstr "" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role %{name}" +msgstr "" + #: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format msgid "Role deleted successfully." @@ -2654,16 +2990,46 @@ msgstr "" msgid "Roles" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 1" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 2" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 3" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Rows with an empty fee type will get the default fee type." +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP / E-Mail" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP environment configuration appears incomplete. Missing: %{keys}" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP error:" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is fully managed via environment variables. All SMTP fields are read-only." +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP is not configured. Please set at least the SMTP host." @@ -2919,6 +3285,11 @@ msgstr "" msgid "Show/Hide Columns" msgstr "" +#: lib/mv_web/live/auth/sign_in_live.ex +#, elixir-autogen, elixir-format +msgid "Sign in" +msgstr "" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Slug does not match. Deletion cancelled." @@ -2963,6 +3334,11 @@ msgstr "" msgid "Status" msgstr "" +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Status and review" +msgstr "" + #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex @@ -2970,6 +3346,11 @@ msgstr "" msgid "Street" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Submit new request" +msgstr "" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Submit request" @@ -3092,6 +3473,11 @@ msgstr "" msgid "Text" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Thank you" +msgstr "" + #: lib/mv_web/controllers/join_confirm_html/confirm.html.heex #, elixir-autogen, elixir-format msgid "Thank you, we have received your request." @@ -3122,6 +3508,11 @@ msgstr "" msgid "These fields are necessary for MILA to handle member identification and payment calculations in the future. Thus you cannot delete these fields but hide them in the member overview." msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "These groups will be created automatically: %{names}" +msgstr "" + #: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format msgid "These will appear in addition to other data when adding new members." @@ -3170,6 +3561,11 @@ msgstr "" msgid "This link has expired. Please submit the form again." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "This member is deactivated (exit date set). Reactivating clears the exit date." +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "This user cannot be edited." @@ -3190,6 +3586,11 @@ msgstr "" msgid "Tip: Paste email addresses into the BCC field for privacy compliance" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "To" +msgstr "" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format msgid "To confirm deletion, please enter the group name:" @@ -3210,6 +3611,11 @@ msgstr "" msgid "Toggle sidebar" msgstr "" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Too many recipients for this function. Copy the addresses or export the list." +msgstr "" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Too many requests. Please try again later." @@ -3248,6 +3654,11 @@ msgstr "" msgid "Unable to sign in. Please try again." msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Unknown (ignored)" +msgstr "" + #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format msgid "Unknown column '%{header}' will be ignored. If this is a custom field, create it in Mila before importing." @@ -3259,6 +3670,11 @@ msgstr "" msgid "Unknown error" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Unknown fee types (members get the default): %{names}" +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "Unlink Member" @@ -3279,6 +3695,11 @@ msgstr "" msgid "Unpaid" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Use the data field name as the CSV column header in your file. Data fields must exist in Mila before importing, because unknown data field columns will be ignored." +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "User" @@ -3289,6 +3710,11 @@ msgstr "" msgid "User %{action} successfully" msgstr "" +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User %{email}" +msgstr "" + #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format @@ -3402,11 +3828,26 @@ msgstr "" msgid "We can't find the internet" msgstr "" +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "We could not send the confirmation email. Please try again later or contact support." +msgstr "" + #: lib/mv_web/templates/emails/join_confirmation.html.heex #, elixir-autogen, elixir-format msgid "We have received your membership request. To complete it, please click the link below." msgstr "" +#: lib/mv_web/templates/emails/join_already_member.html.heex +#, elixir-autogen, elixir-format +msgid "We have received your request. The email address you entered is already registered as a member." +msgstr "" + +#: lib/mv_web/templates/emails/join_already_pending.html.heex +#, elixir-autogen, elixir-format +msgid "We have received your request. You already have a membership application that is being reviewed." +msgstr "" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "We have saved your details. To complete your request, please click the link we sent to your email." @@ -3417,6 +3858,11 @@ msgstr "" msgid "Website" msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "When did this member leave?" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "When enabled and OIDC is configured, the sign-in page shows only the Single Sign-On button." @@ -3461,11 +3907,17 @@ msgstr "" msgid "Yes/No-Selection" msgstr "" +#: lib/mv_web/templates/emails/join_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "You already had a pending request. Here is a new confirmation link." +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "You are about to delete all %{count} cycles for this member." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "You are not allowed to perform this action." @@ -3481,6 +3933,11 @@ msgstr "" msgid "You are now signed out" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "You can add links: full addresses (https://…) or as [link text](https://…)." +msgstr "" + #: lib/mv_web/live/member_live/form.ex #, elixir-autogen, elixir-format msgid "You do not have permission to %{action} members." @@ -3525,6 +3982,11 @@ msgstr "" msgid "You requested a password reset. Click the link below to set a new password." msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "You will receive an email once your application has been reviewed." +msgstr "" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Your details are only used to process your membership application and to contact you. To prevent abuse we also process technical data (e.g. IP address) only as necessary." @@ -3603,6 +4065,16 @@ msgstr "" msgid "email %{email} has already been taken" msgstr "" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "filtered" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "join page URL in a new tab" +msgstr "" + #: lib/mv_web/live/role_live/form.ex #, elixir-autogen, elixir-format msgid "normal_user - Create/Read/Update access" @@ -3649,193 +4121,6 @@ msgstr "" msgid "without %{name}" msgstr "" -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Applicant data" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Copy" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Copy join page URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Join page URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Join page URL copied to clipboard." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Link to the public join page (share this with applicants):" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Status and review" -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "We could not send the confirmation email. Please try again later or contact support." -msgstr "" - -#: lib/mv_web/templates/emails/join_already_member.html.heex -#: lib/mv_web/templates/emails/join_already_pending.html.heex -#, elixir-autogen, elixir-format -msgid "If you have any questions, please contact us." -msgstr "" - -#: lib/mv_web/emails/join_already_member_email.ex -#, elixir-autogen, elixir-format -msgid "Membership application – already a member" -msgstr "" - -#: lib/mv_web/emails/join_already_pending_email.ex -#, elixir-autogen, elixir-format -msgid "Membership application – already under review" -msgstr "" - -#: lib/mv_web/templates/emails/join_already_member.html.heex -#, elixir-autogen, elixir-format -msgid "We have received your request. The email address you entered is already registered as a member." -msgstr "" - -#: lib/mv_web/templates/emails/join_already_pending.html.heex -#, elixir-autogen, elixir-format -msgid "We have received your request. You already have a membership application that is being reviewed." -msgstr "" - -#: lib/mv_web/templates/emails/join_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "You already had a pending request. Here is a new confirmation link." -msgstr "" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Back to join form" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Go to join form" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Invalid or expired link" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Link expired" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Submit new request" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Thank you" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "You will receive an email once your application has been reviewed." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Allow direct registration (/register)" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Authentication" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Direct registration" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Failed to update setting." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "If disabled, users cannot sign up via /register; sign-in and the join form remain available." -msgstr "" - -#: lib/mv_web/controllers/page_controller.ex -#, elixir-autogen, elixir-format -msgid "Home" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format -msgid "Invalid link" -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Join" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format -msgid "Join confirmation" -msgstr "" - -#: lib/mv_web/live/auth/sign_in_live.ex -#, elixir-autogen, elixir-format -msgid "Sign in" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Group %{name}" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member %{name}" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role %{name}" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "User %{email}" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Only OIDC sign-in is active. This option is disabled." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Only sign-in via Single Sign-On (SSO) is allowed." -msgstr "" - #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgctxt "action" @@ -3847,238 +4132,3 @@ msgstr "" msgctxt "status" msgid "Open" msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "join page URL in a new tab" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "SMTP environment configuration appears incomplete. Missing: %{keys}" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "SMTP is fully managed via environment variables. All SMTP fields are read-only." -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{field} from" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{field} to" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Active only" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Custom date fields" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Dates" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Exit date" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Exit date from" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Exit date to" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "From" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Inactive only" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Join date" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Join date from" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Join date to" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Range" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "To" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Join form:" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Description for join form" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "You can add links: full addresses (https://…) or as [link text](https://…)." -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Fee type '%{name}' not found; using the default fee type." -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Group assignment failed: %{reason}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Confirm and Import" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "No prepared import to confirm. Please upload again." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Preview import" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Column" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Custom field" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Ignored (system-computed field)" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Member field" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Rows with an empty fee type will get the default fee type." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "These groups will be created automatically: %{names}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Unknown (ignored)" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Unknown fee types (members get the default): %{names}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Fee status columns (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) are always ignored and cannot be imported." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Groups column (recognized headers): Groups, Gruppen, Gruppe. Comma-separated group names are supported and missing groups are created automatically." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Use the data field name as the CSV column header in your file. Data fields must exist in Mila before importing, because unknown data field columns will be ignored." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Fee type column (recognized headers): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unknown fee types fall back to the default." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Create custom field" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Create fee type" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 1" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 2" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 3" -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Export to CSV" -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Export to PDF" -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Too many recipients for this function. Copy the addresses or export the list." -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "filtered" -msgstr "" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index 185be8b..cf1faea 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -40,6 +40,16 @@ msgstr[1] "" msgid "%{count} synced" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{field} from" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{field} to" +msgstr "" + #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format msgid "(ISO-8601 format: YYYY-MM-DD)" @@ -97,6 +107,11 @@ msgstr "" msgid "Active members" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Active only" +msgstr "" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Add Member" @@ -154,6 +169,11 @@ msgstr "" msgid "All years combined (pie)" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Allow direct registration (/register)" +msgstr "Allow direct registration (/register)" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Already paid cycles will remain with the old amount." @@ -172,6 +192,7 @@ msgstr "" msgid "An account with this email already exists. Please verify your password to link your OIDC account." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -185,6 +206,11 @@ msgstr "" msgid "App URL (contact view link)" msgstr "" +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Applicant data" +msgstr "Applicant data" + #: lib/mv_web/live/components/member_filter_component.ex #, elixir-autogen, elixir-format msgid "Apply filters" @@ -274,6 +300,11 @@ msgstr "" msgid "Aug." msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Authentication" +msgstr "Authentication" + #: lib/mv_web/controllers/auth_controller.ex #, elixir-autogen, elixir-format msgid "Authentication configuration error. Please contact the administrator." @@ -321,6 +352,11 @@ msgstr "" msgid "Back to groups list" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Back to join form" +msgstr "Back to membership applications" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Back to join requests" @@ -391,6 +427,7 @@ msgstr "" #: lib/mv_web/live/member_field_live/form_component.ex #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #: lib/mv_web/live/membership_fee_type_live/form.ex #: lib/mv_web/live/role_live/show.ex @@ -534,6 +571,11 @@ msgstr "" msgid "Club Settings" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Column" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Completed" @@ -564,6 +606,11 @@ msgstr "" msgid "Confirm Password" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Confirm and Import" +msgstr "" + #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format msgid "Confirm my email" @@ -667,11 +714,21 @@ msgid_plural "Copied %{count} email addresses to clipboard" msgstr[0] "" msgstr[1] "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Copy" +msgstr "Copy" + #: lib/mv_web/components/bulk_actions_dropdown.ex #, elixir-autogen, elixir-format, fuzzy msgid "Copy email addresses" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Copy join page URL" +msgstr "Copy join page URL" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Could not load data fields. Please check your permissions." @@ -720,6 +777,16 @@ msgstr "" msgid "Create a new cycle manually" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Create custom field" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Create fee type" +msgstr "" + #: lib/mv/membership/members_pdf.ex #, elixir-autogen, elixir-format msgid "Created at:" @@ -760,6 +827,16 @@ msgstr "" msgid "Custom Fields" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Custom date fields" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Custom field" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle" @@ -834,6 +911,31 @@ msgstr "" msgid "Date" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Dates" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivate member" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Deactivate member %{name}" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Deactivating this member records an exit date. You can reactivate them later." +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Dec." @@ -1031,6 +1133,16 @@ msgstr "" msgid "Description" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Description for join form" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Direct registration" +msgstr "Direct registration" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Download CSV templates:" @@ -1180,6 +1292,22 @@ msgstr "" msgid "Exit Date" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Exit date" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Exit date from" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Exit date to" +msgstr "" + #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "Exits" @@ -1205,6 +1333,16 @@ msgstr "" msgid "Export members to PDF" msgstr "" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export to CSV" +msgstr "" + +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export to PDF" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "Failed members:" @@ -1301,6 +1439,11 @@ msgstr "" msgid "Failed to update cycle status: %{errors}" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to update setting." +msgstr "Failed to update setting." + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Failed: %{count} row(s)" @@ -1317,12 +1460,27 @@ msgstr "" msgid "Fee Type" msgstr "Fee Type" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Fee status columns (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) are always ignored and cannot be imported." +msgstr "" + #: lib/mv_web/live/import_live/components.ex #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "Fee type" msgstr "" +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Fee type '%{name}' not found; using the default fee type." +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Fee type column (recognized headers): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unknown fee types fall back to the default." +msgstr "" + #: lib/mv_web/live/components/member_filter_component.ex #, elixir-autogen, elixir-format msgid "Fee types" @@ -1368,6 +1526,11 @@ msgstr "" msgid "Fixed after creation. Members can only switch between types with the same interval." msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "From" +msgstr "" + #: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format msgid "From %{first} to %{last} (relevant years with membership data)" @@ -1453,6 +1616,21 @@ msgstr "" msgid "German Template" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Go to join form" +msgstr "Go to join form" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Group %{name}" +msgstr "Group %{name}" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Group assignment failed: %{reason}" +msgstr "" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Group deleted successfully." @@ -1490,6 +1668,11 @@ msgstr "" msgid "Groups claim" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Groups column (recognized headers): Groups, Gruppen, Gruppe. Comma-separated group names are supported and missing groups are created automatically." +msgstr "" + #: lib/mv_web/helpers/membership_fee_helpers.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/form.ex @@ -1502,6 +1685,11 @@ msgstr "" msgid "History" msgstr "" +#: lib/mv_web/controllers/page_controller.ex +#, elixir-autogen, elixir-format +msgid "Home" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Host" @@ -1513,6 +1701,11 @@ msgstr "" msgid "House Number" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "If disabled, users cannot sign up via /register; sign-in and the join form remain available." +msgstr "If disabled, users cannot sign up via /register; sign-in and the join form remain available." + #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format msgid "If you did not create an account, you can ignore this email." @@ -1528,6 +1721,17 @@ msgstr "If you did not request this, you can ignore this email. Your password wi msgid "If you did not submit this request, you can ignore this email." msgstr "If you did not submit this request, you can ignore this email." +#: lib/mv_web/templates/emails/join_already_member.html.heex +#: lib/mv_web/templates/emails/join_already_pending.html.heex +#, elixir-autogen, elixir-format +msgid "If you have any questions, please contact us." +msgstr "If you have any questions, please contact us." + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Ignored (system-computed field)" +msgstr "" + #: lib/mv_web/components/layouts/sidebar.ex #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format, fuzzy @@ -1564,6 +1768,11 @@ msgstr "" msgid "Inactive members" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Inactive only" +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "Include both letters and numbers" @@ -1633,6 +1842,7 @@ msgstr "" msgid "Invalid chunk index: %{idx}" msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Invalid date format" @@ -1643,6 +1853,16 @@ msgstr "" msgid "Invalid email address. Please enter a valid recipient address." msgstr "" +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Invalid link" +msgstr "Invalid or expired link." + +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Invalid or expired link" +msgstr "Invalid or expired link." + #: lib/mv_web/controllers/join_confirm_html/confirm.html.heex #, elixir-autogen, elixir-format msgid "Invalid or expired link." @@ -1658,6 +1878,11 @@ msgstr "" msgid "Jan." msgstr "" +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Join" +msgstr "" + #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/live/member_live/show.ex @@ -1671,11 +1896,46 @@ msgstr "" msgid "Join Form" msgstr "" +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Join confirmation" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Join date" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Join date from" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Join date to" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Join form enabled" msgstr "" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Join form:" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Join page URL" +msgstr "Join page URL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Join page URL copied to clipboard." +msgstr "Join page URL copied to clipboard." + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Join request" @@ -1765,6 +2025,17 @@ msgstr "" msgid "Line %{line}: %{message}" msgstr "" +#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Link expired" +msgstr "Link expired" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Link to the public join page (share this with applicants):" +msgstr "Link to the public join page (share this with applicants):" + #: lib/mv_web/live/user_live/index.html.heex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format, fuzzy @@ -1848,6 +2119,11 @@ msgstr "" msgid "Member %{club_name}" msgstr "Member %{club_name}" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member %{name}" +msgstr "Member %{name}" + #: lib/mv/membership/members_pdf.ex #, elixir-autogen, elixir-format msgid "Member count:" @@ -1864,6 +2140,11 @@ msgstr "Member created successfully" msgid "Member deleted successfully" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Member field" +msgstr "" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "Member field %{action} successfully" @@ -1982,6 +2263,16 @@ msgstr "" msgid "Membership Fees" msgstr "" +#: lib/mv_web/emails/join_already_member_email.ex +#, elixir-autogen, elixir-format +msgid "Membership application – already a member" +msgstr "Membership application – already a member" + +#: lib/mv_web/emails/join_already_pending_email.ex +#, elixir-autogen, elixir-format +msgid "Membership application – already under review" +msgstr "Membership application – already under review" + #: lib/mv_web/components/layouts/sidebar.ex #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -2027,6 +2318,11 @@ msgstr "" msgid "Membership fee types define different membership fee structures. Each type has a fixed interval (monthly, quarterly, half-yearly, yearly) that cannot be changed after creation." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership status" +msgstr "" + #: lib/mv/mailer.ex #, elixir-autogen, elixir-format msgid "Mila – Test email" @@ -2204,6 +2500,11 @@ msgstr "" msgid "No membership fee type assigned" msgstr "" +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "No prepared import to confirm. Please upload again." +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "No receipts" @@ -2330,6 +2631,11 @@ msgstr "" msgid "Only OIDC sign-in (hide password login)" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Only OIDC sign-in is active. This option is disabled." +msgstr "" + #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format msgid "Only administrators can import members from CSV files." @@ -2346,6 +2652,11 @@ msgstr "" msgid "Only possible if no members are assigned to this type." msgstr "" +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Only sign-in via Single Sign-On (SSO) is allowed." +msgstr "" + #: lib/mv_web/components/bulk_actions_dropdown.ex #, elixir-autogen, elixir-format msgid "Open in email program" @@ -2490,6 +2801,11 @@ msgstr "" msgid "Postal Code" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Preview import" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Processing chunk %{current} of %{total}..." @@ -2512,6 +2828,21 @@ msgstr "" msgid "Quarterly Interval - Joining Cycle Excluded" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Range" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Reactivate member" +msgstr "" + +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "Reactivate member %{name}" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Receipt" @@ -2627,6 +2958,11 @@ msgstr "Review date" msgid "Role" msgstr "" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role %{name}" +msgstr "Role %{name}" + #: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Role deleted successfully." @@ -2654,16 +2990,46 @@ msgstr "" msgid "Roles" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 1" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 2" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Row 3" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Rows with an empty fee type will get the default fee type." +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP / E-Mail" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP environment configuration appears incomplete. Missing: %{keys}" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP error:" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is fully managed via environment variables. All SMTP fields are read-only." +msgstr "SMTP is fully managed via environment variables. All SMTP fields are read-only." + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "SMTP is not configured. Please set at least the SMTP host." @@ -2919,6 +3285,11 @@ msgstr "" msgid "Show/Hide Columns" msgstr "" +#: lib/mv_web/live/auth/sign_in_live.ex +#, elixir-autogen, elixir-format +msgid "Sign in" +msgstr "" + #: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format msgid "Slug does not match. Deletion cancelled." @@ -2963,6 +3334,11 @@ msgstr "" msgid "Status" msgstr "" +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Status and review" +msgstr "Status and review" + #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex @@ -2970,6 +3346,11 @@ msgstr "" msgid "Street" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Submit new request" +msgstr "Submit new request" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Submit request" @@ -3092,6 +3473,11 @@ msgstr "" msgid "Text" msgstr "" +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "Thank you" +msgstr "Thank you" + #: lib/mv_web/controllers/join_confirm_html/confirm.html.heex #, elixir-autogen, elixir-format msgid "Thank you, we have received your request." @@ -3122,6 +3508,11 @@ msgstr "" msgid "These fields are necessary for MILA to handle member identification and payment calculations in the future. Thus you cannot delete these fields but hide them in the member overview." msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "These groups will be created automatically: %{names}" +msgstr "" + #: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format msgid "These will appear in addition to other data when adding new members." @@ -3170,6 +3561,11 @@ msgstr "" msgid "This link has expired. Please submit the form again." msgstr "This link has expired. Please submit the form again." +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "This member is deactivated (exit date set). Reactivating clears the exit date." +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "This user cannot be edited." @@ -3190,6 +3586,11 @@ msgstr "" msgid "Tip: Paste email addresses into the BCC field for privacy compliance" msgstr "" +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "To" +msgstr "" + #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "To confirm deletion, please enter the group name:" @@ -3210,6 +3611,11 @@ msgstr "" msgid "Toggle sidebar" msgstr "" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Too many recipients for this function. Copy the addresses or export the list." +msgstr "" + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Too many requests. Please try again later." @@ -3248,6 +3654,11 @@ msgstr "" msgid "Unable to sign in. Please try again." msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Unknown (ignored)" +msgstr "" + #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format msgid "Unknown column '%{header}' will be ignored. If this is a custom field, create it in Mila before importing." @@ -3259,6 +3670,11 @@ msgstr "Unknown column '%{header}' will be ignored. If this is a custom field, c msgid "Unknown error" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Unknown fee types (members get the default): %{names}" +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "Unlink Member" @@ -3279,6 +3695,11 @@ msgstr "" msgid "Unpaid" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Use the data field name as the CSV column header in your file. Data fields must exist in Mila before importing, because unknown data field columns will be ignored." +msgstr "" + #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "User" @@ -3289,6 +3710,11 @@ msgstr "" msgid "User %{action} successfully" msgstr "" +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User %{email}" +msgstr "User %{email}" + #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format, fuzzy @@ -3402,11 +3828,26 @@ msgstr "" msgid "We can't find the internet" msgstr "" +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "We could not send the confirmation email. Please try again later or contact support." +msgstr "" + #: lib/mv_web/templates/emails/join_confirmation.html.heex #, elixir-autogen, elixir-format msgid "We have received your membership request. To complete it, please click the link below." msgstr "We have received your membership request. To complete it, please click the link below." +#: lib/mv_web/templates/emails/join_already_member.html.heex +#, elixir-autogen, elixir-format +msgid "We have received your request. The email address you entered is already registered as a member." +msgstr "We have received your request. The email address you entered is already registered as a member." + +#: lib/mv_web/templates/emails/join_already_pending.html.heex +#, elixir-autogen, elixir-format +msgid "We have received your request. You already have a membership application that is being reviewed." +msgstr "We have received your request. You already have a membership application that is being reviewed." + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "We have saved your details. To complete your request, please click the link we sent to your email." @@ -3417,6 +3858,11 @@ msgstr "" msgid "Website" msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex +#, elixir-autogen, elixir-format +msgid "When did this member leave?" +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "When enabled and OIDC is configured, the sign-in page shows only the Single Sign-On button." @@ -3461,11 +3907,17 @@ msgstr "" msgid "Yes/No-Selection" msgstr "" +#: lib/mv_web/templates/emails/join_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "You already had a pending request. Here is a new confirmation link." +msgstr "You already had a pending request. Here is a new confirmation link." + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "You are about to delete all %{count} cycles for this member." msgstr "" +#: lib/mv_web/live/member_live/show/deactivate_component.ex #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "You are not allowed to perform this action." @@ -3481,6 +3933,11 @@ msgstr "" msgid "You are now signed out" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "You can add links: full addresses (https://…) or as [link text](https://…)." +msgstr "" + #: lib/mv_web/live/member_live/form.ex #, elixir-autogen, elixir-format msgid "You do not have permission to %{action} members." @@ -3525,6 +3982,11 @@ msgstr "" msgid "You requested a password reset. Click the link below to set a new password." msgstr "You requested a password reset. Click the link below to set a new password." +#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex +#, elixir-autogen, elixir-format +msgid "You will receive an email once your application has been reviewed." +msgstr "You will receive an email once your application has been reviewed." + #: lib/mv_web/live/join_live.ex #, elixir-autogen, elixir-format msgid "Your details are only used to process your membership application and to contact you. To prevent abuse we also process technical data (e.g. IP address) only as necessary." @@ -3603,6 +4065,16 @@ msgstr "" msgid "email %{email} has already been taken" msgstr "" +#: lib/mv_web/components/bulk_actions_dropdown.ex +#, elixir-autogen, elixir-format +msgid "filtered" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "join page URL in a new tab" +msgstr "join page URL in a new tab" + #: lib/mv_web/live/role_live/form.ex #, elixir-autogen, elixir-format msgid "normal_user - Create/Read/Update access" @@ -3649,193 +4121,6 @@ msgstr "" msgid "without %{name}" msgstr "without %{name}" -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Applicant data" -msgstr "Applicant data" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Copy" -msgstr "Copy" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Copy join page URL" -msgstr "Copy join page URL" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Join page URL" -msgstr "Join page URL" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Join page URL copied to clipboard." -msgstr "Join page URL copied to clipboard." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Link to the public join page (share this with applicants):" -msgstr "Link to the public join page (share this with applicants):" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Status and review" -msgstr "Status and review" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "We could not send the confirmation email. Please try again later or contact support." -msgstr "" - -#: lib/mv_web/templates/emails/join_already_member.html.heex -#: lib/mv_web/templates/emails/join_already_pending.html.heex -#, elixir-autogen, elixir-format -msgid "If you have any questions, please contact us." -msgstr "If you have any questions, please contact us." - -#: lib/mv_web/emails/join_already_member_email.ex -#, elixir-autogen, elixir-format -msgid "Membership application – already a member" -msgstr "Membership application – already a member" - -#: lib/mv_web/emails/join_already_pending_email.ex -#, elixir-autogen, elixir-format -msgid "Membership application – already under review" -msgstr "Membership application – already under review" - -#: lib/mv_web/templates/emails/join_already_member.html.heex -#, elixir-autogen, elixir-format -msgid "We have received your request. The email address you entered is already registered as a member." -msgstr "We have received your request. The email address you entered is already registered as a member." - -#: lib/mv_web/templates/emails/join_already_pending.html.heex -#, elixir-autogen, elixir-format -msgid "We have received your request. You already have a membership application that is being reviewed." -msgstr "We have received your request. You already have a membership application that is being reviewed." - -#: lib/mv_web/templates/emails/join_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "You already had a pending request. Here is a new confirmation link." -msgstr "You already had a pending request. Here is a new confirmation link." - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Back to join form" -msgstr "Back to membership applications" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Go to join form" -msgstr "Go to join form" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Invalid or expired link" -msgstr "Invalid or expired link." - -#: lib/mv_web/controllers/join_confirm_controller.ex -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Link expired" -msgstr "Link expired" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Submit new request" -msgstr "Submit new request" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "Thank you" -msgstr "Thank you" - -#: lib/mv_web/controllers/join_confirm_html/confirm.html.heex -#, elixir-autogen, elixir-format -msgid "You will receive an email once your application has been reviewed." -msgstr "You will receive an email once your application has been reviewed." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Allow direct registration (/register)" -msgstr "Allow direct registration (/register)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Authentication" -msgstr "Authentication" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Direct registration" -msgstr "Direct registration" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Failed to update setting." -msgstr "Failed to update setting." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "If disabled, users cannot sign up via /register; sign-in and the join form remain available." -msgstr "If disabled, users cannot sign up via /register; sign-in and the join form remain available." - -#: lib/mv_web/controllers/page_controller.ex -#, elixir-autogen, elixir-format -msgid "Home" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Invalid link" -msgstr "Invalid or expired link." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Join" -msgstr "" - -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format -msgid "Join confirmation" -msgstr "" - -#: lib/mv_web/live/auth/sign_in_live.ex -#, elixir-autogen, elixir-format -msgid "Sign in" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Group %{name}" -msgstr "Group %{name}" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member %{name}" -msgstr "Member %{name}" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role %{name}" -msgstr "Role %{name}" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "User %{email}" -msgstr "User %{email}" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Only OIDC sign-in is active. This option is disabled." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Only sign-in via Single Sign-On (SSO) is allowed." -msgstr "" - #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgctxt "action" @@ -3847,268 +4132,3 @@ msgstr "Open" msgctxt "status" msgid "Open" msgstr "Open" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "join page URL in a new tab" -msgstr "join page URL in a new tab" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "SMTP environment configuration appears incomplete. Missing: %{keys}" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "SMTP is fully managed via environment variables. All SMTP fields are read-only." -msgstr "SMTP is fully managed via environment variables. All SMTP fields are read-only." - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{field} from" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{field} to" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Active only" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Custom date fields" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Dates" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Exit date" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Exit date from" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Exit date to" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "From" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Inactive only" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Join date" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Join date from" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Join date to" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Range" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "To" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Join form:" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Description for join form" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "You can add links: full addresses (https://…) or as [link text](https://…)." -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Fee type '%{name}' not found; using the default fee type." -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Group assignment failed: %{reason}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Confirm and Import" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "No prepared import to confirm. Please upload again." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Preview import" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Column" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Custom field" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Ignored (system-computed field)" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Member field" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Rows with an empty fee type will get the default fee type." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "These groups will be created automatically: %{names}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Unknown (ignored)" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Unknown fee types (members get the default): %{names}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Fee status columns (Membership Fee Status, Bezahlstatus, Mitgliedsbeitragsstatus) are always ignored and cannot be imported." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Groups column (recognized headers): Groups, Gruppen, Gruppe. Comma-separated group names are supported and missing groups are created automatically." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Use the data field name as the CSV column header in your file. Data fields must exist in Mila before importing, because unknown data field columns will be ignored." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Fee type column (recognized headers): Fee Type, fee type, fee_type, membership_fee_type, Beitragsart. Unknown fee types fall back to the default." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Create custom field" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Create fee type" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 1" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 2" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Row 3" -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export to CSV" -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export to PDF" -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Too many recipients for this function. Copy the addresses or export the list." -msgstr "" - -#: lib/mv_web/components/bulk_actions_dropdown.ex -#, elixir-autogen, elixir-format -msgid "filtered" -msgstr "" - -#~ #: lib/mv_web/components/export_dropdown.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "CSV" -#~ msgstr "" - -#~ #: lib/mv_web/live/member_live/index.html.heex -#~ #, elixir-autogen, elixir-format -#~ msgid "Copy email addresses of selected members" -#~ msgstr "" - -#~ #: lib/mv_web/components/export_dropdown.ex -#~ #, elixir-autogen, elixir-format, fuzzy -#~ msgid "Export" -#~ msgstr "" - -#~ #: lib/mv_web/live/member_live/index.ex -#~ #, elixir-autogen, elixir-format, fuzzy -#~ msgid "No members selected" -#~ msgstr "" - -#~ #: lib/mv_web/live/member_live/index.html.heex -#~ #, elixir-autogen, elixir-format -#~ msgid "Open email program with BCC recipients" -#~ msgstr "" - -#~ #: lib/mv_web/components/export_dropdown.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "PDF" -#~ msgstr "" diff --git a/test/mv_web/live/member_live/deactivate_test.exs b/test/mv_web/live/member_live/deactivate_test.exs new file mode 100644 index 0000000..2e7a6a7 --- /dev/null +++ b/test/mv_web/live/member_live/deactivate_test.exs @@ -0,0 +1,108 @@ +defmodule MvWeb.MemberLive.DeactivateTest do + @moduledoc """ + Tests for the member deactivate/reactivate sub-flow on the member show page, + driven through the parent LiveView (the DeactivateComponent is stateful). + """ + use MvWeb.ConnCase, async: true + import Phoenix.LiveViewTest + use Gettext, backend: MvWeb.Gettext + + alias Mv.Fixtures + + defp reload_member(member) do + Ash.get!(Mv.Membership.Member, member.id, actor: Mv.Helpers.SystemActor.get_system_actor()) + end + + describe "deactivate/reactivate control visibility (§1.6, §1.8)" do + @tag role: :admin + test "shows Deactivate and hides Reactivate when member has no exit_date", %{conn: conn} do + member = Fixtures.member_fixture() + + {:ok, view, _html} = live(conn, ~p"/members/#{member.id}") + + assert has_element?(view, "[data-testid=member-deactivate]") + refute has_element?(view, "[data-testid=member-reactivate]") + end + + @tag role: :admin + test "shows Reactivate and hides Deactivate when member has an exit_date", %{conn: conn} do + member = Fixtures.member_fixture(%{exit_date: Date.utc_today()}) + + {:ok, view, _html} = live(conn, ~p"/members/#{member.id}") + + assert has_element?(view, "[data-testid=member-reactivate]") + refute has_element?(view, "[data-testid=member-deactivate]") + end + + @tag role: :read_only + test "hides the deactivate/reactivate control for a user without :update permission", %{ + conn: conn + } do + member = Fixtures.member_fixture() + + {:ok, view, _html} = live(conn, ~p"/members/#{member.id}") + + refute has_element?(view, "[data-testid=member-deactivate]") + refute has_element?(view, "[data-testid=member-reactivate]") + end + end + + describe "deactivate modal (§1.3)" do + @tag role: :admin + test "opening the deactivate modal prefills the date input with today", %{conn: conn} do + member = Fixtures.member_fixture() + + {:ok, view, _html} = live(conn, ~p"/members/#{member.id}") + + view + |> element("[data-testid=member-deactivate]") + |> render_click() + + assert has_element?( + view, + ~s(#deactivate-exit-date[value="#{Date.to_iso8601(Date.utc_today())}"]) + ) + end + end + + describe "submitting the deactivate modal (§1.2)" do + @tag role: :admin + test "submitting the deactivate modal with a future date sets exit_date", %{conn: conn} do + member = Fixtures.member_fixture(%{join_date: Date.utc_today()}) + future_date = Date.add(Date.utc_today(), 30) + + {:ok, view, _html} = live(conn, ~p"/members/#{member.id}") + + view + |> element("[data-testid=member-deactivate]") + |> render_click() + + view + |> element("#deactivate-member-modal form") + |> render_submit(%{"exit_date" => Date.to_iso8601(future_date)}) + + assert reload_member(member).exit_date == future_date + + # UI flips to offering Reactivate + assert has_element?(view, "[data-testid=member-reactivate]") + end + end + + describe "reactivate (§1.7)" do + @tag role: :admin + test "reactivating a member clears exit_date", %{conn: conn} do + member = Fixtures.member_fixture(%{exit_date: Date.utc_today()}) + + {:ok, view, _html} = live(conn, ~p"/members/#{member.id}") + + view + |> element("[data-testid=member-reactivate]") + |> render_click() + + assert reload_member(member).exit_date == nil + + # UI flips back to offering Deactivate + assert has_element?(view, "[data-testid=member-deactivate]") + end + end +end