Ops può correggere dati clienti errati (es. email titolare) dalla scheda società senza interventi manuali sul DB. Co-authored-by: Cursor <cursoragent@cursor.com>
675 lines
27 KiB
YAML
675 lines
27 KiB
YAML
de:
|
|
admin:
|
|
layout:
|
|
title: "Match Live TV — Admin"
|
|
nav:
|
|
dashboard: Dashboard
|
|
ops: Ops
|
|
announcements: Hinweise
|
|
clubs: Vereine & Teams
|
|
billing: Abrechnung
|
|
youtube: YouTube
|
|
sessions: Sitzungen
|
|
stream_concurrency: Konto-Missbrauch
|
|
analytics: Analytics
|
|
costs: Kosten
|
|
stream_nodes: Stream-Knoten
|
|
password: Passwort
|
|
logout: Abmelden
|
|
flash:
|
|
login_required: Bitte melde dich an, um fortzufahren
|
|
login_success: Erfolgreich angemeldet
|
|
invalid_credentials: Ungültiger Benutzername oder Passwort
|
|
logout_success: Abgemeldet
|
|
password_current_incorrect: Das aktuelle Passwort ist falsch
|
|
password_too_short: Das neue Passwort muss mindestens 8 Zeichen lang sein
|
|
password_too_long: Das neue Passwort darf höchstens 72 Zeichen lang sein
|
|
password_too_weak: Das neue Passwort muss mindestens 3 aus Kleinbuchstaben, Großbuchstaben, Zahlen und Symbolen enthalten
|
|
password_same_as_current: Das neue Passwort muss sich vom aktuellen unterscheiden
|
|
password_mismatch: Die Passwörter stimmen nicht überein
|
|
password_updated: Passwort aktualisiert
|
|
ops_acknowledged: Vorfall übernommen
|
|
ops_resolved: Vorfall gelöst
|
|
ops_muted: Benachrichtigungen für 24 Stunden stummgeschaltet
|
|
stream_node_created: "Lab-Knoten %{slug} bereitgestellt."
|
|
stream_node_destroyed: "Knoten %{slug} entfernt."
|
|
stream_node_draining: "Knoten %{slug} im Drain-Modus."
|
|
autoscale_kill_on: "Autoscaler-Kill-Switch aktiv. Kein automatisches Scale-out."
|
|
autoscale_kill_off: "Autoscaler-Kill-Switch aus (STREAM_AUTOSCALE_ENABLED=1 weiterhin nötig)."
|
|
comped_granted: "Kostenloses Abonnement %{plan} für %{club} aktiviert."
|
|
comped_revoked: "Kostenloses Abonnement für %{club} widerrufen."
|
|
session_already_terminated: "Sitzung bereits beendet (%{status})."
|
|
session_stopped: Sitzung beendet.
|
|
session_stop_error: "Fehler beim Beenden: %{error}"
|
|
session_terminated_no_regia: "Sitzung beendet: Regie-Link kann nicht erzeugt werden."
|
|
session_regia_generated: Regie-Link erzeugt.
|
|
invoice_upload_hint: Lade das PDF aus der Liste „Zu berechnende Zahlungen“ hoch.
|
|
invoice_draft_created: Entwurf erstellt. Lade das PDF auf der Abrechnungsseite oder unten hoch.
|
|
invoice_issued: "Rechnung %{number} ausgestellt und an %{email} gesendet."
|
|
invoice_updated: "Rechnung %{number} aktualisiert."
|
|
invoice_uploaded: "Rechnung hochgeladen und an %{email} gesendet."
|
|
club_updated: "Daten für %{club} aktualisiert."
|
|
youtube_not_configured: Konfiguriere YOUTUBE_CLIENT_ID und YOUTUBE_CLIENT_SECRET in .env
|
|
announcement_created: Hinweis gespeichert
|
|
announcement_updated: Hinweis aktualisiert
|
|
announcement_destroyed: Hinweis gelöscht
|
|
cost_entry_created: Kostenposition gespeichert.
|
|
cost_entry_updated: Kostenposition aktualisiert.
|
|
cost_entry_destroyed: Kostenposition gelöscht.
|
|
common:
|
|
free_plan: Free
|
|
yes: "Ja"
|
|
no: "Nein"
|
|
dash: "—"
|
|
live_page: Live-Seite
|
|
auth:
|
|
new:
|
|
title: Admin-Anmeldung
|
|
username_label: Benutzername
|
|
password_label: Passwort
|
|
submit: Anmelden
|
|
initial_credentials_html: "Anfangs-Zugangsdaten: <code>admin</code> / <code>AdminPass123</code>. Ändere das Passwort nach der ersten Anmeldung."
|
|
passwords:
|
|
edit:
|
|
title: Passwort ändern
|
|
current_password_label: Aktuelles Passwort
|
|
new_password_label: "Neues Passwort (mind. 8, mindestens 3 Zeichenarten)"
|
|
confirm_password_label: Neues Passwort bestätigen
|
|
submit: Passwort speichern
|
|
cancel: Abbrechen
|
|
dashboard:
|
|
kpi:
|
|
active_sessions: Aktive Sitzungen
|
|
active_sessions_sub: gerade live
|
|
today: Heute übertragen
|
|
today_sub: "%{duration} Streaming"
|
|
month: Diesen Monat übertragen
|
|
month_sub: "%{duration} insgesamt"
|
|
teams: Teams
|
|
teams_sub: "%{count} Nutzer"
|
|
cpu: CPU
|
|
cpu_sub: "Last %{one} / %{five} / %{fifteen}"
|
|
ram: RAM
|
|
ram_sub: "%{used} / %{total}"
|
|
network: Bandbreite (gesamt)
|
|
network_sub: "↑ %{tx} · ↓ %{rx}"
|
|
recordings: Replays im Archiv
|
|
recordings_sub: "%{count} Aufnahmen"
|
|
charts:
|
|
cpu: CPU (%)
|
|
ram: RAM (%)
|
|
ops_panel:
|
|
title: Plattformstatus (Ops)
|
|
critical: "%{count} kritische(r) offene(r) Vorfall/Vorfälle"
|
|
view_dashboard: Ops-Dashboard ansehen
|
|
warnings: "%{count} Warnung(en)"
|
|
dashboard_link: Ops-Dashboard
|
|
none_html: "Keine offenen Vorfälle. %{link}"
|
|
concurrency_panel:
|
|
title: Konto-Missbrauch (zweite Direktübertragung)
|
|
count: "%{count} Versuch(e) in den letzten 30 Tagen"
|
|
view_all: Alle ansehen
|
|
none: Keine Versuche erfasst.
|
|
none_html: "Keine Versuche einer zweiten Direktübertragung mit demselben Konto. %{link}"
|
|
disk:
|
|
system_title: Systemfestplatte
|
|
free_label: "Frei: %{free} (%{percent}% belegt)"
|
|
not_available: Festplattenmetriken nicht verfügbar
|
|
recordings_title: Aufnahmearchiv
|
|
recordings_content: "Inhalt der Aufnahmen: %{size}"
|
|
recordings_not_mounted: "Pfad %{path} nicht eingebunden"
|
|
sessions:
|
|
title: Aktive Sitzungen
|
|
table:
|
|
match: Spiel
|
|
status: Status
|
|
client: Client
|
|
ingest: Ingest
|
|
start: Start
|
|
link: Link
|
|
none: Derzeit keine aktive Sitzung.
|
|
detail: Details
|
|
stop: Beenden
|
|
stop_confirm: Diese Sitzung beenden?
|
|
regia: Regie
|
|
teams:
|
|
title: Teams
|
|
matches_count: "%{count} Spiele"
|
|
view_all: "Vereine ansehen (%{count} Teams)"
|
|
stream_nodes:
|
|
title: Stream-Knoten
|
|
providers: "Cloud: %{cloud} · DNS: %{dns}"
|
|
actions_title: Aktionen
|
|
table_title: Registrierte Knoten
|
|
empty: Keine Knoten registriert.
|
|
free_slots:
|
|
one: "%{count} frei"
|
|
other: "%{count} frei"
|
|
kpi:
|
|
autoscaler: Autoscaler
|
|
kill_switch: KILL
|
|
kind: "Modus %{kind}"
|
|
free_slots: Freie Slots
|
|
soft_slots: "Soft-Schwelle ≤ %{soft}"
|
|
spare: Spare
|
|
warm_spare: Warm-Spares bereit
|
|
overflow: Overflow
|
|
overflow_nodes: Cloud/Lab-Knoten
|
|
budget: Geschätztes Budget
|
|
budget_of: "von €%{budget}/Monat (%{ok})"
|
|
autoscale: "Autoscaler %{enabled} · free_slots=%{free} (soft≤%{soft}) · spare=%{spare}/%{warm} · overflow=%{overflow}/%{max} · kind=%{kind}"
|
|
autoscale_budget: "Budget €%{eur}/€%{budget} (%{ok})"
|
|
kill_switch_active: "KILL-SWITCH AKTIV"
|
|
engage_kill_switch: "Kill-switch ON"
|
|
clear_kill_switch: "Kill-switch OFF"
|
|
kill_switch_confirm: "Autoscaler sofort blockieren?"
|
|
provision_lab: Lab bereitstellen
|
|
provision_cloud: Hetzner bereitstellen
|
|
provision_cloud_confirm: "Hetzner Cloud Server + DNS auf mltv-stream.net erstellen?"
|
|
hetzner_token_missing: "HCLOUD_TOKEN setzen, um Cloud-Provisioning zu aktivieren."
|
|
drain: Drain
|
|
destroy: Löschen
|
|
destroy_confirm: "Knoten %{slug} löschen?"
|
|
hosts_title: Lab-DNS (/etc/hosts)
|
|
col:
|
|
slug: Slug
|
|
role: Rolle
|
|
status: Status
|
|
slots: Slots
|
|
hostname: Hostname
|
|
provider: Provider
|
|
ops:
|
|
kpi:
|
|
critical: Kritisch offen
|
|
warning: Warnungen offen
|
|
total: Insgesamt offen
|
|
open:
|
|
title: Offene Vorfälle
|
|
table:
|
|
severity: Schweregrad
|
|
kind: Typ
|
|
title: Titel
|
|
occurrences: Anz.
|
|
last_seen: Zuletzt
|
|
none: Keine offenen Vorfälle. Die Plattform ist gesund.
|
|
actions:
|
|
acknowledge: Übernommen
|
|
resolve: Lösen
|
|
mute: Stumm 24h
|
|
resolved:
|
|
title: Gelöst (letzte 30 Tage)
|
|
table:
|
|
resolved_at: Gelöst
|
|
none: Kürzlich keine Vorfälle gelöst.
|
|
stream_concurrency:
|
|
index:
|
|
title: Konto-Missbrauch
|
|
lead: Versuche, mit demselben Konto eine zweite Direktübertragung zu starten, während bereits eine lief (connecting, live, reconnecting oder pausiert).
|
|
results: "%{shown} von %{total} angezeigt"
|
|
none: Keine Versuche erfasst.
|
|
kpi:
|
|
lookback: Letzte 30 Tage
|
|
lookback_sub: blockierte Versuche
|
|
two_devices: Zwei Geräte
|
|
two_devices_sub: unterschiedliche Handy-Modelle
|
|
filters:
|
|
q: Suche
|
|
q_placeholder: E-Mail, Verein, Spiel…
|
|
two_devices: Filter
|
|
two_devices_hint: Nur Versuche von unterschiedlichen Geräten
|
|
apply: Filtern
|
|
reset: Zurücksetzen
|
|
table:
|
|
when: Wann
|
|
account: Konto
|
|
club: Verein
|
|
occupying: Bereits laufende Direktübertragung
|
|
attempted: Blockierter Versuch
|
|
action:
|
|
start: Start
|
|
resume: Fortsetzen
|
|
badge:
|
|
two_devices: 2 Telefone
|
|
same_or_unknown: gleiches Gerät / n. v.
|
|
clubs:
|
|
index:
|
|
title: Vereine & Teams
|
|
subtitle_html: "Kostenlose Abonnements (Sponsoren / Aktionen) und YouTube-Status pro Team. Stripe-Zahlungen: %{billing_link}."
|
|
billing_link: Abrechnung
|
|
table:
|
|
club: Verein
|
|
plan: Plan
|
|
teams: Teams
|
|
billing_profile: Rechnungsdaten
|
|
comped: Kostenlos
|
|
stripe: Stripe
|
|
quote: Vereinbart
|
|
manage: Verwalten
|
|
invoices: Rechnungen
|
|
show:
|
|
back: "← Vereine & Teams"
|
|
sport_label: "Sportart: %{sport}"
|
|
recordings_archive: Replay-Archiv
|
|
billing_link: Zahlungen & Rechnungen
|
|
youtube_platform_link: Plattform-YouTube-Kanal
|
|
youtube_club_label: "Vereins-YouTube:"
|
|
youtube_connected: (verbunden)
|
|
youtube_premium_full_not_connected: Premium Full — Vereinskanal nicht verbunden (nutzt Match Live TV)
|
|
no_channel_hint_html: "Ohne verbundenen Kanal nutzt die App den Match-Live-TV-Kanal. %{link}."
|
|
link_channel: Kanal verbinden (Vereinsseite)
|
|
profile_title: Kontaktdaten & Rechnungsdaten
|
|
owner_title: Kontoinhaber
|
|
owner_name: Name
|
|
owner_email: E-Mail
|
|
owner_none: Kein Inhaber zugeordnet.
|
|
billing_title: Rechnungsdaten
|
|
billing_none: Keine Rechnungsdaten hinterlegt.
|
|
teams_title: Teams
|
|
no_teams: Keine Teams registriert.
|
|
table:
|
|
team: Team
|
|
sport: Sportart
|
|
matches_and_details: Spiele & Details
|
|
replay: Replays
|
|
concurrency_title: Versuche einer zweiten Direktübertragung
|
|
concurrency_lead: Dasselbe Konto hat versucht, eine weitere Direktübertragung zu starten, während bereits eine lief.
|
|
concurrency_none: Keine Versuche für diesen Verein erfasst.
|
|
concurrency_all: Alle Konto-Missbräuche ansehen
|
|
edit_link: Daten bearbeiten
|
|
edit:
|
|
back: "← Zurück zum Verein"
|
|
title: "%{club} bearbeiten"
|
|
lead: "Kundendaten überschreiben: Profil, Abrechnung, Inhaber, Staff, Einladungen und Teams."
|
|
cancel: Abbrechen
|
|
submit: Änderungen speichern
|
|
billing_hint: Du kannst ein unvollständiges Profil speichern; der Badge auf der Vereinsseite zeigt den Status.
|
|
staff_hint: Bereits mit den Teams des Vereins verknüpfte Benutzer.
|
|
staff_none: Kein Staff mit Teams verknüpft.
|
|
invitations_hint: Nur noch ausstehende Einladungen.
|
|
invitations_none: Keine ausstehenden Einladungen.
|
|
sections:
|
|
club: Vereinsprofil
|
|
billing: Rechnungsdaten
|
|
owner: Kontoinhaber
|
|
staff: Angenommenes Staff
|
|
invitations: Ausstehende Einladungen
|
|
teams: Teams
|
|
fields:
|
|
name: Vereinsname
|
|
sport: Sportart
|
|
primary_color: Primärfarbe
|
|
secondary_color: Sekundärfarbe
|
|
logo_url: Logo-URL
|
|
owner_name: Name des Inhabers
|
|
owner_email: E-Mail des Inhabers
|
|
staff_name: Name
|
|
staff_email: E-Mail
|
|
invitation_team: Team
|
|
invitation_email: Einladungs-E-Mail
|
|
team_name: Teamname
|
|
team_sport: Teamsport
|
|
errors:
|
|
owner_missing: Kein Inhaber mit diesem Verein verknüpft.
|
|
email_taken: "E-Mail bereits vergeben: %{email}"
|
|
billing_status:
|
|
complete: Vollständig
|
|
incomplete: Unvollständig
|
|
absent: Fehlend
|
|
comped:
|
|
title: Kostenloses Abonnement
|
|
description: "Sponsor oder Aktion: Vergib Premium Light/Full ohne Stripe-Zahlung. Jederzeit widerrufbar."
|
|
active_label: "Aktiv:"
|
|
since_label_html: "Seit %{date}"
|
|
by_admin: "· Admin %{username}"
|
|
stripe_note: "Hinweis: Es existiert auch ein verknüpftes Stripe-Abo; das kostenlose Abo hat Vorrang vor dem Plan."
|
|
revoke_button: Kostenloses Abo widerrufen (zurück zu Free oder Stripe wiederherstellen)
|
|
revoke_confirm: "Das kostenlose Abonnement für %{club} widerrufen?"
|
|
current_plan: "Aktueller Plan: %{plan}"
|
|
stripe_active: "· aktive Stripe-Zahlung"
|
|
plan_label: Plan
|
|
reason_label: "Grund (z. B. Sponsor 2026)"
|
|
reason_placeholder: "Sponsor, Aktion…"
|
|
grant_button: Kostenloses Abo gewähren
|
|
teams:
|
|
show:
|
|
back: "← %{club}"
|
|
sport_label: "Sportart: %{sport}"
|
|
club_label_html: "Verein: %{club} · %{replay_link} · %{billing_link}"
|
|
replay_link: Team-Replays
|
|
billing_link: Zahlungen & Rechnungen
|
|
youtube_label: "YouTube:"
|
|
youtube_platform_default_no_oauth: ", Standard ohne Vereins-OAuth"
|
|
youtube_platform_channel: "(Plattformkanal%{suffix})"
|
|
youtube_club_channel: (Vereinskanal)
|
|
youtube_not_ready: nicht bereit
|
|
no_channel_hint_html: "Ohne verbundenen Kanal nutzt die App den Match-Live-TV-Kanal. %{link}."
|
|
link_channel: Kanal verbinden (Vereinsseite)
|
|
matches_title: Spiele
|
|
sessions:
|
|
index:
|
|
title: Stream-Sitzungen
|
|
lead: Suche nach Verein, Team, Gegner oder Ort. Filtere nach Status, Plattform, Knoten und Zeitraum.
|
|
results: "%{shown} von %{total} angezeigt"
|
|
none: Keine Sitzungen für diese Filter.
|
|
filters:
|
|
q: Suche
|
|
q_placeholder: Verein, Team, Gegner…
|
|
status: Status
|
|
platform: Plattform
|
|
club: Verein
|
|
node: Ingest-Knoten
|
|
from: Von
|
|
to: Bis
|
|
any: Alle
|
|
apply: Filtern
|
|
reset: Zurücksetzen
|
|
table:
|
|
club: Verein
|
|
match: Spiel
|
|
status: Status
|
|
started: Start
|
|
ended: Ende
|
|
duration: Dauer
|
|
ingest: Ingest
|
|
disconnects: Verbindungsabbrüche
|
|
client: Client
|
|
link: Link
|
|
detail: Details
|
|
regia: Regie
|
|
show:
|
|
title: "Sitzung %{id}"
|
|
heading: Sitzungsdetails
|
|
back: "← Zurück zu Sitzungen"
|
|
club_label: "Verein:"
|
|
summary_title: Übersicht
|
|
timing_title: Zeiten
|
|
ingest_title: Ingest & Medien
|
|
devices_title: Geräte
|
|
events_title: Ereignisse
|
|
events_none: Keine Ereignisse erfasst.
|
|
concurrency_title: Versuche einer zweiten Direktübertragung
|
|
concurrency_lead: Dieses Konto hat versucht, eine weitere Direktübertragung zu starten, während diese bereits lief (oder wurde von einer anderen Sitzung desselben Kontos blockiert).
|
|
status_label: "Status:"
|
|
stop_button: Sitzung beenden
|
|
stop_confirm: "Übertragung beenden? Der RTMP-Pfad wird entfernt und der Status wechselt zu beendet."
|
|
match_label: "Spiel: %{team} gegen %{opponent}"
|
|
youtube_studio: YouTube Studio
|
|
broadcast: Übertragung
|
|
open_replays: Vereins-Replays öffnen
|
|
audio_muted: Audio stumm
|
|
audio_on: Audio an
|
|
ingest_node: "Ingest-Knoten:"
|
|
rtmp_ingest: "RTMP-Ingest:"
|
|
fields:
|
|
id: ID
|
|
club: Verein
|
|
team: Team
|
|
opponent: Gegner
|
|
operator: Operator
|
|
platform: Plattform
|
|
client_os: System
|
|
app_version: App-Version
|
|
device: Gerät
|
|
os_version: OS-Version
|
|
carrier: Mobilfunkanbieter
|
|
privacy: Privacy
|
|
quality: Qualität
|
|
min_quality: Min. Qualität
|
|
audio: Audio
|
|
created: Erstellt
|
|
started: Start
|
|
ended: Ende
|
|
duration: Dauer
|
|
disconnects: Abbrüche
|
|
scheduled: Geplantes Spiel
|
|
location: Ort
|
|
node: Knoten
|
|
rtmp: RTMP-Ingest
|
|
hls: HLS
|
|
recording: Replay
|
|
devices:
|
|
role: Rolle
|
|
network: Netz
|
|
battery: Akku
|
|
bitrate: Bitrate
|
|
fps: FPS
|
|
last_seen: Zuletzt gesehen
|
|
table:
|
|
type: Typ
|
|
when: Wann
|
|
meta: Details
|
|
links:
|
|
watch_title: Live-Link
|
|
none: Kein Video-Link für diese Sitzung verfügbar.
|
|
regia_title: Regie-Link
|
|
terminated: Sitzung beendet — Regie-Link nicht verfügbar.
|
|
regia_label: Regie
|
|
valid_until: "Gültig bis %{date}"
|
|
active_exists: Es existiert bereits ein aktiver Regie-Link (die URL kann nicht abgerufen werden). Erzeuge einen neuen, wenn du ihn erneut teilen musst.
|
|
none_active: Kein aktiver Regie-Link. Erzeuge einen Link zum Teilen mit der Person, die den Spielstand verwaltet.
|
|
generate_button: Regie-Link erzeugen
|
|
ingest:
|
|
none: "—"
|
|
decommissioned: "(Knoten entfernt)"
|
|
role:
|
|
home: Home-lab
|
|
lab: Lab
|
|
cloud: Hetzner
|
|
|
|
analytics:
|
|
missing_path: Seite auswählen.
|
|
filters:
|
|
from: Von
|
|
to: Bis
|
|
device: Gerät
|
|
any: Alle
|
|
apply: Filtern
|
|
reset: Zurücksetzen
|
|
chart_path: Seite (Diagramm)
|
|
chart_path_all: Alle Seiten
|
|
layer: Ebene
|
|
layer_move: Mausbewegungen
|
|
layer_click: Klicks
|
|
devices:
|
|
mobile: Mobil
|
|
tablet: Tablet
|
|
desktop: Desktop
|
|
index:
|
|
title: Website-Analytics
|
|
lead: Aggregierte First-Party-Heatmaps (Bewegung/Klick) und Scrolltiefe, nur mit Statistik-Einwilligung. Keine personenbezogenen Daten.
|
|
none: Keine Daten im gewählten Zeitraum.
|
|
heatmap: Heatmap
|
|
chart_for_path: Diagramm
|
|
trend_title: Pageview-Verlauf
|
|
trend_lead: Gesamte Pageviews aller Seiten, Tag für Tag. Dieselben Filter Von / Bis / Gerät. Seite im Filter wählen oder «Diagramm» in der Tabelle.
|
|
trend_lead_path: "Tägliche Pageviews nur für %{path} (gleiche Filter Von / Bis / Gerät)."
|
|
trend_total_label: Pageviews gesamt (alle Seiten)
|
|
trend_total_label_path: Pageviews der gewählten Seite
|
|
trend_total_hint: "%{from} → %{to}"
|
|
hide_chart: Diagramm ausblenden
|
|
show_chart: Diagramm anzeigen
|
|
pages_title: Aufschlüsselung nach Seite
|
|
pages_lead: Pageviews und Engagement im gefilterten Zeitraum, nach Pfad. «Diagramm» zeigt den Verlauf einer Seite.
|
|
table:
|
|
path: Seite
|
|
pageviews: Pageviews
|
|
moves: Bewegungen
|
|
clicks: Klicks
|
|
avg_scroll: Scroll Ø
|
|
max_scroll: Scroll max
|
|
show:
|
|
title: Seiten-Heatmap
|
|
back: "← Zurück zu Analytics"
|
|
summary: Übersicht
|
|
scroll_depth: Scrolltiefe
|
|
scroll_hint: "Durchschnitt %{avg}% · Maximum %{max}%"
|
|
heatmap_moves: Mausbewegungs-Karte
|
|
heatmap_clicks: Klickkarte
|
|
heatmap_hint: Farbiges Overlay auf dem %{device}-Screenshot. Grün = wenig, Rot = viel. Daten werden nicht zwischen Geräten gemischt.
|
|
device_tabs_label: Gerät
|
|
preview_title: Seiten-Screenshot
|
|
preview_unavailable: Vorschau für Pfade mit Platzhalter nicht verfügbar (z. B. /clubs/:id).
|
|
snapshot_missing: Noch kein Screenshot für %{device}. Seite auf diesem Gerät mit Analytics-Einwilligung besuchen und erneut versuchen.
|
|
snapshot_meta: "Screenshot %{device} · %{at}"
|
|
no_points: Keine aggregierten Punkte für diese Ebene im Zeitraum.
|
|
heatmap_title: Klickkarte
|
|
no_clicks: Keine aggregierten Klicks für diese Seite im Zeitraum.
|
|
preview:
|
|
title: Vorschau ohne Tracking
|
|
lead: Öffentliche Website durchsuchen ohne Pageviews, Klicks, Bewegungen oder Heatmap-Screenshots zu speichern. Für Produktionstests.
|
|
active: Staff-Vorschau in diesem Browser aktiv (7 Tage oder bis Deaktivierung).
|
|
enable: Staff-Vorschau aktivieren
|
|
disable: Vorschau deaktivieren
|
|
open_site: Website öffnen
|
|
enabled: Staff-Vorschau aktiviert. Dieser Browser speichert keine Analytics.
|
|
disabled: Staff-Vorschau deaktiviert.
|
|
|
|
billing:
|
|
index:
|
|
title: Zu berechnende Zahlungen
|
|
description: Bezahlte Stripe-Zahlungen ohne Rechnungs-PDF. Erstelle das PDF in deinen Systemen und lade es hier hoch — es wird der Zahlung zugeordnet und dem Kunden per E-Mail gesendet.
|
|
filter_label: "Vereine filtern:"
|
|
filter_all: Alle
|
|
incomplete_profile_warning: Rechnungsdaten unvollständig
|
|
no_billing_data: Keine Rechnungsdaten — der Kunde muss sein Profil vervollständigen.
|
|
pdf_label: Rechnungs-PDF
|
|
upload_button: PDF hochladen und an Kunden senden
|
|
none_pending: "Keine Zahlungen warten auf eine Rechnung%{club}."
|
|
none_pending_for_club: " für %{club}"
|
|
uploaded_title: Bereits hochgeladene Rechnungen
|
|
table:
|
|
date: Datum
|
|
club: Verein
|
|
description: Beschreibung
|
|
amount: Betrag
|
|
invoice: Rechnung
|
|
status: Status
|
|
back_dashboard: "← Dashboard"
|
|
billing_invoices:
|
|
index:
|
|
title: "Abrechnung — %{club}"
|
|
back_dashboard: "← Dashboard"
|
|
new_invoice: Neue Rechnung (ohne Zahlung)
|
|
payments_title: Zahlungen
|
|
table:
|
|
date: Datum
|
|
description: Beschreibung
|
|
amount: Betrag
|
|
invoice: Rechnung
|
|
pdf_suffix: " (PDF)"
|
|
edit_send_pdf: Bearbeiten / PDF senden
|
|
create_invoice: Rechnung erstellen
|
|
no_payments: Keine Zahlungen für diesen Verein erfasst.
|
|
all_invoices_title: Alle Rechnungen
|
|
table2:
|
|
number: Nummer
|
|
date: Datum
|
|
amount: Betrag
|
|
status: Status
|
|
payment: Zahlung
|
|
edit: Bearbeiten
|
|
no_invoices: Keine Rechnungen.
|
|
new:
|
|
title: "Neue Rechnung — %{club}"
|
|
linked_payment: "Verknüpft mit der Zahlung vom %{date} (%{amount})."
|
|
number_label: Rechnungsnummer
|
|
issued_on_label: Ausstellungsdatum
|
|
amount_label: "Betrag (€)"
|
|
notes_label: Interne Notizen (optional)
|
|
hint: Speichere den Entwurf, lade dann das PDF hoch und sende es dem Kunden vom nächsten Bildschirm aus.
|
|
submit: Rechnungsentwurf erstellen
|
|
back: "← Zahlungen & Rechnungen"
|
|
edit:
|
|
title: "Rechnung %{number} — %{club}"
|
|
status_label: "Status:"
|
|
sent_at: "· Gesendet am %{date}"
|
|
number_label: Rechnungsnummer
|
|
issued_on_label: Ausstellungsdatum
|
|
amount_label: "Betrag (€)"
|
|
payment_info: "Zahlung: %{description} — %{amount}"
|
|
pdf_label: Rechnungs-PDF
|
|
pdf_already: "PDF bereits hochgeladen: %{filename}"
|
|
notes_label: Interne Notizen
|
|
save_draft: Entwurf speichern
|
|
issue_send: Ausstellen und per E-Mail senden
|
|
issue_confirm: "Die Rechnung an %{email} senden?"
|
|
back: "← Zahlungen & Rechnungen"
|
|
youtube:
|
|
platform_token:
|
|
title: Token für den Match-Live-TV-Kanal
|
|
page_title: "YouTube-Token — Match Live TV"
|
|
channel_label: "Kanal: %{title}"
|
|
success: "Verbindung erfolgreich. Kopiere diese Zeile sofort:"
|
|
env_hint_html: "Füge zu <code>/opt/matchlivetv/infra/.env</code> hinzu:"
|
|
not_shown_again_html: "Wird nicht erneut angezeigt. Danach: <code>docker compose -f docker-compose.prod.yml restart rails sidekiq</code>"
|
|
no_refresh_token_html: "Google hat keinen Refresh-Token zurückgegeben. Widerrufe in deinem <a href=\"https://myaccount.google.com/permissions\" target=\"_blank\" rel=\"noopener\">Google-Konto → App-Zugriff</a> „Match Live TV“ und wiederhole den Vorgang ab <a href=\"/admin/youtube/platform\">/admin/youtube/platform</a>."
|
|
back_dashboard: "← Admin-Dashboard"
|
|
club_recordings:
|
|
index:
|
|
title: "Replays — %{club}"
|
|
announcements:
|
|
index:
|
|
title: Hinweise
|
|
lead: Meldungen für die Apps, die öffentliche Website und den Login-Bereich — Wartung, Updates oder Mitteilungen.
|
|
new: Neuer Hinweis
|
|
table_title: Hinweise
|
|
none: Noch keine Hinweise. Erstelle einen, um Apps und Website zu informieren.
|
|
new:
|
|
title: Neuer Hinweis
|
|
edit:
|
|
title: Hinweis bearbeiten
|
|
table:
|
|
status: Status
|
|
kind: Typ
|
|
title: Nachricht
|
|
channels: Ziele
|
|
window: Zeitraum
|
|
actions:
|
|
edit: Bearbeiten
|
|
delete: Löschen
|
|
delete_confirm: Diesen Hinweis löschen? Er erscheint nicht mehr an den gewählten Stellen.
|
|
kind:
|
|
info: Information
|
|
maintenance: Wartung
|
|
update: App-Update
|
|
severity:
|
|
info: Info
|
|
warning: Warnung
|
|
critical: Kritisch
|
|
status:
|
|
draft: Entwurf
|
|
published: Veröffentlicht
|
|
archived: Archiviert
|
|
channels:
|
|
android: Android-App
|
|
ios: iOS-App
|
|
web_public: Öffentliche Website
|
|
web_private: Login-Bereich
|
|
window:
|
|
always: Immer (solange veröffentlicht)
|
|
from: "Ab %{time}"
|
|
until: "Bis %{time}"
|
|
form:
|
|
kind: Typ
|
|
severity: Schwere
|
|
status: Status
|
|
channels: Wo anzeigen
|
|
channels_hint: "Eine oder mehrere Ziele wählen. Android und iOS sind unabhängig: bei unterschiedlichem Text zwei Hinweise anlegen. Der Login-Bereich ist nach der Anmeldung sichtbar (Verein, Teams, Konto)."
|
|
title: Titel
|
|
body: Text
|
|
starts_at: Sichtbar ab
|
|
ends_at: Sichtbar bis
|
|
window_hint: Leer lassen, um sofort und solange veröffentlicht anzuzeigen.
|
|
action_url: Link (optional)
|
|
action_url_hint: Bei Updates öffnet eine leere URL den Store der Plattform (Play Store auf Android, App Store auf iOS).
|
|
action_label: Button-Text
|
|
locales_legend: Text pro Sprache
|
|
locales_hint: Alle App-Sprachen ausfüllen (Italienisch, Englisch, Französisch, Deutsch, Spanisch). Italienisch ist Pflicht; fehlende Sprachen fallen auf Englisch, dann Italienisch zurück.
|
|
locale_required: Pflicht
|
|
dismissible: Nutzer können den Hinweis schließen
|
|
dismissible_hint: Haken entfernen für Wartungshinweise, die sichtbar bleiben sollen.
|
|
submit_create: Hinweis speichern
|
|
submit_update: Hinweis aktualisieren
|
|
cancel: Abbrechen
|
|
|