diff --git a/.drone.yml b/.drone.yml index 5442fe7..9f18072 100644 --- a/.drone.yml +++ b/.drone.yml @@ -219,24 +219,8 @@ trigger: - main event: - push - - tag steps: - - name: build-and-publish-container - image: plugins/docker - settings: - registry: git.local-it.org - repo: git.local-it.org/local-it/mitgliederverwaltung - username: - from_secret: DRONE_REGISTRY_USERNAME - password: - from_secret: DRONE_REGISTRY_TOKEN - auto_tag: true - auto_tag_suffix: ${DRONE_COMMIT_SHA:0:8} - when: - event: - - tag - - name: build-and-publish-container-branch image: plugins/docker settings: @@ -256,6 +240,33 @@ steps: depends_on: - check-fast +--- +kind: pipeline +type: docker +name: build-and-release + +trigger: + event: + - tag + +steps: + - name: build-and-publish-container + image: plugins/docker + settings: + registry: git.local-it.org + repo: git.local-it.org/local-it/mitgliederverwaltung + username: + from_secret: DRONE_REGISTRY_USERNAME + password: + from_secret: DRONE_REGISTRY_TOKEN + auto_tag: true + when: + event: + - tag + +depends_on: + - check-fast + --- kind: pipeline type: docker diff --git a/CODE_GUIDELINES.md b/CODE_GUIDELINES.md index 4aa7566..0cb8d65 100644 --- a/CODE_GUIDELINES.md +++ b/CODE_GUIDELINES.md @@ -1267,7 +1267,28 @@ mix hex.outdated **Mailer and from address:** - `Mv.Mailer` (Swoosh) and `Mv.Mailer.mail_from/0` return the configured sender `{name, email}`. -- Config: `config :mv, :mail_from, {"Mila", "noreply@example.com"}` in config.exs. In production, runtime.exs overrides from ENV (`MAIL_FROM_NAME`, `MAIL_FROM_EMAIL`). +- Sender identity priority: `MAIL_FROM_NAME`/`MAIL_FROM_EMAIL` ENV > Settings `smtp_from_name`/`smtp_from_email` > hardcoded defaults `{"Mila", "noreply@example.com"}`. +- Access via `Mv.Config.mail_from_name/0` and `Mv.Config.mail_from_email/0`. +- **Important:** On most SMTP servers the sender email must be the same address as `smtp_username` or an alias owned by that account (e.g. Postfix strict relay). Misconfiguration causes a 553 error. + +**SMTP configuration:** + +- SMTP can be configured via **ENV variables** (`SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`, `SMTP_PASSWORD_FILE`, `SMTP_SSL`) or via **Admin Settings** (database: `smtp_host`, `smtp_port`, `smtp_username`, `smtp_password`, `smtp_ssl`). ENV takes priority (same pattern as OIDC/Vereinfacht). +- **Sensitive settings in DB:** `smtp_password` and `oidc_client_secret` are excluded from the default read of the Setting resource; they are loaded only via explicit select when needed (e.g. `Mv.Config.smtp_password/0`, `Mv.Config.oidc_client_secret/0`). This avoids exposing secrets through `get_settings()`. +- Sender identity is also configurable via ENV (`MAIL_FROM_NAME`, `MAIL_FROM_EMAIL`) or Settings (`smtp_from_name`, `smtp_from_email`). +- `SMTP_PASSWORD_FILE`: path to a file containing the password (Docker Secrets / Kubernetes secrets pattern); overridden by `SMTP_PASSWORD` when both are set. +- `SMTP_SSL` values: `tls` (default, port 587), `ssl` (port 465), `none` (port 25). +- When `SMTP_HOST` ENV is present at boot, `runtime.exs` configures `Swoosh.Adapters.SMTP` automatically. +- When SMTP is configured only via Settings, `Mv.Mailer.smtp_config/0` builds the adapter config per-send. +- In test environment, `Swoosh.Adapters.Test` is used regardless of SMTP config. +- **TLS in OTP 27:** Verify mode defaults to `verify_none` for self-signed/internal certs. Set `SMTP_VERIFY_PEER=true` (or `1`/`yes`) in prod when using public SMTP (Gmail, Mailgun). Config key `:smtp_verify_peer` is set in `runtime.exs` and read by `Mv.Mailer.smtp_config/0`. +- **Test email:** `Mv.Mailer.send_test_email(to_email)` sends a transactional test email; returns `{:ok, email}` or `{:error, classified_reason}`. Classified errors: `:sender_rejected`, `:auth_failed`, `:recipient_rejected`, `:tls_failed`, `:connection_failed`, `{:smtp_error, message}`. Each shows a specific message in the UI. +- **Production warning:** When SMTP is not configured in production, a warning is shown in the Settings UI. Use `Application.get_env(:mv, :environment, :dev)` (or assign in mount) for environment checks in LiveView/templates; do not use `Mix.env()` at runtime (it is not available in releases). +- Access config values via `Mv.Config.smtp_host/0`, `smtp_port/0`, `smtp_username/0`, `smtp_password/0`, `smtp_ssl/0`, `smtp_configured?/0`. + +**AshAuthentication senders:** + +- `SendPasswordResetEmail` and `SendNewUserConfirmationEmail` use `Mv.Mailer.deliver/1` (not `deliver!/1`). Errors are logged via `Logger.error` and not re-raised so they never crash the caller process. **Unified layout (transactional emails):** @@ -1287,7 +1308,11 @@ new() |> put_view(MvWeb.EmailsView) |> put_layout({MvWeb.EmailLayoutView, "layout.html"}) |> render_body("template_name.html", %{assigns}) -|> Mailer.deliver!() + +case Mailer.deliver(email) do + {:ok, _} -> :ok + {:error, reason} -> Logger.error("Email delivery failed: #{inspect(reason)}") +end ``` ### 3.12 Internationalization: Gettext @@ -1315,13 +1340,16 @@ dgettext("auth", "Sign in with email") **Extract and Merge:** ```bash -# Extract new translatable strings -mix gettext.extract +# Extract new translatable strings and merge into existing .po files (recommended) +mix gettext.extract --merge -# Merge into existing translations +# Alternative: extract only, then merge separately +mix gettext.extract mix gettext.merge priv/gettext --on-obsolete=mark_as_obsolete ``` +**Gettext merge workflow:** Prefer `mix gettext.extract --merge` so the `.pot` template is regenerated from source and merged into all locale `.po` files in one step. Edit only the `msgstr` values in `.po` files for translations; do not manually change source references, entry order, or the `.pot` file structure. If Git merge conflicts appear in `.po` or `.pot` files, resolve by removing conflict markers (keeping both sides where appropriate), then run `mix gettext.extract --merge`. If the `.pot` file is corrupted, delete it and run `mix gettext.extract --merge` to regenerate it from source. + ### 3.13 Task Runner: Just **Common Commands:** diff --git a/config/config.exs b/config/config.exs index ab55f2a..35e4160 100644 --- a/config/config.exs +++ b/config/config.exs @@ -51,6 +51,10 @@ config :mv, generators: [timestamp_type: :utc_datetime], ash_domains: [Mv.Membership, Mv.Accounts, Mv.MembershipFees, Mv.Authorization] +# Environment (dev/test/prod). Use this instead of Mix.env() at runtime; Mix.env() is +# not available in releases. Set once at compile time via config_env(). +config :mv, :environment, config_env() + # CSV Import configuration config :mv, csv_import: [ @@ -89,6 +93,10 @@ config :mv, MvWeb.Endpoint, # at the `config/runtime.exs`. config :mv, Mv.Mailer, adapter: Swoosh.Adapters.Local +# SMTP TLS verification: false = allow self-signed/internal certs; true = verify_peer (use for public SMTP). +# Overridden in runtime.exs from SMTP_VERIFY_PEER when SMTP is configured via ENV in prod. +config :mv, :smtp_verify_peer, false + # Default mail "from" address for transactional emails (join confirmation, # user confirmation, password reset). Override in config/runtime.exs from ENV. config :mv, :mail_from, {"Mila", "noreply@example.com"} diff --git a/config/runtime.exs b/config/runtime.exs index b8570d8..1c55f64 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -223,19 +223,62 @@ if config_env() == :prod do {System.get_env("MAIL_FROM_NAME", "Mila"), System.get_env("MAIL_FROM_EMAIL", "noreply@example.com")} - # In production you may need to configure the mailer to use a different adapter. - # Also, you may need to configure the Swoosh API client of your choice if you - # are not using SMTP. Here is an example of the configuration: + # SMTP configuration from environment variables (overrides base adapter in prod). + # When SMTP_HOST is set, configure Swoosh to use the SMTP adapter at boot time. + # If SMTP is configured only via Settings (Admin UI), the mailer builds the config + # per-send at runtime using Mv.Config.smtp_*() helpers. # - # config :mv, Mv.Mailer, - # adapter: Swoosh.Adapters.Mailgun, - # api_key: System.get_env("MAILGUN_API_KEY"), - # domain: System.get_env("MAILGUN_DOMAIN") - # - # For this example you need include a HTTP client required by Swoosh API client. - # Swoosh supports Hackney, Req and Finch out of the box: - # - # config :swoosh, :api_client, Swoosh.ApiClient.Hackney - # - # See https://hexdocs.pm/swoosh/Swoosh.html#module-installation for details. + # TLS/SSL options (tls_options, sockopts) are duplicated here and in Mv.Mailer.smtp_config/0 + # because boot config must be set in this file; the Mailer uses the same logic for + # Settings-only config. Keep verify behaviour in sync (see SMTP_VERIFY_PEER below). + smtp_host_env = System.get_env("SMTP_HOST") + + if smtp_host_env && String.trim(smtp_host_env) != "" do + smtp_port_env = + case System.get_env("SMTP_PORT") do + nil -> 587 + v -> String.to_integer(String.trim(v)) + end + + smtp_password_env = + case System.get_env("SMTP_PASSWORD") do + nil -> + case System.get_env("SMTP_PASSWORD_FILE") do + nil -> nil + path -> path |> File.read!() |> String.trim() + end + + v -> + v + end + + smtp_ssl_mode = System.get_env("SMTP_SSL", "tls") + + # SMTP_VERIFY_PEER: set to true/1/yes to enable TLS certificate verification (recommended + # for public SMTP like Gmail/Mailgun). Default false for self-signed/internal certs. + smtp_verify_peer = + (System.get_env("SMTP_VERIFY_PEER", "false") |> String.downcase()) in ~w(true 1 yes) + + config :mv, :smtp_verify_peer, smtp_verify_peer + + verify_mode = if smtp_verify_peer, do: :verify_peer, else: :verify_none + + smtp_opts = + [ + adapter: Swoosh.Adapters.SMTP, + relay: String.trim(smtp_host_env), + port: smtp_port_env, + username: System.get_env("SMTP_USERNAME"), + password: smtp_password_env, + ssl: smtp_ssl_mode == "ssl", + tls: if(smtp_ssl_mode == "tls", do: :always, else: :never), + auth: :always, + # tls_options: STARTTLS (587); sockopts: direct SSL (465). + tls_options: [verify: verify_mode], + sockopts: [verify: verify_mode] + ] + |> Enum.reject(fn {_k, v} -> is_nil(v) end) + + config :mv, Mv.Mailer, smtp_opts + end end diff --git a/docs/feature-roadmap.md b/docs/feature-roadmap.md index 9c8c835..03f1cce 100644 --- a/docs/feature-roadmap.md +++ b/docs/feature-roadmap.md @@ -270,6 +270,9 @@ **Open Issues:** - [#186](https://git.local-it.org/local-it/mitgliederverwaltung/issues/186) - Create Architecture docs in Repo (S, Low priority) +**Implemented Features:** +- ✅ **SMTP configuration** – Configure mail server via ENV (`SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`, `SMTP_PASSWORD_FILE`, `SMTP_SSL`) and Admin Settings (UI), with ENV taking priority. Test email from Settings SMTP section. Production warning when SMTP is not configured. See [`docs/smtp-configuration-concept.md`](smtp-configuration-concept.md). + **Missing Features:** - ❌ Email templates configuration - ❌ System health dashboard @@ -287,6 +290,7 @@ - ✅ Swoosh mailer integration - ✅ Email confirmation (via AshAuthentication) - ✅ Password reset emails (via AshAuthentication) +- ✅ **SMTP configuration** via ENV and Admin Settings (see Admin Panel section) - ⚠️ No member communication features **Missing Features:** diff --git a/docs/smtp-configuration-concept.md b/docs/smtp-configuration-concept.md new file mode 100644 index 0000000..30fd7de --- /dev/null +++ b/docs/smtp-configuration-concept.md @@ -0,0 +1,124 @@ +# SMTP Configuration – Concept + +**Status:** Implemented +**Last updated:** 2026-03-12 + +--- + +## 1. Goal + +Enable configurable SMTP for sending transactional emails (join confirmation, user confirmation, password reset). Configuration via **environment variables** and **Admin Settings** (database), with the same precedence pattern as OIDC and Vereinfacht: **ENV overrides Settings**. Include a **test email** action in Settings (button + recipient field) with clear success/error feedback. + +--- + +## 2. Scope + +- **In scope:** SMTP server configuration (host, port, credentials, TLS/SSL), sender identity (from-name, from-email), test email from Settings UI, warning when SMTP is not configured in production, specific error messages per failure category, graceful delivery errors in AshAuthentication senders. +- **Out of scope:** Separate adapters per email type; retry queues. + +--- + +## 3. Configuration Sources + +| Source | Priority | Use case | +|----------|----------|-----------------------------------| +| ENV | 1 | Production, Docker, 12-factor | +| Settings | 2 | Admin UI, dev without ENV | + +When an ENV variable is set, the corresponding Settings field is read-only in the UI (with hint "Set by environment"). + +--- + +## 4. SMTP Parameters + +| Parameter | ENV | Settings attribute | Notes | +|----------------|------------------------|---------------------|---------------------------------------------| +| Host | `SMTP_HOST` | `smtp_host` | e.g. `smtp.example.com` | +| Port | `SMTP_PORT` | `smtp_port` | Default 587 (TLS), 465 (SSL), 25 (plain) | +| Username | `SMTP_USERNAME` | `smtp_username` | Optional if no auth | +| Password | `SMTP_PASSWORD` | `smtp_password` | Sensitive, not shown when set | +| Password file | `SMTP_PASSWORD_FILE` | — | Docker/Secrets: path to file with password | +| TLS/SSL | `SMTP_SSL` | `smtp_ssl` | `tls` / `ssl` / `none` (default: tls) | +| Sender name | `MAIL_FROM_NAME` | `smtp_from_name` | Display name in "From" header (default: Mila)| +| Sender email | `MAIL_FROM_EMAIL` | `smtp_from_email` | Address in "From" header; must match SMTP user on most servers | + +**Important:** On most SMTP servers (e.g. Postfix with strict relay policies) the sender email (`smtp_from_email`) must be the same address as `smtp_username` or an alias that is owned by that account. + +--- + +## 5. Password from File + +Support **SMTP_PASSWORD_FILE** (path to file containing the password), same pattern as `OIDC_CLIENT_SECRET_FILE` in `runtime.exs`. Read once at runtime; `SMTP_PASSWORD` ENV overrides file if both are set. + +--- + +## 6. Behaviour When SMTP Is Not Configured + +- **Dev/Test:** Keep current adapters (`Swoosh.Adapters.Local`, `Swoosh.Adapters.Test`). No change. +- **Production:** If neither ENV nor Settings provide SMTP (no host): + - Show a warning in the Settings UI. + - Delivery attempts silently fall back to the Local adapter (no crash). + +--- + +## 7. Test Email (Settings UI) + +- **Location:** SMTP / E-Mail section in Global Settings. +- **Elements:** Input for recipient, submit button inside a `phx-submit` form. +- **Behaviour:** Sends one email using current SMTP config and `mail_from/0`. Returns `{:ok, _}` or `{:error, classified_reason}`. +- **Error categories:** `:sender_rejected`, `:auth_failed`, `:recipient_rejected`, `:tls_failed`, `:connection_failed`, `{:smtp_error, message}` — each shows a specific human-readable message in the UI. +- **Permission:** Reuses existing Settings page authorization (admin). + +--- + +## 8. Sender Identity (`mail_from`) + +`Mv.Mailer.mail_from/0` returns `{name, email}`. Priority: +1. `MAIL_FROM_NAME` / `MAIL_FROM_EMAIL` ENV variables +2. `smtp_from_name` / `smtp_from_email` in Settings (DB) +3. Hardcoded defaults: `{"Mila", "noreply@example.com"}` + +Provided by `Mv.Config.mail_from_name/0` and `Mv.Config.mail_from_email/0`. + +--- + +## 9. AshAuthentication Senders + +Both `SendPasswordResetEmail` and `SendNewUserConfirmationEmail` use `Mv.Mailer.deliver/1` (not `deliver!/1`). Delivery failures are logged (`Logger.error`) and not re-raised, so they never crash the caller process. AshAuthentication ignores the return value of `send/3`. + +--- + +## 10. TLS / SSL in OTP 27 + +OTP 26+ enforces `verify_peer` by default, which fails for self-signed or internal SMTP server certificates. + +By default, TLS certificate verification is relaxed (`verify_none`) so self-signed or internal SMTP servers work. For public SMTP providers (Gmail, Mailgun, etc.) you can enable verification: + +- **ENV (prod):** Set `SMTP_VERIFY_PEER=true` (or `1`/`yes`) when configuring SMTP via environment variables in `config/runtime.exs`. This sets `config :mv, :smtp_verify_peer` and is used for both boot-time and per-send config. +- **Default:** `false` (verify_none) for backward compatibility and internal/self-signed certs. + +Both `tls_options` (STARTTLS, port 587) and `sockopts` (direct SSL, port 465) use the same verify mode. The logic is duplicated in `config/runtime.exs` (boot) and `Mv.Mailer.smtp_config/0` (Settings-only); keep in sync. + +--- + +## 11. Summary Checklist + +- [x] ENV: `SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, `SMTP_PASSWORD`, `SMTP_PASSWORD_FILE`, `SMTP_SSL`. +- [x] ENV: `MAIL_FROM_NAME`, `MAIL_FROM_EMAIL` for sender identity. +- [x] Settings: attributes and UI for host, port, username, password, TLS/SSL, from-name, from-email. +- [x] Password from file: `SMTP_PASSWORD_FILE` supported in `runtime.exs`. +- [x] Mailer: Swoosh SMTP adapter configured from merged ENV + Settings when SMTP is configured. +- [x] Per-request SMTP config via `Mv.Mailer.smtp_config/0` for Settings-only scenarios. +- [x] TLS certificate validation relaxed for OTP 27 (tls_options + sockopts). +- [x] Prod warning: clear message in Settings when SMTP is not configured. +- [x] Test email: form with recipient field, translatable content, classified success/error messages. +- [x] AshAuthentication senders: graceful error handling (no crash on delivery failure). +- [x] Gettext for all new UI strings, translated to German. +- [x] Docs and code guidelines updated. + +--- + +## 12. Follow-up / Future Work + +- **SMTP password at-rest encryption:** The `smtp_password` attribute is currently stored in plaintext in the `settings` table. It is excluded from default reads (same pattern as `oidc_client_secret`); both are read only via explicit select when needed. For production systems at-rest encryption (e.g. with [Cloak](https://hexdocs.pm/cloak)) should be considered and tracked as a follow-up issue. +- **Error classification:** SMTP error categorization currently uses substring matching on server messages (e.g. "535", "authentication"). A more robust approach would be to pattern-match on `gen_smtp` error tuples first where possible, and fall back to string analysis only when needed. Server wording varies; consider extending patterns as new providers are used. diff --git a/lib/membership/setting.ex b/lib/membership/setting.ex index bc2b1e7..ce63589 100644 --- a/lib/membership/setting.ex +++ b/lib/membership/setting.ex @@ -56,14 +56,20 @@ defmodule Mv.Membership.Setting do # Update membership fee settings {:ok, updated} = Mv.Membership.update_settings(settings, %{include_joining_cycle: false}) """ + # primary_read_warning?: false — We use a custom read prepare that selects only public + # attributes and explicitly excludes smtp_password. Ash warns when the primary read does + # not load all attributes; we intentionally omit the password for security. use Ash.Resource, domain: Mv.Membership, - data_layer: AshPostgres.DataLayer + data_layer: AshPostgres.DataLayer, + primary_read_warning?: false # Used in join_form_field_ids validation (compile-time to avoid recompiling regex and list on every validation) @uuid_pattern ~r/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i @valid_join_form_member_fields Mv.Constants.member_fields() |> Enum.map(&Atom.to_string/1) + alias Ash.Resource.Info, as: ResourceInfo + postgres do table "settings" repo Mv.Repo @@ -73,8 +79,27 @@ defmodule Mv.Membership.Setting do description "Global application settings (singleton resource)" end + # Attributes excluded from the default read (sensitive data). Same pattern as smtp_password: + # read only via explicit select when needed; never loaded into default get_settings(). + @excluded_from_read [:smtp_password, :oidc_client_secret] + actions do - defaults [:read] + read :read do + primary? true + + # Exclude sensitive attributes (e.g. smtp_password) from default reads. Config reads + # them via explicit select when needed. Uses all attribute names minus excluded so + # the list stays correct when new attributes are added to the resource. + prepare fn query, _context -> + select_attrs = + __MODULE__ + |> ResourceInfo.attribute_names() + |> MapSet.to_list() + |> Kernel.--(@excluded_from_read) + + Ash.Query.select(query, select_attrs) + end + end # Internal create action - not exposed via code interface # Used only as fallback in get_settings/0 if settings don't exist @@ -97,6 +122,13 @@ defmodule Mv.Membership.Setting do :oidc_admin_group_name, :oidc_groups_claim, :oidc_only, + :smtp_host, + :smtp_port, + :smtp_username, + :smtp_password, + :smtp_ssl, + :smtp_from_name, + :smtp_from_email, :join_form_enabled, :join_form_field_ids, :join_form_field_required @@ -126,6 +158,13 @@ defmodule Mv.Membership.Setting do :oidc_admin_group_name, :oidc_groups_claim, :oidc_only, + :smtp_host, + :smtp_port, + :smtp_username, + :smtp_password, + :smtp_ssl, + :smtp_from_name, + :smtp_from_email, :join_form_enabled, :join_form_field_ids, :join_form_field_required @@ -429,6 +468,52 @@ defmodule Mv.Membership.Setting do description "When true and OIDC is configured, sign-in shows only OIDC (password login hidden)" end + # SMTP configuration (can be overridden by ENV) + attribute :smtp_host, :string do + allow_nil? true + public? true + description "SMTP server hostname (e.g. smtp.example.com)" + end + + attribute :smtp_port, :integer do + allow_nil? true + public? true + description "SMTP server port (e.g. 587 for TLS, 465 for SSL, 25 for plain)" + end + + attribute :smtp_username, :string do + allow_nil? true + public? true + description "SMTP authentication username" + end + + attribute :smtp_password, :string do + allow_nil? true + public? false + description "SMTP authentication password (sensitive)" + sensitive? true + end + + attribute :smtp_ssl, :string do + allow_nil? true + public? true + description "SMTP TLS/SSL mode: 'tls', 'ssl', or 'none'" + end + + attribute :smtp_from_name, :string do + allow_nil? true + public? true + + description "Display name for the transactional email sender (e.g. 'Mila'). Overrides MAIL_FROM_NAME env." + end + + attribute :smtp_from_email, :string do + allow_nil? true + public? true + + description "Email address for the transactional email sender. Must be owned by the SMTP user. Overrides MAIL_FROM_EMAIL env." + end + # Join form (Beitrittsformular) settings attribute :join_form_enabled, :boolean do allow_nil? false diff --git a/lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex b/lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex index 393a220..7312b91 100644 --- a/lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex +++ b/lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex @@ -16,6 +16,8 @@ defmodule Mv.Accounts.User.Senders.SendNewUserConfirmationEmail do import Swoosh.Email use Gettext, backend: MvWeb.Gettext, otp_app: :mv + require Logger + alias Mv.Mailer @doc """ @@ -30,7 +32,8 @@ defmodule Mv.Accounts.User.Senders.SendNewUserConfirmationEmail do - `_opts` - Additional options (unused) ## Returns - The Swoosh.Email delivery result from `Mailer.deliver!/1`. + `:ok` always. Delivery errors are logged and not re-raised so they do not + crash the caller process (AshAuthentication ignores the return value). """ @impl true def send(user, token, _) do @@ -44,12 +47,24 @@ defmodule Mv.Accounts.User.Senders.SendNewUserConfirmationEmail do locale: Gettext.get_locale(MvWeb.Gettext) } - new() - |> from(Mailer.mail_from()) - |> to(to_string(user.email)) - |> subject(subject) - |> put_view(MvWeb.EmailsView) - |> render_body("user_confirmation.html", assigns) - |> Mailer.deliver!() + email = + new() + |> from(Mailer.mail_from()) + |> to(to_string(user.email)) + |> subject(subject) + |> put_view(MvWeb.EmailsView) + |> render_body("user_confirmation.html", assigns) + + case Mailer.deliver(email) do + {:ok, _} -> + :ok + + {:error, reason} -> + Logger.error( + "Failed to send user confirmation email to #{user.email}: #{inspect(reason)}" + ) + + :ok + end end end diff --git a/lib/mv/accounts/user/senders/send_password_reset_email.ex b/lib/mv/accounts/user/senders/send_password_reset_email.ex index 74d5d47..e276e20 100644 --- a/lib/mv/accounts/user/senders/send_password_reset_email.ex +++ b/lib/mv/accounts/user/senders/send_password_reset_email.ex @@ -16,6 +16,8 @@ defmodule Mv.Accounts.User.Senders.SendPasswordResetEmail do import Swoosh.Email use Gettext, backend: MvWeb.Gettext, otp_app: :mv + require Logger + alias Mv.Mailer @doc """ @@ -30,7 +32,8 @@ defmodule Mv.Accounts.User.Senders.SendPasswordResetEmail do - `_opts` - Additional options (unused) ## Returns - The Swoosh.Email delivery result from `Mailer.deliver!/1`. + `:ok` always. Delivery errors are logged and not re-raised so they do not + crash the caller process (AshAuthentication ignores the return value). """ @impl true def send(user, token, _) do @@ -44,12 +47,21 @@ defmodule Mv.Accounts.User.Senders.SendPasswordResetEmail do locale: Gettext.get_locale(MvWeb.Gettext) } - new() - |> from(Mailer.mail_from()) - |> to(to_string(user.email)) - |> subject(subject) - |> put_view(MvWeb.EmailsView) - |> render_body("password_reset.html", assigns) - |> Mailer.deliver!() + email = + new() + |> from(Mailer.mail_from()) + |> to(to_string(user.email)) + |> subject(subject) + |> put_view(MvWeb.EmailsView) + |> render_body("password_reset.html", assigns) + + case Mailer.deliver(email) do + {:ok, _} -> + :ok + + {:error, reason} -> + Logger.error("Failed to send password reset email to #{user.email}: #{inspect(reason)}") + :ok + end end end diff --git a/lib/mv/config.ex b/lib/mv/config.ex index 8b8c088..3494937 100644 --- a/lib/mv/config.ex +++ b/lib/mv/config.ex @@ -362,26 +362,41 @@ defmodule Mv.Config do @doc """ Returns the OIDC client secret. In production, uses the value from config :mv, :oidc (set by runtime.exs from OIDC_CLIENT_SECRET or OIDC_CLIENT_SECRET_FILE). - Otherwise ENV OIDC_CLIENT_SECRET, then Settings. + Otherwise ENV OIDC_CLIENT_SECRET, then Settings (read via explicit select; not in default get_settings). """ @spec oidc_client_secret() :: String.t() | nil def oidc_client_secret do case Application.get_env(:mv, :oidc) do oidc when is_list(oidc) -> oidc_client_secret_from_config(Keyword.get(oidc, :client_secret)) - _ -> env_or_setting("OIDC_CLIENT_SECRET", :oidc_client_secret) + _ -> oidc_client_secret_from_env_or_settings() end end + @doc """ + Returns whether the OIDC client secret is set in Settings (for UI badge). Does not expose the value. + """ + @spec oidc_client_secret_set?() :: boolean() + def oidc_client_secret_set? do + present?(get_oidc_client_secret_from_settings()) + end + defp oidc_client_secret_from_config(nil), - do: env_or_setting("OIDC_CLIENT_SECRET", :oidc_client_secret) + do: oidc_client_secret_from_env_or_settings() defp oidc_client_secret_from_config(secret) when is_binary(secret) do s = String.trim(secret) - if s != "", do: s, else: env_or_setting("OIDC_CLIENT_SECRET", :oidc_client_secret) + if s != "", do: s, else: oidc_client_secret_from_env_or_settings() end defp oidc_client_secret_from_config(_), - do: env_or_setting("OIDC_CLIENT_SECRET", :oidc_client_secret) + do: oidc_client_secret_from_env_or_settings() + + defp oidc_client_secret_from_env_or_settings do + case System.get_env("OIDC_CLIENT_SECRET") do + nil -> get_oidc_client_secret_from_settings() + value -> trim_nil(value) + end + end @doc """ Returns the OIDC admin group name (for role sync). ENV first, then Settings. @@ -449,4 +464,206 @@ defmodule Mv.Config do def oidc_admin_group_name_env_set?, do: env_set?("OIDC_ADMIN_GROUP_NAME") def oidc_groups_claim_env_set?, do: env_set?("OIDC_GROUPS_CLAIM") def oidc_only_env_set?, do: env_set?("OIDC_ONLY") + + # --------------------------------------------------------------------------- + # SMTP configuration – ENV overrides Settings; see docs/smtp-configuration-concept.md + # --------------------------------------------------------------------------- + + @doc """ + Returns SMTP host. ENV `SMTP_HOST` overrides Settings. + """ + @spec smtp_host() :: String.t() | nil + def smtp_host do + smtp_env_or_setting("SMTP_HOST", :smtp_host) + end + + @doc """ + Returns SMTP port as integer. ENV `SMTP_PORT` (parsed) overrides Settings. + Returns nil when neither ENV nor Settings provide a valid port. + """ + @spec smtp_port() :: non_neg_integer() | nil + def smtp_port do + case System.get_env("SMTP_PORT") do + nil -> + get_from_settings_integer(:smtp_port) + + value when is_binary(value) -> + case Integer.parse(String.trim(value)) do + {port, _} when port > 0 -> port + _ -> nil + end + end + end + + @doc """ + Returns SMTP username. ENV `SMTP_USERNAME` overrides Settings. + """ + @spec smtp_username() :: String.t() | nil + def smtp_username do + smtp_env_or_setting("SMTP_USERNAME", :smtp_username) + end + + @doc """ + Returns SMTP password. + + Priority: `SMTP_PASSWORD` ENV > `SMTP_PASSWORD_FILE` (file contents) > Settings. + Strips trailing whitespace/newlines from file contents. + """ + @spec smtp_password() :: String.t() | nil + def smtp_password do + case System.get_env("SMTP_PASSWORD") do + nil -> smtp_password_from_file_or_settings() + value -> trim_nil(value) + end + end + + defp smtp_password_from_file_or_settings do + case System.get_env("SMTP_PASSWORD_FILE") do + nil -> get_smtp_password_from_settings() + path -> read_smtp_password_file(path) + end + end + + defp read_smtp_password_file(path) do + case File.read(String.trim(path)) do + {:ok, content} -> trim_nil(content) + {:error, _} -> nil + end + end + + @doc """ + Returns SMTP TLS/SSL mode string (e.g. 'tls', 'ssl', 'none'). + ENV `SMTP_SSL` overrides Settings. + """ + @spec smtp_ssl() :: String.t() | nil + def smtp_ssl do + smtp_env_or_setting("SMTP_SSL", :smtp_ssl) + end + + @doc """ + Returns true when SMTP is configured (host present from ENV or Settings). + """ + @spec smtp_configured?() :: boolean() + def smtp_configured? do + present?(smtp_host()) + end + + @doc """ + Returns true when any SMTP ENV variable is set (used in Settings UI for hints). + """ + @spec smtp_env_configured?() :: boolean() + def smtp_env_configured? do + smtp_host_env_set?() or smtp_port_env_set?() or smtp_username_env_set?() or + smtp_password_env_set?() or smtp_ssl_env_set?() + end + + @doc "Returns true if SMTP_HOST ENV is set." + @spec smtp_host_env_set?() :: boolean() + def smtp_host_env_set?, do: env_set?("SMTP_HOST") + + @doc "Returns true if SMTP_PORT ENV is set." + @spec smtp_port_env_set?() :: boolean() + def smtp_port_env_set?, do: env_set?("SMTP_PORT") + + @doc "Returns true if SMTP_USERNAME ENV is set." + @spec smtp_username_env_set?() :: boolean() + def smtp_username_env_set?, do: env_set?("SMTP_USERNAME") + + @doc "Returns true if SMTP_PASSWORD or SMTP_PASSWORD_FILE ENV is set." + @spec smtp_password_env_set?() :: boolean() + def smtp_password_env_set?, do: env_set?("SMTP_PASSWORD") or env_set?("SMTP_PASSWORD_FILE") + + @doc "Returns true if SMTP_SSL ENV is set." + @spec smtp_ssl_env_set?() :: boolean() + def smtp_ssl_env_set?, do: env_set?("SMTP_SSL") + + # --------------------------------------------------------------------------- + # Transactional email sender identity (mail_from) + # ENV variables MAIL_FROM_NAME / MAIL_FROM_EMAIL take priority; fallback to + # Settings smtp_from_name / smtp_from_email; final fallback: hardcoded defaults. + # --------------------------------------------------------------------------- + + @doc """ + Returns the display name for the transactional email sender. + + Priority: `MAIL_FROM_NAME` ENV > Settings `smtp_from_name` > `"Mila"`. + """ + @spec mail_from_name() :: String.t() + def mail_from_name do + case System.get_env("MAIL_FROM_NAME") do + nil -> get_from_settings(:smtp_from_name) || "Mila" + value -> trim_nil(value) || "Mila" + end + end + + @doc """ + Returns the email address for the transactional email sender. + + Priority: `MAIL_FROM_EMAIL` ENV > Settings `smtp_from_email` > `nil`. + Returns `nil` when not configured (caller should fall back to a safe default). + """ + @spec mail_from_email() :: String.t() | nil + def mail_from_email do + case System.get_env("MAIL_FROM_EMAIL") do + nil -> get_from_settings(:smtp_from_email) + value -> trim_nil(value) + end + end + + @doc "Returns true if MAIL_FROM_NAME ENV is set." + @spec mail_from_name_env_set?() :: boolean() + def mail_from_name_env_set?, do: env_set?("MAIL_FROM_NAME") + + @doc "Returns true if MAIL_FROM_EMAIL ENV is set." + @spec mail_from_email_env_set?() :: boolean() + def mail_from_email_env_set?, do: env_set?("MAIL_FROM_EMAIL") + + # Reads a plain string SMTP setting: ENV first, then Settings. + defp smtp_env_or_setting(env_key, setting_key) do + case System.get_env(env_key) do + nil -> get_from_settings(setting_key) + value -> trim_nil(value) + end + end + + # Reads an integer setting attribute from Settings. + defp get_from_settings_integer(key) do + case Mv.Membership.get_settings() do + {:ok, settings} -> + case Map.get(settings, key) do + v when is_integer(v) and v > 0 -> v + _ -> nil + end + + {:error, _} -> + nil + end + end + + # Reads the SMTP password directly from the DB via an explicit select, + # bypassing the standard read action which excludes smtp_password for security. + defp get_smtp_password_from_settings do + query = Ash.Query.select(Mv.Membership.Setting, [:id, :smtp_password]) + + case Ash.read_one(query, authorize?: false, domain: Mv.Membership) do + {:ok, settings} when not is_nil(settings) -> + settings |> Map.get(:smtp_password) |> trim_nil() + + _ -> + nil + end + end + + # Reads the OIDC client secret via explicit select (excluded from default read, same as smtp_password). + defp get_oidc_client_secret_from_settings do + query = Ash.Query.select(Mv.Membership.Setting, [:id, :oidc_client_secret]) + + case Ash.read_one(query, authorize?: false, domain: Mv.Membership) do + {:ok, settings} when not is_nil(settings) -> + settings |> Map.get(:oidc_client_secret) |> trim_nil() + + _ -> + nil + end + end end diff --git a/lib/mv/mailer.ex b/lib/mv/mailer.ex index 3d83636..e5ac4e9 100644 --- a/lib/mv/mailer.ex +++ b/lib/mv/mailer.ex @@ -4,16 +4,199 @@ defmodule Mv.Mailer do Use `mail_from/0` for the configured sender address (join confirmation, user confirmation, password reset). + + ## Sender identity + + The "from" address is determined by priority: + 1. `MAIL_FROM_EMAIL` / `MAIL_FROM_NAME` environment variables + 2. Settings database (`smtp_from_email`, `smtp_from_name`) + 3. Hardcoded default (`"Mila"`, `"noreply@example.com"`) + + **Important:** On most SMTP servers the sender email must be owned by the + authenticated SMTP user. Set `smtp_from_email` to the same address as + `smtp_username` (or an alias allowed by the server). + + ## SMTP adapter configuration + + The SMTP adapter can be configured via: + - **Environment variables** at boot (`SMTP_HOST`, `SMTP_PORT`, `SMTP_USERNAME`, + `SMTP_PASSWORD`, `SMTP_PASSWORD_FILE`, `SMTP_SSL`) — configured in `runtime.exs`. + - **Admin Settings** (database) — read at send time via `Mv.Config.smtp_*()` helpers. + Settings-based config is passed per-send via `smtp_config/0`. + + ENV takes priority over Settings (same pattern as OIDC and Vereinfacht). """ use Swoosh.Mailer, otp_app: :mv - @doc """ - Returns the configured "from" address for transactional emails. + import Swoosh.Email + use Gettext, backend: MvWeb.Gettext, otp_app: :mv - Configure in config.exs or runtime.exs as `config :mv, :mail_from, {name, email}`. - Default: `{"Mila", "noreply@example.com"}`. + require Logger + + # Simple format check for test-email recipient only (e.g. allows a@b.c). Not for strict RFC validation. + @email_regex ~r/^[^\s@]+@[^\s@]+\.[^\s@]+$/ + + @doc """ + Returns the configured "from" address for transactional emails as `{name, email}`. + + Priority: ENV `MAIL_FROM_NAME`/`MAIL_FROM_EMAIL` > Settings `smtp_from_name`/`smtp_from_email` > defaults. """ + @spec mail_from() :: {String.t(), String.t()} def mail_from do - Application.get_env(:mv, :mail_from, {"Mila", "noreply@example.com"}) + {Mv.Config.mail_from_name(), Mv.Config.mail_from_email() || "noreply@example.com"} end + + @doc """ + Sends a test email to the given address. Used from Global Settings SMTP section. + + Returns `{:ok, email}` on success, `{:error, reason}` on failure. + The `reason` is a classified atom for known error categories, or `{:smtp_error, message}` + for SMTP-level errors with a human-readable message, or the raw term for unknown errors. + """ + @spec send_test_email(String.t()) :: + {:ok, Swoosh.Email.t()} | {:error, atom() | {:smtp_error, String.t()} | term()} + def send_test_email(to_email) when is_binary(to_email) do + if valid_email?(to_email) do + subject = gettext("Mila – Test email") + + body = + gettext( + "This is a test email sent from Mila. If you received this, your SMTP configuration is working correctly." + ) + + email = + new() + |> from(mail_from()) + |> to(to_email) + |> subject(subject) + |> text_body(body) + |> html_body("

#{body}

") + + case deliver(email, smtp_config()) do + {:ok, _} = ok -> + ok + + {:error, reason} -> + classified = classify_smtp_error(reason) + Logger.warning("SMTP test email failed: #{inspect(reason)}") + {:error, classified} + end + else + {:error, :invalid_email_address} + end + end + + def send_test_email(_), do: {:error, :invalid_email_address} + + @doc """ + Builds the per-send SMTP config from `Mv.Config` when SMTP is configured via + Settings only (not boot-time ENV). Returns an empty list when the mailer is + already configured at boot (ENV-based), so Swoosh uses the Application config. + + The return value must be a flat keyword list (adapter, relay, port, ...). + Swoosh merges it with Application config; top-level keys override the mailer's + default adapter (e.g. Local in dev), so this delivery uses SMTP. + """ + @spec smtp_config() :: keyword() + def smtp_config do + if Mv.Config.smtp_configured?() and not boot_smtp_configured?() do + host = Mv.Config.smtp_host() + port = Mv.Config.smtp_port() || 587 + username = Mv.Config.smtp_username() + password = Mv.Config.smtp_password() + ssl_mode = Mv.Config.smtp_ssl() || "tls" + + verify_mode = + if Application.get_env(:mv, :smtp_verify_peer, false), + do: :verify_peer, + else: :verify_none + + [ + adapter: Swoosh.Adapters.SMTP, + relay: host, + port: port, + ssl: ssl_mode == "ssl", + tls: if(ssl_mode == "tls", do: :always, else: :never), + auth: :always, + username: username, + password: password, + # tls_options: STARTTLS (587); sockopts: direct SSL (465). Verify from :smtp_verify_peer (ENV SMTP_VERIFY_PEER). + tls_options: [verify: verify_mode], + sockopts: [verify: verify_mode] + ] + |> Enum.reject(fn {_k, v} -> is_nil(v) end) + else + [] + end + end + + # --------------------------------------------------------------------------- + # SMTP error classification + # Maps raw gen_smtp error terms to human-readable atoms / structs. + # --------------------------------------------------------------------------- + + @doc false + @spec classify_smtp_error(term()) :: + :sender_rejected + | :auth_failed + | :recipient_rejected + | :tls_failed + | :connection_failed + | {:smtp_error, String.t()} + | term() + def classify_smtp_error({:retries_exceeded, {:temporary_failure, _host, :tls_failed}}), + do: :tls_failed + + def classify_smtp_error({:retries_exceeded, {:network_failure, _host, _}}), + do: :connection_failed + + def classify_smtp_error({:send, {:permanent_failure, _host, msg}}) do + str = if is_list(msg), do: List.to_string(msg), else: to_string(msg) + classify_permanent_failure_message(str) + end + + def classify_smtp_error(reason), do: reason + + # --------------------------------------------------------------------------- + # Private helpers + # --------------------------------------------------------------------------- + + defp classify_permanent_failure_message(str) do + cond do + smtp_auth_failure?(str) -> :auth_failed + smtp_sender_rejected?(str) -> :sender_rejected + smtp_recipient_rejected?(str) -> :recipient_rejected + true -> {:smtp_error, String.trim(str)} + end + end + + defp smtp_auth_failure?(str), + do: + String.contains?(str, "535") or String.contains?(str, "authentication") or + String.contains?(str, "Authentication") + + defp smtp_sender_rejected?(str), + do: + String.contains?(str, "553") or String.contains?(str, "Sender address rejected") or + String.contains?(str, "not owned") + + defp smtp_recipient_rejected?(str), + do: + String.contains?(str, "550") or String.contains?(str, "No such user") or + String.contains?(str, "no such user") or String.contains?(str, "User unknown") + + # Returns true when the SMTP adapter has been configured at boot time via ENV + # (i.e. the Application config is already set to the SMTP adapter). + defp boot_smtp_configured? do + case Application.get_env(:mv, __MODULE__) do + config when is_list(config) -> Keyword.get(config, :adapter) == Swoosh.Adapters.SMTP + _ -> false + end + end + + defp valid_email?(email) when is_binary(email) do + Regex.match?(@email_regex, String.trim(email)) + end + + defp valid_email?(_), do: false end diff --git a/lib/mv_web/components/layouts.ex b/lib/mv_web/components/layouts.ex index a6d75ba..2979eb4 100644 --- a/lib/mv_web/components/layouts.ex +++ b/lib/mv_web/components/layouts.ex @@ -43,11 +43,11 @@ defmodule MvWeb.Layouts do slot :inner_block, required: true def app(assigns) do - club_name = get_club_name() - join_form_enabled = Mv.Membership.join_form_enabled?() + # Single get_settings() for layout; derive club_name and join_form_enabled to avoid duplicate query. + %{club_name: club_name, join_form_enabled: join_form_enabled} = get_layout_settings() - # TODO: get_join_form_enabled and unprocessed count run on every page load; consider - # loading count only on navigation or caching briefly if performance becomes an issue. + # TODO: unprocessed count runs on every page load when join form enabled; consider + # loading only on navigation or caching briefly if performance becomes an issue. unprocessed_join_requests_count = get_unprocessed_join_requests_count(assigns.current_user, join_form_enabled) @@ -129,12 +129,17 @@ defmodule MvWeb.Layouts do """ end - # Helper function to get club name from settings - # Falls back to "Mitgliederverwaltung" if settings can't be loaded - defp get_club_name do + # Single settings read for layout; returns club_name and join_form_enabled to avoid duplicate get_settings(). + defp get_layout_settings do case Mv.Membership.get_settings() do - {:ok, settings} -> settings.club_name - _ -> "Mitgliederverwaltung" + {:ok, settings} -> + %{ + club_name: settings.club_name || "Mitgliederverwaltung", + join_form_enabled: settings.join_form_enabled == true + } + + _ -> + %{club_name: "Mitgliederverwaltung", join_form_enabled: false} end end diff --git a/lib/mv_web/live/global_settings_live.ex b/lib/mv_web/live/global_settings_live.ex index c123f14..ce3351a 100644 --- a/lib/mv_web/live/global_settings_live.ex +++ b/lib/mv_web/live/global_settings_live.ex @@ -54,11 +54,14 @@ defmodule MvWeb.GlobalSettingsLive do actor = MvWeb.LiveHelpers.current_actor(socket) custom_fields = load_custom_fields(actor) + environment = Application.get_env(:mv, :environment, :dev) + socket = socket |> assign(:page_title, gettext("Settings")) |> assign(:settings, settings) |> assign(:locale, locale) + |> assign(:environment, environment) |> assign(:vereinfacht_env_configured, Mv.Config.vereinfacht_env_configured?()) |> assign(:vereinfacht_api_url_env_set, Mv.Config.vereinfacht_api_url_env_set?()) |> assign(:vereinfacht_api_key_env_set, Mv.Config.vereinfacht_api_key_env_set?()) @@ -76,7 +79,19 @@ defmodule MvWeb.GlobalSettingsLive do |> assign(:oidc_groups_claim_env_set, Mv.Config.oidc_groups_claim_env_set?()) |> assign(:oidc_only_env_set, Mv.Config.oidc_only_env_set?()) |> assign(:oidc_configured, Mv.Config.oidc_configured?()) - |> assign(:oidc_client_secret_set, present?(settings.oidc_client_secret)) + |> assign(:oidc_client_secret_set, Mv.Config.oidc_client_secret_set?()) + |> assign(:smtp_env_configured, Mv.Config.smtp_env_configured?()) + |> assign(:smtp_host_env_set, Mv.Config.smtp_host_env_set?()) + |> assign(:smtp_port_env_set, Mv.Config.smtp_port_env_set?()) + |> assign(:smtp_username_env_set, Mv.Config.smtp_username_env_set?()) + |> assign(:smtp_password_env_set, Mv.Config.smtp_password_env_set?()) + |> assign(:smtp_ssl_env_set, Mv.Config.smtp_ssl_env_set?()) + |> assign(:smtp_from_name_env_set, Mv.Config.mail_from_name_env_set?()) + |> assign(:smtp_from_email_env_set, Mv.Config.mail_from_email_env_set?()) + |> assign(:smtp_password_set, present?(Mv.Config.smtp_password())) + |> assign(:smtp_configured, Mv.Config.smtp_configured?()) + |> assign(:smtp_test_result, nil) + |> assign(:smtp_test_to_email, "") |> assign_join_form_state(settings, custom_fields) |> assign_form() @@ -137,21 +152,6 @@ defmodule MvWeb.GlobalSettingsLive do - <%!-- Board approval (future feature) --%> -
- - -
-
<%!-- Field list header + Add button (left-aligned) --%>

{gettext("Fields on the join form")}

@@ -269,6 +269,181 @@ defmodule MvWeb.GlobalSettingsLive do
+ <%!-- SMTP / E-Mail Section --%> + <.form_section title={gettext("SMTP / E-Mail")}> + <%= if @smtp_env_configured do %> +

+ {gettext("Some values are set via environment variables. Those fields are read-only.")} +

+ <% end %> + + <%= if @environment == :prod and not @smtp_configured do %> +
+ <.icon name="hero-exclamation-triangle" class="size-5 shrink-0 mt-0.5" /> + + {gettext( + "SMTP is not configured. Transactional emails (join confirmation, password reset, etc.) will not be delivered reliably." + )} + +
+ <% end %> + + <.form for={@form} id="smtp-form" phx-change="validate" phx-submit="save"> +
+ <.input + field={@form[:smtp_host]} + type="text" + label={gettext("Host")} + disabled={@smtp_host_env_set} + placeholder={ + if(@smtp_host_env_set, + do: gettext("From SMTP_HOST"), + else: "smtp.example.com" + ) + } + /> + <.input + field={@form[:smtp_port]} + type="number" + label={gettext("Port")} + disabled={@smtp_port_env_set} + placeholder={if(@smtp_port_env_set, do: gettext("From SMTP_PORT"), else: "587")} + /> + <.input + field={@form[:smtp_username]} + type="text" + label={gettext("Username")} + disabled={@smtp_username_env_set} + placeholder={ + if(@smtp_username_env_set, + do: gettext("From SMTP_USERNAME"), + else: "user@example.com" + ) + } + /> +
+ + <.input + field={@form[:smtp_password]} + type="password" + label="" + disabled={@smtp_password_env_set} + placeholder={ + if(@smtp_password_env_set, + do: gettext("From SMTP_PASSWORD"), + else: + if(@smtp_password_set, + do: gettext("Leave blank to keep current"), + else: nil + ) + ) + } + /> +
+ <.input + field={@form[:smtp_ssl]} + type="select" + label={gettext("TLS/SSL")} + disabled={@smtp_ssl_env_set} + options={[ + {gettext("TLS (port 587, recommended)"), "tls"}, + {gettext("SSL (port 465)"), "ssl"}, + {gettext("None (port 25, insecure)"), "none"} + ]} + placeholder={if(@smtp_ssl_env_set, do: gettext("From SMTP_SSL"), else: nil)} + /> + <.input + field={@form[:smtp_from_email]} + type="email" + label={gettext("Sender email (From)")} + disabled={@smtp_from_email_env_set} + placeholder={ + if(@smtp_from_email_env_set, + do: gettext("From MAIL_FROM_EMAIL"), + else: "noreply@example.com" + ) + } + /> + <.input + field={@form[:smtp_from_name]} + type="text" + label={gettext("Sender name (From)")} + disabled={@smtp_from_name_env_set} + placeholder={ + if(@smtp_from_name_env_set, do: gettext("From MAIL_FROM_NAME"), else: "Mila") + } + /> +
+

+ {gettext( + "The sender email must be owned by or authorized for the SMTP user on most servers." + )} +

+ <.button + :if={ + not (@smtp_host_env_set and @smtp_port_env_set and @smtp_username_env_set and + @smtp_password_env_set and @smtp_ssl_env_set and @smtp_from_email_env_set and + @smtp_from_name_env_set) + } + phx-disable-with={gettext("Saving...")} + variant="primary" + class="mt-2" + > + {gettext("Save SMTP Settings")} + + + + <%!-- Test email: use form phx-submit so the current input value is always sent (e.g. after paste without blur) --%> +
+

{gettext("Test email")}

+ <.form + for={%{}} + id="smtp-test-email-form" + data-testid="smtp-test-email-form" + phx-submit="send_smtp_test_email" + class="space-y-3" + > +
+
+ + +
+ <.button + type="submit" + variant="outline" + data-testid="smtp-send-test-email" + phx-disable-with={gettext("Sending...")} + > + {gettext("Send test email")} + +
+ + <%= if @smtp_test_result do %> +
+ <.smtp_test_result result={@smtp_test_result} /> +
+ <% end %> +
+ + <%!-- Vereinfacht Integration Section --%> <.form_section title={gettext("Accounting-Software (Vereinfacht) Integration")}> <%= if @vereinfacht_env_configured do %> @@ -516,6 +691,27 @@ defmodule MvWeb.GlobalSettingsLive do assign(socket, form: AshPhoenix.Form.validate(socket.assigns.form, setting_params))} end + # phx-change can fire without "setting" (e.g. only _target when focusing). Do not validate + # with previous form params to avoid surprising behaviour; wait for the next event with setting data. + def handle_event("validate", _params, socket) do + {:noreply, socket} + end + + @impl true + def handle_event("update_smtp_test_to_email", %{"to_email" => email}, socket) do + {:noreply, assign(socket, :smtp_test_to_email, email)} + end + + @impl true + def handle_event("send_smtp_test_email", params, socket) do + to_email = + (params["to_email"] || socket.assigns.smtp_test_to_email || "") + |> String.trim() + + result = Mv.Mailer.send_test_email(to_email) + {:noreply, assign(socket, :smtp_test_result, result)} + end + @impl true def handle_event("test_vereinfacht_connection", _params, socket) do result = Mv.Vereinfacht.test_connection() @@ -560,11 +756,13 @@ defmodule MvWeb.GlobalSettingsLive do @impl true def handle_event("save", %{"setting" => setting_params}, socket) do actor = MvWeb.LiveHelpers.current_actor(socket) - # Never send blank API key / client secret so we do not overwrite stored secrets + + # Never send blank API key / client secret / smtp password so we do not overwrite stored secrets setting_params_clean = setting_params |> drop_blank_vereinfacht_api_key() |> drop_blank_oidc_client_secret() + |> drop_blank_smtp_password() saves_vereinfacht = vereinfacht_params?(setting_params_clean) @@ -579,8 +777,12 @@ defmodule MvWeb.GlobalSettingsLive do socket |> assign(:settings, fresh_settings) |> assign(:vereinfacht_api_key_set, present?(fresh_settings.vereinfacht_api_key)) - |> assign(:oidc_client_secret_set, present?(fresh_settings.oidc_client_secret)) + |> assign(:oidc_client_secret_set, Mv.Config.oidc_client_secret_set?()) |> assign(:oidc_configured, Mv.Config.oidc_configured?()) + |> assign(:smtp_configured, Mv.Config.smtp_configured?()) + |> assign(:smtp_password_set, present?(Mv.Config.smtp_password())) + |> assign(:smtp_from_name_env_set, Mv.Config.mail_from_name_env_set?()) + |> assign(:smtp_from_email_env_set, Mv.Config.mail_from_email_env_set?()) |> assign(:vereinfacht_test_result, test_result) |> put_flash(:success, gettext("Settings updated successfully")) |> assign_form() @@ -760,17 +962,29 @@ defmodule MvWeb.GlobalSettingsLive do end end + defp drop_blank_smtp_password(params) when is_map(params) do + case params do + %{"smtp_password" => v} when v in [nil, ""] -> + Map.delete(params, "smtp_password") + + _ -> + params + end + end + defp assign_form(%{assigns: %{settings: settings}} = socket) do - # Show ENV values in disabled fields (Vereinfacht and OIDC); never expose API key / client secret + # Show ENV values in disabled fields (Vereinfacht, OIDC, SMTP); never expose secrets in form settings_display = settings |> merge_vereinfacht_env_values() |> merge_oidc_env_values() + |> merge_smtp_env_values() settings_for_form = %{ settings_display | vereinfacht_api_key: nil, - oidc_client_secret: nil + oidc_client_secret: nil, + smtp_password: nil } form = @@ -845,6 +1059,28 @@ defmodule MvWeb.GlobalSettingsLive do end end + defp merge_smtp_env_values(s) do + s + |> put_if_env_set(:smtp_host, Mv.Config.smtp_host_env_set?(), Mv.Config.smtp_host()) + |> put_if_env_set(:smtp_port, Mv.Config.smtp_port_env_set?(), Mv.Config.smtp_port()) + |> put_if_env_set( + :smtp_username, + Mv.Config.smtp_username_env_set?(), + Mv.Config.smtp_username() + ) + |> put_if_env_set(:smtp_ssl, Mv.Config.smtp_ssl_env_set?(), Mv.Config.smtp_ssl()) + |> put_if_env_set( + :smtp_from_email, + Mv.Config.mail_from_email_env_set?(), + Mv.Config.mail_from_email() + ) + |> put_if_env_set( + :smtp_from_name, + Mv.Config.mail_from_name_env_set?(), + Mv.Config.mail_from_name() + ) + end + defp enrich_sync_errors([]), do: [] defp enrich_sync_errors(errors) when is_list(errors) do @@ -1018,6 +1254,115 @@ defmodule MvWeb.GlobalSettingsLive do """ end + # ---- SMTP test result component ---- + + attr :result, :any, required: true + + defp smtp_test_result(%{result: {:ok, _}} = assigns) do + ~H""" +
+ <.icon name="hero-check-circle" class="size-5 shrink-0" /> + {gettext("Test email sent successfully.")} +
+ """ + end + + defp smtp_test_result(%{result: {:error, :invalid_email_address}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + {gettext("Invalid email address. Please enter a valid recipient address.")} +
+ """ + end + + defp smtp_test_result(%{result: {:error, :not_implemented}} = assigns) do + ~H""" +
+ <.icon name="hero-exclamation-triangle" class="size-5 shrink-0" /> + {gettext("SMTP is not configured. Please set at least the SMTP host.")} +
+ """ + end + + defp smtp_test_result(%{result: {:error, :sender_rejected}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + + {gettext( + "Sender address rejected. The \"Sender email\" must be owned by or authorized for the SMTP user." + )} + +
+ """ + end + + defp smtp_test_result(%{result: {:error, :auth_failed}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + + {gettext("Authentication failed. Please check the SMTP username and password.")} + +
+ """ + end + + defp smtp_test_result(%{result: {:error, :recipient_rejected}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + {gettext("Recipient address rejected by the server.")} +
+ """ + end + + defp smtp_test_result(%{result: {:error, :tls_failed}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + + {gettext( + "TLS connection failed. Check the TLS/SSL setting and port (587 for TLS, 465 for SSL)." + )} + +
+ """ + end + + defp smtp_test_result(%{result: {:error, :connection_failed}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + + {gettext("Server unreachable. Check host and port.")} + +
+ """ + end + + defp smtp_test_result(%{result: {:error, {:smtp_error, message}}} = assigns) + when is_binary(message) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + + {gettext("SMTP error:")} {@result |> elem(1) |> elem(1)} + +
+ """ + end + + defp smtp_test_result(%{result: {:error, _reason}} = assigns) do + ~H""" +
+ <.icon name="hero-x-circle" class="size-5 shrink-0" /> + {gettext("Failed to send test email. Please check your SMTP configuration.")} +
+ """ + end + # ---- Join form helper functions ---- defp assign_join_form_state(socket, settings, custom_fields) do diff --git a/mix.exs b/mix.exs index 56e7dde..29dbc25 100644 --- a/mix.exs +++ b/mix.exs @@ -67,6 +67,8 @@ defmodule Mv.MixProject do depth: 1}, {:phoenix_swoosh, "~> 1.0"}, {:swoosh, "~> 1.16"}, + # Required by Swoosh.Adapters.SMTP (and its Helpers use mimemail, which gen_smtp brings in) + {:gen_smtp, "~> 1.0"}, {:req, "~> 0.5"}, {:telemetry_metrics, "~> 1.0"}, {:telemetry_poller, "~> 1.0"}, diff --git a/mix.lock b/mix.lock index 8ac995a..b177796 100644 --- a/mix.lock +++ b/mix.lock @@ -35,6 +35,7 @@ "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, "finch": {:hex, :finch, "0.21.0", "b1c3b2d48af02d0c66d2a9ebfb5622be5c5ecd62937cf79a88a7f98d48a8290c", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "87dc6e169794cb2570f75841a19da99cfde834249568f2a5b121b809588a4377"}, "fine": {:hex, :fine, "0.1.4", "b19a89c1476c7c57afb5f9314aed5960b5bc95d5277de4cb5ee8e1d1616ce379", [:mix], [], "hexpm", "be3324cc454a42d80951cf6023b9954e9ff27c6daa255483b3e8d608670303f5"}, + "gen_smtp": {:hex, :gen_smtp, "1.3.0", "62c3d91f0dcf6ce9db71bcb6881d7ad0d1d834c7f38c13fa8e952f4104a8442e", [:rebar3], [{:ranch, ">= 1.8.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "0b73fbf069864ecbce02fe653b16d3f35fd889d0fdd4e14527675565c39d84e6"}, "gettext": {:hex, :gettext, "1.0.2", "5457e1fd3f4abe47b0e13ff85086aabae760497a3497909b8473e0acee57673b", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "eab805501886802071ad290714515c8c4a17196ea76e5afc9d06ca85fb1bfeb3"}, "glob_ex": {:hex, :glob_ex, "0.1.11", "cb50d3f1ef53f6ca04d6252c7fde09fd7a1cf63387714fe96f340a1349e62c93", [:mix], [], "hexpm", "342729363056e3145e61766b416769984c329e4378f1d558b63e341020525de4"}, "hammer": {:hex, :hammer, "7.2.0", "73113eca87f0fd20a6d3679c1182e8c4c1778266f61de4e9dc8c589dee156c30", [:mix], [], "hexpm", "c50fa865ddfe7b3d4f8a6941f56940679e02a9a1465b00668a95d140b101d828"}, diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 05d737b..40340b9 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -10,716 +10,137 @@ msgid "" msgstr "" "Language: de\n" -#: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Actions" -msgstr "Aktionen" +msgid " (Field: %{field})" +msgstr " (Datenfeld: %{field})" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Are you sure?" -msgstr "Bist du sicher?" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "Attempting to reconnect" -msgstr "Verbindung wird wiederhergestellt" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "City" -msgstr "Stadt" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete" -msgstr "Löschen" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit" -msgstr "Bearbeiten" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit Member" -msgstr "Mitglied bearbeiten" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: 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 -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Email" -msgstr "E-Mail" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "First Name" -msgstr "Vorname" - -#: 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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Join Date" -msgstr "Beitrittsdatum" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Last Name" -msgstr "Nachname" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New Member" -msgstr "Neues Mitglied" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Show" -msgstr "Anzeigen" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "Something went wrong!" -msgstr "Etwas ist schiefgelaufen!" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "We can't find the internet" -msgstr "Keine Internetverbindung gefunden" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "close" -msgstr "schließen" - -#: 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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Exit Date" -msgstr "Austrittsdatum" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "House Number" -msgstr "Hausnummer" - -#: 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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Notes" -msgstr "Notizen" - -#: lib/mv/membership/members_pdf.ex -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Paid" -msgstr "Bezahlt" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Postal Code" -msgstr "Postleitzahl" - -#: lib/mv_web/live/custom_field_live/form_component.ex #: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format -msgid "Saving..." -msgstr "Speichern..." - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Street" -msgstr "Straße" +msgid "%{count} failed" +msgstr "%{count} fehlgeschlagen" #: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{count} filter active" +msgid_plural "%{count} filters active" +msgstr[0] "%{count} Filter aktiv" +msgstr[1] "%{count} Filter aktiv" + #: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/member_live/index/formatter.ex -#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "%{count} member has a value assigned for this datafield." +msgid_plural "%{count} members have values assigned for this datafield." +msgstr[0] "%{count} Mitglied hat einen Wert für dieses benutzerdefinierte Feld zugewiesen." +msgstr[1] "%{count} Mitglieder haben Werte für dieses benutzerdefinierte Feld zugewiesen." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "%{count} synced" +msgstr "%{count} synchronisiert" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "(ISO-8601 format: YYYY-MM-DD)" +msgstr "(ISO-8601 Format: JJJJ-MM-TT)" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "(set)" +msgstr "(gesetzt)" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "(true/false/1/0/yes/no/ja/nein)" +msgstr "(true/false/1/0/yes/no/ja/nein)" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format -msgid "No" -msgstr "Nein" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Show Member" -msgstr "Mitglied anzeigen" - -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/member_live/index/formatter.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Yes" -msgstr "Ja" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "create" -msgstr "erstellt" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "update" -msgstr "aktualisiert" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Incorrect email or password" -msgstr "Falsche E-Mail oder Passwort" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member %{action} successfully" -msgstr "Mitglied wurde erfolgreich %{action}" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You are now signed in" -msgstr "Du bist jetzt angemeldet" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You are now signed out" -msgstr "Du bist jetzt abgemeldet" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" -msgstr "Du hast dich bereits auf andere Weise angemeldet, aber dein Konto noch nicht bestätigt.\nDu kannst dein Konto über den Link bestätigen, den wir dir gesendet haben, oder durch Zurücksetzen deines Passworts.\n" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Your email address has now been confirmed" -msgstr "Deine E-Mail-Adresse wurde bestätigt" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Your password has successfully been reset" -msgstr "Dein Passwort wurde erfolgreich zurückgesetzt" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#: 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/membership_fees_component.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Cancel" -msgstr "Abbrechen" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Description" -msgstr "Beschreibung" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit User" -msgstr "Benutzer*in bearbeiten" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Enabled" -msgstr "Aktiviert" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Logout" -msgstr "Abmelden" - -#: lib/mv_web/live/user_live/index.ex -#, elixir-autogen, elixir-format -msgid "Listing Users" -msgstr "Benutzer*innen auflisten" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/index.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Members" -msgstr "Mitglieder" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Name" -msgstr "Name" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New User" -msgstr "Neue*r Benutzer*in" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not enabled" -msgstr "Nicht aktiviert" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Note" -msgstr "Hinweis" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Password Authentication" -msgstr "Passwort-Authentifizierung" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Required" -msgstr "Erforderlich" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Select all members" -msgstr "Alle Mitglieder auswählen" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Select member" -msgstr "Mitglied auswählen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings" -msgstr "Einstellungen" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Show User" -msgstr "Benutzer*in anzeigen" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "User" -msgstr "Benutzer*in" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Value type" -msgstr "Wertetyp" - -#: lib/mv_web/components/table_components.ex -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "ascending" -msgstr "aufsteigend" - -#: lib/mv_web/components/table_components.ex -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "descending" -msgstr "absteigend" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "New" -msgstr "Neue*r" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Admin Note" -msgstr "Administrator*innen-Hinweis" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system." -msgstr "Als Administrator*in kannst du direkt ein neues Passwort für diese*n Benutzer*in setzen." - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "At least 8 characters" -msgstr "Mindestens 8 Zeichen" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Change Password" -msgstr "Passwort ändern" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Check 'Change Password' above to set a new password for this user." -msgstr "Aktiviere 'Passwort ändern' oben, um ein neues Passwort für diese*n Benutzer*in zu setzen." - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Confirm Password" -msgstr "Passwort bestätigen" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Consider using special characters" -msgstr "Sonderzeichen empfohlen" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Include both letters and numbers" -msgstr "Buchstaben und Zahlen verwenden" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Password" -msgstr "Passwort" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Password requirements" -msgstr "Passwort-Anforderungen" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Set Password" -msgstr "Passwort setzen" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "User will be created without a password. Check 'Set Password' to add one." -msgstr "Benutzer*in wird ohne Passwort erstellt. Aktiviere 'Passwort setzen', um eines hinzuzufügen." - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Linked Member" -msgstr "Verknüpftes Mitglied" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Linked User" -msgstr "Verknüpfte*r Benutzer*in" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "No member linked" -msgstr "Kein Mitglied verknüpft" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No user linked" -msgstr "Keine*r Benutzer*in verknüpft" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to members list" -msgstr "Zurück zur Mitgliederliste" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to users list" -msgstr "Zurück zur Benutzer*innen-Liste" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Select language" -msgstr "Sprache auswählen" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Toggle dark mode" -msgstr "Dunklen Modus umschalten" - -#: lib/mv_web/live/components/search_bar_component.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Search..." -msgstr "Suchen..." - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Users" -msgstr "Benutzer*innen" - -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "Click to sort" -msgstr "Klicke, um zu sortieren" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "First name" -msgstr "Vorname" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -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/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Unable to authenticate with OIDC. Please try again." -msgstr "OIDC-Authentifizierung fehlgeschlagen. Bitte versuche es erneut." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "The authentication server is currently unavailable. Please try again later." -msgstr "Der Authentifizierungsserver ist derzeit nicht erreichbar. Bitte versuche es später erneut." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Authentication configuration error. Please contact the administrator." -msgstr "Authentifizierungskonfigurationsfehler. Bitte wende dich an die Administration." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Unable to sign in. Please try again." -msgstr "Anmeldung fehlgeschlagen. Bitte versuche es erneut." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Authentication failed. Please try again." -msgstr "Authentifizierung fehlgeschlagen. Bitte versuche es erneut." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Cannot update email: This email is already registered to another account. Please change your email in the identity provider." -msgstr "E-Mail kann nicht aktualisiert werden: Diese E-Mail-Adresse ist bereits für ein anderes Konto registriert. Bitte ändere deine E-Mail-Adresse im Identitätsanbieter." - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "This email is already linked to a different OIDC account. Cannot link multiple OIDC providers to the same account." -msgstr "Diese E-Mail-Adresse ist bereits mit einem anderen OIDC-Konto verknüpft. Es können nicht mehrere OIDC-Provider mit demselben Konto verknüpft werden." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Custom Fields" -msgstr "Benutzerdefinierte Felder" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Enter the text above to confirm" -msgstr "Den obigen Text zur Bestätigung eingeben" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "To confirm deletion, please enter this text:" -msgstr "Um die Löschung zu bestätigen, gib bitte folgenden Text ein:" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Show in overview" -msgstr "In der Übersicht anzeigen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Association Name" -msgstr "Vereinsname" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Club Settings" -msgstr "Vereinsdaten" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Manage global settings for the association." -msgstr "Verwalte die globalen Einstellungen des Vereins." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings updated successfully" -msgstr "Einstellungen erfolgreich gespeichert" +msgid "A cycle for this period already exists" +msgstr "Ein Zyklus für diesen Zeitraum existiert bereits." #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format msgid "A member with this email already exists. To link with a different member, please change one of the email addresses first." msgstr "Ein Mitglied mit dieser E-Mail-Adresse existiert bereits. Um mit einem anderen Mitglied zu verknüpfen, ändere bitte zuerst eine der E-Mail-Adressen." -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Available members" -msgstr "Verfügbare Mitglieder" +msgid "API Key" +msgstr "API-Schlüssel" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Failed to link member: %{error}" -msgstr "Fehler beim Verlinken des Mitglieds: %{error}" +msgid "API URL" +msgstr "API-URL" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex #, elixir-autogen, elixir-format -msgid "Member will be unlinked when you save. Cannot select new member until saved." -msgstr "Die Verknüpfung des Mitglieds wird beim Speichern aufgehoben. Ein neues Mitglied kann erst nach dem Speichern ausgewählt werden." +msgid "About Membership Fee Types" +msgstr "Über Mitgliedsbeitragsarten" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Save to confirm linking." -msgstr "Speichern, um die Verknüpfung zu bestätigen." - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Search for a member to link..." -msgstr "Nach einem Mitglied zum Verknüpfen suchen..." - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Search for member to link" -msgstr "Nach einem Mitglied zum Verknüpfen suchen" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Selected" -msgstr "Ausgewählt" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unlink Member" -msgstr "Verknüpfung aufheben" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unlinking scheduled" -msgstr "Aufhebung der Verknüpfung geplant" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "Copied %{count} email address to clipboard" -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/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/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "No email addresses found" -msgstr "Keine E-Mail-Adressen gefunden" - -#: 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/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Open in email program" -msgstr "Im E-Mail-Programm öffnen" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -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" +msgid "Accounting-Software (Vereinfacht) Integration" +msgstr "Buchhaltungs-Software (Vereinfacht) Integration" #: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Actions" +msgstr "Aktionen" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Active members" +msgstr "Aktive Mitglieder" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Add Member" +msgstr "Mitglied hinzufügen" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Add field" +msgstr "Feld hinzufügen" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Add members" +msgstr "Mitglieder hinzufügen" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Additional form data" +msgstr "Weitere Formulardaten" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Address" +msgstr "Adresse" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Admin Note" +msgstr "Administrator*innen-Hinweis" + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "This field cannot be empty" -msgstr "Dieses Feld darf nicht leer bleiben" +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Admin group name" +msgstr "Admin-Gruppenname" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Administration" +msgstr "Administration" #: lib/mv_web/components/core_components.ex #: lib/mv_web/live/components/member_filter_component.ex @@ -728,10 +149,167 @@ msgstr "Dieses Feld darf nicht leer bleiben" msgid "All" msgstr "Alle" -#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Address" -msgstr "Adresse" +msgid "All cycles deleted" +msgstr "Alle Zyklen gelöscht" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "All datafield values will be permanently deleted when you delete this datafield." +msgstr "Alle benutzerdefinierten Feldwerte werden beim Löschen dieses benutzerdefinierten Feldes dauerhaft gelöscht." + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "All years combined (pie)" +msgstr "Alle Jahre zusammengefasst (Kreis)" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Already paid cycles will remain with the old amount." +msgstr "Bereits bezahlte Zyklen bleiben mit dem alten Betrag." + +#: 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/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Amount" +msgstr "Betrag" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +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/membership_fees_component.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/helpers.ex +#, elixir-autogen, elixir-format +msgid "An error occurred" +msgstr "Ein Fehler ist aufgetreten" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "App URL (contact view link)" +msgstr "App-URL (Link zur Kontaktansicht)" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Apply filters" +msgstr "Filter auswählen" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approve" +msgstr "Genehmigen" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approve this join request and create a member?" +msgstr "Diesen Mitgliedsantrag genehmigen und Mitglied anlegen?" + +#: lib/mv_web/live/join_request_live/helpers.ex +#, elixir-autogen, elixir-format +msgid "Approved" +msgstr "Genehmigt" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approved at" +msgstr "Genehmigt am" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Apr." +msgstr "Apr." + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete %{name}? This action cannot be undone." +msgstr "Möchtest du %{name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete the role %{name}? This action cannot be undone." +msgstr "Möchtest du die Rolle %{name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete the user %{email}? This action cannot be undone." +msgstr "Möchtest du diese*n Benutzer*in %{email} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Are you sure you want to delete this cycle?" +msgstr "Möchtest du diesen Zyklus wirklich löschen?" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete this group? This action cannot be undone." +msgstr "Möchtest du diese Gruppe wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Are you sure?" +msgstr "Bist du sicher?" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system." +msgstr "Als Administrator*in kannst du direkt ein neues Passwort für diese*n Benutzer*in setzen." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Association Name" +msgstr "Vereinsname" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "At least 8 characters" +msgstr "Mindestens 8 Zeichen" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "Attempting to reconnect" +msgstr "Verbindung wird wiederhergestellt" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Aug." +msgstr "Aug." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Authentication configuration error. Please contact the administrator." +msgstr "Authentifizierungskonfigurationsfehler. Bitte wende dich an die Administration." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Authentication failed. Please check the SMTP username and password." +msgstr "Authentifizierung fehlgeschlagen. Bitte Benutzername und Passwort prüfen." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Authentication failed. Please try again." +msgstr "Authentifizierung fehlgeschlagen. Bitte versuche es erneut." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Available fields" +msgstr "Verfügbare Felder" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Available members" +msgstr "Verfügbare Mitglieder" #: lib/mv_web/live/custom_field_live/form_component.ex #: lib/mv_web/live/group_live/form.ex @@ -749,51 +327,71 @@ msgstr "Adresse" msgid "Back" msgstr "Zurück" -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Contact Data" -msgstr "Kontaktdaten" +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Back to groups list" +msgstr "Zurück zur Gruppenübersicht" -#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format -msgid "Nr." -msgstr "Nr." +msgid "Back to join requests" +msgstr "Zurück zu den Mitgliedsanträgen" #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Payment Data" -msgstr "Beitragsdaten" +msgid "Back to members list" +msgstr "Zurück zur Mitgliederliste" -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Payments" -msgstr "Zahlungen" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Back to roles list" +msgstr "Zurück zur Rollenliste" -#: lib/mv_web/live/datafields_live.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Personal Data" -msgstr "Persönliche Daten" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Back to settings" +msgstr "Zurück zu den Einstellungen" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Save" -msgstr "Speichern" +msgid "Back to users list" +msgstr "Zurück zur Benutzer*innen-Liste" -#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Create Member" -msgstr "Mitglied erstellen" +msgid "Base URL" +msgstr "Basis-URL" -#: 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/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/components/layouts/sidebar.ex #, elixir-autogen, elixir-format -msgid "Amount" -msgstr "Betrag" +msgid "Basic settings" +msgstr "Grundeinstellungen" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Become a member" +msgstr "Mitglied werden" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed." +msgstr "Mit Absenden deines Antrags erhältst du eine Mail mit einem Bestätigungslink. Sobald du deine Mail-Adresse bestätigt hast, wird dein Antrag geprüft." + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "CSV" +msgstr "CSV" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "CSV File" +msgstr "CSV-Datei" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "CSV files only, maximum %{size} MB" +msgstr "Nur CSV-Dateien, maximal %{size} MB" #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -801,234 +399,25 @@ msgstr "Betrag" msgid "Can be changed at any time. Amount changes affect future periods only." msgstr "Kann jederzeit geändert werden. Änderungen des Betrags betreffen nur zukünftige Zyklen." -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Deletion" -msgstr "Löschen" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Examples" -msgstr "Beispiele" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -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/helpers/membership_fee_helpers.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Half-yearly" -msgstr "Halbjährlich" - -#: 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/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Interval" -msgstr "Intervall" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Joining date" -msgstr "Beitrittsdatum" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays for the year they joined" -msgstr "Mitglied zahlt für das Beitrittsjahr" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the joining month" -msgstr "Mitglied zahlt ab dem Beitrittsmonat" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the next full quarter" -msgstr "Mitglied zahlt ab dem nächsten vollständigen Quartal" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the next full year" -msgstr "Mitglied zahlt ab dem nächsten vollständigen Jahr" - -#: 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 -#, elixir-autogen, elixir-format, fuzzy -msgid "Monthly" -msgstr "Monatlich" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Name & Amount" -msgstr "Name & Betrag" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -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/helpers/membership_fee_helpers.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Quarterly" -msgstr "Vierteljährlich" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Status" -msgstr "Status" - -#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/show.ex +#: 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/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Suspended" -msgstr "Pausiert" - -#: lib/mv/membership/members_pdf.ex -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Unpaid" -msgstr "Unbezahlt" - -#: 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 -#, elixir-autogen, elixir-format, fuzzy -msgid "Yearly" -msgstr "Jährlich" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Last name" -msgstr "Nachname" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "None" -msgstr "Keine" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Options" -msgstr "Optionen" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Select all" -msgstr "Alle auswählen" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Select none" -msgstr "Keine auswählen" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Slug does not match. Deletion cancelled." -msgstr "Der eingegebene Text stimmt nicht überein. Vorgang abgebrochen." - -#: 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." -msgstr "Diese Felder können zusätzlich zu den normalen Daten ausgefüllt werden, wenn ein neues Mitglied angelegt wird." - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Value Type" -msgstr "Wertetyp" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Date" -msgstr "Datum" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "E-Mail" -msgstr "E-Mail" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Number" -msgstr "Zahl" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Text" -msgstr "Textfeld" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Yes/No-Selection" -msgstr "Ja/Nein-Auswahl" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Optional" -msgstr "Optional" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Member field %{action} successfully" -msgstr "Mitgliedsfeld wurde erfolgreich %{action}" +msgid "Cancel" +msgstr "Abbrechen" #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "A cycle for this period already exists" -msgstr "Ein Zyklus für diesen Zeitraum existiert bereits." - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "About Membership Fee Types" -msgstr "Über Mitgliedsbeitragsarten" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "All cycles deleted" -msgstr "Alle Zyklen gelöscht" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Already paid cycles will remain with the old amount." -msgstr "Bereits bezahlte Zyklen bleiben mit dem alten Betrag." - -#: 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 -#: lib/mv_web/live/role_live/helpers.ex -#, elixir-autogen, elixir-format -msgid "An error occurred" -msgstr "Ein Fehler ist aufgetreten" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete this cycle?" -msgstr "Möchtest du diesen Zyklus wirklich löschen?" +msgid "Cancelled" +msgstr "Storniert" #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -1036,36 +425,294 @@ msgstr "Möchtest du diesen Zyklus wirklich löschen?" msgid "Cannot delete - %{count} member(s) assigned" msgstr "Löschen nicht möglich – %{count} Mitglied(er) zugewiesen" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Cannot delete role. %{count} user(s) are still assigned to this role. Please assign them to another role first." +msgstr "Rolle kann nicht gelöscht werden. %{count} Benutzer*in(nen) sind dieser Rolle noch zugeordnet. Bitte weise sie zunächst einer anderen Rolle zu." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Cannot update email: This email is already registered to another account. Please change your email in the identity provider." +msgstr "E-Mail kann nicht aktualisiert werden: Diese E-Mail-Adresse ist bereits für ein anderes Konto registriert. Bitte ändere deine E-Mail-Adresse im Identitätsanbieter." + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Change Amount?" msgstr "Betrag ändern?" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Change Password" +msgstr "Passwort ändern" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Changing the amount will affect %{count} member(s)." msgstr "Die Änderung des Betrags betrifft %{count} Mitglied(er)." +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Check 'Change Password' above to set a new password for this user." +msgstr "Aktiviere 'Passwort ändern' oben, um ein neues Passwort für diese*n Benutzer*in zu setzen." + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Choose CSV file" +msgstr "CSV-Datei auswählen" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "City" +msgstr "Stadt" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Clear filters" +msgstr "Filter zurücksetzen" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Click for details" +msgstr "Klicken für Details" + +#: lib/mv_web/live/group_live/index.ex +#, elixir-autogen, elixir-format +msgid "Click for group details" +msgstr "Klicke für Gruppen-Details" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for member details" +msgstr "Klicke für Mitglieds-Details" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for role details" +msgstr "Klicke für Rollen-Details" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for user details" +msgstr "Klicke für Benutzer*innen-Details" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Click to edit amount" msgstr "Klicke, um den Betrag zu bearbeiten" +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Click to edit datafield" +msgstr "Klicke für Datenfeld-Details" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Click to edit membership fee type" +msgstr "Klicke zum Bearbeiten der Mitgliedsbeitragsart" + +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "Click to sort" +msgstr "Klicke, um zu sortieren" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Client ID" +msgstr "Client-ID" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Client Secret" +msgstr "Client-Geheimnis" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Close" +msgstr "Schließen" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Close sidebar" +msgstr "Sidebar schließen" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Club ID" +msgstr "Vereins-ID" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Club Settings" +msgstr "Vereinsdaten" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Completed" +msgstr "Abgeschlossen" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Configure fee types for membership fees." +msgstr "Verwalte Beitragsarten und Mitgliedsbeiträge." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Configure the public join form that allows new members to submit a join request." +msgstr "Konfiguriere das öffentliche Beitrittsformular, über das neue Mitglieder einen Beitrittsantrag stellen können." + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Configure which data you want to save for your members. Define individual datafields." +msgstr "Lege fest, welche Daten du für die Mitglieder speichern möchtest. Definiere individuelle Datenfelder." + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Confirm Change" msgstr "Änderung bestätigen" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Confirm Password" +msgstr "Passwort bestätigen" + +#: lib/mv_web/templates/emails/user_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Confirm my email" +msgstr "E-Mail bestätigen" + +#: lib/mv_web/templates/emails/join_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Confirm my request" +msgstr "Anfrage bestätigen" + +#: lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex +#, elixir-autogen, elixir-format +msgid "Confirm your email address" +msgstr "E-Mail-Adresse bestätigen" + +#: lib/mv_web/emails/join_confirmation_email.ex +#, elixir-autogen, elixir-format +msgid "Confirm your membership request" +msgstr "Mitgliedschaftsanfrage bestätigen" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Confirmation text does not match" msgstr "Bestätigungstext stimmt nicht überein." +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP %{status}):" +msgstr "Verbindung fehlgeschlagen (HTTP %{status}):" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 401): API key is invalid or missing." +msgstr "Verbindung fehlgeschlagen (HTTP 401): API-Schlüssel ist ungültig oder fehlt." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 403): Access denied. Please check the Club ID and API key permissions." +msgstr "Verbindung fehlgeschlagen (HTTP 403): Zugriff verweigert. Bitte Vereins-ID und Berechtigungen des API-Schlüssels prüfen." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 404): API endpoint not found. Please check the API URL (e.g. correct version path)." +msgstr "Verbindung fehlgeschlagen (HTTP 404): API-Endpunkt nicht gefunden. Bitte die API-URL prüfen (z. B. korrekter Versionspfad)." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. Could not reach the API (network error or wrong URL)." +msgstr "Verbindung fehlgeschlagen. API nicht erreichbar (Netzwerkfehler oder falsche URL)." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. The URL does not point to a Vereinfacht API (received HTML instead of JSON)." +msgstr "Verbindung fehlgeschlagen. Die URL zeigt nicht auf eine Vereinfacht-API (HTML statt JSON erhalten)." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. Unknown error." +msgstr "Verbindung fehlgeschlagen. Unbekannter Fehler." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection successful. API URL, API Key and Club ID are valid." +msgstr "Verbindung erfolgreich. API-URL, API-Schlüssel und Vereins-ID sind korrekt." + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Consider using special characters" +msgstr "Sonderzeichen empfohlen" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Contact Data" +msgstr "Kontaktdaten" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Contributions" +msgstr "Beiträge" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions by year" +msgstr "Beiträge nach Jahr" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions by year as table with stacked bars" +msgstr "Beiträge nach Jahr als Tabelle mit gestapelten Balken" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions pie: paid %{paid}%%, unpaid %{unpaid}%%, suspended %{suspended}%%" +msgstr "Beiträge (Kreisdiagramm): bezahlt %{paid}%, unbezahlt %{unpaid}%, pausiert %{suspended}%" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "Copied %{count} email address to clipboard" +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/member_live/index.html.heex #, elixir-autogen, elixir-format, fuzzy msgid "Copy email addresses" msgstr "E-Mail-Adressen kopieren" +#: 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/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Could not load data fields. Please check your permissions." +msgstr "Datenfelder konnten nicht geladen werden. Bitte überprüfe deine Berechtigungen." + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Could not load member list. Please try again." +msgstr "Mitgliederliste konnte nicht geladen werden. Bitte versuche es erneut." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Could not save join form settings." +msgstr "Beitrittsformular-Einstellungen konnten nicht gespeichert werden." + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Country" +msgstr "Land" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Create" @@ -1076,11 +723,37 @@ msgstr "erstellt" msgid "Create Cycle" msgstr "Zyklus erstellen" +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Create Group" +msgstr "Gruppe erstellen" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Create Member" +msgstr "Mitglied erstellen" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Create a new cycle manually" msgstr "Einen neuen Zyklus manuell erstellen" +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Created at:" +msgstr "Erstellt am:" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Credit" +msgstr "Gutschrift" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Credit note" +msgstr "Gutschrift" + #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format msgid "Current Cycle" @@ -1091,11 +764,31 @@ msgstr "Aktueller Zyklus" msgid "Current amount" msgstr "Aktueller Betrag" +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Current payment cycle" +msgstr "Aktueller Zahlungszyklus" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Custom" +msgstr "Benutzerdefiniert" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Custom Fields" +msgstr "Benutzerdefinierte Felder" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle" msgstr "Zyklus" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Cycle Period" +msgstr "Zykluszeitraum" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle amount updated" @@ -1121,11 +814,76 @@ msgstr "Zyklenstatus aktualisiert" msgid "Cycles regenerated successfully" msgstr "Zyklen erfolgreich regeneriert" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Danger zone" +msgstr "Gefahrenzone" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Data field %{action} successfully" +msgstr "Datenfeld wurde erfolgreich %{action}" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Data field deleted successfully" +msgstr "Datenfeld erfolgreich gelöscht" + +#: lib/mv_web/live/components/field_visibility_dropdown_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Datafield %{id}" +msgstr "Datenfeld %{id}" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Datafields" +msgstr "Datenfelder" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Date" +msgstr "Datum" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Dec." +msgstr "Dez." + #: lib/mv_web/live/membership_fee_settings_live.ex #, elixir-autogen, elixir-format msgid "Default Membership Fee Type" msgstr "Standard-Mitgliedsbeitragsart" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Default settings" +msgstr "Standardeinstellungen" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Default type: Assigned to new members; can be changed per member." +msgstr "Standardart: Wird neuen Mitgliedern zugewiesen; pro Mitglied änderbar." + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete" +msgstr "Löschen" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Delete All" @@ -1141,309 +899,26 @@ msgstr "Alle Zyklen löschen" msgid "Delete Cycle" msgstr "Zyklus löschen" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Edit Cycle Amount" -msgstr "Zyklusbetrag bearbeiten" - -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Edit Field: %{field}" -msgstr "Feld bearbeiten: %{field}" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit Membership Fee Type" -msgstr "Mitgliedsbeitragsart bearbeiten" - -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Edit membership fee type" -msgstr "Mitgliedsbeitragsart bearbeiten" +msgid "Delete Data Field" +msgstr "Datenfeld löschen" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Failed to update cycle status: %{errors}" -msgstr "Fehler beim Aktualisieren des Zyklenstatus: %{errors}" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Future unpaid cycles will be regenerated with the new amount." -msgstr "Zukünftige unbezahlte Zyklen werden mit dem neuen Betrag regeneriert." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Generate cycles from the last existing cycle to today" -msgstr "Zyklen vom letzten existierenden Zyklus bis heute generieren" - -#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Generated cycles" -msgstr "Generierte Zyklen" +msgid "Delete Datafields and All Values" +msgstr "Benutzerdefiniertes Feld und alle Werte löschen" -#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Include joining cycle" -msgstr "Beitrittsdatum einbeziehen" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Interval cannot be changed after creation." -msgstr "Das Intervall kann nach der Erstellung nicht geändert werden." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invalid amount format" -msgstr "Ungültiges Betragsformat" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invalid date format" -msgstr "Ungültiges Datumsformat" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Last Cycle" -msgstr "Letzter Zyklus" - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Manage membership fee types for membership fees." -msgstr "Mitgliedsbeitragsarten für Mitgliedsbeiträge verwalten." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mark as paid" -msgstr "Als bezahlt markieren" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mark as suspended" -msgstr "Als ausgesetzt markieren" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mark as unpaid" -msgstr "Als unbezahlt markieren" +msgid "Delete Group" +msgstr "Gruppe löschen" #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee" -msgstr "Mitgliedsbeitrag" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Settings" -msgstr "Mitgliedsbeitragseinstellungen" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Status" -msgstr "Mitgliedsbeitragsstatus" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Type" -msgstr "Mitgliedsbeitragsart" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Types" -msgstr "Mitgliedsbeitragsarten" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership Fees" -msgstr "Mitgliedsbeiträge" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Membership fee start" -msgstr "Beitragsbeginn" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type deleted" -msgstr "Mitgliedsbeitragsart gelöscht" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type removed" -msgstr "Mitgliedsbeitragsart entfernt" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type saved successfully" -msgstr "Mitgliedsbeitragsart erfolgreich gespeichert" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type updated. Cycles regenerated." -msgstr "Mitgliedsbeitragsart aktualisiert. Zyklen regeneriert." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -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/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Monthly Interval - Joining Cycle Included" -msgstr "Monatliches Intervall – Beitrittszeitraum einbezogen" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "New Membership Fee Type" -msgstr "Neue Mitgliedsbeitragsart" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "New amount" -msgstr "Neuer Betrag" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "No cycle" -msgstr "Kein Zyklus" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No cycles" -msgstr "Keine Zyklen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "No cycles to delete" -msgstr "Keine Zyklen zum Löschen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned." -msgstr "Keine Mitgliedsbeitragszyklen gefunden. Zyklen werden automatisch generiert, wenn eine Mitgliedsbeitragsart zugewiesen wird." - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No membership fee type assigned" -msgstr "Keine Mitgliedsbeitragsart zugewiesen" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No status" -msgstr "Kein Status" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "None (no default)" -msgstr "Keine (kein Standard)" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Not set" -msgstr "Nicht gesetzt" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Payment Interval" -msgstr "Zahlungsintervall" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Please confirm the amount change first" -msgstr "Bitte bestätige zuerst die Betragsänderung" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Quarterly Interval - Joining Cycle Excluded" -msgstr "Vierteljährliches Intervall – Beitrittszeitraum nicht einbezogen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Regenerate Cycles" -msgstr "Zyklen regenerieren" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Regenerating..." -msgstr "Regeneriere..." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select a membership fee type for this member. Members can only switch between types with the same interval." -msgstr "Wähle eine Mitgliedsbeitragsart für dieses Mitglied. Mitglieder können nur zwischen Arten mit demselben Intervall wechseln." - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select interval" -msgstr "Intervall auswählen" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Settings saved successfully." -msgstr "Einstellungen erfolgreich gespeichert" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "This action cannot be undone." -msgstr "Diese Aktion kann nicht rückgängig gemacht werden." - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "This field is required" -msgstr "Dieses Feld ist erforderlich" - -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "This is a technical field and cannot be changed" -msgstr "Dies ist ein technisches Feld und kann nicht verändert werden." - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Type" -msgstr "Art" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Type '%{confirmation}' to confirm" -msgstr "Gib '%{confirmation}' ein, um zu bestätigen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Warning" -msgstr "Warnung" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval." -msgstr "Warnung: Wechsel von %{old_interval} zu %{new_interval} ist nicht erlaubt. Bitte wähle eine Mitgliedsbeitragsart mit demselben Intervall." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Yearly Interval - Joining Cycle Excluded" -msgstr "Jährliches Intervall – Beitrittszeitraum nicht einbezogen" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Yearly Interval - Joining Cycle Included" -msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen" - -#: 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." +msgid "Delete Member" +msgstr "Mitglied löschen" #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex @@ -1451,219 +926,16 @@ msgstr "Du bist dabei, alle %{count} Zyklen für dieses Mitglied zu löschen." msgid "Delete Membership Fee Type" msgstr "Mitgliedsbeitragsart löschen" -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Start Date" -msgstr "Startdatum Mitgliedsbeitrag" - -#: lib/mv_web/live/components/field_visibility_dropdown_component.ex -#, elixir-autogen, elixir-format -msgid "Show/Hide Columns" -msgstr "Spalten ein-/ausblenden" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Back to settings" -msgstr "Zurück zu den Einstellungen" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Data field %{action} successfully" -msgstr "Datenfeld wurde erfolgreich %{action}" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Data field deleted successfully" -msgstr "Datenfeld erfolgreich gelöscht" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Data Field" -msgstr "Datenfeld löschen" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit Data Field" -msgstr "Datenfeld bearbeiten" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to delete data field: %{error}" -msgstr "Konnte Datenfeld nicht löschen: %{error}" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "New Data Field" -msgstr "Neues Datenfeld" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save Data Field" -msgstr "Datenfeld speichern" - #: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Back to roles list" -msgstr "Zurück zur Rollenliste" +msgid "Delete Role" +msgstr "Rolle löschen" -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Custom" -msgstr "Benutzerdefiniert" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to delete role: %{error}" -msgstr "Rolle konnte nicht gelöscht werden: %{error}" - -#: lib/mv_web/live/role_live/index.ex -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Listing Roles" -msgstr "Rollen auflisten" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Cannot delete role. %{count} user(s) are still assigned to this role. Please assign them to another role first." -msgstr "Rolle kann nicht gelöscht werden. %{count} Benutzer*in(nen) sind dieser Rolle noch zugeordnet. Bitte weise sie zunächst einer anderen Rolle zu." - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Close sidebar" -msgstr "Sidebar schließen" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Main navigation" -msgstr "Hauptnavigation" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New Role" -msgstr "Neue Rolle" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "No description" -msgstr "Keine Beschreibung" - -#: lib/mv_web/components/layouts.ex -#, elixir-autogen, elixir-format -msgid "Open navigation menu" -msgstr "Navigationsmenü öffnen" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Permission Set" -msgstr "Berechtigungssatz" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Profile" -msgstr "Profil" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex #: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex #: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role" -msgstr "Rolle" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role deleted successfully." -msgstr "Rolle erfolgreich gelöscht." - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role details and permissions." -msgstr "Rollen-Details und Berechtigungen." - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role not found." -msgstr "Rolle nicht gefunden." - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "Role saved successfully." -msgstr "Rolle erfolgreich gespeichert." - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select permission set" -msgstr "Berechtigungssatz auswählen" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Show Role" -msgstr "Rolle anzeigen" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "System" -msgstr "System" - -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "System Role" -msgstr "System-Rolle" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "System roles cannot be deleted." -msgstr "System-Rollen können nicht gelöscht werden." - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Toggle sidebar" -msgstr "Sidebar umschalten" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "User menu" -msgstr "Benutzer*innen-Menü" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "admin - Unrestricted access" -msgstr "admin – Uneingeschränkter Zugriff" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "normal_user - Create/Read/Update access" -msgstr "normal_user – Zugriff auf Erstellen, Lesen und Aktualisieren" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "own_data - Access only to own data" -msgstr "own_data – Zugriff nur auf eigene Daten" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "read_only - Read access to all data" -msgstr "read_only – Lesezugriff auf alle Daten" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to %{action} members." -msgstr "Du hast keine Berechtigung, Mitglieder zu %{action}." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Cycle Period" -msgstr "Zykluszeitraum" +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete User" +msgstr "Benutzer*in löschen" #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy @@ -1675,95 +947,199 @@ msgstr "Alle Zyklen löschen" msgid "Delete cycle" msgstr "Zyklus löschen" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/custom_field_live/form_component.ex #, elixir-autogen, elixir-format, fuzzy -msgid "The cycle period will be calculated based on this date and the interval." -msgstr "Der Zyklus wird basierend auf diesem Datum und dem Intervall berechnet." +msgid "Delete data field" +msgstr "Datenfeld löschen" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/custom_field_live/form_component.ex #, elixir-autogen, elixir-format -msgid "Membership fee type not found" -msgstr "Mitgliedsbeitragsart nicht gefunden" +msgid "Delete data field %{name}" +msgstr "Datenfeld %{name} löschen" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete group" +msgstr "Gruppe löschen" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete group %{name}" +msgstr "Gruppe %{name} löschen" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete member" +msgstr "Mitglied löschen" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete member %{name}" +msgstr "Mitglied %{name} löschen" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete role" +msgstr "Rolle löschen" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete role %{name}" +msgstr "Rolle %{name} löschen" #: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "User %{action} successfully" -msgstr "Benutzer*in wurde erfolgreich %{action}" +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete user" +msgstr "Benutzer*in löschen" #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "User deleted successfully" -msgstr "Benutzer*in erfolgreich gelöscht" +msgid "Delete user %{email}" +msgstr "Benutzer*in %{email} löschen" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Deleting this data field cannot be undone. All datafield values for this field will be permanently removed." +msgstr "Das Löschen dieses Datenfeldes kann nicht rückgängig gemacht werden. Alle Datenfeldwerte für dieses Feld werden dauerhaft gelöscht." + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this group cannot be undone. All member-group associations will be permanently removed." +msgstr "Das Löschen der Gruppe kann nicht rückgängig gemacht werden. Alle Mitglied-Gruppen-Zuordnungen werden dauerhaft entfernt." + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this member cannot be undone. All related data (e.g. membership fee cycles) will be removed." +msgstr "Das Löschen des Mitglieds kann nicht rückgängig gemacht werden. Alle dazugehörigen Daten (z. B. Mitgliedsbeitragszyklen) werden gelöscht." + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this role cannot be undone. Users assigned to this role must be reassigned first." +msgstr "Das Löschen dieser Rolle kann nicht rückgängig gemacht werden. Benutzer*innen, die dieser Rolle zugewiesen sind, müssen zuerst einer anderen Rolle zugewiesen werden." #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "User not found" -msgstr "Benutzer*in nicht gefunden" +msgid "Deleting this user cannot be undone. The user account and any linked member association will be affected." +msgstr "Das Löschen diese*r Benutzer*in kann nicht rückgängig gemacht werden. Das Konto und die Verknüpfung zum Mitglied werden betroffen sein." #: lib/mv_web/live/membership_fee_settings_live.ex #: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to access this membership fee type" -msgstr "Du hast keine Berechtigung, auf diese Mitgliedsbeitragsart zuzugreifen." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to delete this membership fee type" -msgstr "Du hast keine Berechtigung, diese Mitgliedsbeitragsart zu löschen." - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to delete this user" -msgstr "Du hast keine Berechtigung, diese*n Benutzer*in zu löschen." - -#: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format, fuzzy -msgid "created" -msgstr "erstellt" +msgid "Deletion" +msgstr "Löschen" -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "updated" -msgstr "aktualisiert" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Description" +msgstr "Beschreibung" #: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Download CSV templates:" +msgstr "CSV-Vorlagen herunterladen:" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Draft" +msgstr "Entwurf" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "E-Mail" +msgstr "E-Mail" + +#: lib/mv_web/live/role_live/form.ex #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format -msgid "Unknown error" -msgstr "Unbekannter Fehler" +msgid "Edit" +msgstr "Bearbeiten" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Edit Cycle Amount" +msgstr "Zyklusbetrag bearbeiten" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit Data Field" +msgstr "Datenfeld bearbeiten" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Edit Field: %{field}" +msgstr "Feld bearbeiten: %{field}" + +#: lib/mv_web/live/group_live/form.ex +#, elixir-autogen, elixir-format +msgid "Edit Group" +msgstr "Gruppe bearbeiten" #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Member deleted successfully" -msgstr "Mitglied wurde erfolgreich gelöscht" +msgid "Edit Member" +msgstr "Mitglied bearbeiten" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Edit Membership Fee Type" +msgstr "Mitgliedsbeitragsart bearbeiten" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Edit User" +msgstr "Benutzer*in bearbeiten" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit group" +msgstr "Gruppe bearbeiten" -#: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member not found" -msgstr "Mitglied nicht gefunden" +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit member" +msgstr "Mitglied bearbeiten" +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit membership fee type" +msgstr "Mitgliedsbeitragsart bearbeiten" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit role" +msgstr "Rolle bearbeiten" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex #: 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 +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "You do not have permission to delete this member" -msgstr "Du hast keine Berechtigung, dieses Mitglied zu löschen." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member created successfully" -msgstr "Mitglied wurde erfolgreich erstellt" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member updated successfully" -msgstr "Mitglied wurde erfolgreich aktualisiert" +msgid "Email" +msgstr "E-Mail" #: lib/mv/membership/import/member_csv.ex #, elixir-autogen, elixir-format @@ -1776,96 +1152,136 @@ msgstr "E-Mail ist ungültig." msgid "Email is required." msgstr "E-Mail ist erforderlich." -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Roles" -msgstr "Rollen" - -#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Administration" -msgstr "Administration" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Failed to %{action} member." -msgstr "Fehler beim %{action} des Mitglieds." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Failed to save member. Please try again." -msgstr "Fehler beim Speichern des Mitglieds. Bitte versuche es erneut." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Please correct the errors in the form and try again." -msgstr "Bitte korrigiere die Fehler im Formular und versuche es erneut." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed. Please check your input." -msgstr "Validierung fehlgeschlagen. Bitte überprüfe deine Eingabe." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed: %{field} %{message}" -msgstr "Validierung fehlgeschlagen: %{field} %{message}" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed: %{message}" -msgstr "Validierung fehlgeschlagen: %{message}" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Close" -msgstr "Schließen" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Filter members" -msgstr "Mitglieder filtern" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Member filter" -msgstr "Mitgliedsfilter" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Payment Status" -msgstr "Bezahlstatus" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid " (Field: %{field})" -msgstr " (Datenfeld: %{field})" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "CSV File" -msgstr "CSV-Datei" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Download CSV templates:" -msgstr "CSV-Vorlagen herunterladen:" +msgid "Enabled" +msgstr "Aktiviert" #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "English Template" msgstr "Englische Vorlage" +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Enter the group name to confirm" +msgstr "Gib zur Bestätigung den Gruppennamen ein" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Enter the text above to confirm" +msgstr "Den obigen Text zur Bestätigung eingeben" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Error list truncated to %{count} entries" msgstr "Liste der Fehler auf %{count} Einträge reduziert." +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Error loading receipts: %{reason}" +msgstr "Belege konnten nicht geladen werden: %{reason}" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Errors" msgstr "Fehler" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Examples" +msgstr "Beispiele" + +#: 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 +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Exit Date" +msgstr "Austrittsdatum" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Exits" +msgstr "Austritte" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Expense" +msgstr "Ausgabe" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export" +msgstr "Export" + +#: lib/mv_web/controllers/member_pdf_export_controller.ex +#, elixir-autogen, elixir-format +msgid "Export contains %{count} rows, maximum is %{max}" +msgstr "Export enthält %{count} Zeilen, Maximum ist %{max}." + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export members to CSV" +msgstr "Mitglieder als CSV exportieren" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export members to PDF" +msgstr "Mitglieder als PDF exportieren" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed members:" +msgstr "Fehlgeschlagene Mitglieder:" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to %{action} member." +msgstr "Fehler beim %{action} des Mitglieds." + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to approve join request." +msgstr "Mitgliedsantrag konnte nicht genehmigt werden." + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to delete data field: %{error}" +msgstr "Konnte Datenfeld nicht löschen: %{error}" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to delete group: %{error}" +msgstr "Gruppe konnte nicht gelöscht werden: %{error}" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to delete role: %{error}" +msgstr "Rolle konnte nicht gelöscht werden: %{error}" + +#: lib/mv_web/controllers/member_pdf_export_controller.ex +#, elixir-autogen, elixir-format +msgid "Failed to generate PDF export" +msgstr "Erstellen des PDF-Exports ist fehlgeschlagen" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to link member: %{error}" +msgstr "Fehler beim Verlinken des Mitglieds: %{error}" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to load group." +msgstr "Gruppe konnte nicht geladen werden." + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to load join request." +msgstr "Mitgliedsantrag konnte nicht geladen werden." + #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format msgid "Failed to prepare CSV import: %{reason}" @@ -1881,154 +1297,218 @@ msgstr "Verarbeitung von Chunk %{idx} fehlgeschlagen: %{reason}" msgid "Failed to read file: %{reason}" msgstr "Fehler beim Lesen der Datei: %{reason}" +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to read uploaded file: unexpected format" +msgstr "Fehler beim Lesen der hochgeladenen Datei" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to reject join request." +msgstr "Mitgliedsantrag konnte nicht abgelehnt werden." + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to remove member: %{error}" +msgstr "Mitglied konnte nicht entfernt werden: %{error}" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to save member. Please try again." +msgstr "Fehler beim Speichern des Mitglieds. Bitte versuche es erneut." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to send test email. Please check your SMTP configuration." +msgstr "Test-E-Mail konnte nicht gesendet werden. Bitte prüfe deine SMTP-Konfiguration." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Failed to update cycle status: %{errors}" +msgstr "Fehler beim Aktualisieren des Zyklenstatus: %{errors}" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Failed: %{count} row(s)" msgstr "Fehlgeschlagen: %{count} Zeile(n)" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Feb." +msgstr "Feb." + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Fee Type" +msgstr "Beitragsart" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Fee type" +msgstr "Beitragsart" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Fee types" +msgstr "Beitragsarten" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Fee types could not be loaded." +msgstr "Beitragsarten konnten nicht geladen werden." + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Field" +msgstr "Feld" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Fields on the join form" +msgstr "Felder im Beitrittsformular" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Filter members" +msgstr "Mitglieder filtern" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "First Name" +msgstr "Vorname" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "First name" +msgstr "Vorname" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +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/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "From %{first} to %{last} (relevant years with membership data)" +msgstr "Von %{first} bis %{last} (Jahre mit Mitgliederdaten)" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From MAIL_FROM_EMAIL" +msgstr "Aus MAIL_FROM_EMAIL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From MAIL_FROM_NAME" +msgstr "Aus MAIL_FROM_NAME" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_ADMIN_GROUP_NAME" +msgstr "Aus OIDC_ADMIN_GROUP_NAME" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_BASE_URL" +msgstr "Aus OIDC_BASE_URL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_CLIENT_ID" +msgstr "Aus OIDC_CLIENT_ID" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_CLIENT_SECRET" +msgstr "Aus OIDC_CLIENT_SECRET" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_GROUPS_CLAIM" +msgstr "Aus OIDC_GROUPS_CLAIM" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_ONLY" +msgstr "Aus OIDC_ONLY" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_REDIRECT_URI" +msgstr "Aus OIDC_REDIRECT_URI" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_HOST" +msgstr "Von SMTP_HOST" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_PASSWORD" +msgstr "Von SMTP_PASSWORD" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_PORT" +msgstr "Von SMTP_PORT" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_SSL" +msgstr "Von SMTP_SSL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_USERNAME" +msgstr "Von SMTP_USERNAME" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_API_KEY" +msgstr "Aus VEREINFACHT_API_KEY" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_API_URL" +msgstr "Aus VEREINFACHT_API_URL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "From VEREINFACHT_APP_URL" +msgstr "Aus VEREINFACHT_APP_URL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_CLUB_ID" +msgstr "Aus VEREINFACHT_CLUB_ID" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Future unpaid cycles will be regenerated with the new amount." +msgstr "Zukünftige unbezahlte Zyklen werden mit dem neuen Betrag regeneriert." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Generate cycles from the last existing cycle to today" +msgstr "Zyklen vom letzten existierenden Zyklus bis heute generieren" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Generated cycles" +msgstr "Generierte Zyklen" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "German Template" msgstr "Deutsche Vorlage" -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Import Results" -msgstr "Import-Ergebnisse" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import is already running. Please wait for it to complete." -msgstr "Import läuft bereits. Bitte warte, bis er abgeschlossen ist." - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Import state is missing. Cannot process chunk %{idx}." -msgstr "Import-Status fehlt. Chunk %{idx} kann nicht verarbeitet werden." - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Invalid chunk index: %{idx}" -msgstr "Ungültiger Chunk-Index: %{idx}" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Line %{line}: %{message}" -msgstr "Zeile %{line}: %{message}" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "No file was uploaded" -msgstr "Es wurde keine Datei hochgeladen" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Only administrators can import members from CSV files." -msgstr "Nur Administrator*innen können Mitglieder aus CSV-Dateien importieren." - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Please select a CSV file to import." -msgstr "Bitte wähle eine CSV-Datei zum Importieren." - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Please wait for the file upload to complete before starting the import." -msgstr "Bitte warte, bis der Datei-Upload abgeschlossen ist, bevor du den Import startest." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Processing chunk %{current} of %{total}..." -msgstr "Verarbeite Chunk %{current} von %{total}..." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Start Import" -msgstr "Import starten" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Starting import..." -msgstr "Import wird gestartet..." - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Successfully inserted: %{count} member(s)" -msgstr "Erfolgreich eingefügt: %{count} Mitglied(er)" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Summary" -msgstr "Zusammenfassung" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Warnings" -msgstr "Warnungen" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Validation failed" -msgstr "Validierung fehlgeschlagen" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "email" -msgstr "E-Mail" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "email %{email} has already been taken" -msgstr "E-Mail %{email} wurde bereits verwendet" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete this group? This action cannot be undone." -msgstr "Möchtest du diese Gruppe wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Back to groups list" -msgstr "Zurück zur Gruppenübersicht" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Create Group" -msgstr "Gruppe erstellen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Group" -msgstr "Gruppe löschen" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete group" -msgstr "Gruppe löschen" - -#: lib/mv_web/live/group_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit Group" -msgstr "Gruppe bearbeiten" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Enter the group name to confirm" -msgstr "Gib zur Bestätigung den Gruppennamen ein" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to delete group: %{error}" -msgstr "Gruppe konnte nicht gelöscht werden: %{error}" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to load group." -msgstr "Gruppe konnte nicht geladen werden." - #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Group deleted successfully." @@ -2060,1169 +1540,33 @@ msgstr "Gruppe erfolgreich gespeichert." msgid "Groups" msgstr "Gruppen" -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No groups" -msgstr "Keine Gruppen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No members in this group" -msgstr "Keine Mitglieder in dieser Gruppe" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "This group has %{count} member. All member-group associations will be permanently deleted." -msgid_plural "This group has %{count} members. All member-group associations will be permanently deleted." -msgstr[0] "Diese Gruppe hat %{count} Mitglied. Alle Mitglied-Gruppen-Zuordnungen werden dauerhaft gelöscht." -msgstr[1] "Diese Gruppe hat %{count} Mitglieder. Alle Mitglied-Gruppen-Zuordnungen werden dauerhaft gelöscht." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "To confirm deletion, please enter the group name:" -msgstr "Um die Löschung zu bestätigen, gib bitte den Gruppennamen ein:" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Total: %{count} member" -msgid_plural "Total: %{count} members" -msgstr[0] "Insgesamt: %{count} Mitglied" -msgstr[1] "Insgesamt: %{count} Mitglieder" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "This user cannot be edited." -msgstr "Diese*r Benutzer*in kann nicht bearbeitet werden." - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "This user cannot be viewed." -msgstr "Diese*r Benutzer*in kann nicht angezeigt werden." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not authorized." -msgstr "Nicht berechtigt." - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Could not load data fields. Please check your permissions." -msgstr "Datenfelder konnten nicht geladen werden. Bitte überprüfe deine Berechtigungen." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Add Member" -msgstr "Mitglied hinzufügen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to remove member: %{error}" -msgstr "Mitglied konnte nicht entfernt werden: %{error}" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member is not in this group." -msgstr "Mitglied ist nicht in dieser Gruppe." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No email" -msgstr "Keine E-Mail" - -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove" -msgstr "Entfernen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove member from group" -msgstr "Mitglied aus Gruppe entfernen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Search for a member" -msgstr "Nach einem Mitglied suchen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Search for a member..." -msgstr "Nach einem Mitglied suchen..." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Add members" -msgstr "Mitglieder hinzufügen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No members selected." -msgstr "Keine Mitglieder ausgewählt." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove %{name}" -msgstr "%{name} entfernen" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Some members could not be added: %{errors}" -msgstr "Einige Mitglieder konnten nicht hinzugefügt werden: %{errors}" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "CSV files only, maximum %{size} MB" -msgstr "Nur CSV-Dateien, maximal %{size} MB" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "(ISO-8601 format: YYYY-MM-DD)" -msgstr "(ISO-8601 Format: JJJJ-MM-TT)" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "(true/false/1/0/yes/no/ja/nein)" -msgstr "(true/false/1/0/yes/no/ja/nein)" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "custom_field: %{name} – expected %{type} %{details}, got: %{value}" -msgstr "Datenfeld: %{name} – erwartet %{type} %{details}, erhalten: %{value}" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "custom_field: %{name} – expected %{type}, got: %{value}" -msgstr "Datenfeld: %{name} – erwartet %{type}, erhalten: %{value}" - -#: 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." -msgstr "Unbekannte Spalte '%{header}' wird ignoriert. Falls dies ein Datenfeld ist, erstelle es in Mila vor dem Import." - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to read uploaded file: unexpected format" -msgstr "Fehler beim Lesen der hochgeladenen Datei" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "You do not have permission to access this page." -msgstr "Du hast keine Berechtigung, auf diese Seite zuzugreifen." - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export members to CSV" -msgstr "Mitglieder als CSV exportieren" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "all" -msgstr "alle" - -#: lib/mv/membership/member/validations/email_change_permission.ex -#, elixir-autogen, elixir-format -msgid "Only administrators or the linked user can change the email for members linked to users" -msgstr "Nur Administrator*innen oder die verknüpfte*n Benutzer*in(nen) können die E-Mail-Adresse für Mitglieder verknüpfter Benutzer*innen ändern." - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select role..." -msgstr "Rolle auswählen..." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "You are not allowed to perform this action." -msgstr "Du hast keine Berechtigung, diese Aktion auszuführen." - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select a membership fee type" -msgstr "Beitragsart auswählen" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Linked" -msgstr "Verknüpft" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "OIDC" -msgstr "OIDC" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Not linked" -msgstr "Nicht verknüpft" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "SSO / OIDC user" -msgstr "SSO / OIDC Benutzer*in" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Import aborted" -msgstr "Import abgebrochen" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "paid" -msgstr "Bezahlt" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "suspended" -msgstr "Pausiert" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "unpaid" -msgstr "Unbezahlt" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member of group %{name}" -msgstr "Mitglied der Gruppe %{name}" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Active members" -msgstr "Aktive Mitglieder" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Exits" -msgstr "Austritte" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Inactive members" -msgstr "Inaktive Mitglieder" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Joins" -msgstr "Eintritte" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Statistics" -msgstr "Statistik" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Total" -msgstr "Gesamt" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Year" -msgstr "Jahr" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions pie: paid %{paid}%%, unpaid %{unpaid}%%, suspended %{suspended}%%" -msgstr "Beiträge (Kreisdiagramm): bezahlt %{paid}%, unbezahlt %{unpaid}%, pausiert %{suspended}%" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "All years combined (pie)" -msgstr "Alle Jahre zusammengefasst (Kreis)" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions by year" -msgstr "Beiträge nach Jahr" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions by year as table with stacked bars" -msgstr "Beiträge nach Jahr als Tabelle mit gestapelten Balken" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Contributions" -msgstr "Beiträge" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Fee type" -msgstr "Beitragsart" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Member numbers by year" -msgstr "Mitgliederzahlen nach Jahr" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "From %{first} to %{last} (relevant years with membership data)" -msgstr "Von %{first} bis %{last} (Jahre mit Mitgliederdaten)" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Member numbers by year as table with bars" -msgstr "Mitgliederzahlen nach Jahr als Tabelle mit Balken" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Fee types could not be loaded." -msgstr "Beitragsarten konnten nicht geladen werden." - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "CSV" -msgstr "CSV" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Created at:" -msgstr "Erstellt am:" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export" -msgstr "Export" - -#: lib/mv_web/controllers/member_pdf_export_controller.ex -#, elixir-autogen, elixir-format -msgid "Export contains %{count} rows, maximum is %{max}" -msgstr "Export enthält %{count} Zeilen, Maximum ist %{max}." - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export members to PDF" -msgstr "Mitglieder als PDF exportieren" - -#: lib/mv_web/controllers/member_pdf_export_controller.ex -#, elixir-autogen, elixir-format -msgid "Failed to generate PDF export" -msgstr "Erstellen des PDF-Exports ist fehlgeschlagen" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Member %{club_name}" -msgstr "Mitglieder %{club_name}" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Member count:" -msgstr "Anzahl Mitglieder:" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "PDF" -msgstr "PDF" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Import" -msgstr "Import" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Value type cannot be changed after creation" -msgstr "Der Wertetyp kann nach dem Erstellen nicht mehr geändert werden." - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Country" -msgstr "Land" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Could not load member list. Please try again." -msgstr "Mitgliederliste konnte nicht geladen werden. Bitte versuche es erneut." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "API Key" -msgstr "API-Schlüssel" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "API URL" -msgstr "API-URL" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Club ID" -msgstr "Vereins-ID" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_API_KEY" -msgstr "Aus VEREINFACHT_API_KEY" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_API_URL" -msgstr "Aus VEREINFACHT_API_URL" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_CLUB_ID" -msgstr "Aus VEREINFACHT_CLUB_ID" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save Vereinfacht Settings" -msgstr "Vereinfacht-Einstellungen speichern" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Sync all members without Vereinfacht contact" -msgstr "Alle Mitglieder ohne Vereinfacht-Kontakt synchronisieren" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Synced %{count} member(s) to Vereinfacht." -msgstr "%{count} Mitglied(er) mit Vereinfacht synchronisiert." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Syncing..." -msgstr "Synchronisiere..." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht is not configured. Set API URL, API Key, and Club ID." -msgstr "Vereinfacht ist nicht konfiguriert. Bitte setze API-URL, API-Schlüssel und Vereins-ID." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Test Integration" -msgstr "Integration testen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Testing..." -msgstr "Wird getestet..." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection successful. API URL, API Key and Club ID are valid." -msgstr "Verbindung erfolgreich. API-URL, API-Schlüssel und Vereins-ID sind korrekt." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Not configured. Please set API URL, API Key and Club ID." -msgstr "Nicht konfiguriert. Bitte API-URL, API-Schlüssel und Vereins-ID setzen." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP %{status}):" -msgstr "Verbindung fehlgeschlagen (HTTP %{status}):" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 401): API key is invalid or missing." -msgstr "Verbindung fehlgeschlagen (HTTP 401): API-Schlüssel ist ungültig oder fehlt." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 403): Access denied. Please check the Club ID and API key permissions." -msgstr "Verbindung fehlgeschlagen (HTTP 403): Zugriff verweigert. Bitte Vereins-ID und Berechtigungen des API-Schlüssels prüfen." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 404): API endpoint not found. Please check the API URL (e.g. correct version path)." -msgstr "Verbindung fehlgeschlagen (HTTP 404): API-Endpunkt nicht gefunden. Bitte die API-URL prüfen (z. B. korrekter Versionspfad)." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. The URL does not point to a Vereinfacht API (received HTML instead of JSON)." -msgstr "Verbindung fehlgeschlagen. Die URL zeigt nicht auf eine Vereinfacht-API (HTML statt JSON erhalten)." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. Could not reach the API (network error or wrong URL)." -msgstr "Verbindung fehlgeschlagen. API nicht erreichbar (Netzwerkfehler oder falsche URL)." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. Unknown error." -msgstr "Verbindung fehlgeschlagen. Unbekannter Fehler." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "View contact in Vereinfacht" -msgstr "Kontakt in Vereinfacht anzeigen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "%{count} failed" -msgstr "%{count} fehlgeschlagen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "%{count} synced" -msgstr "%{count} synchronisiert" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed members:" -msgstr "Fehlgeschlagene Mitglieder:" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Last sync result:" -msgstr "Letztes Sync-Ergebnis:" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Synced %{count} member(s). %{error_count} failed." -msgstr "%{count} Mitglied(er) synchronisiert. %{error_count} Fehler." - -# Vereinfacht API error messages (translated for UI) -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht: %{detail}" -msgstr "Vereinfacht: %{detail}" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No Vereinfacht contact exists for this member." -msgstr "Für dieses Mitglied existiert kein Vereinfacht-Kontakt." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." -msgstr "Synchronisiere dieses Mitglied unter Einstellungen (Bereich Vereinfacht) oder speichere das Mitglied erneut, um den Kontakt anzulegen." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "(set)" -msgstr "(gesetzt)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Leave blank to keep current" -msgstr "Leer lassen, um den aktuellen Wert beizubehalten." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Some values are set via environment variables. Those fields are read-only." -msgstr "Einige Werte werden über Umgebungsvariablen gesetzt. Diese Felder sind schreibgeschützt." - -# Vereinfacht API validation messages (looked up at runtime via dgettext) -msgid "The address field is required." -msgstr "Das Adressfeld ist erforderlich." - -msgid "The city field is required." -msgstr "Das Stadtfeld ist erforderlich." - -msgid "The email field is required." -msgstr "Das E-Mail-Feld ist erforderlich." - -msgid "The first name field is required." -msgstr "Das Vornamenfeld ist erforderlich." - -msgid "The last name field is required." -msgstr "Das Nachnamenfeld ist erforderlich." - -msgid "The zip code field is required." -msgstr "Das Postleitzahlenfeld ist erforderlich." - -msgid "Too Many Attempts." -msgstr "Zu viele Versuche." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "App URL (contact view link)" -msgstr "App-URL (Link zur Kontaktansicht)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "From VEREINFACHT_APP_URL" -msgstr "Aus VEREINFACHT_APP_URL" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Error loading receipts: %{reason}" -msgstr "Belege konnten nicht geladen werden: %{reason}" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No receipts" -msgstr "Keine Belege" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Show bookings/receipts from Vereinfacht" -msgstr "Buchungen/Belege aus Vereinfacht anzeigen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht receipts" -msgstr "Vereinfacht-Belege" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Cancelled" -msgstr "Storniert" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Credit" -msgstr "Gutschrift" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Credit note" -msgstr "Gutschrift" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Draft" -msgstr "Entwurf" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invoice" -msgstr "Rechnung" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Open" -msgstr "Offen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Receipt" -msgstr "Beleg" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Apr." -msgstr "Apr." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Aug." -msgstr "Aug." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Completed" -msgstr "Abgeschlossen" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Dec." -msgstr "Dez." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Expense" -msgstr "Ausgabe" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Feb." -msgstr "Feb." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Income" -msgstr "Einnahme" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jan." -msgstr "Jan." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jul." -msgstr "Jul." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jun." -msgstr "Jun." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mar." -msgstr "Mär." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "May" -msgstr "Mai" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Nov." -msgstr "Nov." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Oct." -msgstr "Okt." - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Sep." -msgstr "Sep." - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Fee Type" -msgstr "Beitragsart" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import members from CSV files." -msgstr "Mitglieder aus CSV-Dateien importieren." - -#: 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. Groups and membership fees are not supported for import." -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. Gruppen und Beitragsstatus können nicht importiert werden." - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Choose CSV file" -msgstr "CSV-Datei auswählen" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Import Members" -msgstr "Mitglieder importieren (CSV)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Admin group name" -msgstr "Admin-Gruppenname" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Base URL" -msgstr "Basis-URL" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Basic settings" -msgstr "Grundeinstellungen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Client ID" -msgstr "Client-ID" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Client Secret" -msgstr "Client-Geheimnis" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Datafields" -msgstr "Datenfelder" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_ADMIN_GROUP_NAME" -msgstr "Aus OIDC_ADMIN_GROUP_NAME" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_BASE_URL" -msgstr "Aus OIDC_BASE_URL" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_CLIENT_ID" -msgstr "Aus OIDC_CLIENT_ID" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_CLIENT_SECRET" -msgstr "Aus OIDC_CLIENT_SECRET" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_GROUPS_CLAIM" -msgstr "Aus OIDC_GROUPS_CLAIM" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_REDIRECT_URI" -msgstr "Aus OIDC_REDIRECT_URI" - #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Groups claim" msgstr "Gruppenclaim" -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership fee settings" -msgstr "Beitragseinstellungen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Redirect URI" -msgstr "Weiterleitungs-URI" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save OIDC Settings" -msgstr "OIDC-Einstellungen speichern" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "e.g. admin" -msgstr "z. B. admin" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_ONLY" -msgstr "Aus OIDC_ONLY" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Only OIDC sign-in (hide password login)" -msgstr "Nur OIDC-Anmeldung (Passwort-Login ausblenden)" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Clear filters" -msgstr "Filter zurücksetzen" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Apply filters" -msgstr "Filter auswählen" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete %{name}? This action cannot be undone." -msgstr "Möchtest du %{name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Danger zone" -msgstr "Gefahrenzone" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete member" -msgstr "Mitglied löschen" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete member %{name}" -msgstr "Mitglied %{name} löschen" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this member cannot be undone. All related data (e.g. membership fee cycles) will be removed." -msgstr "Das Löschen des Mitglieds kann nicht rückgängig gemacht werden. Alle dazugehörigen Daten (z. B. Mitgliedsbeitragszyklen) werden gelöscht." - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit group" -msgstr "Gruppe bearbeiten" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit member" -msgstr "Mitglied bearbeiten" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit role" -msgstr "Rolle bearbeiten" - -#: lib/mv_web/live/group_live/index.ex -#, elixir-autogen, elixir-format -msgid "Click for group details" -msgstr "Klicke für Gruppen-Details" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for member details" -msgstr "Klicke für Mitglieds-Details" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for role details" -msgstr "Klicke für Rollen-Details" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for user details" -msgstr "Klicke für Benutzer*innen-Details" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Members table" -msgstr "Mitgliedertabelle" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete the role %{name}? This action cannot be undone." -msgstr "Möchtest du die Rolle %{name} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete the user %{email}? This action cannot be undone." -msgstr "Möchtest du diese*n Benutzer*in %{email} wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden." - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Click to edit datafield" -msgstr "Klicke für Datenfeld-Details" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete data field" -msgstr "Datenfeld löschen" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Delete data field %{name}" -msgstr "Datenfeld %{name} löschen" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete group %{name}" -msgstr "Gruppe %{name} löschen" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete role" -msgstr "Rolle löschen" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete role %{name}" -msgstr "Rolle %{name} löschen" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete user" -msgstr "Benutzer*in löschen" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete user %{email}" -msgstr "Benutzer*in %{email} löschen" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this group cannot be undone. All member-group associations will be permanently removed." -msgstr "Das Löschen der Gruppe kann nicht rückgängig gemacht werden. Alle Mitglied-Gruppen-Zuordnungen werden dauerhaft entfernt." - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this role cannot be undone. Users assigned to this role must be reassigned first." -msgstr "Das Löschen dieser Rolle kann nicht rückgängig gemacht werden. Benutzer*innen, die dieser Rolle zugewiesen sind, müssen zuerst einer anderen Rolle zugewiesen werden." - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this user cannot be undone. The user account and any linked member association will be affected." -msgstr "Das Löschen diese*r Benutzer*in kann nicht rückgängig gemacht werden. Das Konto und die Verknüpfung zum Mitglied werden betroffen sein." - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "System user cannot be deleted." -msgstr "Der*die System-Benutzer*in kann nicht gelöscht werden." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save Name" -msgstr "Speichern" - -#: lib/mv_web/live/components/field_visibility_dropdown_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Datafield %{id}" -msgstr "Datenfeld %{id}" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Datafields and All Values" -msgstr "Benutzerdefiniertes Feld und alle Werte löschen" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Deleting this data field cannot be undone. All datafield values for this field will be permanently removed." -msgstr "Das Löschen dieses Datenfeldes kann nicht rückgängig gemacht werden. Alle Datenfeldwerte für dieses Feld werden dauerhaft gelöscht." - -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Individual datafields" -msgstr "Individuelle Datenfelder" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Member" -msgstr "Mitglied löschen" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Role" -msgstr "Rolle löschen" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete User" -msgstr "Benutzer*in löschen" - +#: 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 #, elixir-autogen, elixir-format -msgid "Configure fee types for membership fees." -msgstr "Verwalte Beitragsarten und Mitgliedsbeiträge." +msgid "Half-yearly" +msgstr "Halbjährlich" -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Configure which data you want to save for your members. Define individual datafields." -msgstr "Lege fest, welche Daten du für die Mitglieder speichern möchtest. Definiere individuelle Datenfelder." - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Manage users and their permissions." -msgstr "Verwalte Benutzer*innen und ihre Berechtigungen." - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "%{count} member has a value assigned for this datafield." -msgid_plural "%{count} members have values assigned for this datafield." -msgstr[0] "%{count} Mitglied hat einen Wert für dieses benutzerdefinierte Feld zugewiesen." -msgstr[1] "%{count} Mitglieder haben Werte für dieses benutzerdefinierte Feld zugewiesen." - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Individual Datafields" -msgstr "Individuelle Datenfelder" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "No group assignment" -msgstr "Keine Gruppenzuordnung" - -#: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/group_live/index.ex #: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Not specified" -msgstr "Nicht angegeben" +msgid "History" +msgstr "Historie" -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "All datafield values will be permanently deleted when you delete this datafield." -msgstr "Alle benutzerdefinierten Feldwerte werden beim Löschen dieses benutzerdefinierten Feldes dauerhaft gelöscht." - -#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Click to edit membership fee type" -msgstr "Klicke zum Bearbeiten der Mitgliedsbeitragsart" +msgid "Host" +msgstr "Host" #: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "Current payment cycle" -msgstr "Aktueller Zahlungszyklus" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Last payment cycle" -msgstr "Letzter Zahlungszyklus" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." -msgstr "Legt fest, ob Bezahlstatusfilter und Mitgliedsbeitragsstatus-Spalte den letzten abgeschlossenen oder den aktuellen Zahlungszyklus verwenden." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Default settings" -msgstr "Standardeinstellungen" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Default type: Assigned to new members; can be changed per member." -msgstr "Standardart: Wird neuen Mitgliedern zugewiesen; pro Mitglied änderbar." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." -msgstr "Beitrittszyklus einbeziehen: Aktiv = Zahlung ab dem Beitrittszyklus; inaktiv = ab dem nächsten vollen Zyklus." - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Fee types" -msgstr "Beitragsarten" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{count} filter active" -msgid_plural "%{count} filters active" -msgstr[0] "%{count} Filter aktiv" -msgstr[1] "%{count} Filter aktiv" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "without %{name}" -msgstr "ohne %{name}" - -#: lib/mv_web/templates/emails/user_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Confirm my email" -msgstr "E-Mail bestätigen" - -#: lib/mv_web/templates/emails/join_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Confirm my request" -msgstr "Anfrage bestätigen" - -#: lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex -#, elixir-autogen, elixir-format -msgid "Confirm your email address" -msgstr "E-Mail-Adresse bestätigen" - -#: lib/mv_web/emails/join_confirmation_email.ex -#, elixir-autogen, elixir-format -msgid "Confirm your membership request" -msgstr "Mitgliedschaftsanfrage bestätigen" +msgid "House Number" +msgstr "Hausnummer" #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format @@ -3239,86 +1583,148 @@ msgstr "Wenn Sie das nicht angefordert haben, können Sie diese E-Mail ignoriere msgid "If you did not submit this request, you can ignore this email." msgstr "Wenn Sie diese Anfrage nicht gestellt haben, können Sie diese E-Mail ignorieren." -#: lib/mv_web/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format -msgid "Invalid or expired link." -msgstr "Ungültiger oder abgelaufener Link." +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Import" +msgstr "Import" -#: lib/mv_web/templates/emails/user_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Please confirm your email address by clicking the link below." -msgstr "Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie auf den folgenden Link klicken." +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Import Members" +msgstr "Mitglieder importieren (CSV)" -#: lib/mv_web/templates/emails/password_reset.html.heex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reset password" -msgstr "Passwort zurücksetzen" +msgid "Import Results" +msgstr "Import-Ergebnisse" -#: lib/mv/accounts/user/senders/send_password_reset_email.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reset your password" -msgstr "Passwort zurücksetzen" +msgid "Import aborted" +msgstr "Import abgebrochen" -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "Thank you, we have received your request." -msgstr "Vielen Dank, wir haben Ihre Anfrage erhalten." +msgid "Import is already running. Please wait for it to complete." +msgstr "Import läuft bereits. Bitte warte, bis er abgeschlossen ist." -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "This link has expired. Please submit the form again." -msgstr "Dieser Link ist abgelaufen. Bitte senden Sie das Formular erneut ab." +msgid "Import members from CSV files." +msgstr "Mitglieder aus CSV-Dateien importieren." -#: lib/mv_web/templates/emails/join_confirmation.html.heex +#: lib/mv/membership/import/import_runner.ex #, elixir-autogen, elixir-format -msgid "We have received your membership request. To complete it, please click the link below." -msgstr "Wir haben Ihre Mitgliedschaftsanfrage erhalten. Bitte klicken Sie zur Bestätigung auf den folgenden Link." +msgid "Import state is missing. Cannot process chunk %{idx}." +msgstr "Import-Status fehlt. Chunk %{idx} kann nicht verarbeitet werden." -#: lib/mv_web/templates/emails/password_reset.html.heex +#: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format -msgid "You requested a password reset. Click the link below to set a new password." -msgstr "Sie haben die Zurücksetzung Ihres Passworts angefordert. Klicken Sie auf den folgenden Link, um ein neues Passwort zu setzen." +msgid "Inactive members" +msgstr "Inaktive Mitglieder" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Include both letters and numbers" +msgstr "Buchstaben und Zahlen verwenden" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Include joining cycle" +msgstr "Beitrittsdatum einbeziehen" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." +msgstr "Beitrittszyklus einbeziehen: Aktiv = Zahlung ab dem Beitrittszyklus; inaktiv = ab dem nächsten vollen Zyklus." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Income" +msgstr "Einnahme" #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Incomplete" msgstr "Unvollständig" -#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Incorrect email or password" +msgstr "Falsche E-Mail oder Passwort" + +#: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format, fuzzy -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." +msgid "Individual Datafields" +msgstr "Individuelle Datenfelder" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Individual datafields" +msgstr "Individuelle Datenfelder" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Add field" -msgstr "Feld hinzufügen" +msgid "Individual fields" +msgstr "Individuelle Felder" + +#: 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/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Interval" +msgstr "Intervall" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Interval cannot be changed after creation." +msgstr "Das Intervall kann nach der Erstellung nicht geändert werden." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Invalid amount format" +msgstr "Ungültiges Betragsformat" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "Invalid chunk index: %{idx}" +msgstr "Ungültiger Chunk-Index: %{idx}" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Invalid date format" +msgstr "Ungültiges Datumsformat" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Available fields" -msgstr "Verfügbare Felder" +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/live/global_settings_live.ex +#: lib/mv_web/controllers/join_confirm_controller.ex #, elixir-autogen, elixir-format -msgid "Configure the public join form that allows new members to submit a join request." -msgstr "Konfiguriere das öffentliche Beitrittsformular, über das neue Mitglieder einen Beitrittsantrag stellen können." +msgid "Invalid or expired link." +msgstr "Ungültiger oder abgelaufener Link." -#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Could not save join form settings." -msgstr "Beitrittsformular-Einstellungen konnten nicht gespeichert werden." +msgid "Invoice" +msgstr "Rechnung" -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/join_live.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Field" -msgstr "Feld" +msgid "Jan." +msgstr "Jan." -#: lib/mv_web/live/global_settings_live.ex +#: 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 +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "Fields on the join form" -msgstr "Felder im Beitrittsformular" +msgid "Join Date" +msgstr "Beitrittsdatum" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format @@ -3330,136 +1736,6 @@ msgstr "Beitrittsformular" msgid "Join form enabled" msgstr "Beitrittsformular aktiv" -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "No fields selected. Add at least the email field." -msgstr "Keine Felder ausgewählt. Füge mindestens das E-Mail-Feld hinzu." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Remove field %{label}" -msgstr "Feld %{label} entfernen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Board approval required (in development)" -msgstr "Bestätigung durch Vorstand erforderlich (in Entwicklung)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Individual fields" -msgstr "Individuelle Felder" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Personal data" -msgstr "Persönliche Daten" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Reorder" -msgstr "Umordnen" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "The order of rows determines the field order in the join form." -msgstr "Die Reihenfolge der Zeilen bestimmt die Reihenfolge der Felder im Beitrittsformular." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Become a member" -msgstr "Mitglied werden" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Please check your entries. Email is required." -msgstr "Bitte prüfe deine Angaben. E-Mail ist erforderlich." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Submit request" -msgstr "Antrag absenden" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Too many requests. Please try again later." -msgstr "Zu viele Anfragen. Bitte versuche es später erneut." - -#: 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." -msgstr "Wir haben deine Angaben gespeichert. Um deinen Antrag abzuschließen, klicke bitte auf den Link in der E-Mail, die wir dir geschickt haben." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed." -msgstr "Mit Absenden deines Antrags erhältst du eine Mail mit einem Bestätigungslink. Sobald du deine Mail-Adresse bestätigt hast, wird dein Antrag geprüft." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Please enter your details for the membership application here." -msgstr "Bitte gib hier die Daten für deinen Mitgliedsantrag an." - -#: 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." -msgstr "Deine Angaben werden nur zur Bearbeitung deines Mitgliedsantrags und zur Kontaktaufnahme genutzt. Zur Absicherung gegen Missbrauch verarbeiten wir zusätzlich technische Daten (z. B. IP-Adresse) nur im dafür nötigen Umfang." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Website" -msgstr "Webseite" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Additional form data" -msgstr "Weitere Formulardaten" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approve" -msgstr "Genehmigen" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approve this join request and create a member?" -msgstr "Diesen Mitgliedsantrag genehmigen und Mitglied anlegen?" - -#: lib/mv_web/live/join_request_live/helpers.ex -#, elixir-autogen, elixir-format -msgid "Approved" -msgstr "Genehmigt" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approved at" -msgstr "Genehmigt am" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to join requests" -msgstr "Zurück zu den Mitgliedsanträgen" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "Click for details" -msgstr "Klicken für Details" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to approve join request." -msgstr "Mitgliedsantrag konnte nicht genehmigt werden." - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to load join request." -msgstr "Mitgliedsantrag konnte nicht geladen werden." - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to reject join request." -msgstr "Mitgliedsantrag konnte nicht abgelehnt werden." - #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Join request" @@ -3491,21 +1767,882 @@ msgstr "Mitgliedsantrag – %{email}" msgid "Join requests" msgstr "Mitgliedsanträge" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Joining date" +msgstr "Beitrittsdatum" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Joins" +msgstr "Eintritte" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Jul." +msgstr "Jul." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Jun." +msgstr "Jun." + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Last Cycle" +msgstr "Letzter Zyklus" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Last Name" +msgstr "Nachname" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Last name" +msgstr "Nachname" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Last payment cycle" +msgstr "Letzter Zahlungszyklus" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Last sync result:" +msgstr "Letztes Sync-Ergebnis:" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Leave blank to keep current" +msgstr "Leer lassen, um den aktuellen Wert beizubehalten." + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Line %{line}: %{message}" +msgstr "Zeile %{line}: %{message}" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Linked" +msgstr "Verknüpft" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Linked Member" +msgstr "Verknüpftes Mitglied" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Linked User" +msgstr "Verknüpfte*r Benutzer*in" + +#: lib/mv_web/live/role_live/index.ex +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Listing Roles" +msgstr "Rollen auflisten" + +#: lib/mv_web/live/user_live/index.ex +#, elixir-autogen, elixir-format +msgid "Listing Users" +msgstr "Benutzer*innen auflisten" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Logout" +msgstr "Abmelden" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Main navigation" +msgstr "Hauptnavigation" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Manage global settings for the association." +msgstr "Verwalte die globalen Einstellungen des Vereins." + +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Manage membership fee types for membership fees." +msgstr "Mitgliedsbeitragsarten für Mitgliedsbeiträge verwalten." + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Manage roles and their permission sets." +msgstr "Verwalte Rollen und ihre Berechtigungssätze." + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Manage users and their permissions." +msgstr "Verwalte Benutzer*innen und ihre Berechtigungen." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mar." +msgstr "Mär." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mark as paid" +msgstr "Als bezahlt markieren" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mark as suspended" +msgstr "Als ausgesetzt markieren" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mark as unpaid" +msgstr "Als unbezahlt markieren" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "May" +msgstr "Mai" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member %{action} successfully" +msgstr "Mitglied wurde erfolgreich %{action}" + +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Member %{club_name}" +msgstr "Mitglieder %{club_name}" + +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Member count:" +msgstr "Anzahl Mitglieder:" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member created successfully" +msgstr "Mitglied wurde erfolgreich erstellt" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member deleted successfully" +msgstr "Mitglied wurde erfolgreich gelöscht" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Member field %{action} successfully" +msgstr "Mitgliedsfeld wurde erfolgreich %{action}" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Member filter" +msgstr "Mitgliedsfilter" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member is not in this group." +msgstr "Mitglied ist nicht in dieser Gruppe." + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member not found" +msgstr "Mitglied nicht gefunden" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Member numbers by year" +msgstr "Mitgliederzahlen nach Jahr" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Member numbers by year as table with bars" +msgstr "Mitgliederzahlen nach Jahr als Tabelle mit Balken" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member of group %{name}" +msgstr "Mitglied der Gruppe %{name}" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays for the year they joined" +msgstr "Mitglied zahlt für das Beitrittsjahr" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the joining month" +msgstr "Mitglied zahlt ab dem Beitrittsmonat" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the next full quarter" +msgstr "Mitglied zahlt ab dem nächsten vollständigen Quartal" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the next full year" +msgstr "Mitglied zahlt ab dem nächsten vollständigen Jahr" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member updated successfully" +msgstr "Mitglied wurde erfolgreich aktualisiert" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member will be unlinked when you save. Cannot select new member until saved." +msgstr "Die Verknüpfung des Mitglieds wird beim Speichern aufgehoben. Ein neues Mitglied kann erst nach dem Speichern ausgewählt werden." + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/index.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Members" +msgstr "Mitglieder" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Members table" +msgstr "Mitgliedertabelle" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee" +msgstr "Mitgliedsbeitrag" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Settings" +msgstr "Mitgliedsbeitragseinstellungen" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Start Date" +msgstr "Startdatum Mitgliedsbeitrag" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Status" +msgstr "Mitgliedsbeitragsstatus" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Type" +msgstr "Mitgliedsbeitragsart" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Types" +msgstr "Mitgliedsbeitragsarten" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership Fees" +msgstr "Mitgliedsbeiträge" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership fee settings" +msgstr "Beitragseinstellungen" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Membership fee start" +msgstr "Beitragsbeginn" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type deleted" +msgstr "Mitgliedsbeitragsart gelöscht" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type not found" +msgstr "Mitgliedsbeitragsart nicht gefunden" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type removed" +msgstr "Mitgliedsbeitragsart entfernt" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type saved successfully" +msgstr "Mitgliedsbeitragsart erfolgreich gespeichert" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type updated. Cycles regenerated." +msgstr "Mitgliedsbeitragsart aktualisiert. Zyklen regeneriert." + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +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/mailer.ex +#, elixir-autogen, elixir-format +msgid "Mila – Test email" +msgstr "Mila – Test-E-Mail" + +#: 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 +#, elixir-autogen, elixir-format, fuzzy +msgid "Monthly" +msgstr "Monatlich" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Monthly Interval - Joining Cycle Included" +msgstr "Monatliches Intervall – Beitrittszeitraum einbezogen" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "Name" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Name & Amount" +msgstr "Name & Betrag" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "New" +msgstr "Neue*r" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "New Data Field" +msgstr "Neues Datenfeld" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New Member" +msgstr "Neues Mitglied" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "New Membership Fee Type" +msgstr "Neue Mitgliedsbeitragsart" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New Role" +msgstr "Neue Rolle" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New User" +msgstr "Neue*r Benutzer*in" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "New amount" +msgstr "Neuer Betrag" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/member_live/index/formatter.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "No" +msgstr "Nein" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No Vereinfacht contact exists for this member." +msgstr "Für dieses Mitglied existiert kein Vereinfacht-Kontakt." + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "No approved or rejected requests yet" +msgstr "Noch keine genehmigten oder abgelehnten Anträge" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "No cycle" +msgstr "Kein Zyklus" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No cycles" +msgstr "Keine Zyklen" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "No cycles to delete" +msgstr "Keine Zyklen zum Löschen" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "No description" +msgstr "Keine Beschreibung" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No email" +msgstr "Keine E-Mail" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "No email addresses found" +msgstr "Keine E-Mail-Adressen gefunden" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "No fields selected. Add at least the email field." +msgstr "Keine Felder ausgewählt. Füge mindestens das E-Mail-Feld hinzu." + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "No file was uploaded" +msgstr "Es wurde keine Datei hochgeladen" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "No group assignment" +msgstr "Keine Gruppenzuordnung" + +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No groups" +msgstr "Keine Gruppen" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "No member linked" +msgstr "Kein Mitglied verknüpft" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No members in this group" +msgstr "Keine Mitglieder in dieser Gruppe" + +#: 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/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No members selected." +msgstr "Keine Mitglieder ausgewählt." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned." +msgstr "Keine Mitgliedsbeitragszyklen gefunden. Zyklen werden automatisch generiert, wenn eine Mitgliedsbeitragsart zugewiesen wird." + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No membership fee type assigned" +msgstr "Keine Mitgliedsbeitragsart zugewiesen" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No receipts" +msgstr "Keine Belege" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No status" +msgstr "Kein Status" + #: lib/mv_web/live/join_request_live/index.ex #, elixir-autogen, elixir-format msgid "No submitted join requests" msgstr "Keine eingereichten Mitgliedsanträge" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No user linked" +msgstr "Keine*r Benutzer*in verknüpft" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "None" +msgstr "Keine" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "None (no default)" +msgstr "Keine (kein Standard)" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "None (port 25, insecure)" +msgstr "Keines (Port 25, unsicher)" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not authorized." +msgstr "Nicht berechtigt." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Not configured. Please set API URL, API Key and Club ID." +msgstr "Nicht konfiguriert. Bitte API-URL, API-Schlüssel und Vereins-ID setzen." + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not enabled" +msgstr "Nicht aktiviert" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Not linked" +msgstr "Nicht verknüpft" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Not set" +msgstr "Nicht gesetzt" + +#: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Not specified" +msgstr "Nicht angegeben" + #: lib/mv_web/live/join_request_live/index.ex #, elixir-autogen, elixir-format msgid "Not submitted yet" msgstr "Noch nicht eingereicht" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Note" +msgstr "Hinweis" + +#: 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 +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Notes" +msgstr "Notizen" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Nov." +msgstr "Nov." + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Nr." +msgstr "Nr." + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Number" +msgstr "Zahl" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "OIDC" +msgstr "OIDC" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "OIDC (Single Sign-On)" +msgstr "OIDC (Single Sign-On)" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Oct." +msgstr "Okt." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Only OIDC sign-in (hide password login)" +msgstr "Nur OIDC-Anmeldung (Passwort-Login ausblenden)" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Only administrators can import members from CSV files." +msgstr "Nur Administrator*innen können Mitglieder aus CSV-Dateien importieren." + +#: lib/mv/membership/member/validations/email_change_permission.ex +#, elixir-autogen, elixir-format +msgid "Only administrators or the linked user can change the email for members linked to users" +msgstr "Nur Administrator*innen oder die verknüpfte*n Benutzer*in(nen) können die E-Mail-Adresse für Mitglieder verknüpfter Benutzer*innen ändern." + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +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/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Open" +msgstr "Offen" + +#: 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/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Open in email program" +msgstr "Im E-Mail-Programm öffnen" + +#: lib/mv_web/components/layouts.ex +#, elixir-autogen, elixir-format +msgid "Open navigation menu" +msgstr "Navigationsmenü öffnen" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Open requests" +msgstr "Offene Anträge" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Optional" +msgstr "Optional" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Options" +msgstr "Optionen" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "PDF" +msgstr "PDF" + +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex +#, elixir-autogen, elixir-format +msgid "Paid" +msgstr "Bezahlt" + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Password" +msgstr "Passwort" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Password Authentication" +msgstr "Passwort-Authentifizierung" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Password requirements" +msgstr "Passwort-Anforderungen" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Payment Data" +msgstr "Beitragsdaten" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Payment Interval" +msgstr "Zahlungsintervall" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Payment Status" +msgstr "Bezahlstatus" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Payments" +msgstr "Zahlungen" + #: lib/mv_web/live/join_request_live/helpers.ex #, elixir-autogen, elixir-format msgid "Pending confirmation" msgstr "Bestätigung ausstehend" +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Permission Set" +msgstr "Berechtigungssatz" + +#: lib/mv_web/live/datafields_live.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Personal Data" +msgstr "Persönliche Daten" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Personal data" +msgstr "Persönliche Daten" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Please check your entries. Email is required." +msgstr "Bitte prüfe deine Angaben. E-Mail ist erforderlich." + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Please confirm the amount change first" +msgstr "Bitte bestätige zuerst die Betragsänderung" + +#: lib/mv_web/templates/emails/user_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Please confirm your email address by clicking the link below." +msgstr "Bitte bestätigen Sie Ihre E-Mail-Adresse, indem Sie auf den folgenden Link klicken." + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Please correct the errors in the form and try again." +msgstr "Bitte korrigiere die Fehler im Formular und versuche es erneut." + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Please enter your details for the membership application here." +msgstr "Bitte gib hier die Daten für deinen Mitgliedsantrag an." + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Please select a CSV file to import." +msgstr "Bitte wähle eine CSV-Datei zum Importieren." + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Please wait for the file upload to complete before starting the import." +msgstr "Bitte warte, bis der Datei-Upload abgeschlossen ist, bevor du den Import startest." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Port" +msgstr "Port" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Postal Code" +msgstr "Postleitzahl" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Processing chunk %{current} of %{total}..." +msgstr "Verarbeite Chunk %{current} von %{total}..." + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Profile" +msgstr "Profil" + +#: 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 +#, elixir-autogen, elixir-format +msgid "Quarterly" +msgstr "Vierteljährlich" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Quarterly Interval - Joining Cycle Excluded" +msgstr "Vierteljährliches Intervall – Beitrittszeitraum nicht einbezogen" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Receipt" +msgstr "Beleg" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Recipient" +msgstr "Empfänger*in" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Recipient address rejected by the server." +msgstr "Empfängeradresse vom Server abgelehnt." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Redirect URI" +msgstr "Weiterleitungs-URI" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Regenerate Cycles" +msgstr "Zyklen regenerieren" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Regenerating..." +msgstr "Regeneriere..." + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Reject" @@ -3526,16 +2663,448 @@ msgstr "Abgelehnt" msgid "Rejected at" msgstr "Abgelehnt am" +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove" +msgstr "Entfernen" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove %{name}" +msgstr "%{name} entfernen" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Remove field %{label}" +msgstr "Feld %{label} entfernen" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove member from group" +msgstr "Mitglied aus Gruppe entfernen" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Reorder" +msgstr "Umordnen" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Request data" msgstr "Antragsdaten" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Required" +msgstr "Erforderlich" + +#: lib/mv_web/templates/emails/password_reset.html.heex +#, elixir-autogen, elixir-format +msgid "Reset password" +msgstr "Passwort zurücksetzen" + +#: lib/mv/accounts/user/senders/send_password_reset_email.ex +#, elixir-autogen, elixir-format +msgid "Reset your password" +msgstr "Passwort zurücksetzen" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Review by" +msgstr "Geprüft von" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Review information" msgstr "Bearbeitungsinformationen" +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Reviewed at" +msgstr "Geprüft am" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role" +msgstr "Rolle" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role deleted successfully." +msgstr "Rolle erfolgreich gelöscht." + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role details and permissions." +msgstr "Rollen-Details und Berechtigungen." + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role not found." +msgstr "Rolle nicht gefunden." + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "Role saved successfully." +msgstr "Rolle erfolgreich gespeichert." + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Roles" +msgstr "Rollen" + +#: 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 error:" +msgstr "SMTP-Fehler:" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is not configured. Please set at least the SMTP host." +msgstr "SMTP ist nicht konfiguriert. Bitte setze mindestens den SMTP-Host." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is not configured. Transactional emails (join confirmation, password reset, etc.) will not be delivered reliably." +msgstr "SMTP ist nicht konfiguriert. Transaktions-E-Mails (Beitrittsbestätigung, Passwort-Reset usw.) werden möglicherweise nicht zuverlässig zugestellt." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SSL (port 465)" +msgstr "SSL (Port 465)" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "SSO / OIDC user" +msgstr "SSO / OIDC Benutzer*in" + +#: lib/mv_web/live/group_live/form.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/form.ex +#, elixir-autogen, elixir-format +msgid "Save" +msgstr "Speichern" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Data Field" +msgstr "Datenfeld speichern" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Field" +msgstr "Benutzerdefiniertes Feld speichern" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save Member" +msgstr "Mitglied speichern" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save Membership Fee Type" +msgstr "Mitgliedsbeitragsart speichern" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Name" +msgstr "Speichern" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save OIDC Settings" +msgstr "OIDC-Einstellungen speichern" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save SMTP Settings" +msgstr "SMTP-Einstellungen speichern" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Settings" +msgstr "Einstellungen speichern" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save User" +msgstr "Benutzer*in speichern" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save Vereinfacht Settings" +msgstr "Vereinfacht-Einstellungen speichern" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save to confirm linking." +msgstr "Speichern, um die Verknüpfung zu bestätigen." + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Saving..." +msgstr "Speichern..." + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Search for a member" +msgstr "Nach einem Mitglied suchen" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Search for a member to link..." +msgstr "Nach einem Mitglied zum Verknüpfen suchen..." + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Search for a member..." +msgstr "Nach einem Mitglied suchen..." + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Search for member to link" +msgstr "Nach einem Mitglied zum Verknüpfen suchen" + +#: lib/mv_web/live/components/search_bar_component.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Search..." +msgstr "Suchen..." + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select a membership fee type" +msgstr "Beitragsart auswählen" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select a membership fee type for this member. Members can only switch between types with the same interval." +msgstr "Wähle eine Mitgliedsbeitragsart für dieses Mitglied. Mitglieder können nur zwischen Arten mit demselben Intervall wechseln." + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Select all" +msgstr "Alle auswählen" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Select all members" +msgstr "Alle Mitglieder auswählen" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select interval" +msgstr "Intervall auswählen" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Select language" +msgstr "Sprache auswählen" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Select member" +msgstr "Mitglied auswählen" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Select none" +msgstr "Keine auswählen" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select permission set" +msgstr "Berechtigungssatz auswählen" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select role..." +msgstr "Rolle auswählen..." + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Selected" +msgstr "Ausgewählt" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Send test email" +msgstr "Test-E-Mail senden" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender address rejected. The \"Sender email\" must be owned by or authorized for the SMTP user." +msgstr "Absenderadresse abgelehnt. Die \"Absender-E-Mail\" muss dem SMTP-Nutzer gehören oder für ihn erlaubt sein." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender email (From)" +msgstr "Absender-E-Mail (Von)" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender name (From)" +msgstr "Absendername (Von)" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sending..." +msgstr "Sende..." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Sep." +msgstr "Sep." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Server unreachable. Check host and port." +msgstr "Server nicht erreichbar. Host und Port prüfen." + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Set Password" +msgstr "Passwort setzen" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." +msgstr "Legt fest, ob Bezahlstatusfilter und Mitgliedsbeitragsstatus-Spalte den letzten abgeschlossenen oder den aktuellen Zahlungszyklus verwenden." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings" +msgstr "Einstellungen" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Settings saved successfully." +msgstr "Einstellungen erfolgreich gespeichert" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings updated successfully" +msgstr "Einstellungen erfolgreich gespeichert" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Show" +msgstr "Anzeigen" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Show Member" +msgstr "Mitglied anzeigen" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Show Role" +msgstr "Rolle anzeigen" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Show User" +msgstr "Benutzer*in anzeigen" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Show bookings/receipts from Vereinfacht" +msgstr "Buchungen/Belege aus Vereinfacht anzeigen" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Show in overview" +msgstr "In der Übersicht anzeigen" + +#: lib/mv_web/live/components/field_visibility_dropdown_component.ex +#, elixir-autogen, elixir-format +msgid "Show/Hide Columns" +msgstr "Spalten ein-/ausblenden" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Slug does not match. Deletion cancelled." +msgstr "Der eingegebene Text stimmt nicht überein. Vorgang abgebrochen." + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Some members could not be added: %{errors}" +msgstr "Einige Mitglieder konnten nicht hinzugefügt werden: %{errors}" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Some values are set via environment variables. Those fields are read-only." +msgstr "Einige Werte werden über Umgebungsvariablen gesetzt. Diese Felder sind schreibgeschützt." + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "Something went wrong!" +msgstr "Etwas ist schiefgelaufen!" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Start Import" +msgstr "Import starten" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Starting import..." +msgstr "Import wird gestartet..." + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Statistics" +msgstr "Statistik" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Status" +msgstr "Status" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Street" +msgstr "Straße" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Submit request" +msgstr "Antrag absenden" + #: lib/mv_web/live/join_request_live/helpers.ex #, elixir-autogen, elixir-format msgid "Submitted" @@ -3547,108 +3116,671 @@ msgstr "Eingereicht" msgid "Submitted at" msgstr "Eingereicht am" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "No approved or rejected requests yet" -msgstr "Noch keine genehmigten oder abgelehnten Anträge" +msgid "Successfully inserted: %{count} member(s)" +msgstr "Erfolgreich eingefügt: %{count} Mitglied(er)" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reviewed at" -msgstr "Geprüft am" +msgid "Summary" +msgstr "Zusammenfassung" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex #, elixir-autogen, elixir-format -msgid "History" -msgstr "Historie" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "Open requests" -msgstr "Offene Anträge" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Review by" -msgstr "Geprüft von" +msgid "Suspended" +msgstr "Pausiert" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Accounting-Software (Vereinfacht) Integration" -msgstr "Buchhaltungs-Software (Vereinfacht) Integration" +msgid "Sync all members without Vereinfacht contact" +msgstr "Alle Mitglieder ohne Vereinfacht-Kontakt synchronisieren" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." +msgstr "Synchronisiere dieses Mitglied unter Einstellungen (Bereich Vereinfacht) oder speichere das Mitglied erneut, um den Kontakt anzulegen." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Synced %{count} member(s) to Vereinfacht." +msgstr "%{count} Mitglied(er) mit Vereinfacht synchronisiert." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Synced %{count} member(s). %{error_count} failed." +msgstr "%{count} Mitglied(er) synchronisiert. %{error_count} Fehler." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Syncing..." +msgstr "Synchronisiere..." #: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "System" +msgstr "System" + +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "System Role" +msgstr "System-Rolle" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "System roles cannot be deleted." +msgstr "System-Rollen können nicht gelöscht werden." + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Manage roles and their permission sets." -msgstr "Verwalte Rollen und ihre Berechtigungssätze." +msgid "System user cannot be deleted." +msgstr "Der*die System-Benutzer*in kann nicht gelöscht werden." #: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS (port 587, recommended)" +msgstr "TLS (Port 587, empfohlen)" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS connection failed. Check the TLS/SSL setting and port (587 for TLS, 465 for SSL)." +msgstr "TLS-Verbindung fehlgeschlagen. TLS/SSL-Einstellung und Port prüfen (587 für TLS, 465 für SSL)." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS/SSL" +msgstr "TLS/SSL" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test Integration" +msgstr "Integration testen" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test email" +msgstr "Test-E-Mail" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test email sent successfully." +msgstr "Test-E-Mail erfolgreich gesendet." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Testing..." +msgstr "Wird getestet..." + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Text" +msgstr "Textfeld" + +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Thank you, we have received your request." +msgstr "Vielen Dank, wir haben Ihre Anfrage erhalten." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "The authentication server is currently unavailable. Please try again later." +msgstr "Der Authentifizierungsserver ist derzeit nicht erreichbar. Bitte versuche es später erneut." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy -msgid "OIDC (Single Sign-On)" -msgstr "OIDC (Single Sign-On)" +msgid "The cycle period will be calculated based on this date and the interval." +msgstr "Der Zyklus wird basierend auf diesem Datum und dem Intervall berechnet." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "The order of rows determines the field order in the join form." +msgstr "Die Reihenfolge der Zeilen bestimmt die Reihenfolge der Felder im Beitrittsformular." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "The sender email must be owned by or authorized for the SMTP user on most servers." +msgstr "Die Absender-E-Mail muss auf den meisten SMTP-Servern dem SMTP-Nutzer gehören oder für ihn erlaubt sein." + +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +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/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "These will appear in addition to other data when adding new members." +msgstr "Diese Felder können zusätzlich zu den normalen Daten ausgefüllt werden, wenn ein neues Mitglied angelegt wird." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "This action cannot be undone." +msgstr "Diese Aktion kann nicht rückgängig gemacht werden." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "This email is already linked to a different OIDC account. Cannot link multiple OIDC providers to the same account." +msgstr "Diese E-Mail-Adresse ist bereits mit einem anderen OIDC-Konto verknüpft. Es können nicht mehrere OIDC-Provider mit demselben Konto verknüpft werden." + +#: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "This field cannot be empty" +msgstr "Dieses Feld darf nicht leer bleiben" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "This field is required" +msgstr "Dieses Feld ist erforderlich" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "This group has %{count} member. All member-group associations will be permanently deleted." +msgid_plural "This group has %{count} members. All member-group associations will be permanently deleted." +msgstr[0] "Diese Gruppe hat %{count} Mitglied. Alle Mitglied-Gruppen-Zuordnungen werden dauerhaft gelöscht." +msgstr[1] "Diese Gruppe hat %{count} Mitglieder. Alle Mitglied-Gruppen-Zuordnungen werden dauerhaft gelöscht." + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "This is a technical field and cannot be changed" +msgstr "Dies ist ein technisches Feld und kann nicht verändert werden." + +#: lib/mv/mailer.ex +#, elixir-autogen, elixir-format +msgid "This is a test email sent from Mila. If you received this, your SMTP configuration is working correctly." +msgstr "Dies ist eine Test-E-Mail von Mila. Wenn du diese erhalten hast, funktioniert deine SMTP-Konfiguration korrekt." + +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "This link has expired. Please submit the form again." +msgstr "Dieser Link ist abgelaufen. Bitte senden Sie das Formular erneut ab." + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "This user cannot be edited." +msgstr "Diese*r Benutzer*in kann nicht bearbeitet werden." + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "This user cannot be viewed." +msgstr "Diese*r Benutzer*in kann nicht angezeigt werden." #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format, fuzzy msgid "This user is linked via SSO (Single Sign-On). A password set or changed here only affects login with email and password in this application. It does not change the password in your identity provider (e.g. Authentik). To change the SSO password, use the identity provider or your organization's IT." msgstr "Diese*r Benutzer*in ist über SSO (Single Sign-On) verbunden. Ein hier festgelegtes oder geändertes Passwort wirkt sich nur auf die Anmeldung mit E-Mail-Adresse und Passwort in dieser Anwendung aus. Es ändert nicht das Passwort in deinem Identitätsanbieter (z. B. Authentik). Um das SSO-Passwort zu ändern, wende dich an den Identitätsanbieter oder die IT deiner Organisation." +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +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/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "To confirm deletion, please enter the group name:" +msgstr "Um die Löschung zu bestätigen, gib bitte den Gruppennamen ein:" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "To confirm deletion, please enter this text:" +msgstr "Um die Löschung zu bestätigen, gib bitte folgenden Text ein:" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Toggle dark mode" +msgstr "Dunklen Modus umschalten" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Toggle sidebar" +msgstr "Sidebar umschalten" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Too many requests. Please try again later." +msgstr "Zu viele Anfragen. Bitte versuche es später erneut." + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Total" +msgstr "Gesamt" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Total: %{count} member" +msgid_plural "Total: %{count} members" +msgstr[0] "Insgesamt: %{count} Mitglied" +msgstr[1] "Insgesamt: %{count} Mitglieder" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Type" +msgstr "Art" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Type '%{confirmation}' to confirm" +msgstr "Gib '%{confirmation}' ein, um zu bestätigen" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Unable to authenticate with OIDC. Please try again." +msgstr "OIDC-Authentifizierung fehlgeschlagen. Bitte versuche es erneut." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Unable to sign in. Please try again." +msgstr "Anmeldung fehlgeschlagen. Bitte versuche es erneut." + +#: 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." +msgstr "Unbekannte Spalte '%{header}' wird ignoriert. Falls dies ein Datenfeld ist, erstelle es in Mila vor dem Import." + +#: lib/mv_web/live/import_live/components.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unknown error" +msgstr "Unbekannter Fehler" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unlink Member" +msgstr "Verknüpfung aufheben" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unlinking scheduled" +msgstr "Aufhebung der Verknüpfung geplant" + +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex +#, elixir-autogen, elixir-format +msgid "Unpaid" +msgstr "Unbezahlt" + +#: 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. Groups and membership fees are not supported for import." +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. Gruppen und Beitragsstatus können nicht importiert werden." + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User" +msgstr "Benutzer*in" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "User %{action} successfully" +msgstr "Benutzer*in wurde erfolgreich %{action}" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User deleted successfully" +msgstr "Benutzer*in erfolgreich gelöscht" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "User menu" +msgstr "Benutzer*innen-Menü" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User not found" +msgstr "Benutzer*in nicht gefunden" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "User will be created without a password. Check 'Set Password' to add one." +msgstr "Benutzer*in wird ohne Passwort erstellt. Aktiviere 'Passwort setzen', um eines hinzuzufügen." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Username" +msgstr "Benutzername" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Users" +msgstr "Benutzer*innen" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Validation failed" +msgstr "Validierung fehlgeschlagen" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed. Please check your input." +msgstr "Validierung fehlgeschlagen. Bitte überprüfe deine Eingabe." + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed: %{field} %{message}" +msgstr "Validierung fehlgeschlagen: %{field} %{message}" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed: %{message}" +msgstr "Validierung fehlgeschlagen: %{message}" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Value Type" +msgstr "Wertetyp" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Value type" +msgstr "Wertetyp" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Value type cannot be changed after creation" +msgstr "Der Wertetyp kann nach dem Erstellen nicht mehr geändert werden." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht is not configured. Set API URL, API Key, and Club ID." +msgstr "Vereinfacht ist nicht konfiguriert. Bitte setze API-URL, API-Schlüssel und Vereins-ID." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht receipts" +msgstr "Vereinfacht-Belege" + +# Vereinfacht API error messages (translated for UI) +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht: %{detail}" +msgstr "Vereinfacht: %{detail}" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "View contact in Vereinfacht" +msgstr "Kontakt in Vereinfacht anzeigen" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Warning" +msgstr "Warnung" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval." +msgstr "Warnung: Wechsel von %{old_interval} zu %{new_interval} ist nicht erlaubt. Bitte wähle eine Mitgliedsbeitragsart mit demselben Intervall." + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Warnings" +msgstr "Warnungen" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "We can't find the internet" +msgstr "Keine Internetverbindung gefunden" + +#: 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 Ihre Mitgliedschaftsanfrage erhalten. Bitte klicken Sie zur Bestätigung auf den folgenden Link." + +#: 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." +msgstr "Wir haben deine Angaben gespeichert. Um deinen Antrag abzuschließen, klicke bitte auf den Link in der E-Mail, die wir dir geschickt haben." + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Website" +msgstr "Webseite" + #: 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." msgstr "Wenn aktiviert und OIDC konfiguriert ist, zeigt die Anmeldeseite nur den Single Sign-On-Button." -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save datafield" -msgstr "Datenfeld speichern" +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Year" +msgstr "Jahr" +#: lib/mv_web/helpers/membership_fee_helpers.ex #: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save default settings" -msgstr "Standardeinstellungen speichern" - -#: lib/mv_web/live/group_live/form.ex -#, elixir-autogen, elixir-format -msgid "Save group" -msgstr "Gruppe speichern" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save member" -msgstr "Mitglied speichern" - #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Save membership fee type" -msgstr "Mitgliedsbeitragsart speichern" +msgid "Yearly" +msgstr "Jährlich" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Yearly Interval - Joining Cycle Excluded" +msgstr "Jährliches Intervall – Beitrittszeitraum nicht einbezogen" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Yearly Interval - Joining Cycle Included" +msgstr "Jährliches Intervall – Beitrittszeitraum einbezogen" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/member_live/index/formatter.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Yes" +msgstr "Ja" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Yes/No-Selection" +msgstr "Ja/Nein-Auswahl" + +#: 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/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "You are not allowed to perform this action." +msgstr "Du hast keine Berechtigung, diese Aktion auszuführen." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You are now signed in" +msgstr "Du bist jetzt angemeldet" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You are now signed out" +msgstr "Du bist jetzt abgemeldet" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to %{action} members." +msgstr "Du hast keine Berechtigung, Mitglieder zu %{action}." + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to access this membership fee type" +msgstr "Du hast keine Berechtigung, auf diese Mitgliedsbeitragsart zuzugreifen." + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "You do not have permission to access this page." +msgstr "Du hast keine Berechtigung, auf diese Seite zuzugreifen." + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this member" +msgstr "Du hast keine Berechtigung, dieses Mitglied zu löschen." + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this membership fee type" +msgstr "Du hast keine Berechtigung, diese Mitgliedsbeitragsart zu löschen." + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this user" +msgstr "Du hast keine Berechtigung, diese*n Benutzer*in zu löschen." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" +msgstr "Du hast dich bereits auf andere Weise angemeldet, aber dein Konto noch nicht bestätigt.\nDu kannst dein Konto über den Link bestätigen, den wir dir gesendet haben, oder durch Zurücksetzen deines Passworts.\n" + +#: lib/mv_web/templates/emails/password_reset.html.heex +#, elixir-autogen, elixir-format +msgid "You requested a password reset. Click the link below to set a new password." +msgstr "Sie haben die Zurücksetzung Ihres Passworts angefordert. Klicken Sie auf den folgenden Link, um ein neues Passwort zu setzen." + +#: 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." +msgstr "Deine Angaben werden nur zur Bearbeitung deines Mitgliedsantrags und zur Kontaktaufnahme genutzt. Zur Absicherung gegen Missbrauch verarbeiten wir zusätzlich technische Daten (z. B. IP-Adresse) nur im dafür nötigen Umfang." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Your email address has now been confirmed" +msgstr "Deine E-Mail-Adresse wurde bestätigt" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Your password has successfully been reset" +msgstr "Dein Passwort wurde erfolgreich zurückgesetzt" #: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save role" -msgstr "Rolle speichern" +#, elixir-autogen, elixir-format +msgid "admin - Unrestricted access" +msgstr "admin – Uneingeschränkter Zugriff" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "all" +msgstr "alle" + +#: lib/mv_web/components/table_components.ex +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "ascending" +msgstr "aufsteigend" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "close" +msgstr "schließen" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "create" +msgstr "erstellt" #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Save user" -msgstr "Benutzer*in speichern" +msgid "created" +msgstr "erstellt" -#~ #: lib/mv_web/live/import_live/components.ex -#~ #, elixir-autogen, elixir-format, fuzzy -#~ msgid "Manage Member Data" -#~ msgstr "Mitgliederdaten verwalten" +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "custom_field: %{name} – expected %{type} %{details}, got: %{value}" +msgstr "Datenfeld: %{name} – erwartet %{type} %{details}, erhalten: %{value}" -#~ #: lib/mv_web/live/member_field_live/form_component.ex -#~ #, elixir-autogen, elixir-format, fuzzy -#~ msgid "Save Field" -#~ msgstr "Datenfeld speichern" +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "custom_field: %{name} – expected %{type}, got: %{value}" +msgstr "Datenfeld: %{name} – erwartet %{type}, erhalten: %{value}" -#~ #: lib/mv_web/live/membership_fee_settings_live.ex -#~ #, elixir-autogen, elixir-format, fuzzy -#~ msgid "Save Settings" -#~ msgstr "Einstellungen speichern" +#: lib/mv_web/components/table_components.ex +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "descending" +msgstr "absteigend" -#~ #: lib/mv_web/live/global_settings_live.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "Vereinfacht Integration" -#~ msgstr "Vereinfacht-Integration" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "e.g. admin" +msgstr "z. B. admin" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "email" +msgstr "E-Mail" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "email %{email} has already been taken" +msgstr "E-Mail %{email} wurde bereits verwendet" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "normal_user - Create/Read/Update access" +msgstr "normal_user – Zugriff auf Erstellen, Lesen und Aktualisieren" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "own_data - Access only to own data" +msgstr "own_data – Zugriff nur auf eigene Daten" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "paid" +msgstr "Bezahlt" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "read_only - Read access to all data" +msgstr "read_only – Lesezugriff auf alle Daten" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "suspended" +msgstr "Pausiert" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "unpaid" +msgstr "Unbezahlt" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "update" +msgstr "aktualisiert" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "updated" +msgstr "aktualisiert" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "without %{name}" +msgstr "ohne %{name}" diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 667e6d0..51bd86d 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -11,621 +11,53 @@ msgid "" msgstr "" -#: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Actions" +msgid " (Field: %{field})" msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Are you sure?" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "Attempting to reconnect" -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 -#, elixir-autogen, elixir-format -msgid "City" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit Member" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: 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 -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Email" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "First Name" -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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Join Date" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Last Name" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New Member" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Show" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "Something went wrong!" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "We can't find the internet" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "close" -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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Exit Date" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "House Number" -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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Notes" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Paid" -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 -#, elixir-autogen, elixir-format -msgid "Postal Code" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex #: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format -msgid "Saving..." -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 -#, elixir-autogen, elixir-format -msgid "Street" +msgid "%{count} failed" msgstr "" #: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{count} filter active" +msgid_plural "%{count} filters active" +msgstr[0] "" +msgstr[1] "" + #: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/member_live/index/formatter.ex -#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "%{count} member has a value assigned for this datafield." +msgid_plural "%{count} members have values assigned for this datafield." +msgstr[0] "" +msgstr[1] "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "%{count} synced" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "(ISO-8601 format: YYYY-MM-DD)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "(set)" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "(true/false/1/0/yes/no/ja/nein)" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format -msgid "No" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Show Member" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/member_live/index/formatter.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Yes" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "create" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "update" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Incorrect email or password" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member %{action} successfully" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You are now signed in" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You are now signed out" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Your email address has now been confirmed" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Your password has successfully been reset" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#: 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/membership_fees_component.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Cancel" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Description" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit User" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Enabled" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Logout" -msgstr "" - -#: lib/mv_web/live/user_live/index.ex -#, elixir-autogen, elixir-format -msgid "Listing Users" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/index.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Members" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Name" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New User" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not enabled" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Note" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Password Authentication" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Required" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Select all members" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Select member" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Show User" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "User" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Value type" -msgstr "" - -#: lib/mv_web/components/table_components.ex -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "ascending" -msgstr "" - -#: lib/mv_web/components/table_components.ex -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "descending" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "New" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Admin Note" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "At least 8 characters" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Change Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Check 'Change Password' above to set a new password for this user." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Confirm Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Consider using special characters" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Include both letters and numbers" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Password requirements" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Set Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "User will be created without a password. Check 'Set Password' to add one." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Linked Member" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Linked User" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "No member linked" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No user linked" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to members list" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to users list" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Select language" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Toggle dark mode" -msgstr "" - -#: lib/mv_web/live/components/search_bar_component.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Search..." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Users" -msgstr "" - -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "Click to sort" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "First name" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "An account with this email already exists. Please verify your password to link your OIDC account." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Unable to authenticate with OIDC. Please try again." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "The authentication server is currently unavailable. Please try again later." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Authentication configuration error. Please contact the administrator." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Unable to sign in. Please try again." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Authentication failed. Please try again." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Cannot update email: This email is already registered to another account. Please change your email in the identity provider." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "This email is already linked to a different OIDC account. Cannot link multiple OIDC providers to the same account." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Custom Fields" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Enter the text above to confirm" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "To confirm deletion, please enter this text:" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Show in overview" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Association Name" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Club Settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Manage global settings for the association." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings updated successfully" +msgid "A cycle for this period already exists" msgstr "" #: lib/mv_web/live/user_live/form.ex @@ -633,93 +65,75 @@ msgstr "" msgid "A member with this email already exists. To link with a different member, please change one of the email addresses first." msgstr "" -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Available members" +msgid "API Key" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Failed to link member: %{error}" +msgid "API URL" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex #, elixir-autogen, elixir-format -msgid "Member will be unlinked when you save. Cannot select new member until saved." +msgid "About Membership Fee Types" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Save to confirm linking." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Search for a member to link..." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Search for member to link" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Selected" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unlink Member" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unlinking scheduled" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "Copied %{count} email address to clipboard" -msgid_plural "Copied %{count} email addresses to clipboard" -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Copy email addresses of selected members" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "No email addresses found" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -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/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Open in email program" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "Tip: Paste email addresses into the BCC field for privacy compliance" +msgid "Accounting-Software (Vereinfacht) Integration" msgstr "" #: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format -msgid "This field cannot be empty" +msgid "Actions" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Active members" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Add Member" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Add field" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Add members" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Additional form data" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Address" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Admin Note" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Admin group name" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Administration" msgstr "" #: lib/mv_web/components/core_components.ex @@ -729,9 +143,166 @@ msgstr "" msgid "All" msgstr "" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "All cycles deleted" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "All datafield values will be permanently deleted when you delete this datafield." +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "All years combined (pie)" +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." +msgstr "" + +#: 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/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Amount" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +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/membership_fees_component.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/helpers.ex +#, elixir-autogen, elixir-format +msgid "An error occurred" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "App URL (contact view link)" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Apply filters" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approve" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approve this join request and create a member?" +msgstr "" + +#: lib/mv_web/live/join_request_live/helpers.ex +#, elixir-autogen, elixir-format +msgid "Approved" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approved at" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Apr." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Address" +msgid "Are you sure you want to delete %{name}? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Are you sure you want to delete the role %{name}? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Are you sure you want to delete the user %{email}? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Are you sure you want to delete this cycle?" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Are you sure you want to delete this group? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Are you sure?" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Association Name" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "At least 8 characters" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "Attempting to reconnect" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Aug." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Authentication configuration error. Please contact the administrator." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Authentication failed. Please check the SMTP username and password." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Authentication failed. Please try again." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Available fields" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Available members" msgstr "" #: lib/mv_web/live/custom_field_live/form_component.ex @@ -750,50 +321,70 @@ msgstr "" msgid "Back" msgstr "" -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format -msgid "Contact Data" +msgid "Back to groups list" msgstr "" -#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format -msgid "Nr." +msgid "Back to join requests" msgstr "" #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Payment Data" +msgid "Back to members list" msgstr "" -#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format -msgid "Payments" +msgid "Back to roles list" msgstr "" -#: lib/mv_web/live/datafields_live.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex #, elixir-autogen, elixir-format -msgid "Personal Data" +msgid "Back to settings" msgstr "" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Save" +msgid "Back to users list" msgstr "" -#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Create Member" +msgid "Base URL" msgstr "" -#: 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/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/components/layouts/sidebar.ex #, elixir-autogen, elixir-format -msgid "Amount" +msgid "Basic settings" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Become a member" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed." +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "CSV" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "CSV File" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "CSV files only, maximum %{size} MB" msgstr "" #: lib/mv_web/live/membership_fee_settings_live.ex @@ -802,233 +393,24 @@ msgstr "" msgid "Can be changed at any time. Amount changes affect future periods only." msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Deletion" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Examples" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Fixed after creation. Members can only switch between types with the same interval." -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 -#, elixir-autogen, elixir-format -msgid "Half-yearly" -msgstr "" - -#: 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/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Interval" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Joining date" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays for the year they joined" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the joining month" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the next full quarter" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the next full year" -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 -#, elixir-autogen, elixir-format -msgid "Monthly" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Name & Amount" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Only possible if no members are assigned to this type." -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 -#, elixir-autogen, elixir-format -msgid "Quarterly" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Status" -msgstr "" - -#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/show.ex +#: 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/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Suspended" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Unpaid" -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 +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Yearly" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Last name" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "None" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Options" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Select all" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Select none" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Slug does not match. Deletion cancelled." -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." -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Value Type" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Date" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "E-Mail" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Number" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Text" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Yes/No-Selection" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Optional" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Member field %{action} successfully" +msgid "Cancel" msgstr "" #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "A cycle for this period already exists" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "About Membership Fee Types" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "All cycles deleted" -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." -msgstr "" - -#: 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 -#: lib/mv_web/live/role_live/helpers.ex -#, elixir-autogen, elixir-format -msgid "An error occurred" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete this cycle?" +msgid "Cancelled" msgstr "" #: lib/mv_web/live/membership_fee_settings_live.ex @@ -1037,36 +419,294 @@ msgstr "" msgid "Cannot delete - %{count} member(s) assigned" msgstr "" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Cannot delete role. %{count} user(s) are still assigned to this role. Please assign them to another role first." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Cannot update email: This email is already registered to another account. Please change your email in the identity provider." +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Change Amount?" msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Change Password" +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Changing the amount will affect %{count} member(s)." msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Check 'Change Password' above to set a new password for this user." +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Choose CSV file" +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 +#, elixir-autogen, elixir-format +msgid "City" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Clear filters" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Click for details" +msgstr "" + +#: lib/mv_web/live/group_live/index.ex +#, elixir-autogen, elixir-format +msgid "Click for group details" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for member details" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for role details" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for user details" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Click to edit amount" msgstr "" +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Click to edit datafield" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Click to edit membership fee type" +msgstr "" + +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "Click to sort" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Client ID" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Client Secret" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Close" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Close sidebar" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Club ID" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Club Settings" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Completed" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Configure fee types for membership fees." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Configure the public join form that allows new members to submit a join request." +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Configure which data you want to save for your members. Define individual datafields." +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Confirm Change" msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Confirm Password" +msgstr "" + +#: lib/mv_web/templates/emails/user_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Confirm my email" +msgstr "" + +#: lib/mv_web/templates/emails/join_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Confirm my request" +msgstr "" + +#: lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex +#, elixir-autogen, elixir-format +msgid "Confirm your email address" +msgstr "" + +#: lib/mv_web/emails/join_confirmation_email.ex +#, elixir-autogen, elixir-format +msgid "Confirm your membership request" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Confirmation text does not match" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP %{status}):" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 401): API key is invalid or missing." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 403): Access denied. Please check the Club ID and API key permissions." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 404): API endpoint not found. Please check the API URL (e.g. correct version path)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. Could not reach the API (network error or wrong URL)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. The URL does not point to a Vereinfacht API (received HTML instead of JSON)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. Unknown error." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection successful. API URL, API Key and Club ID are valid." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Consider using special characters" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Contact Data" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions by year" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions by year as table with stacked bars" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions pie: paid %{paid}%%, unpaid %{unpaid}%%, suspended %{suspended}%%" +msgstr "" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "Copied %{count} email address to clipboard" +msgid_plural "Copied %{count} email addresses to clipboard" +msgstr[0] "" +msgstr[1] "" + #: lib/mv_web/live/member_live/index.html.heex #, elixir-autogen, elixir-format msgid "Copy email addresses" 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/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Could not load data fields. Please check your permissions." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Could not load member list. Please try again." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Could not save join form settings." +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 +#, elixir-autogen, elixir-format +msgid "Country" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Create" @@ -1077,11 +717,37 @@ msgstr "" msgid "Create Cycle" msgstr "" +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#, elixir-autogen, elixir-format +msgid "Create Group" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Create Member" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Create a new cycle manually" msgstr "" +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Created at:" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Credit" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Credit note" +msgstr "" + #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format msgid "Current Cycle" @@ -1092,11 +758,31 @@ msgstr "" msgid "Current amount" msgstr "" +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Current payment cycle" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Custom" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Custom Fields" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle" msgstr "" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Cycle Period" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle amount updated" @@ -1122,11 +808,76 @@ msgstr "" msgid "Cycles regenerated successfully" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Danger zone" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Data field %{action} successfully" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Data field deleted successfully" +msgstr "" + +#: lib/mv_web/live/components/field_visibility_dropdown_component.ex +#, elixir-autogen, elixir-format +msgid "Datafield %{id}" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Datafields" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Date" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Dec." +msgstr "" + #: lib/mv_web/live/membership_fee_settings_live.ex #, elixir-autogen, elixir-format msgid "Default Membership Fee Type" msgstr "" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Default settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Default type: Assigned to new members; can be changed per member." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Delete All" @@ -1142,308 +893,25 @@ msgstr "" msgid "Delete Cycle" msgstr "" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format -msgid "Edit Cycle Amount" +msgid "Delete Data Field" msgstr "" -#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex #, elixir-autogen, elixir-format -msgid "Edit Field: %{field}" +msgid "Delete Datafields and All Values" msgstr "" -#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format -msgid "Edit Membership Fee Type" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Edit membership fee type" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Failed to update cycle status: %{errors}" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Future unpaid cycles will be regenerated with the new amount." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Generate cycles from the last existing cycle to today" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Generated cycles" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Include joining cycle" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Interval cannot be changed after creation." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invalid amount format" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invalid date format" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Last Cycle" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Manage membership fee types for membership fees." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mark as paid" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mark as suspended" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mark as unpaid" +msgid "Delete Group" msgstr "" #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Membership Fee" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Settings" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Status" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Type" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Types" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership Fees" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Membership fee start" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type deleted" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type removed" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type saved successfully" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type updated. Cycles regenerated." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -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/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Monthly Interval - Joining Cycle Included" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "New Membership Fee Type" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "New amount" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "No cycle" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No cycles" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No cycles to delete" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned." -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No membership fee type assigned" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No status" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "None (no default)" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Not set" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Payment Interval" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Please confirm the amount change first" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Quarterly Interval - Joining Cycle Excluded" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Regenerate Cycles" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Regenerating..." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select a membership fee type for this member. Members can only switch between types with the same interval." -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select interval" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings saved successfully." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "This action cannot be undone." -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "This field is required" -msgstr "" - -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "This is a technical field and cannot be changed" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Type" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Type '%{confirmation}' to confirm" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Warning" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Yearly Interval - Joining Cycle Excluded" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Yearly Interval - Joining Cycle Included" -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." +msgid "Delete Member" msgstr "" #: lib/mv_web/live/membership_fee_settings_live.ex @@ -1452,218 +920,15 @@ msgstr "" msgid "Delete Membership Fee Type" msgstr "" -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Membership Fee Start Date" -msgstr "" - -#: lib/mv_web/live/components/field_visibility_dropdown_component.ex -#, elixir-autogen, elixir-format -msgid "Show/Hide Columns" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Back to settings" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Data field %{action} successfully" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Data field deleted successfully" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Delete Data Field" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Edit Data Field" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Failed to delete data field: %{error}" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "New Data Field" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Save Data Field" -msgstr "" - #: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format -msgid "Back to roles list" +msgid "Delete Role" msgstr "" -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Custom" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to delete role: %{error}" -msgstr "" - -#: lib/mv_web/live/role_live/index.ex -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Listing Roles" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Cannot delete role. %{count} user(s) are still assigned to this role. Please assign them to another role first." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Close sidebar" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Main navigation" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New Role" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "No description" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#, elixir-autogen, elixir-format -msgid "Open navigation menu" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Permission Set" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Profile" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex #: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Role" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role deleted successfully." -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role details and permissions." -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role not found." -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "Role saved successfully." -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select permission set" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Show Role" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "System" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "System Role" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "System roles cannot be deleted." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Toggle sidebar" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "User menu" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "admin - Unrestricted access" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "normal_user - Create/Read/Update access" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "own_data - Access only to own data" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "read_only - Read access to all data" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to %{action} members." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Cycle Period" +msgid "Delete User" msgstr "" #: lib/mv_web/live/member_live/show/membership_fees_component.ex @@ -1676,94 +941,198 @@ msgstr "" msgid "Delete cycle" msgstr "" -#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/custom_field_live/form_component.ex #, elixir-autogen, elixir-format -msgid "The cycle period will be calculated based on this date and the interval." +msgid "Delete data field" msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/custom_field_live/form_component.ex #, elixir-autogen, elixir-format -msgid "Membership fee type not found" +msgid "Delete data field %{name}" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format -msgid "User %{action} successfully" +msgid "Delete group" +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete group %{name}" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete member" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete member %{name}" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete role" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete role %{name}" msgstr "" #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "User deleted successfully" +msgid "Delete user" msgstr "" #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "User not found" +msgid "Delete user %{email}" msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/custom_field_live/form_component.ex #, elixir-autogen, elixir-format -msgid "You do not have permission to access this membership fee type" +msgid "Deleting this data field cannot be undone. All datafield values for this field will be permanently removed." msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format -msgid "You do not have permission to delete this membership fee type" +msgid "Deleting this group cannot be undone. All member-group associations will be permanently removed." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this member cannot be undone. All related data (e.g. membership fee cycles) will be removed." +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this role cannot be undone. Users assigned to this role must be reassigned first." msgstr "" #: lib/mv_web/live/user_live/form.ex #: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "You do not have permission to delete this user" +msgid "Deleting this user cannot be undone. The user account and any linked member association will be affected." msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex #, elixir-autogen, elixir-format -msgid "created" +msgid "Deletion" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format -msgid "updated" +msgid "Description" msgstr "" #: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Download CSV templates:" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Draft" +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "E-Mail" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex #: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format -msgid "Unknown error" +msgid "Edit" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Edit Cycle Amount" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Edit Data Field" +msgstr "" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Edit Field: %{field}" +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#, elixir-autogen, elixir-format +msgid "Edit Group" msgstr "" #: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Member deleted successfully" +msgid "Edit Member" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Edit Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Edit User" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Edit group" msgstr "" -#: lib/mv_web/live/member_live/form.ex #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format -msgid "Member not found" +msgid "Edit member" msgstr "" +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Edit membership fee type" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Edit role" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex #: 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 +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "You do not have permission to delete this member" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member created successfully" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member updated successfully" +msgid "Email" msgstr "" #: lib/mv/membership/import/member_csv.ex @@ -1777,79 +1146,10 @@ msgstr "" msgid "Email is required." msgstr "" -#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Roles" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Administration" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Failed to %{action} member." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Failed to save member. Please try again." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Please correct the errors in the form and try again." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed. Please check your input." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed: %{field} %{message}" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed: %{message}" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Close" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Filter members" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Member filter" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Payment Status" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid " (Field: %{field})" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "CSV File" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Download CSV templates:" +msgid "Enabled" msgstr "" #: lib/mv_web/live/import_live/components.ex @@ -1857,16 +1157,125 @@ msgstr "" msgid "English Template" msgstr "" +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Enter the group name to confirm" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Enter the text above to confirm" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Error list truncated to %{count} entries" msgstr "" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Error loading receipts: %{reason}" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Errors" msgstr "" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Examples" +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 +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Exit Date" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Exits" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Expense" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Export" +msgstr "" + +#: lib/mv_web/controllers/member_pdf_export_controller.ex +#, elixir-autogen, elixir-format +msgid "Export contains %{count} rows, maximum is %{max}" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Export members to CSV" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "Export members to PDF" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed members:" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to %{action} member." +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to approve join request." +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to delete data field: %{error}" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to delete group: %{error}" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to delete role: %{error}" +msgstr "" + +#: lib/mv_web/controllers/member_pdf_export_controller.ex +#, elixir-autogen, elixir-format +msgid "Failed to generate PDF export" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to link member: %{error}" +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to load group." +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to load join request." +msgstr "" + #: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format msgid "Failed to prepare CSV import: %{reason}" @@ -1882,154 +1291,218 @@ msgstr "" msgid "Failed to read file: %{reason}" msgstr "" +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "Failed to read uploaded file: unexpected format" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to reject join request." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to remove member: %{error}" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to save member. Please try again." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to send test email. Please check your SMTP configuration." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Failed to update cycle status: %{errors}" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "Failed: %{count} row(s)" msgstr "" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Feb." +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Fee Type" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Fee type" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Fee types" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Fee types could not be loaded." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Field" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Fields on the join form" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Filter members" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "First Name" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "First name" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Fixed after creation. Members can only switch between types with the same interval." +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "From %{first} to %{last} (relevant years with membership data)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From MAIL_FROM_EMAIL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From MAIL_FROM_NAME" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_ADMIN_GROUP_NAME" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_BASE_URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_CLIENT_ID" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_CLIENT_SECRET" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_GROUPS_CLAIM" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_ONLY" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_REDIRECT_URI" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_HOST" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_PASSWORD" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_PORT" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_SSL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_USERNAME" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_API_KEY" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_API_URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_APP_URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_CLUB_ID" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Future unpaid cycles will be regenerated with the new amount." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Generate cycles from the last existing cycle to today" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Generated cycles" +msgstr "" + #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "German Template" msgstr "" -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Import Results" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import is already running. Please wait for it to complete." -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Import state is missing. Cannot process chunk %{idx}." -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Invalid chunk index: %{idx}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Line %{line}: %{message}" -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "No file was uploaded" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Only administrators can import members from CSV files." -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Please select a CSV file to import." -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Please wait for the file upload to complete before starting the import." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Processing chunk %{current} of %{total}..." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Start Import" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Starting import..." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Successfully inserted: %{count} member(s)" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Summary" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Warnings" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Validation failed" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "email" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "email %{email} has already been taken" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete this group? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to groups list" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#, elixir-autogen, elixir-format -msgid "Create Group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete Group" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete group" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit Group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Enter the group name to confirm" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to delete group: %{error}" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to load group." -msgstr "" - #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format msgid "Group deleted successfully." @@ -2061,1167 +1534,32 @@ msgstr "" msgid "Groups" msgstr "" -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No groups" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No members in this group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "This group has %{count} member. All member-group associations will be permanently deleted." -msgid_plural "This group has %{count} members. All member-group associations will be permanently deleted." -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "To confirm deletion, please enter the group name:" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Total: %{count} member" -msgid_plural "Total: %{count} members" -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "This user cannot be edited." -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "This user cannot be viewed." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not authorized." -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Could not load data fields. Please check your permissions." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Add Member" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to remove member: %{error}" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member is not in this group." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No email" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove member from group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Search for a member" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Search for a member..." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Add members" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No members selected." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove %{name}" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Some members could not be added: %{errors}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "CSV files only, maximum %{size} MB" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "(ISO-8601 format: YYYY-MM-DD)" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "(true/false/1/0/yes/no/ja/nein)" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "custom_field: %{name} – expected %{type} %{details}, got: %{value}" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "custom_field: %{name} – expected %{type}, got: %{value}" -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." -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Failed to read uploaded file: unexpected format" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to access this page." -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Export members to CSV" -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "all" -msgstr "" - -#: lib/mv/membership/member/validations/email_change_permission.ex -#, elixir-autogen, elixir-format -msgid "Only administrators or the linked user can change the email for members linked to users" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select role..." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "You are not allowed to perform this action." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select a membership fee type" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Linked" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "OIDC" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not linked" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "SSO / OIDC user" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Import aborted" -msgstr "" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format -msgid "paid" -msgstr "" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format -msgid "suspended" -msgstr "" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format -msgid "unpaid" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member of group %{name}" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Active members" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Exits" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Inactive members" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Joins" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Statistics" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Total" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Year" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions pie: paid %{paid}%%, unpaid %{unpaid}%%, suspended %{suspended}%%" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "All years combined (pie)" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions by year" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions by year as table with stacked bars" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Fee type" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Member numbers by year" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "From %{first} to %{last} (relevant years with membership data)" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Member numbers by year as table with bars" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Fee types could not be loaded." -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "CSV" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Created at:" -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Export" -msgstr "" - -#: lib/mv_web/controllers/member_pdf_export_controller.ex -#, elixir-autogen, elixir-format -msgid "Export contains %{count} rows, maximum is %{max}" -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "Export members to PDF" -msgstr "" - -#: lib/mv_web/controllers/member_pdf_export_controller.ex -#, elixir-autogen, elixir-format -msgid "Failed to generate PDF export" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Member %{club_name}" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Member count:" -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "PDF" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Value type cannot be changed after creation" -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 -#, elixir-autogen, elixir-format -msgid "Country" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Could not load member list. Please try again." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "API Key" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "API URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Club ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_API_KEY" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_API_URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_CLUB_ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save Vereinfacht Settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Sync all members without Vereinfacht contact" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Synced %{count} member(s) to Vereinfacht." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Syncing..." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht is not configured. Set API URL, API Key, and Club ID." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Test Integration" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Testing..." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection successful. API URL, API Key and Club ID are valid." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Not configured. Please set API URL, API Key and Club ID." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP %{status}):" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 401): API key is invalid or missing." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 403): Access denied. Please check the Club ID and API key permissions." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 404): API endpoint not found. Please check the API URL (e.g. correct version path)." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. The URL does not point to a Vereinfacht API (received HTML instead of JSON)." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. Could not reach the API (network error or wrong URL)." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. Unknown error." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "View contact in Vereinfacht" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "%{count} failed" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "%{count} synced" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Failed members:" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Last sync result:" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Synced %{count} member(s). %{error_count} failed." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht: %{detail}" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No Vereinfacht contact exists for this member." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "(set)" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Leave blank to keep current" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Some values are set via environment variables. Those fields are read-only." -msgstr "" - -# Vereinfacht API validation messages (looked up at runtime via dgettext) -msgid "The address field is required." -msgstr "" - -msgid "The city field is required." -msgstr "" - -msgid "The email field is required." -msgstr "" - -msgid "The first name field is required." -msgstr "" - -msgid "The last name field is required." -msgstr "" - -msgid "The zip code field is required." -msgstr "" - -msgid "Too Many Attempts." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "App URL (contact view link)" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_APP_URL" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Error loading receipts: %{reason}" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No receipts" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Show bookings/receipts from Vereinfacht" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht receipts" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Cancelled" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Credit" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Credit note" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Draft" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invoice" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Open" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Receipt" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Apr." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Aug." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Completed" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Dec." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Expense" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Feb." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Income" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jan." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jul." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jun." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mar." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "May" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Nov." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Oct." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Sep." -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Fee Type" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import members from CSV files." -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. Groups and membership fees are not supported for import." -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Choose CSV file" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import Members" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Admin group name" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Base URL" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Basic settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Client ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Client Secret" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Datafields" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_ADMIN_GROUP_NAME" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_BASE_URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_CLIENT_ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_CLIENT_SECRET" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_GROUPS_CLAIM" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_REDIRECT_URI" -msgstr "" - #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format msgid "Groups claim" msgstr "" -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Membership fee settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Redirect URI" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save OIDC Settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "e.g. admin" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_ONLY" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Only OIDC sign-in (hide password login)" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Clear filters" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Apply filters" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete %{name}? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Danger zone" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete member" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete member %{name}" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this member cannot be undone. All related data (e.g. membership fee cycles) will be removed." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit group" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit member" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit role" -msgstr "" - -#: lib/mv_web/live/group_live/index.ex -#, elixir-autogen, elixir-format -msgid "Click for group details" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for member details" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for role details" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for user details" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Members table" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete the role %{name}? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete the user %{email}? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Click to edit datafield" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Delete data field" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Delete data field %{name}" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete group %{name}" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete role" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete role %{name}" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete user" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete user %{email}" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this group cannot be undone. All member-group associations will be permanently removed." -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this role cannot be undone. Users assigned to this role must be reassigned first." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this user cannot be undone. The user account and any linked member association will be affected." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "System user cannot be deleted." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save Name" -msgstr "" - -#: lib/mv_web/live/components/field_visibility_dropdown_component.ex -#, elixir-autogen, elixir-format -msgid "Datafield %{id}" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Delete Datafields and All Values" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Deleting this data field cannot be undone. All datafield values for this field will be permanently removed." -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Individual datafields" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete Member" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete Role" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete User" -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 #, elixir-autogen, elixir-format -msgid "Configure fee types for membership fees." +msgid "Half-yearly" msgstr "" -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Configure which data you want to save for your members. Define individual datafields." -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Manage users and their permissions." -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "%{count} member has a value assigned for this datafield." -msgid_plural "%{count} members have values assigned for this datafield." -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Individual Datafields" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "No group assignment" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/group_live/index.ex #: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Not specified" +msgid "History" msgstr "" -#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "All datafield values will be permanently deleted when you delete this datafield." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Click to edit membership fee type" +msgid "Host" msgstr "" #: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "Current payment cycle" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Last payment cycle" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Default settings" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Default type: Assigned to new members; can be changed per member." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Fee types" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{count} filter active" -msgid_plural "%{count} filters active" -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "without %{name}" -msgstr "" - -#: lib/mv_web/templates/emails/user_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Confirm my email" -msgstr "" - -#: lib/mv_web/templates/emails/join_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Confirm my request" -msgstr "" - -#: lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex -#, elixir-autogen, elixir-format -msgid "Confirm your email address" -msgstr "" - -#: lib/mv_web/emails/join_confirmation_email.ex -#, elixir-autogen, elixir-format -msgid "Confirm your membership request" +msgid "House Number" msgstr "" #: lib/mv_web/templates/emails/user_confirmation.html.heex @@ -3239,44 +1577,65 @@ msgstr "" msgid "If you did not submit this request, you can ignore this email." msgstr "" -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "Invalid or expired link." +msgid "Import" msgstr "" -#: lib/mv_web/templates/emails/user_confirmation.html.heex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "Please confirm your email address by clicking the link below." +msgid "Import Members" msgstr "" -#: lib/mv_web/templates/emails/password_reset.html.heex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reset password" +msgid "Import Results" msgstr "" -#: lib/mv/accounts/user/senders/send_password_reset_email.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reset your password" +msgid "Import aborted" msgstr "" -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "Thank you, we have received your request." +msgid "Import is already running. Please wait for it to complete." msgstr "" -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "This link has expired. Please submit the form again." +msgid "Import members from CSV files." msgstr "" -#: lib/mv_web/templates/emails/join_confirmation.html.heex +#: lib/mv/membership/import/import_runner.ex #, elixir-autogen, elixir-format -msgid "We have received your membership request. To complete it, please click the link below." +msgid "Import state is missing. Cannot process chunk %{idx}." msgstr "" -#: lib/mv_web/templates/emails/password_reset.html.heex +#: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format -msgid "You requested a password reset. Click the link below to set a new password." +msgid "Inactive members" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Include both letters and numbers" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Include joining cycle" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Income" msgstr "" #: lib/mv_web/live/member_live/show/membership_fees_component.ex @@ -3284,40 +1643,81 @@ msgstr "" msgid "Incomplete" msgstr "" -#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/controllers/auth_controller.ex #, elixir-autogen, elixir-format -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." +msgid "Incorrect email or password" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Individual Datafields" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Individual datafields" msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Add field" +msgid "Individual fields" +msgstr "" + +#: 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/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Interval" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Interval cannot be changed after creation." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Invalid amount format" +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "Invalid chunk index: %{idx}" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Invalid date format" msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Available fields" +msgid "Invalid email address. Please enter a valid recipient address." msgstr "" -#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/controllers/join_confirm_controller.ex #, elixir-autogen, elixir-format -msgid "Configure the public join form that allows new members to submit a join request." +msgid "Invalid or expired link." msgstr "" -#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Could not save join form settings." +msgid "Invoice" msgstr "" -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/join_live.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Field" +msgid "Jan." msgstr "" -#: lib/mv_web/live/global_settings_live.ex +#: 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 +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "Fields on the join form" +msgid "Join Date" msgstr "" #: lib/mv_web/live/global_settings_live.ex @@ -3330,136 +1730,6 @@ msgstr "" msgid "Join form enabled" msgstr "" -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "No fields selected. Add at least the email field." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Remove field %{label}" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Board approval required (in development)" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Individual fields" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Personal data" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Reorder" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "The order of rows determines the field order in the join form." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Become a member" -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Please check your entries. Email is required." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Submit request" -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Too many requests. Please try again later." -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." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Please enter your details for the membership application here." -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." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Website" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Additional form data" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approve" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approve this join request and create a member?" -msgstr "" - -#: lib/mv_web/live/join_request_live/helpers.ex -#, elixir-autogen, elixir-format -msgid "Approved" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approved at" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to join requests" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "Click for details" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to approve join request." -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to load join request." -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to reject join request." -msgstr "" - #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Join request" @@ -3491,21 +1761,882 @@ msgstr "" msgid "Join requests" msgstr "" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Joining date" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Joins" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Jul." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Jun." +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Last Cycle" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Last Name" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Last name" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Last payment cycle" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Last sync result:" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Leave blank to keep current" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Line %{line}: %{message}" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Linked" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Linked Member" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Linked User" +msgstr "" + +#: lib/mv_web/live/role_live/index.ex +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Listing Roles" +msgstr "" + +#: lib/mv_web/live/user_live/index.ex +#, elixir-autogen, elixir-format +msgid "Listing Users" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Logout" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Main navigation" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Manage global settings for the association." +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Manage membership fee types for membership fees." +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Manage roles and their permission sets." +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Manage users and their permissions." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mar." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mark as paid" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mark as suspended" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mark as unpaid" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "May" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member %{action} successfully" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Member %{club_name}" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Member count:" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member created successfully" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member deleted successfully" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Member field %{action} successfully" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Member filter" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member is not in this group." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member not found" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Member numbers by year" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Member numbers by year as table with bars" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member of group %{name}" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays for the year they joined" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the joining month" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the next full quarter" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the next full year" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member updated successfully" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member will be unlinked when you save. Cannot select new member until saved." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/index.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Members table" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Settings" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Start Date" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Status" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Membership Fee Types" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership Fees" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Membership fee settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Membership fee start" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type deleted" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type not found" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type removed" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type saved successfully" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type updated. Cycles regenerated." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +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/mailer.ex +#, elixir-autogen, elixir-format +msgid "Mila – Test email" +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 +#, elixir-autogen, elixir-format +msgid "Monthly" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Monthly Interval - Joining Cycle Included" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Name & Amount" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "New" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "New Data Field" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New Member" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "New Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New Role" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New User" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "New amount" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/member_live/index/formatter.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "No" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No Vereinfacht contact exists for this member." +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "No approved or rejected requests yet" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "No cycle" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No cycles" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No cycles to delete" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "No description" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No email" +msgstr "" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "No email addresses found" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "No fields selected. Add at least the email field." +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "No file was uploaded" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "No group assignment" +msgstr "" + +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No groups" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "No member linked" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No members in this group" +msgstr "" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "No members selected" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No members selected." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned." +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No membership fee type assigned" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No receipts" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No status" +msgstr "" + #: lib/mv_web/live/join_request_live/index.ex #, elixir-autogen, elixir-format msgid "No submitted join requests" msgstr "" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No user linked" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "None" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "None (no default)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "None (port 25, insecure)" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not authorized." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Not configured. Please set API URL, API Key and Club ID." +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not enabled" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not linked" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Not set" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Not specified" +msgstr "" + #: lib/mv_web/live/join_request_live/index.ex #, elixir-autogen, elixir-format msgid "Not submitted yet" msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Note" +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 +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Notes" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Nov." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Nr." +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Number" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "OIDC" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "OIDC (Single Sign-On)" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Oct." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Only OIDC sign-in (hide password login)" +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Only administrators can import members from CSV files." +msgstr "" + +#: lib/mv/membership/member/validations/email_change_permission.ex +#, elixir-autogen, elixir-format +msgid "Only administrators or the linked user can change the email for members linked to users" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Only possible if no members are assigned to this type." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Open" +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/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Open in email program" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#, elixir-autogen, elixir-format +msgid "Open navigation menu" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Open requests" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Optional" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Options" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "PDF" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex +#, elixir-autogen, elixir-format +msgid "Paid" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Password" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Password Authentication" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Password requirements" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Payment Data" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Payment Interval" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Payment Status" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Payments" +msgstr "" + #: lib/mv_web/live/join_request_live/helpers.ex #, elixir-autogen, elixir-format msgid "Pending confirmation" msgstr "" +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Permission Set" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Personal Data" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Personal data" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Please check your entries. Email is required." +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Please confirm the amount change first" +msgstr "" + +#: lib/mv_web/templates/emails/user_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Please confirm your email address by clicking the link below." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Please correct the errors in the form and try again." +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Please enter your details for the membership application here." +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Please select a CSV file to import." +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Please wait for the file upload to complete before starting the import." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Port" +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 +#, elixir-autogen, elixir-format +msgid "Postal Code" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Processing chunk %{current} of %{total}..." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Profile" +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 +#, elixir-autogen, elixir-format +msgid "Quarterly" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Quarterly Interval - Joining Cycle Excluded" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Receipt" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Recipient" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Recipient address rejected by the server." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Redirect URI" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Regenerate Cycles" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Regenerating..." +msgstr "" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Reject" @@ -3526,16 +2657,448 @@ msgstr "" msgid "Rejected at" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove %{name}" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Remove field %{label}" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove member from group" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Reorder" +msgstr "" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Request data" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Required" +msgstr "" + +#: lib/mv_web/templates/emails/password_reset.html.heex +#, elixir-autogen, elixir-format +msgid "Reset password" +msgstr "" + +#: lib/mv/accounts/user/senders/send_password_reset_email.ex +#, elixir-autogen, elixir-format +msgid "Reset your password" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Review by" +msgstr "" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Review information" msgstr "" +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Reviewed at" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role deleted successfully." +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role details and permissions." +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role not found." +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "Role saved successfully." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Roles" +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 error:" +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." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is not configured. Transactional emails (join confirmation, password reset, etc.) will not be delivered reliably." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SSL (port 465)" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "SSO / OIDC user" +msgstr "" + +#: lib/mv_web/live/group_live/form.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/form.ex +#, elixir-autogen, elixir-format +msgid "Save" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Save Data Field" +msgstr "" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Save Field" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save Member" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save Name" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save OIDC Settings" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save SMTP Settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save Settings" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save User" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save Vereinfacht Settings" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save to confirm linking." +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Saving..." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Search for a member" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Search for a member to link..." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Search for a member..." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Search for member to link" +msgstr "" + +#: lib/mv_web/live/components/search_bar_component.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Search..." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select a membership fee type" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select a membership fee type for this member. Members can only switch between types with the same interval." +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Select all" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Select all members" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select interval" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Select language" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Select member" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Select none" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select permission set" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select role..." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Selected" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Send test email" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender address rejected. The \"Sender email\" must be owned by or authorized for the SMTP user." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender email (From)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender name (From)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sending..." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Sep." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Server unreachable. Check host and port." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Set Password" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings saved successfully." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings updated successfully" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Show" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Show Member" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Show Role" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Show User" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Show bookings/receipts from Vereinfacht" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Show in overview" +msgstr "" + +#: lib/mv_web/live/components/field_visibility_dropdown_component.ex +#, elixir-autogen, elixir-format +msgid "Show/Hide Columns" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Slug does not match. Deletion cancelled." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Some members could not be added: %{errors}" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Some values are set via environment variables. Those fields are read-only." +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "Something went wrong!" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Start Import" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Starting import..." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Statistics" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Status" +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 +#, elixir-autogen, elixir-format +msgid "Street" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Submit request" +msgstr "" + #: lib/mv_web/live/join_request_live/helpers.ex #, elixir-autogen, elixir-format msgid "Submitted" @@ -3547,45 +3110,198 @@ msgstr "" msgid "Submitted at" msgstr "" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "No approved or rejected requests yet" +msgid "Successfully inserted: %{count} member(s)" msgstr "" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reviewed at" +msgid "Summary" msgstr "" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex #, elixir-autogen, elixir-format -msgid "History" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "Open requests" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Review by" +msgid "Suspended" msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Accounting-Software (Vereinfacht) Integration" +msgid "Sync all members without Vereinfacht contact" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Synced %{count} member(s) to Vereinfacht." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Synced %{count} member(s). %{error_count} failed." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Syncing..." msgstr "" #: lib/mv_web/live/role_live/index.html.heex #, elixir-autogen, elixir-format -msgid "Manage roles and their permission sets." +msgid "System" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "System Role" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "System roles cannot be deleted." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "System user cannot be deleted." msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "OIDC (Single Sign-On)" +msgid "TLS (port 587, recommended)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS connection failed. Check the TLS/SSL setting and port (587 for TLS, 465 for SSL)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS/SSL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test Integration" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test email" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test email sent successfully." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Testing..." +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Text" +msgstr "" + +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Thank you, we have received your request." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "The authentication server is currently unavailable. Please try again later." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "The cycle period will be calculated based on this date and the interval." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "The order of rows determines the field order in the join form." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "The sender email must be owned by or authorized for the SMTP user on most servers." +msgstr "" + +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +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/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "These will appear in addition to other data when adding new members." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "This action cannot be undone." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "This email is already linked to a different OIDC account. Cannot link multiple OIDC providers to the same account." +msgstr "" + +#: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "This field cannot be empty" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "This field is required" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "This group has %{count} member. All member-group associations will be permanently deleted." +msgid_plural "This group has %{count} members. All member-group associations will be permanently deleted." +msgstr[0] "" +msgstr[1] "" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "This is a technical field and cannot be changed" +msgstr "" + +#: lib/mv/mailer.ex +#, elixir-autogen, elixir-format +msgid "This is a test email sent from Mila. If you received this, your SMTP configuration is working correctly." +msgstr "" + +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "This link has expired. Please submit the form again." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "This user cannot be edited." +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "This user cannot be viewed." msgstr "" #: lib/mv_web/live/user_live/form.ex @@ -3593,11 +3309,475 @@ msgstr "" msgid "This user is linked via SSO (Single Sign-On). A password set or changed here only affects login with email and password in this application. It does not change the password in your identity provider (e.g. Authentik). To change the SSO password, use the identity provider or your organization's IT." msgstr "" +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "Tip: Paste email addresses into the BCC field for privacy compliance" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "To confirm deletion, please enter the group name:" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "To confirm deletion, please enter this text:" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Toggle dark mode" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Toggle sidebar" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Too many requests. Please try again later." +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Total" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Total: %{count} member" +msgid_plural "Total: %{count} members" +msgstr[0] "" +msgstr[1] "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Type" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Type '%{confirmation}' to confirm" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Unable to authenticate with OIDC. Please try again." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Unable to sign in. Please try again." +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." +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unknown error" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unlink Member" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unlinking scheduled" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex +#, elixir-autogen, elixir-format +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. Groups and membership fees are not supported for import." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "User %{action} successfully" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User deleted successfully" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "User menu" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User not found" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "User will be created without a password. Check 'Set Password' to add one." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Username" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Users" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Validation failed" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed. Please check your input." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed: %{field} %{message}" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed: %{message}" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Value Type" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Value type" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Value type cannot be changed after creation" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht is not configured. Set API URL, API Key, and Club ID." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht receipts" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht: %{detail}" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "View contact in Vereinfacht" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Warning" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval." +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Warnings" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "We can't find the internet" +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/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." +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Website" +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." msgstr "" +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Year" +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 +#, elixir-autogen, elixir-format +msgid "Yearly" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Yearly Interval - Joining Cycle Excluded" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Yearly Interval - Joining Cycle Included" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/member_live/index/formatter.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Yes" +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Yes/No-Selection" +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/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "You are not allowed to perform this action." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You are now signed in" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You are now signed out" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to %{action} members." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to access this membership fee type" +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to access this page." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this member" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this membership fee type" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this user" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" +msgstr "" + +#: lib/mv_web/templates/emails/password_reset.html.heex +#, elixir-autogen, elixir-format +msgid "You requested a password reset. Click the link below to set a new password." +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." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Your email address has now been confirmed" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Your password has successfully been reset" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "admin - Unrestricted access" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "all" +msgstr "" + +#: lib/mv_web/components/table_components.ex +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "ascending" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "close" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "create" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "created" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "custom_field: %{name} – expected %{type} %{details}, got: %{value}" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "custom_field: %{name} – expected %{type}, got: %{value}" +msgstr "" + +#: lib/mv_web/components/table_components.ex +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "descending" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "e.g. admin" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "email" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "email %{email} has already been taken" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "normal_user - Create/Read/Update access" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "own_data - Access only to own data" +msgstr "" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format +msgid "paid" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "read_only - Read access to all data" +msgstr "" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format +msgid "suspended" +msgstr "" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format +msgid "unpaid" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "update" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "updated" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "without %{name}" +msgstr "" + #: lib/mv_web/live/member_field_live/form_component.ex #, elixir-autogen, elixir-format msgid "Save datafield" diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index a93a1ad..7857e3b 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -11,621 +11,53 @@ msgstr "" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Actions" +msgid " (Field: %{field})" msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Are you sure?" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "Attempting to reconnect" -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 -#, elixir-autogen, elixir-format -msgid "City" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Edit Member" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: 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 -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Email" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "First Name" -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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Join Date" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Last Name" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New Member" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Show" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "Something went wrong!" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/root.html.heex -#, elixir-autogen, elixir-format -msgid "We can't find the internet" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "close" -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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Exit Date" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "House Number" -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 -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Notes" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Paid" -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 -#, elixir-autogen, elixir-format -msgid "Postal Code" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex #: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex #, elixir-autogen, elixir-format -msgid "Saving..." -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 -#, elixir-autogen, elixir-format -msgid "Street" +msgid "%{count} failed" msgstr "" #: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "%{count} filter active" +msgid_plural "%{count} filters active" +msgstr[0] "%{count} filter active" +msgstr[1] "%{count} filters active" + #: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/member_live/index/formatter.ex -#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "%{count} member has a value assigned for this datafield." +msgid_plural "%{count} members have values assigned for this datafield." +msgstr[0] "" +msgstr[1] "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "%{count} synced" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "(ISO-8601 format: YYYY-MM-DD)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "(set)" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "(true/false/1/0/yes/no/ja/nein)" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format -msgid "No" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Show Member" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/member_live/index/formatter.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Yes" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "create" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "update" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Incorrect email or password" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member %{action} successfully" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You are now signed in" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You are now signed out" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Your email address has now been confirmed" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Your password has successfully been reset" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#: 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/membership_fees_component.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Cancel" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Description" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit User" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Enabled" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Logout" -msgstr "" - -#: lib/mv_web/live/user_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Listing Users" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/index.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Members" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Name" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New User" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not enabled" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Note" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Password Authentication" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Required" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Select all members" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Select member" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Show User" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "User" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Value type" -msgstr "" - -#: lib/mv_web/components/table_components.ex -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "ascending" -msgstr "" - -#: lib/mv_web/components/table_components.ex -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "descending" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "New" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Admin Note" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "At least 8 characters" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Change Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Check 'Change Password' above to set a new password for this user." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Confirm Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Consider using special characters" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Include both letters and numbers" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Password requirements" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Set Password" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "User will be created without a password. Check 'Set Password' to add one." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Linked Member" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Linked User" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "No member linked" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No user linked" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to members list" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to users list" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select language" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Toggle dark mode" -msgstr "" - -#: lib/mv_web/live/components/search_bar_component.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Search..." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Users" -msgstr "" - -#: lib/mv_web/live/components/sort_header_component.ex -#, elixir-autogen, elixir-format -msgid "Click to sort" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "First name" -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "An account with this email already exists. Please verify your password to link your OIDC account." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Unable to authenticate with OIDC. Please try again." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "The authentication server is currently unavailable. Please try again later." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Authentication configuration error. Please contact the administrator." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Unable to sign in. Please try again." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Authentication failed. Please try again." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "Cannot update email: This email is already registered to another account. Please change your email in the identity provider." -msgstr "" - -#: lib/mv_web/controllers/auth_controller.ex -#, elixir-autogen, elixir-format -msgid "This email is already linked to a different OIDC account. Cannot link multiple OIDC providers to the same account." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Custom Fields" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Enter the text above to confirm" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "To confirm deletion, please enter this text:" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format -msgid "Show in overview" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Association Name" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Club Settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Manage global settings for the association." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Settings updated successfully" +msgid "A cycle for this period already exists" msgstr "" #: lib/mv_web/live/user_live/form.ex @@ -633,93 +65,75 @@ msgstr "" msgid "A member with this email already exists. To link with a different member, please change one of the email addresses first." msgstr "" -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Available members" +msgid "API Key" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Failed to link member: %{error}" +msgid "API URL" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex #, elixir-autogen, elixir-format -msgid "Member will be unlinked when you save. Cannot select new member until saved." +msgid "About Membership Fee Types" msgstr "" -#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Save to confirm linking." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Search for a member to link..." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Search for member to link" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Selected" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unlink Member" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unlinking scheduled" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "Copied %{count} email address to clipboard" -msgid_plural "Copied %{count} email addresses to clipboard" -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Copy email addresses of selected members" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "No email addresses found" -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/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Open in email program" -msgstr "" - -#: lib/mv_web/live/member_live/index.ex -#, elixir-autogen, elixir-format -msgid "Tip: Paste email addresses into the BCC field for privacy compliance" +msgid "Accounting-Software (Vereinfacht) Integration" msgstr "" #: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Actions" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format, fuzzy -msgid "This field cannot be empty" +msgid "Active members" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Add Member" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Add field" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Add members" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Additional form data" +msgstr "Additional form data" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Address" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Admin Note" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Admin group name" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Administration" msgstr "" #: lib/mv_web/components/core_components.ex @@ -729,9 +143,177 @@ msgstr "" msgid "All" msgstr "" -#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Address" +msgid "All cycles deleted" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "All datafield values will be permanently deleted when you delete this datafield." +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "All years combined (pie)" +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." +msgstr "" + +#: 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/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Amount" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +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/membership_fees_component.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/helpers.ex +#, elixir-autogen, elixir-format +msgid "An error occurred" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "App URL (contact view link)" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Apply filters" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approve" +msgstr "Approve" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approve this join request and create a member?" +msgstr "Approve this membership application and create a member?" + +#: lib/mv_web/live/join_request_live/helpers.ex +#, elixir-autogen, elixir-format +msgid "Approved" +msgstr "Approved" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Approved at" +msgstr "Approved at" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Apr." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete %{name}? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete the role %{name}? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete the user %{email}? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Are you sure you want to delete this cycle?" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Are you sure you want to delete this group? This action cannot be undone." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Are you sure?" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "As an administrator, you can directly set a new password for this user using the same secure Ash Authentication system." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Association Name" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "At least 8 characters" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "Attempting to reconnect" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#: 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/membership_fees_component.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Aug." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Authentication configuration error. Please contact the administrator." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Authentication failed. Please check the SMTP username and password." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Authentication failed. Please try again." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Available fields" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Available members" msgstr "" #: lib/mv_web/live/custom_field_live/form_component.ex @@ -750,50 +332,70 @@ msgstr "" msgid "Back" msgstr "" -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Contact Data" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Nr." -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Payment Data" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Payments" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Personal Data" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Save" +msgid "Back to groups list" msgstr "" -#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format -msgid "Create Member" +msgid "Back to join requests" +msgstr "Back to membership applications" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Back to members list" msgstr "" -#: 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/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Back to roles list" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Back to settings" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Amount" +msgid "Back to users list" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Base URL" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Basic settings" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Become a member" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed." +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "CSV" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "CSV File" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "CSV files only, maximum %{size} MB" msgstr "" #: lib/mv_web/live/membership_fee_settings_live.ex @@ -802,233 +404,24 @@ msgstr "" msgid "Can be changed at any time. Amount changes affect future periods only." msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Deletion" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Examples" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Fixed after creation. Members can only switch between types with the same interval." -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 -#, elixir-autogen, elixir-format -msgid "Half-yearly" -msgstr "" - -#: 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/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Interval" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Joining date" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays for the year they joined" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the joining month" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the next full quarter" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Member pays from the next full year" -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 -#, elixir-autogen, elixir-format -msgid "Monthly" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Name & Amount" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Only possible if no members are assigned to this type." -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 -#, elixir-autogen, elixir-format -msgid "Quarterly" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Status" -msgstr "" - -#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/show.ex +#: 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/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Suspended" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/statistics_live.ex -#: lib/mv_web/member_live/index/membership_fee_status.ex -#, elixir-autogen, elixir-format -msgid "Unpaid" -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 +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex #, elixir-autogen, elixir-format -msgid "Yearly" -msgstr "" - -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Last name" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "None" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Options" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select all" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select none" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Slug does not match. Deletion cancelled." -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." -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Value Type" +msgid "Cancel" msgstr "" #: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Date" -msgstr "" - -#: lib/mv_web/translations/field_types.ex #, elixir-autogen, elixir-format, fuzzy -msgid "E-Mail" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Number" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Text" -msgstr "" - -#: lib/mv_web/translations/field_types.ex -#, elixir-autogen, elixir-format -msgid "Yes/No-Selection" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Optional" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Member field %{action} successfully" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "A cycle for this period already exists" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "About Membership Fee Types" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "All cycles deleted" -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." -msgstr "" - -#: 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 -#: lib/mv_web/live/role_live/helpers.ex -#, elixir-autogen, elixir-format -msgid "An error occurred" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Are you sure you want to delete this cycle?" +msgid "Cancelled" msgstr "" #: lib/mv_web/live/membership_fee_settings_live.ex @@ -1037,36 +430,294 @@ msgstr "" msgid "Cannot delete - %{count} member(s) assigned" msgstr "" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Cannot delete role. %{count} user(s) are still assigned to this role. Please assign them to another role first." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Cannot update email: This email is already registered to another account. Please change your email in the identity provider." +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Change Amount?" msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Change Password" +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Changing the amount will affect %{count} member(s)." msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Check 'Change Password' above to set a new password for this user." +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Choose CSV file" +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 +#, elixir-autogen, elixir-format +msgid "City" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Clear filters" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Click for details" +msgstr "Click for details" + +#: lib/mv_web/live/group_live/index.ex +#, elixir-autogen, elixir-format +msgid "Click for group details" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for member details" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for role details" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Click for user details" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Click to edit amount" msgstr "" +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Click to edit datafield" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Click to edit membership fee type" +msgstr "Click to edit membership fee type" + +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "Click to sort" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Client ID" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Client Secret" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Close" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Close sidebar" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Club ID" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Club Settings" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Completed" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Configure fee types for membership fees." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Configure the public join form that allows new members to submit a join request." +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Configure which data you want to save for your members. Define individual datafields." +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Confirm Change" msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Confirm Password" +msgstr "" + +#: lib/mv_web/templates/emails/user_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Confirm my email" +msgstr "Confirm my email" + +#: lib/mv_web/templates/emails/join_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Confirm my request" +msgstr "Confirm my request" + +#: lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex +#, elixir-autogen, elixir-format +msgid "Confirm your email address" +msgstr "Confirm your email address" + +#: lib/mv_web/emails/join_confirmation_email.ex +#, elixir-autogen, elixir-format +msgid "Confirm your membership request" +msgstr "Confirm your membership request" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Confirmation text does not match" msgstr "" +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP %{status}):" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 401): API key is invalid or missing." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 403): Access denied. Please check the Club ID and API key permissions." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed (HTTP 404): API endpoint not found. Please check the API URL (e.g. correct version path)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. Could not reach the API (network error or wrong URL)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. The URL does not point to a Vereinfacht API (received HTML instead of JSON)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection failed. Unknown error." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Connection successful. API URL, API Key and Club ID are valid." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Consider using special characters" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Contact Data" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Contributions" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Contributions by year" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Contributions by year as table with stacked bars" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Contributions pie: paid %{paid}%%, unpaid %{unpaid}%%, suspended %{suspended}%%" +msgstr "" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "Copied %{count} email address to clipboard" +msgid_plural "Copied %{count} email addresses to clipboard" +msgstr[0] "" +msgstr[1] "" + #: lib/mv_web/live/member_live/index.html.heex #, elixir-autogen, elixir-format, fuzzy msgid "Copy email addresses" 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/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Could not load data fields. Please check your permissions." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Could not load member list. Please try again." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Could not save join form settings." +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 +#, elixir-autogen, elixir-format +msgid "Country" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Create" @@ -1077,11 +728,37 @@ msgstr "" msgid "Create Cycle" msgstr "" +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Create Group" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Create Member" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Create a new cycle manually" msgstr "" +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Created at:" +msgstr "Created at:" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Credit" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Credit note" +msgstr "" + #: lib/mv_web/live/member_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Current Cycle" @@ -1092,11 +769,31 @@ msgstr "" msgid "Current amount" msgstr "" +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Current payment cycle" +msgstr "Current payment cycle" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Custom" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Custom Fields" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle" msgstr "" +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Cycle Period" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Cycle amount updated" @@ -1122,11 +819,76 @@ msgstr "" msgid "Cycles regenerated successfully" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Danger zone" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Data field %{action} successfully" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Data field deleted successfully" +msgstr "" + +#: lib/mv_web/live/components/field_visibility_dropdown_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Datafield %{id}" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Datafields" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Date" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Dec." +msgstr "" + #: lib/mv_web/live/membership_fee_settings_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "Default Membership Fee Type" msgstr "" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Default settings" +msgstr "Default settings" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Default type: Assigned to new members; can be changed per member." +msgstr "Default type: Assigned to new members; can be changed per member." + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Delete All" @@ -1142,31 +904,596 @@ msgstr "" msgid "Delete Cycle" msgstr "" +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete Data Field" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete Datafields and All Values" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete Group" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete Member" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete Role" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete User" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete all cycles" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete cycle" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete data field" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Delete data field %{name}" +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete group" +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete group %{name}" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete member" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete member %{name}" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete role" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete role %{name}" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Delete user" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Delete user %{email}" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Deleting this data field cannot be undone. All datafield values for this field will be permanently removed." +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this group cannot be undone. All member-group associations will be permanently removed." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this member cannot be undone. All related data (e.g. membership fee cycles) will be removed." +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this role cannot be undone. Users assigned to this role must be reassigned first." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Deleting this user cannot be undone. The user account and any linked member association will be affected." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Deletion" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Description" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Download CSV templates:" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Draft" +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "E-Mail" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Edit" +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Edit Cycle Amount" msgstr "" +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit Data Field" +msgstr "" + #: lib/mv_web/live/member_field_live/form_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Edit Field: %{field}" msgstr "" +#: lib/mv_web/live/group_live/form.ex +#, elixir-autogen, elixir-format +msgid "Edit Group" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Edit Member" +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format, fuzzy msgid "Edit Membership Fee Type" msgstr "" +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit User" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit group" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit member" +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/index.ex #, elixir-autogen, elixir-format, fuzzy msgid "Edit membership fee type" msgstr "" +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Edit role" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: 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 +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Email" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "Email is invalid." +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Email is required." +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Enabled" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "English Template" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Enter the group name to confirm" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Enter the text above to confirm" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Error list truncated to %{count} entries" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Error loading receipts: %{reason}" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Errors" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Examples" +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 +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Exit Date" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Exits" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Expense" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export" +msgstr "" + +#: lib/mv_web/controllers/member_pdf_export_controller.ex +#, elixir-autogen, elixir-format +msgid "Export contains %{count} rows, maximum is %{max}" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export members to CSV" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Export members to PDF" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed members:" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to %{action} member." +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to approve join request." +msgstr "Failed to approve membership application." + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to delete data field: %{error}" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to delete group: %{error}" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to delete role: %{error}" +msgstr "" + +#: lib/mv_web/controllers/member_pdf_export_controller.ex +#, elixir-autogen, elixir-format +msgid "Failed to generate PDF export" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to link member: %{error}" +msgstr "" + +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to load group." +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to load join request." +msgstr "Failed to load membership application." + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to prepare CSV import: %{reason}" +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "Failed to process chunk %{idx}: %{reason}" +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to read file: %{reason}" +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to read uploaded file: unexpected format" +msgstr "" + +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Failed to reject join request." +msgstr "Failed to reject membership application." + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Failed to remove member: %{error}" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Failed to save member. Please try again." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Failed to send test email. Please check your SMTP configuration." +msgstr "" + #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format msgid "Failed to update cycle status: %{errors}" msgstr "" +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Failed: %{count} row(s)" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Feb." +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Fee Type" +msgstr "Fee Type" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Fee type" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Fee types" +msgstr "Fee types" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Fee types could not be loaded." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Field" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Fields on the join form" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Filter members" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "First Name" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "First name" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Fixed after creation. Members can only switch between types with the same interval." +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "From %{first} to %{last} (relevant years with membership data)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From MAIL_FROM_EMAIL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From MAIL_FROM_NAME" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_ADMIN_GROUP_NAME" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_BASE_URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_CLIENT_ID" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_CLIENT_SECRET" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_GROUPS_CLAIM" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "From OIDC_ONLY" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From OIDC_REDIRECT_URI" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_HOST" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_PASSWORD" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_PORT" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_SSL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From SMTP_USERNAME" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_API_KEY" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_API_URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "From VEREINFACHT_APP_URL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "From VEREINFACHT_CLUB_ID" +msgstr "" + #: lib/mv_web/live/membership_fee_type_live/form.ex #, elixir-autogen, elixir-format msgid "Future unpaid cycles will be regenerated with the new amount." @@ -1182,854 +1509,11 @@ msgstr "" msgid "Generated cycles" msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Include joining cycle" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Interval cannot be changed after creation." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invalid amount format" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Invalid date format" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Last Cycle" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format -msgid "Manage membership fee types for membership fees." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Mark as paid" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Mark as suspended" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Mark as unpaid" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Settings" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Status" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Type" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Types" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fees" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership fee start" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership fee type deleted" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership fee type removed" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type saved successfully" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Membership fee type updated. Cycles regenerated." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -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/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Monthly Interval - Joining Cycle Included" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/form.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "New Membership Fee Type" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "New amount" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "No cycle" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No cycles" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "No cycles to delete" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned." -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No membership fee type assigned" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No status" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "None (no default)" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Not set" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Payment Interval" -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format -msgid "Please confirm the amount change first" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Quarterly Interval - Joining Cycle Excluded" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Regenerate Cycles" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Regenerating..." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select a membership fee type for this member. Members can only switch between types with the same interval." -msgstr "" - -#: lib/mv_web/live/membership_fee_type_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select interval" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Settings saved successfully." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "This action cannot be undone." -msgstr "" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "This field is required" -msgstr "" - -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "This is a technical field and cannot be changed" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Type" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Type '%{confirmation}' to confirm" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Warning" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Yearly Interval - Joining Cycle Excluded" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Yearly Interval - Joining Cycle Included" -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/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Membership Fee Type" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership Fee Start Date" -msgstr "" - -#: lib/mv_web/live/components/field_visibility_dropdown_component.ex -#, elixir-autogen, elixir-format -msgid "Show/Hide Columns" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Back to settings" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Data field %{action} successfully" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Data field deleted successfully" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Data Field" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit Data Field" -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to delete data field: %{error}" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "New Data Field" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save Data Field" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Back to roles list" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Custom" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to delete role: %{error}" -msgstr "" - -#: lib/mv_web/live/role_live/index.ex -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Listing Roles" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Cannot delete role. %{count} user(s) are still assigned to this role. Please assign them to another role first." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Close sidebar" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Main navigation" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "New Role" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "No description" -msgstr "" - -#: lib/mv_web/components/layouts.ex -#, elixir-autogen, elixir-format -msgid "Open navigation menu" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Permission Set" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Profile" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Role deleted successfully." -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role details and permissions." -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Role not found." -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Role saved successfully." -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "Select permission set" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Show Role" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "System" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "System Role" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "System roles cannot be deleted." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Toggle sidebar" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "User menu" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "admin - Unrestricted access" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "normal_user - Create/Read/Update access" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "own_data - Access only to own data" -msgstr "" - -#: lib/mv_web/live/role_live/form.ex -#, elixir-autogen, elixir-format -msgid "read_only - Read access to all data" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to %{action} members." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Cycle Period" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete all cycles" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete cycle" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "The cycle period will be calculated based on this date and the interval." -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership fee type not found" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "User %{action} successfully" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "User deleted successfully" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "User not found" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "You do not have permission to access this membership fee type" -msgstr "" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#: lib/mv_web/live/membership_fee_type_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "You do not have permission to delete this membership fee type" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "You do not have permission to delete this user" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "created" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "updated" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "Unknown error" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member deleted successfully" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member not found" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "You do not have permission to delete this member" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member created successfully" -msgstr "Member created successfully" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Member updated successfully" -msgstr "Member updated successfully" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "Email is invalid." -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Email is required." -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Roles" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Administration" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Failed to %{action} member." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Failed to save member. Please try again." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Please correct the errors in the form and try again." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed. Please check your input." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed: %{field} %{message}" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format -msgid "Validation failed: %{message}" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Close" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Filter members" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Member filter" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Payment Status" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid " (Field: %{field})" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "CSV File" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Download CSV templates:" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "English Template" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Error list truncated to %{count} entries" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Errors" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Failed to prepare CSV import: %{reason}" -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Failed to process chunk %{idx}: %{reason}" -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to read file: %{reason}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Failed: %{count} row(s)" -msgstr "" - #: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format msgid "German Template" msgstr "" -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Import Results" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import is already running. Please wait for it to complete." -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Import state is missing. Cannot process chunk %{idx}." -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "Invalid chunk index: %{idx}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Line %{line}: %{message}" -msgstr "" - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format -msgid "No file was uploaded" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Only administrators can import members from CSV files." -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Please select a CSV file to import." -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Please wait for the file upload to complete before starting the import." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Processing chunk %{current} of %{total}..." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Start Import" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Starting import..." -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Successfully inserted: %{count} member(s)" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Summary" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Warnings" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Validation failed" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "email" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "email %{email} has already been taken" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete this group? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Back to groups list" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/index.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Create Group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Group" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete group" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#, elixir-autogen, elixir-format -msgid "Edit Group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Enter the group name to confirm" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to delete group: %{error}" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to load group." -msgstr "" - #: lib/mv_web/live/group_live/show.ex #, elixir-autogen, elixir-format, fuzzy msgid "Group deleted successfully." @@ -2061,1168 +1545,33 @@ msgstr "" msgid "Groups" msgstr "" -#: lib/mv_web/live/group_live/index.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "No groups" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "No members in this group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "This group has %{count} member. All member-group associations will be permanently deleted." -msgid_plural "This group has %{count} members. All member-group associations will be permanently deleted." -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "To confirm deletion, please enter the group name:" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Total: %{count} member" -msgid_plural "Total: %{count} members" -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "This user cannot be edited." -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "This user cannot be viewed." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Not authorized." -msgstr "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Could not load data fields. Please check your permissions." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Add Member" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to remove member: %{error}" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member is not in this group." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "No email" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove member from group" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Search for a member" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Search for a member..." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Add members" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "No members selected." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Remove %{name}" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Some members could not be added: %{errors}" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "CSV files only, maximum %{size} MB" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "(ISO-8601 format: YYYY-MM-DD)" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "(true/false/1/0/yes/no/ja/nein)" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "custom_field: %{name} – expected %{type} %{details}, got: %{value}" -msgstr "" - -#: lib/mv/membership/import/member_csv.ex -#, elixir-autogen, elixir-format -msgid "custom_field: %{name} – expected %{type}, got: %{value}" -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." -msgstr "Unknown column '%{header}' will be ignored. If this is a custom field, create it in Mila before importing." - -#: lib/mv/membership/import/import_runner.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed to read uploaded file: unexpected format" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "You do not have permission to access this page." -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export members to CSV" -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "all" -msgstr "" - -#: lib/mv/membership/member/validations/email_change_permission.ex -#, elixir-autogen, elixir-format -msgid "Only administrators or the linked user can change the email for members linked to users" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select role..." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "You are not allowed to perform this action." -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Select a membership fee type" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Linked" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "OIDC" -msgstr "" - -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Not linked" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#, elixir-autogen, elixir-format -msgid "SSO / OIDC user" -msgstr "" - -#: lib/mv_web/live/import_live/components.ex -#, elixir-autogen, elixir-format -msgid "Import aborted" -msgstr "" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "paid" -msgstr "" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "suspended" -msgstr "" - -#: lib/mv_web/controllers/member_export_controller.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "unpaid" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Member of group %{name}" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Active members" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Exits" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Inactive members" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Joins" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Statistics" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Total" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Year" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Contributions pie: paid %{paid}%%, unpaid %{unpaid}%%, suspended %{suspended}%%" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "All years combined (pie)" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Contributions by year" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Contributions by year as table with stacked bars" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Contributions" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Fee type" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Member numbers by year" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "From %{first} to %{last} (relevant years with membership data)" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Member numbers by year as table with bars" -msgstr "" - -#: lib/mv_web/live/statistics_live.ex -#, elixir-autogen, elixir-format -msgid "Fee types could not be loaded." -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "CSV" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Created at:" -msgstr "Created at:" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export" -msgstr "" - -#: lib/mv_web/controllers/member_pdf_export_controller.ex -#, elixir-autogen, elixir-format -msgid "Export contains %{count} rows, maximum is %{max}" -msgstr "" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Export members to PDF" -msgstr "" - -#: lib/mv_web/controllers/member_pdf_export_controller.ex -#, elixir-autogen, elixir-format -msgid "Failed to generate PDF export" -msgstr "" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Member %{club_name}" -msgstr "Member %{club_name}" - -#: lib/mv/membership/members_pdf.ex -#, elixir-autogen, elixir-format -msgid "Member count:" -msgstr "Member count:" - -#: lib/mv_web/components/export_dropdown.ex -#, elixir-autogen, elixir-format -msgid "PDF" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Import" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Value type cannot be changed after creation" -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 -#, elixir-autogen, elixir-format -msgid "Country" -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Could not load member list. Please try again." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "API Key" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "API URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Club ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_API_KEY" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_API_URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From VEREINFACHT_CLUB_ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Save Vereinfacht Settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Sync all members without Vereinfacht contact" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Synced %{count} member(s) to Vereinfacht." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Syncing..." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Vereinfacht is not configured. Set API URL, API Key, and Club ID." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Test Integration" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Testing..." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection successful. API URL, API Key and Club ID are valid." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Not configured. Please set API URL, API Key and Club ID." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP %{status}):" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 401): API key is invalid or missing." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 403): Access denied. Please check the Club ID and API key permissions." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed (HTTP 404): API endpoint not found. Please check the API URL (e.g. correct version path)." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. The URL does not point to a Vereinfacht API (received HTML instead of JSON)." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. Could not reach the API (network error or wrong URL)." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Connection failed. Unknown error." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "View contact in Vereinfacht" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "%{count} failed" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "%{count} synced" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Failed members:" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Last sync result:" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Synced %{count} member(s). %{error_count} failed." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Vereinfacht: %{detail}" -msgstr "Vereinfacht: %{detail}" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No Vereinfacht contact exists for this member." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." -msgstr "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "(set)" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Leave blank to keep current" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Some values are set via environment variables. Those fields are read-only." -msgstr "" - -# Vereinfacht API validation messages (looked up at runtime via dgettext) -msgid "The address field is required." -msgstr "" - -msgid "The city field is required." -msgstr "" - -msgid "The email field is required." -msgstr "" - -msgid "The first name field is required." -msgstr "" - -msgid "The last name field is required." -msgstr "" - -msgid "The zip code field is required." -msgstr "" - -msgid "Too Many Attempts." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "App URL (contact view link)" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "From VEREINFACHT_APP_URL" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Error loading receipts: %{reason}" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "No receipts" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Show bookings/receipts from Vereinfacht" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Vereinfacht receipts" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Cancelled" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Credit" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Credit note" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Draft" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Invoice" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Open" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Receipt" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Apr." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Aug." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Completed" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Dec." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Expense" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Feb." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Income" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jan." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jul." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Jun." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Mar." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "May" -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Nov." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Oct." -msgstr "" - -#: lib/mv_web/live/member_live/show/membership_fees_component.ex -#, elixir-autogen, elixir-format -msgid "Sep." -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/translations/member_fields.ex -#, elixir-autogen, elixir-format -msgid "Fee Type" -msgstr "Fee Type" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Import members from CSV files." -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. Groups and membership fees are not supported for import." -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format -msgid "Choose CSV file" -msgstr "" - -#: lib/mv_web/live/import_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Import Members" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Admin group name" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Base URL" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format -msgid "Basic settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Client ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Client Secret" -msgstr "" - -#: lib/mv_web/components/layouts/sidebar.ex -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Datafields" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_ADMIN_GROUP_NAME" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_BASE_URL" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_CLIENT_ID" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_CLIENT_SECRET" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_GROUPS_CLAIM" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "From OIDC_REDIRECT_URI" -msgstr "" - #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format, fuzzy msgid "Groups claim" msgstr "" -#: lib/mv_web/components/layouts/sidebar.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Membership fee settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Redirect URI" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save OIDC Settings" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "e.g. admin" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "From OIDC_ONLY" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Only OIDC sign-in (hide password login)" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Clear filters" -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Apply filters" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete %{name}? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#: lib/mv_web/live/role_live/show.ex -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Danger zone" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete member" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete member %{name}" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this member cannot be undone. All related data (e.g. membership fee cycles) will be removed." -msgstr "" - -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit group" -msgstr "" - -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit member" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Edit role" -msgstr "" - -#: lib/mv_web/live/group_live/index.ex -#, elixir-autogen, elixir-format -msgid "Click for group details" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for member details" -msgstr "" - -#: lib/mv_web/live/role_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for role details" -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Click for user details" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Members table" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete the role %{name}? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Are you sure you want to delete the user %{email}? This action cannot be undone." -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#: lib/mv_web/live/member_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Click to edit datafield" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete data field" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Delete data field %{name}" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete group %{name}" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete role" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete role %{name}" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete user" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Delete user %{email}" -msgstr "" - -#: lib/mv_web/live/group_live/form.ex -#: lib/mv_web/live/group_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this group cannot be undone. All member-group associations will be permanently removed." -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this role cannot be undone. Users assigned to this role must be reassigned first." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format -msgid "Deleting this user cannot be undone. The user account and any linked member association will be affected." -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "System user cannot be deleted." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Save Name" -msgstr "" - -#: lib/mv_web/live/components/field_visibility_dropdown_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Datafield %{id}" -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Datafields and All Values" -msgstr "" - -#: lib/mv_web/live/custom_field_live/form_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Deleting this data field cannot be undone. All datafield values for this field will be permanently removed." -msgstr "" - -#: lib/mv_web/live/components/member_filter_component.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format -msgid "Individual datafields" -msgstr "" - -#: lib/mv_web/live/member_live/form.ex -#: lib/mv_web/live/member_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Member" -msgstr "" - -#: lib/mv_web/live/role_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete Role" -msgstr "" - -#: lib/mv_web/live/user_live/form.ex -#: lib/mv_web/live/user_live/show.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Delete User" -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 #, elixir-autogen, elixir-format -msgid "Configure fee types for membership fees." +msgid "Half-yearly" msgstr "" -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format -msgid "Configure which data you want to save for your members. Define individual datafields." -msgstr "" - -#: lib/mv_web/live/user_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "Manage users and their permissions." -msgstr "" - -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "%{count} member has a value assigned for this datafield." -msgid_plural "%{count} members have values assigned for this datafield." -msgstr[0] "" -msgstr[1] "" - -#: lib/mv_web/live/datafields_live.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "Individual Datafields" -msgstr "" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format, fuzzy -msgid "No group assignment" -msgstr "" - -#: lib/mv_web/components/core_components.ex -#: lib/mv_web/live/group_live/index.ex #: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex -#: lib/mv_web/live/member_live/index.html.heex -#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Not specified" +msgid "History" msgstr "" -#: lib/mv_web/live/custom_field_live/index_component.ex -#, elixir-autogen, elixir-format, fuzzy -msgid "All datafield values will be permanently deleted when you delete this datafield." +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Host" msgstr "" -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Click to edit membership fee type" -msgstr "Click to edit membership fee type" - #: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "Current payment cycle" -msgstr "Current payment cycle" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Last payment cycle" -msgstr "Last payment cycle" - -#: lib/mv_web/live/member_live/index.html.heex -#, elixir-autogen, elixir-format -msgid "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." -msgstr "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Default settings" -msgstr "Default settings" - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Default type: Assigned to new members; can be changed per member." -msgstr "Default type: Assigned to new members; can be changed per member." - -#: lib/mv_web/live/membership_fee_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." -msgstr "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "Fee types" -msgstr "Fee types" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "%{count} filter active" -msgid_plural "%{count} filters active" -msgstr[0] "%{count} filter active" -msgstr[1] "%{count} filters active" - -#: lib/mv_web/live/components/member_filter_component.ex -#, elixir-autogen, elixir-format -msgid "without %{name}" -msgstr "without %{name}" - -#: lib/mv_web/templates/emails/user_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Confirm my email" -msgstr "Confirm my email" - -#: lib/mv_web/templates/emails/join_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Confirm my request" -msgstr "Confirm my request" - -#: lib/mv/accounts/user/senders/send_new_user_confirmation_email.ex -#, elixir-autogen, elixir-format -msgid "Confirm your email address" -msgstr "Confirm your email address" - -#: lib/mv_web/emails/join_confirmation_email.ex -#, elixir-autogen, elixir-format -msgid "Confirm your membership request" -msgstr "Confirm your membership request" +msgid "House Number" +msgstr "" #: lib/mv_web/templates/emails/user_confirmation.html.heex #, elixir-autogen, elixir-format @@ -3239,85 +1588,147 @@ 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/controllers/join_confirm_controller.ex -#, elixir-autogen, elixir-format -msgid "Invalid or expired link." -msgstr "Invalid or expired link." +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Import" +msgstr "" -#: lib/mv_web/templates/emails/user_confirmation.html.heex -#, elixir-autogen, elixir-format -msgid "Please confirm your email address by clicking the link below." -msgstr "Please confirm your email address by clicking the link below." +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Import Members" +msgstr "" -#: lib/mv_web/templates/emails/password_reset.html.heex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reset password" -msgstr "Reset password" +msgid "Import Results" +msgstr "" -#: lib/mv/accounts/user/senders/send_password_reset_email.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Reset your password" -msgstr "Reset your password" +msgid "Import aborted" +msgstr "" -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "Thank you, we have received your request." -msgstr "Thank you, we have received your request." +msgid "Import is already running. Please wait for it to complete." +msgstr "" -#: lib/mv_web/controllers/join_confirm_controller.ex +#: lib/mv_web/live/import_live.ex #, elixir-autogen, elixir-format -msgid "This link has expired. Please submit the form again." -msgstr "This link has expired. Please submit the form again." +msgid "Import members from CSV files." +msgstr "" -#: lib/mv_web/templates/emails/join_confirmation.html.heex +#: lib/mv/membership/import/import_runner.ex #, 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." +msgid "Import state is missing. Cannot process chunk %{idx}." +msgstr "" -#: lib/mv_web/templates/emails/password_reset.html.heex +#: lib/mv_web/live/statistics_live.ex #, elixir-autogen, elixir-format -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." +msgid "Inactive members" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Include both letters and numbers" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Include joining cycle" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." +msgstr "Include joining cycle: When active, members pay from their joining cycle; when inactive, from the next full cycle." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Income" +msgstr "" #: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Incomplete" msgstr "" -#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Incorrect email or password" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex #, elixir-autogen, elixir-format, fuzzy -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." +msgid "Individual Datafields" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Individual datafields" msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Add field" +msgid "Individual fields" +msgstr "Individual fields" + +#: 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/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Interval" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Interval cannot be changed after creation." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Invalid amount format" +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "Invalid chunk index: %{idx}" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Invalid date format" msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Available fields" +msgid "Invalid email address. Please enter a valid recipient address." msgstr "" -#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/controllers/join_confirm_controller.ex #, elixir-autogen, elixir-format -msgid "Configure the public join form that allows new members to submit a join request." +msgid "Invalid or expired link." +msgstr "Invalid or expired link." + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Invoice" msgstr "" -#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex #, elixir-autogen, elixir-format -msgid "Could not save join form settings." +msgid "Jan." msgstr "" -#: lib/mv_web/live/global_settings_live.ex -#: lib/mv_web/live/join_live.ex +#: 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 +#: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format -msgid "Field" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Fields on the join form" +msgid "Join Date" msgstr "" #: lib/mv_web/live/global_settings_live.ex @@ -3330,136 +1741,6 @@ msgstr "" msgid "Join form enabled" msgstr "" -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "No fields selected. Add at least the email field." -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Remove field %{label}" -msgstr "" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Board approval required (in development)" -msgstr "Board approval required (in development)" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Individual fields" -msgstr "Individual fields" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "Personal data" -msgstr "Personal data" - -#: lib/mv_web/components/core_components.ex -#, elixir-autogen, elixir-format -msgid "Reorder" -msgstr "Reorder" - -#: lib/mv_web/live/global_settings_live.ex -#, elixir-autogen, elixir-format -msgid "The order of rows determines the field order in the join form." -msgstr "The order of rows determines the field order in the join form." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Become a member" -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Please check your entries. Email is required." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Submit request" -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Too many requests. Please try again later." -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." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "By submitting your application you will receive an email with a confirmation link. Once you have confirmed your email address, your application will be reviewed." -msgstr "" - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Please enter your details for the membership application here." -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." -msgstr "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." - -#: lib/mv_web/live/join_live.ex -#, elixir-autogen, elixir-format -msgid "Website" -msgstr "" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Additional form data" -msgstr "Additional form data" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approve" -msgstr "Approve" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approve this join request and create a member?" -msgstr "Approve this membership application and create a member?" - -#: lib/mv_web/live/join_request_live/helpers.ex -#, elixir-autogen, elixir-format -msgid "Approved" -msgstr "Approved" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Approved at" -msgstr "Approved at" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Back to join requests" -msgstr "Back to membership applications" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "Click for details" -msgstr "Click for details" - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to approve join request." -msgstr "Failed to approve membership application." - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to load join request." -msgstr "Failed to load membership application." - -#: lib/mv_web/live/join_request_live/show.ex -#, elixir-autogen, elixir-format -msgid "Failed to reject join request." -msgstr "Failed to reject membership application." - #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Join request" @@ -3491,21 +1772,882 @@ msgstr "Membership application – %{email}" msgid "Join requests" msgstr "Membership applications" +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Joining date" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Joins" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Jul." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Jun." +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Last Cycle" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Last Name" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Last name" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Last payment cycle" +msgstr "Last payment cycle" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Last sync result:" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Leave blank to keep current" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Line %{line}: %{message}" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Linked" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Linked Member" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Linked User" +msgstr "" + +#: lib/mv_web/live/role_live/index.ex +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Listing Roles" +msgstr "" + +#: lib/mv_web/live/user_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Listing Users" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Logout" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Main navigation" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Manage global settings for the association." +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Manage membership fee types for membership fees." +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Manage roles and their permission sets." +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Manage users and their permissions." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Mar." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Mark as paid" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Mark as suspended" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Mark as unpaid" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "May" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member %{action} successfully" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Member %{club_name}" +msgstr "Member %{club_name}" + +#: lib/mv/membership/members_pdf.ex +#, elixir-autogen, elixir-format +msgid "Member count:" +msgstr "Member count:" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member created successfully" +msgstr "Member created successfully" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member deleted successfully" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Member field %{action} successfully" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Member filter" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member is not in this group." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member not found" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Member numbers by year" +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Member numbers by year as table with bars" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Member of group %{name}" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays for the year they joined" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the joining month" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the next full quarter" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Member pays from the next full year" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member updated successfully" +msgstr "Member updated successfully" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Member will be unlinked when you save. Cannot select new member until saved." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_live/index.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Members" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Members table" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Settings" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Start Date" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Status" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fee Types" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership Fees" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership fee settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership fee start" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership fee type deleted" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership fee type not found" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Membership fee type removed" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type saved successfully" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Membership fee type updated. Cycles regenerated." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +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/mailer.ex +#, elixir-autogen, elixir-format +msgid "Mila – Test email" +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 +#, elixir-autogen, elixir-format +msgid "Monthly" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Monthly Interval - Joining Cycle Included" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Name" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Name & Amount" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "New" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "New Data Field" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New Member" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "New Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New Role" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "New User" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "New amount" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/member_live/index/formatter.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "No" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No Vereinfacht contact exists for this member." +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "No approved or rejected requests yet" +msgstr "No approved or rejected requests yet" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "No cycle" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No cycles" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "No cycles to delete" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "No description" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "No email" +msgstr "" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "No email addresses found" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "No fields selected. Add at least the email field." +msgstr "" + +#: lib/mv/membership/import/import_runner.ex +#, elixir-autogen, elixir-format +msgid "No file was uploaded" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "No group assignment" +msgstr "" + +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No groups" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "No member linked" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "No members in this group" +msgstr "" + +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "No members selected" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "No members selected." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No membership fee cycles found. Cycles will be generated automatically when a membership fee type is assigned." +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No membership fee type assigned" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "No receipts" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No status" +msgstr "" + #: lib/mv_web/live/join_request_live/index.ex #, elixir-autogen, elixir-format msgid "No submitted join requests" msgstr "No submitted membership applications" +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "No user linked" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "None" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "None (no default)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "None (port 25, insecure)" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not authorized." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Not configured. Please set API URL, API Key and Club ID." +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Not enabled" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Not linked" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Not set" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/group_live/index.ex +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/index.html.heex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Not specified" +msgstr "" + #: lib/mv_web/live/join_request_live/index.ex #, elixir-autogen, elixir-format msgid "Not submitted yet" msgstr "Not submitted yet" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Note" +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 +#: lib/mv_web/translations/member_fields.ex +#, elixir-autogen, elixir-format +msgid "Notes" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Nov." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Nr." +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Number" +msgstr "" + +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "OIDC" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "OIDC (Single Sign-On)" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Oct." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Only OIDC sign-in (hide password login)" +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Only administrators can import members from CSV files." +msgstr "" + +#: lib/mv/membership/member/validations/email_change_permission.ex +#, elixir-autogen, elixir-format +msgid "Only administrators or the linked user can change the email for members linked to users" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format +msgid "Only possible if no members are assigned to this type." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Open" +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/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Open in email program" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#, elixir-autogen, elixir-format +msgid "Open navigation menu" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Open requests" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Optional" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Options" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "PDF" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex +#, elixir-autogen, elixir-format +msgid "Paid" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Password" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Password Authentication" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Password requirements" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Payment Data" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Payment Interval" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Payment Status" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "Payments" +msgstr "" + #: lib/mv_web/live/join_request_live/helpers.ex #, elixir-autogen, elixir-format msgid "Pending confirmation" msgstr "Pending confirmation" +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Permission Set" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "Personal Data" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Personal data" +msgstr "Personal data" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Please check your entries. Email is required." +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format +msgid "Please confirm the amount change first" +msgstr "" + +#: lib/mv_web/templates/emails/user_confirmation.html.heex +#, elixir-autogen, elixir-format +msgid "Please confirm your email address by clicking the link below." +msgstr "Please confirm your email address by clicking the link below." + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Please correct the errors in the form and try again." +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Please enter your details for the membership application here." +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Please select a CSV file to import." +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format +msgid "Please wait for the file upload to complete before starting the import." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Port" +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 +#, elixir-autogen, elixir-format +msgid "Postal Code" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Processing chunk %{current} of %{total}..." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Profile" +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 +#, elixir-autogen, elixir-format +msgid "Quarterly" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Quarterly Interval - Joining Cycle Excluded" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Receipt" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Recipient" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Recipient address rejected by the server." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Redirect URI" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Regenerate Cycles" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Regenerating..." +msgstr "" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Reject" @@ -3526,16 +2668,448 @@ msgstr "Rejected" msgid "Rejected at" msgstr "Rejected at" +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove %{name}" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Remove field %{label}" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Remove member from group" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "Reorder" +msgstr "Reorder" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Request data" msgstr "Request data" +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Required" +msgstr "" + +#: lib/mv_web/templates/emails/password_reset.html.heex +#, elixir-autogen, elixir-format +msgid "Reset password" +msgstr "Reset password" + +#: lib/mv/accounts/user/senders/send_password_reset_email.ex +#, elixir-autogen, elixir-format +msgid "Reset your password" +msgstr "Reset your password" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#, elixir-autogen, elixir-format +msgid "Review by" +msgstr "Review by" + #: lib/mv_web/live/join_request_live/show.ex #, elixir-autogen, elixir-format msgid "Review information" msgstr "Review information" +#: lib/mv_web/live/join_request_live/index.ex +#, elixir-autogen, elixir-format +msgid "Reviewed at" +msgstr "Review date" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/index.html.heex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Role deleted successfully." +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role details and permissions." +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Role not found." +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Role saved successfully." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Roles" +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 error:" +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." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SMTP is not configured. Transactional emails (join confirmation, password reset, etc.) will not be delivered reliably." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "SSL (port 465)" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "SSO / OIDC user" +msgstr "" + +#: lib/mv_web/live/group_live/form.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/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Data Field" +msgstr "" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Field" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Member" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Membership Fee Type" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Name" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save OIDC Settings" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save SMTP Settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save Settings" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Save User" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Save Vereinfacht Settings" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Save to confirm linking." +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/global_settings_live.ex +#: lib/mv_web/live/group_live/form.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#: lib/mv_web/live/role_live/form.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Saving..." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Search for a member" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Search for a member to link..." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Search for a member..." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Search for member to link" +msgstr "" + +#: lib/mv_web/live/components/search_bar_component.ex +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Search..." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select a membership fee type" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select a membership fee type for this member. Members can only switch between types with the same interval." +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select all" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Select all members" +msgstr "" + +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select interval" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select language" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Select member" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select none" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "Select permission set" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Select role..." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Selected" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Send test email" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender address rejected. The \"Sender email\" must be owned by or authorized for the SMTP user." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender email (From)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Sender name (From)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Sending..." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Sep." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Server unreachable. Check host and port." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Set Password" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." +msgstr "Sets whether the payment status filter and the membership fee status column use the last completed or the current payment cycle." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Settings saved successfully." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Settings updated successfully" +msgstr "" + +#: lib/mv_web/live/member_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Show" +msgstr "" + +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Show Member" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Show Role" +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Show User" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Show bookings/receipts from Vereinfacht" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "Show in overview" +msgstr "" + +#: lib/mv_web/live/components/field_visibility_dropdown_component.ex +#, elixir-autogen, elixir-format +msgid "Show/Hide Columns" +msgstr "" + +#: lib/mv_web/live/datafields_live.ex +#, elixir-autogen, elixir-format +msgid "Slug does not match. Deletion cancelled." +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "Some members could not be added: %{errors}" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Some values are set via environment variables. Those fields are read-only." +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "Something went wrong!" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Start Import" +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format +msgid "Starting import..." +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Statistics" +msgstr "" + +#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Status" +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 +#, elixir-autogen, elixir-format +msgid "Street" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Submit request" +msgstr "" + #: lib/mv_web/live/join_request_live/helpers.ex #, elixir-autogen, elixir-format msgid "Submitted" @@ -3547,45 +3121,198 @@ msgstr "Submitted" msgid "Submitted at" msgstr "Submitted at" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "No approved or rejected requests yet" -msgstr "No approved or rejected requests yet" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "Reviewed at" -msgstr "Review date" - -#: lib/mv_web/live/join_request_live/index.ex -#, elixir-autogen, elixir-format -msgid "History" +msgid "Successfully inserted: %{count} member(s)" msgstr "" -#: lib/mv_web/live/join_request_live/index.ex +#: lib/mv_web/live/import_live/components.ex #, elixir-autogen, elixir-format -msgid "Open requests" +msgid "Summary" msgstr "" -#: lib/mv_web/live/join_request_live/index.ex -#: lib/mv_web/live/join_request_live/show.ex +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex #, elixir-autogen, elixir-format -msgid "Review by" -msgstr "Review by" +msgid "Suspended" +msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format -msgid "Accounting-Software (Vereinfacht) Integration" +msgid "Sync all members without Vereinfacht contact" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." +msgstr "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Synced %{count} member(s) to Vereinfacht." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Synced %{count} member(s). %{error_count} failed." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Syncing..." msgstr "" #: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "System" +msgstr "" + +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "System Role" +msgstr "" + +#: lib/mv_web/live/role_live/show.ex #, elixir-autogen, elixir-format, fuzzy -msgid "Manage roles and their permission sets." +msgid "System roles cannot be deleted." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "System user cannot be deleted." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS (port 587, recommended)" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS connection failed. Check the TLS/SSL setting and port (587 for TLS, 465 for SSL)." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "TLS/SSL" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test Integration" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Test email" msgstr "" #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format, fuzzy -msgid "OIDC (Single Sign-On)" +msgid "Test email sent successfully." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Testing..." +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Text" +msgstr "" + +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "Thank you, we have received your request." +msgstr "Thank you, we have received your request." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "The authentication server is currently unavailable. Please try again later." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "The cycle period will be calculated based on this date and the interval." +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "The order of rows determines the field order in the join form." +msgstr "The order of rows determines the field order in the join form." + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "The sender email must be owned by or authorized for the SMTP user on most servers." +msgstr "" + +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +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/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format +msgid "These will appear in addition to other data when adding new members." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "This action cannot be undone." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "This email is already linked to a different OIDC account. Cannot link multiple OIDC providers to the same account." +msgstr "" + +#: lib/mv_web/components/core_components.ex +#: lib/mv_web/live/membership_fee_type_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "This field cannot be empty" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "This field is required" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format +msgid "This group has %{count} member. All member-group associations will be permanently deleted." +msgid_plural "This group has %{count} members. All member-group associations will be permanently deleted." +msgstr[0] "" +msgstr[1] "" + +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "This is a technical field and cannot be changed" +msgstr "" + +#: lib/mv/mailer.ex +#, elixir-autogen, elixir-format +msgid "This is a test email sent from Mila. If you received this, your SMTP configuration is working correctly." +msgstr "" + +#: lib/mv_web/controllers/join_confirm_controller.ex +#, elixir-autogen, elixir-format +msgid "This link has expired. Please submit the form again." +msgstr "This link has expired. Please submit the form again." + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "This user cannot be edited." +msgstr "" + +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "This user cannot be viewed." msgstr "" #: lib/mv_web/live/user_live/form.ex @@ -3593,11 +3320,459 @@ msgstr "" msgid "This user is linked via SSO (Single Sign-On). A password set or changed here only affects login with email and password in this application. It does not change the password in your identity provider (e.g. Authentik). To change the SSO password, use the identity provider or your organization's IT." msgstr "" +#: lib/mv_web/live/member_live/index.ex +#, elixir-autogen, elixir-format +msgid "Tip: Paste email addresses into the BCC field for privacy compliance" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "To confirm deletion, please enter the group name:" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "To confirm deletion, please enter this text:" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Toggle dark mode" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format +msgid "Toggle sidebar" +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Too many requests. Please try again later." +msgstr "" + +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format +msgid "Total" +msgstr "" + +#: lib/mv_web/live/group_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Total: %{count} member" +msgid_plural "Total: %{count} members" +msgstr[0] "" +msgstr[1] "" + +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/role_live/index.html.heex +#, elixir-autogen, elixir-format +msgid "Type" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Type '%{confirmation}' to confirm" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Unable to authenticate with OIDC. Please try again." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Unable to sign in. Please try again." +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." +msgstr "Unknown column '%{header}' will be ignored. If this is a custom field, create it in Mila before importing." + +#: lib/mv_web/live/import_live/components.ex +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unknown error" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unlink Member" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "Unlinking scheduled" +msgstr "" + +#: lib/mv/membership/members_pdf.ex +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/statistics_live.ex +#: lib/mv_web/member_live/index/membership_fee_status.ex +#, elixir-autogen, elixir-format +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. Groups and membership fees are not supported for import." +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format +msgid "User" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "User %{action} successfully" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "User deleted successfully" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "User menu" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "User not found" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format +msgid "User will be created without a password. Check 'Set Password' to add one." +msgstr "" + #: lib/mv_web/live/global_settings_live.ex #, elixir-autogen, elixir-format, fuzzy +msgid "Username" +msgstr "" + +#: lib/mv_web/components/layouts/sidebar.ex +#: lib/mv_web/live/role_live/index.html.heex +#: lib/mv_web/live/user_live/index.html.heex +#, elixir-autogen, elixir-format, fuzzy +msgid "Users" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Validation failed" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed. Please check your input." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed: %{field} %{message}" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "Validation failed: %{message}" +msgstr "" + +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Value Type" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Value type" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#, elixir-autogen, elixir-format +msgid "Value type cannot be changed after creation" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Vereinfacht is not configured. Set API URL, API Key, and Club ID." +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Vereinfacht receipts" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Vereinfacht: %{detail}" +msgstr "Vereinfacht: %{detail}" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "View contact in Vereinfacht" +msgstr "" + +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Warning" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "Warning: Changing from %{old_interval} to %{new_interval} is not allowed. Please select a membership fee type with the same interval." +msgstr "" + +#: lib/mv_web/live/import_live/components.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Warnings" +msgstr "" + +#: lib/mv_web/components/layouts.ex +#: lib/mv_web/components/layouts/root.html.heex +#, elixir-autogen, elixir-format +msgid "We can't find the internet" +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/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." +msgstr "" + +#: lib/mv_web/live/join_live.ex +#, elixir-autogen, elixir-format +msgid "Website" +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." msgstr "" +#: lib/mv_web/live/statistics_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "Year" +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 +#, elixir-autogen, elixir-format +msgid "Yearly" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Yearly Interval - Joining Cycle Excluded" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#, elixir-autogen, elixir-format +msgid "Yearly Interval - Joining Cycle Included" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#: lib/mv_web/live/custom_field_live/index_component.ex +#: lib/mv_web/live/member_field_live/index_component.ex +#: lib/mv_web/live/member_live/index/formatter.ex +#: lib/mv_web/live/member_live/show.ex +#: lib/mv_web/live/member_live/show/membership_fees_component.ex +#: lib/mv_web/live/role_live/show.ex +#, elixir-autogen, elixir-format +msgid "Yes" +msgstr "" + +#: lib/mv_web/translations/field_types.ex +#, elixir-autogen, elixir-format +msgid "Yes/No-Selection" +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/membership_fees_component.ex +#, elixir-autogen, elixir-format +msgid "You are not allowed to perform this action." +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You are now signed in" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You are now signed out" +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to %{action} members." +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "You do not have permission to access this membership fee type" +msgstr "" + +#: lib/mv_web/live/import_live.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "You do not have permission to access this page." +msgstr "" + +#: lib/mv_web/live/member_live/form.ex +#: lib/mv_web/live/member_live/show.ex +#, elixir-autogen, elixir-format +msgid "You do not have permission to delete this member" +msgstr "" + +#: lib/mv_web/live/membership_fee_settings_live.ex +#: lib/mv_web/live/membership_fee_type_live/index.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "You do not have permission to delete this membership fee type" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#: lib/mv_web/live/user_live/show.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "You do not have permission to delete this user" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "You have already signed in another way, but have not confirmed your account.\nYou can confirm your account using the link we sent to you, or by resetting your password.\n" +msgstr "" + +#: lib/mv_web/templates/emails/password_reset.html.heex +#, elixir-autogen, elixir-format +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/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." +msgstr "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." + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Your email address has now been confirmed" +msgstr "" + +#: lib/mv_web/controllers/auth_controller.ex +#, elixir-autogen, elixir-format +msgid "Your password has successfully been reset" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "admin - Unrestricted access" +msgstr "" + +#: lib/mv_web/components/export_dropdown.ex +#, elixir-autogen, elixir-format +msgid "all" +msgstr "" + +#: lib/mv_web/components/table_components.ex +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "ascending" +msgstr "" + +#: lib/mv_web/components/core_components.ex +#, elixir-autogen, elixir-format +msgid "close" +msgstr "" + +#: lib/mv_web/live/custom_field_live/form_component.ex +#: lib/mv_web/live/member_live/form.ex +#, elixir-autogen, elixir-format +msgid "create" +msgstr "" + +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "created" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "custom_field: %{name} – expected %{type} %{details}, got: %{value}" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "custom_field: %{name} – expected %{type}, got: %{value}" +msgstr "" + +#: lib/mv_web/components/table_components.ex +#: lib/mv_web/live/components/sort_header_component.ex +#, elixir-autogen, elixir-format +msgid "descending" +msgstr "" + +#: lib/mv_web/live/global_settings_live.ex +#, elixir-autogen, elixir-format +msgid "e.g. admin" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "email" +msgstr "" + +#: lib/mv/membership/import/member_csv.ex +#, elixir-autogen, elixir-format +msgid "email %{email} has already been taken" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "normal_user - Create/Read/Update access" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "own_data - Access only to own data" +msgstr "" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "paid" +msgstr "" + +#: lib/mv_web/live/role_live/form.ex +#, elixir-autogen, elixir-format +msgid "read_only - Read access to all data" +msgstr "" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "suspended" +msgstr "" + +#: lib/mv_web/controllers/member_export_controller.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "unpaid" +msgstr "" + #: lib/mv_web/live/member_field_live/form_component.ex #, elixir-autogen, elixir-format, fuzzy msgid "Save datafield" @@ -3648,7 +3823,12 @@ msgstr "" #~ msgid "Save Settings" #~ msgstr "" -#~ #: lib/mv_web/live/global_settings_live.ex -#~ #, elixir-autogen, elixir-format -#~ msgid "Vereinfacht Integration" -#~ msgstr "" +#: lib/mv_web/live/user_live/form.ex +#, elixir-autogen, elixir-format, fuzzy +msgid "updated" +msgstr "" + +#: lib/mv_web/live/components/member_filter_component.ex +#, elixir-autogen, elixir-format +msgid "without %{name}" +msgstr "without %{name}" diff --git a/priv/repo/migrations/20260311082352_add_smtp_to_settings.exs b/priv/repo/migrations/20260311082352_add_smtp_to_settings.exs new file mode 100644 index 0000000..2439035 --- /dev/null +++ b/priv/repo/migrations/20260311082352_add_smtp_to_settings.exs @@ -0,0 +1,27 @@ +defmodule Mv.Repo.Migrations.AddSmtpToSettings do + @moduledoc """ + Adds SMTP configuration attributes to the settings table. + """ + + use Ecto.Migration + + def up do + alter table(:settings) do + add :smtp_host, :text + add :smtp_port, :bigint + add :smtp_username, :text + add :smtp_password, :text + add :smtp_ssl, :text + end + end + + def down do + alter table(:settings) do + remove :smtp_ssl + remove :smtp_password + remove :smtp_username + remove :smtp_port + remove :smtp_host + end + end +end diff --git a/priv/repo/migrations/20260311140000_add_mail_from_to_settings.exs b/priv/repo/migrations/20260311140000_add_mail_from_to_settings.exs new file mode 100644 index 0000000..c680763 --- /dev/null +++ b/priv/repo/migrations/20260311140000_add_mail_from_to_settings.exs @@ -0,0 +1,18 @@ +defmodule Mv.Repo.Migrations.AddMailFromToSettings do + @moduledoc "Adds smtp_from_name and smtp_from_email attributes to the settings table." + use Ecto.Migration + + def up do + alter table(:settings) do + add :smtp_from_name, :text + add :smtp_from_email, :text + end + end + + def down do + alter table(:settings) do + remove :smtp_from_email + remove :smtp_from_name + end + end +end diff --git a/priv/resource_snapshots/repo/join_requests/20260311082353.json b/priv/resource_snapshots/repo/join_requests/20260311082353.json new file mode 100644 index 0000000..26b6310 --- /dev/null +++ b/priv/resource_snapshots/repo/join_requests/20260311082353.json @@ -0,0 +1,243 @@ +{ + "attributes": [ + { + "allow_nil?": false, + "default": "fragment(\"gen_random_uuid()\")", + "generated?": false, + "precision": null, + "primary_key?": true, + "references": null, + "scale": null, + "size": null, + "source": "id", + "type": "uuid" + }, + { + "allow_nil?": false, + "default": "\"pending_confirmation\"", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "status", + "type": "text" + }, + { + "allow_nil?": false, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "email", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "first_name", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "last_name", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "form_data", + "type": "map" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "schema_version", + "type": "bigint" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "confirmation_token_hash", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "confirmation_token_expires_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "confirmation_sent_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "submitted_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "approved_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "rejected_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": { + "deferrable": false, + "destination_attribute": "id", + "destination_attribute_default": null, + "destination_attribute_generated": null, + "index?": false, + "match_type": null, + "match_with": null, + "multitenancy": { + "attribute": null, + "global": null, + "strategy": null + }, + "name": "join_requests_reviewed_by_user_id_fkey", + "on_delete": null, + "on_update": null, + "primary_key?": true, + "schema": "public", + "table": "users" + }, + "scale": null, + "size": null, + "source": "reviewed_by_user_id", + "type": "uuid" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "source", + "type": "text" + }, + { + "allow_nil?": false, + "default": "fragment(\"(now() AT TIME ZONE 'utc')\")", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "inserted_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": false, + "default": "fragment(\"(now() AT TIME ZONE 'utc')\")", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "updated_at", + "type": "utc_datetime_usec" + } + ], + "base_filter": null, + "check_constraints": [], + "create_table_options": null, + "custom_indexes": [], + "custom_statements": [], + "has_create_action": true, + "hash": "F01A57710F9E6C9CF0E006B3B956AE5930D2C12FC502BF31683BEB3A75094BD8", + "identities": [], + "multitenancy": { + "attribute": null, + "global": null, + "strategy": null + }, + "repo": "Elixir.Mv.Repo", + "schema": null, + "table": "join_requests" +} \ No newline at end of file diff --git a/priv/resource_snapshots/repo/members/20260311082354.json b/priv/resource_snapshots/repo/members/20260311082354.json new file mode 100644 index 0000000..8795bdc --- /dev/null +++ b/priv/resource_snapshots/repo/members/20260311082354.json @@ -0,0 +1,246 @@ +{ + "attributes": [ + { + "allow_nil?": false, + "default": "fragment(\"uuid_generate_v7()\")", + "generated?": false, + "precision": null, + "primary_key?": true, + "references": null, + "scale": null, + "size": null, + "source": "id", + "type": "uuid" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "first_name", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "last_name", + "type": "text" + }, + { + "allow_nil?": false, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "email", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "join_date", + "type": "date" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "exit_date", + "type": "date" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "notes", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "city", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "street", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "house_number", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "postal_code", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "country", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "search_vector", + "type": "tsvector" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "membership_fee_start_date", + "type": "date" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "vereinfacht_contact_id", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": { + "deferrable": false, + "destination_attribute": "id", + "destination_attribute_default": null, + "destination_attribute_generated": null, + "index?": false, + "match_type": null, + "match_with": null, + "multitenancy": { + "attribute": null, + "global": null, + "strategy": null + }, + "name": "members_membership_fee_type_id_fkey", + "on_delete": null, + "on_update": null, + "primary_key?": true, + "schema": "public", + "table": "membership_fee_types" + }, + "scale": null, + "size": null, + "source": "membership_fee_type_id", + "type": "uuid" + } + ], + "base_filter": null, + "check_constraints": [], + "create_table_options": null, + "custom_indexes": [], + "custom_statements": [], + "has_create_action": true, + "hash": "F704B80F108D01A7DF0C3B973FC94DBD778BD5555219BADB3C84EF1C91D9A3EF", + "identities": [ + { + "all_tenants?": false, + "base_filter": null, + "index_name": "members_unique_email_index", + "keys": [ + { + "type": "atom", + "value": "email" + } + ], + "name": "unique_email", + "nils_distinct?": true, + "where": null + } + ], + "multitenancy": { + "attribute": null, + "global": null, + "strategy": null + }, + "repo": "Elixir.Mv.Repo", + "schema": null, + "table": "members" +} \ No newline at end of file diff --git a/priv/resource_snapshots/repo/settings/20260311082355.json b/priv/resource_snapshots/repo/settings/20260311082355.json new file mode 100644 index 0000000..099c8ef --- /dev/null +++ b/priv/resource_snapshots/repo/settings/20260311082355.json @@ -0,0 +1,347 @@ +{ + "attributes": [ + { + "allow_nil?": false, + "default": "fragment(\"gen_random_uuid()\")", + "generated?": false, + "precision": null, + "primary_key?": true, + "references": null, + "scale": null, + "size": null, + "source": "id", + "type": "uuid" + }, + { + "allow_nil?": false, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "club_name", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "member_field_visibility", + "type": "map" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "member_field_required", + "type": "map" + }, + { + "allow_nil?": false, + "default": "true", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "include_joining_cycle", + "type": "boolean" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "default_membership_fee_type_id", + "type": "uuid" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "vereinfacht_api_url", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "vereinfacht_api_key", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "vereinfacht_club_id", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "vereinfacht_app_url", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_client_id", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_base_url", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_redirect_uri", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_client_secret", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_admin_group_name", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_groups_claim", + "type": "text" + }, + { + "allow_nil?": false, + "default": "false", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "oidc_only", + "type": "boolean" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "smtp_host", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "smtp_port", + "type": "bigint" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "smtp_username", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "smtp_password", + "type": "text" + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "smtp_ssl", + "type": "text" + }, + { + "allow_nil?": false, + "default": "false", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "join_form_enabled", + "type": "boolean" + }, + { + "allow_nil?": true, + "default": "[]", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "join_form_field_ids", + "type": [ + "array", + "text" + ] + }, + { + "allow_nil?": true, + "default": "nil", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "join_form_field_required", + "type": "map" + }, + { + "allow_nil?": false, + "default": "fragment(\"(now() AT TIME ZONE 'utc')\")", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "inserted_at", + "type": "utc_datetime_usec" + }, + { + "allow_nil?": false, + "default": "fragment(\"(now() AT TIME ZONE 'utc')\")", + "generated?": false, + "precision": null, + "primary_key?": false, + "references": null, + "scale": null, + "size": null, + "source": "updated_at", + "type": "utc_datetime_usec" + } + ], + "base_filter": null, + "check_constraints": [], + "create_table_options": null, + "custom_indexes": [], + "custom_statements": [], + "has_create_action": true, + "hash": "DDF99732D268EDCACB5F61CAA53B24F1EAA8EE2F54F4A31A2FB3FEF8DDC8BFAF", + "identities": [], + "multitenancy": { + "attribute": null, + "global": null, + "strategy": null + }, + "repo": "Elixir.Mv.Repo", + "schema": null, + "table": "settings" +} \ No newline at end of file diff --git a/test/membership/setting_smtp_test.exs b/test/membership/setting_smtp_test.exs new file mode 100644 index 0000000..b4c4e70 --- /dev/null +++ b/test/membership/setting_smtp_test.exs @@ -0,0 +1,62 @@ +defmodule Mv.Membership.SettingSmtpTest do + @moduledoc """ + Unit tests for Setting resource SMTP attributes. + + TDD: tests expect smtp_host, smtp_port, smtp_username, smtp_password, smtp_ssl + to be accepted on update and persisted. Password must not be exposed in plaintext + when reading settings (sensitive). Tests will fail until Setting has these attributes. + """ + use Mv.DataCase, async: false + + alias Mv.Membership + + setup do + {:ok, settings} = Membership.get_settings() + # Save current SMTP values to restore in on_exit (when attributes exist) + saved = %{ + smtp_host: Map.get(settings, :smtp_host), + smtp_port: Map.get(settings, :smtp_port), + smtp_username: Map.get(settings, :smtp_username), + smtp_ssl: Map.get(settings, :smtp_ssl) + } + + on_exit(fn -> + {:ok, s} = Membership.get_settings() + attrs = Enum.reject(saved, fn {_k, v} -> is_nil(v) end) |> Map.new() + if attrs != %{}, do: Membership.update_settings(s, attrs) + end) + + {:ok, settings: settings, saved: saved} + end + + describe "SMTP attributes update and persistence" do + test "update_settings accepts smtp_host, smtp_port, smtp_username, smtp_ssl and persists", %{ + settings: settings + } do + attrs = %{ + smtp_host: "smtp.example.com", + smtp_port: 587, + smtp_username: "user", + smtp_ssl: "tls" + } + + assert {:ok, updated} = Membership.update_settings(settings, attrs) + assert updated.smtp_host == "smtp.example.com" + assert updated.smtp_port == 587 + assert updated.smtp_username == "user" + assert updated.smtp_ssl == "tls" + end + + test "smtp_password can be set and is not exposed in plaintext when reading settings", %{ + settings: settings + } do + secret = "sensitive-password-#{System.unique_integer([:positive])}" + assert {:ok, _} = Membership.update_settings(settings, %{smtp_password: secret}) + + {:ok, read_back} = Membership.get_settings() + # Sensitive: raw password must not be returned (e.g. nil or redacted) + refute read_back.smtp_password == secret, + "smtp_password must not be returned in plaintext when reading settings" + end + end +end diff --git a/test/mv/config_smtp_test.exs b/test/mv/config_smtp_test.exs new file mode 100644 index 0000000..5359366 --- /dev/null +++ b/test/mv/config_smtp_test.exs @@ -0,0 +1,129 @@ +defmodule Mv.ConfigSmtpTest do + @moduledoc """ + Unit tests for Mv.Config SMTP-related helpers. + + ENV overrides Settings (same pattern as OIDC/Vereinfacht). Uses real ENV and + Settings; no mocking so we test the actual precedence. async: false because + we mutate ENV. + """ + use Mv.DataCase, async: false + + describe "smtp_host/0" do + test "returns ENV value when SMTP_HOST is set" do + set_smtp_env("SMTP_HOST", "smtp.example.com") + assert Mv.Config.smtp_host() == "smtp.example.com" + after + clear_smtp_env() + end + + test "returns nil when SMTP_HOST is not set and Settings have no smtp_host" do + clear_smtp_env() + assert Mv.Config.smtp_host() == nil + end + end + + describe "smtp_port/0" do + test "returns parsed integer when SMTP_PORT ENV is set" do + set_smtp_env("SMTP_PORT", "587") + assert Mv.Config.smtp_port() == 587 + after + clear_smtp_env() + end + + test "returns nil or default when SMTP_PORT is not set" do + clear_smtp_env() + port = Mv.Config.smtp_port() + assert port == nil or (is_integer(port) and port in [25, 465, 587]) + end + end + + describe "smtp_configured?/0" do + test "returns true when smtp_host is present (from ENV or Settings)" do + set_smtp_env("SMTP_HOST", "smtp.example.com") + assert Mv.Config.smtp_configured?() == true + after + clear_smtp_env() + end + + test "returns false when no SMTP host is set" do + clear_smtp_env() + refute Mv.Config.smtp_configured?() + end + end + + describe "smtp_env_configured?/0" do + test "returns true when any SMTP ENV variable is set" do + set_smtp_env("SMTP_HOST", "smtp.example.com") + assert Mv.Config.smtp_env_configured?() == true + after + clear_smtp_env() + end + + test "returns false when no SMTP ENV variables are set" do + clear_smtp_env() + refute Mv.Config.smtp_env_configured?() + end + end + + describe "smtp_password/0 and SMTP_PASSWORD_FILE" do + test "returns value from SMTP_PASSWORD when set" do + set_smtp_env("SMTP_PASSWORD", "env-secret") + assert Mv.Config.smtp_password() == "env-secret" + after + clear_smtp_env() + end + + test "returns content of file when SMTP_PASSWORD_FILE is set and SMTP_PASSWORD is not" do + clear_smtp_env() + path = Path.join(System.tmp_dir!(), "mv_smtp_test_#{System.unique_integer([:positive])}") + File.write!(path, "file-secret\n") + Process.put(:smtp_password_file_path, path) + set_smtp_env("SMTP_PASSWORD_FILE", path) + assert Mv.Config.smtp_password() == "file-secret" + after + clear_smtp_env() + if path = Process.get(:smtp_password_file_path), do: File.rm(path) + end + + test "SMTP_PASSWORD overrides SMTP_PASSWORD_FILE when both are set" do + path = Path.join(System.tmp_dir!(), "mv_smtp_test_#{System.unique_integer([:positive])}") + File.write!(path, "file-secret") + Process.put(:smtp_password_file_path, path) + set_smtp_env("SMTP_PASSWORD_FILE", path) + set_smtp_env("SMTP_PASSWORD", "env-wins") + assert Mv.Config.smtp_password() == "env-wins" + after + clear_smtp_env() + if path = Process.get(:smtp_password_file_path), do: File.rm(path) + end + end + + describe "smtp_*_env_set?/0" do + test "smtp_host_env_set? returns true when SMTP_HOST is set" do + set_smtp_env("SMTP_HOST", "x") + assert Mv.Config.smtp_host_env_set?() == true + after + clear_smtp_env() + end + + test "smtp_password_env_set? returns true when SMTP_PASSWORD or SMTP_PASSWORD_FILE is set" do + set_smtp_env("SMTP_PASSWORD", "x") + assert Mv.Config.smtp_password_env_set?() == true + after + clear_smtp_env() + end + end + + defp set_smtp_env(key, value) do + System.put_env(key, value) + end + + defp clear_smtp_env do + System.delete_env("SMTP_HOST") + System.delete_env("SMTP_PORT") + System.delete_env("SMTP_USERNAME") + System.delete_env("SMTP_PASSWORD") + System.delete_env("SMTP_PASSWORD_FILE") + System.delete_env("SMTP_SSL") + end +end diff --git a/test/mv/mailer_test.exs b/test/mv/mailer_test.exs new file mode 100644 index 0000000..b5db447 --- /dev/null +++ b/test/mv/mailer_test.exs @@ -0,0 +1,47 @@ +defmodule Mv.MailerTest do + @moduledoc """ + Unit tests for Mv.Mailer, in particular send_test_email/1. + + Uses Swoosh.Adapters.Test (configured in test.exs); no real SMTP. Asserts + success/error contract and that one test email is sent on success. + """ + use Mv.DataCase, async: true + + import Swoosh.TestAssertions + + alias Mv.Mailer + + describe "send_test_email/1" do + test "returns {:ok, email} and sends one email with expected subject/body when successful" do + to_email = "test-#{System.unique_integer([:positive])}@example.com" + + assert {:ok, _email} = Mailer.send_test_email(to_email) + + assert_email_sent(fn email -> + to_addresses = Enum.map(email.to, &elem(&1, 1)) + subject = email.subject || "" + body = email.html_body || email.text_body || "" + + to_email in to_addresses and + (String.contains?(subject, "Test") or String.contains?(body, "test")) + end) + end + + test "returns {:error, reason} for invalid email address" do + result = Mailer.send_test_email("not-an-email") + assert {:error, _reason} = result + end + + test "uses mail_from as sender" do + to_email = "recipient-#{System.unique_integer([:positive])}@example.com" + assert {:ok, _} = Mailer.send_test_email(to_email) + + assert_email_sent(fn email -> + {_name, expected_from} = Mailer.mail_from() + # email.from is a single {name, address} tuple in Swoosh, not a list + {_name, actual_from} = email.from + actual_from == expected_from + end) + end + end +end diff --git a/test/mv_web/live/global_settings_live_test.exs b/test/mv_web/live/global_settings_live_test.exs index 6a739b5..e48c44b 100644 --- a/test/mv_web/live/global_settings_live_test.exs +++ b/test/mv_web/live/global_settings_live_test.exs @@ -65,4 +65,49 @@ defmodule MvWeb.GlobalSettingsLiveTest do assert html =~ "must be present" end end + + describe "SMTP / E-Mail section" do + setup %{conn: conn} do + user = create_test_user(%{email: "admin@example.com"}) + conn = conn_with_oidc_user(conn, user) + {:ok, conn: conn, user: user} + end + + test "renders SMTP section with host/port fields and test email area", %{conn: conn} do + {:ok, _view, html} = live(conn, ~p"/settings") + # Section title (Gettext key: SMTP or E-Mail per concept) + assert html =~ "SMTP" or html =~ "E-Mail" + end + + test "shows Send test email button when SMTP is configured", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/settings") + # When Mv.Config.smtp_configured?() is true, button and recipient input should be present + # In test env SMTP is typically not configured; we only assert the section exists + html = render(view) + assert html =~ "SMTP" or html =~ "E-Mail" + end + + test "send test email with valid address shows success or error result", %{conn: conn} do + {:ok, view, _html} = live(conn, ~p"/settings") + + if has_element?(view, "[data-testid='smtp-test-email-form']") do + # Submit the test-email form (phx-submit) with a valid recipient address + view + |> form("[data-testid='smtp-test-email-form']", %{"to_email" => "test@example.com"}) + |> render_submit() + + # Result area must appear regardless of success or error + assert has_element?(view, "[data-testid='smtp-test-result']") + else + assert render(view) =~ "Settings" + end + end + + test "shows warning when SMTP is not configured in production", %{conn: conn} do + # Concept: in prod, show warning "SMTP is not configured. Transactional emails..." + # In test we only check that the section exists; warning visibility is env-dependent + {:ok, _view, html} = live(conn, ~p"/settings") + assert html =~ "SMTP" or html =~ "E-Mail" or html =~ "Settings" + end + end end diff --git a/test/mv_web/live/group_live/show_test.exs b/test/mv_web/live/group_live/show_test.exs index 1f0f1c2..4d64739 100644 --- a/test/mv_web/live/group_live/show_test.exs +++ b/test/mv_web/live/group_live/show_test.exs @@ -251,12 +251,10 @@ defmodule MvWeb.GroupLive.ShowTest do has_element?(view, "[data-testid=group-show-members-table]", member.last_name) end) - # Verify query count is reasonable (should avoid N+1 queries) - # Expected: 1 query for group lookup + 1 query for members (with preload) + member_count aggregate - # Allow overhead for authorization, LiveView setup, and other initialization queries - # Note: member_count aggregate and authorization checks may add additional queries - assert final_count <= 20, - "Expected max 20 queries (group + members preload + member_count aggregate + LiveView setup + auth), got #{final_count}. This suggests N+1 query problem." + # Verify query count is reasonable (should avoid N+1 queries). + # Baseline: group + members preload + member_count aggregate + 1 layout get_settings + auth/role/join-count. + assert final_count <= 22, + "Expected max 22 queries (group + members preload + member_count + layout + auth), got #{final_count}. This suggests N+1 query problem." end test "slug lookup is efficient (uses unique_slug index)", %{conn: conn} do diff --git a/test/mv_web/live/join_live_test.exs b/test/mv_web/live/join_live_test.exs index bd133cd..1458973 100644 --- a/test/mv_web/live/join_live_test.exs +++ b/test/mv_web/live/join_live_test.exs @@ -39,6 +39,8 @@ defmodule MvWeb.JoinLiveTest do test "submit with valid allowlist data creates one JoinRequest and shows success copy", %{ conn: conn } do + # Re-apply allowlist so this test is robust when run in parallel with others (Settings singleton). + enable_join_form_for_test(%{}) count_before = count_join_requests() {:ok, view, _html} = live(conn, "/join")