copy(de): Sie→Du overhaul, terminology & directory SEO copy

- All German UI copy switched from formal Sie/Ihr to informal Du/Dein
  across ~60 i18n.py keys and 10 template files
- Platz-Anbieter → Anbieter in CTAs; Anlage → Padel-Platz in planner
  wizard and planner translations (wiz_venue, sl_budget_target)
- Anlageplanung → Padelplatz-Planung in service checklist
- Directory H1: Padelplatz-Hersteller, Platzbauer & Anbieter (SEO)
- mkt_no_results / mkt_search_placeholder: Artikel → Märkte (EN + DE)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Deeman
2026-02-20 16:15:07 +01:00
parent 9d1d42f6db
commit e6f4c0a540
11 changed files with 91 additions and 85 deletions

View File

@@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
## [Unreleased] ## [Unreleased]
### Changed
- copy: switch all German UI copy from formal "Sie/Ihr" to informal "Du/Dein" — covers i18n.py (~60 keys), planner wizard step titles/subtitles, export waitlist page, quote wizard steps, quote submitted/verify pages, directory supplier detail, directory results partial, supplier signup step 4, supplier waitlist confirmed page
- copy: replace "Platz-Anbieter" with "Anbieter" in CTAs; "Anlage" → "Padel-Platz" in planner wizard step 1 title/subtitle and planner translations (wiz_venue, sl_budget_target); "Anlageplanung" → "Padelplatz-Planung" in service checklist
- copy: update directory H1 to SEO multi-term "Padelplatz-Hersteller, Platzbauer & Anbieter"; subheading now mentions Hersteller, Platzbauer, schlüsselfertige Lösungen
- copy: fix `mkt_no_results` and `mkt_search_placeholder` — replaced incorrect "Artikel" with "Märkte" in German and English (markets page shows market pages like Miami, not articles)
### Added ### Added
- i18n: translate `base.html`, `_cookie_banner.html` — "Manage Cookies", "About" footer links, feedback placeholder via `{{ t.key }}`; cookie banner heading/categories/descriptions/buttons; JS toggle text injected via `tojson` so "Manage"/"Close" states are also translated; `public/routes.py` feedback flash messages use `get_translations(g.lang)` keys - i18n: translate `base.html`, `_cookie_banner.html` — "Manage Cookies", "About" footer links, feedback placeholder via `{{ t.key }}`; cookie banner heading/categories/descriptions/buttons; JS toggle text injected via `tojson` so "Manage"/"Close" states are also translated; `public/routes.py` feedback flash messages use `get_translations(g.lang)` keys
- i18n: expand `i18n.py` with ~300 UI template keys, ~200 planner JS locale strings (`_PLANNER_TRANSLATIONS`), ~35 CAPEX/OPEX item name translations (`_CALC_ITEM_NAMES`), plus `get_planner_translations()` and `get_calc_item_names()` functions - i18n: expand `i18n.py` with ~300 UI template keys, ~200 planner JS locale strings (`_PLANNER_TRANSLATIONS`), ~35 CAPEX/OPEX item name translations (`_CALC_ITEM_NAMES`), plus `get_planner_translations()` and `get_calc_item_names()` functions

View File

@@ -38,7 +38,7 @@
<div class="ph-grid"></div> <div class="ph-grid"></div>
<div class="example-icon"> <div class="example-icon">
<svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="1.5"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg> <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="white" stroke-width="1.5"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="8.5" cy="8.5" r="1.5"/><polyline points="21 15 16 10 5 21"/></svg>
<p>{% if lang == 'de' %}Ihr Projektfoto{% else %}Your project photo{% endif %}</p> <p>{% if lang == 'de' %}Dein Projektfoto{% else %}Your project photo{% endif %}</p>
</div> </div>
<div class="dir-card__featured" style="background:#3B82F6">{% if lang == 'de' %}Beispiel{% else %}Example{% endif %}</div> <div class="dir-card__featured" style="background:#3B82F6">{% if lang == 'de' %}Beispiel{% else %}Example{% endif %}</div>
<div class="dir-card__cat dir-card__cat--example">{% if lang == 'de' %}Ihre Kategorie{% else %}Your Category{% endif %}</div> <div class="dir-card__cat dir-card__cat--example">{% if lang == 'de' %}Ihre Kategorie{% else %}Your Category{% endif %}</div>
@@ -47,10 +47,10 @@
<div class="dir-card__logo-wrap"> <div class="dir-card__logo-wrap">
<div class="dir-card__logo-ph">?</div> <div class="dir-card__logo-ph">?</div>
</div> </div>
<h3 class="dir-card__name">{% if lang == 'de' %}Ihr Unternehmen{% else %}Your Company{% endif %}</h3> <h3 class="dir-card__name">{% if lang == 'de' %}Dein Unternehmen{% else %}Your Company{% endif %}</h3>
<p class="dir-card__loc"> <p class="dir-card__loc">
<svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg> <svg width="11" height="11" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z"/><circle cx="12" cy="10" r="3"/></svg>
{% if lang == 'de' %}Ihre Stadt, Land{% else %}Your City, Country{% endif %} {% if lang == 'de' %}Deine Stadt, Land{% else %}Your City, Country{% endif %}
</p> </p>
<div class="dir-card__stats"> <div class="dir-card__stats">
<span class="dir-card__stat dir-card__stat--verified"> <span class="dir-card__stat dir-card__stat--verified">

View File

@@ -361,7 +361,7 @@
<div class="sp-enquiry-field"> <div class="sp-enquiry-field">
<label class="sp-enquiry-label">{{ t.sp_enquiry_message }} <span style="color:#EF4444">*</span></label> <label class="sp-enquiry-label">{{ t.sp_enquiry_message }} <span style="color:#EF4444">*</span></label>
<textarea name="message" class="sp-enquiry-input sp-enquiry-textarea" required <textarea name="message" class="sp-enquiry-input sp-enquiry-textarea" required
placeholder="{% if lang == 'de' %}Erzählen Sie {{ supplier.name }} von Ihrem Projekt…{% else %}Tell {{ supplier.name }} about your project…{% endif %}"></textarea> placeholder="{% if lang == 'de' %}Erzähl {{ supplier.name }} von Deinem Projekt…{% else %}Tell {{ supplier.name }} about your project…{% endif %}"></textarea>
</div> </div>
<button type="submit" class="sp-enquiry-submit">{{ t.sp_enquiry_submit }}</button> <button type="submit" class="sp-enquiry-submit">{{ t.sp_enquiry_submit }}</button>
</form> </form>
@@ -500,7 +500,7 @@
<div class="sp-locked-popover" id="locked-popover" role="tooltip"> <div class="sp-locked-popover" id="locked-popover" role="tooltip">
<p class="sp-locked-popover__title">{{ t.sp_locked_popover_title }}</p> <p class="sp-locked-popover__title">{{ t.sp_locked_popover_title }}</p>
<p class="sp-locked-popover__body"> <p class="sp-locked-popover__body">
{% if lang == 'de' %}Dieser Anbieter hat seinen Eintrag noch nicht verifiziert. Nutzen Sie unseren Angebotsassistenten und wir vermitteln Sie mit verifizierten Anbietern in Ihrer Region.{% else %}This supplier hasn't verified their listing yet. Use our quote wizard and we'll match you with verified suppliers in your region.{% endif %} {% if lang == 'de' %}Dieser Anbieter hat seinen Eintrag noch nicht verifiziert. Nutze unseren Angebotsassistenten und wir vermitteln dich mit verifizierten Anbietern in Deiner Region.{% else %}This supplier hasn't verified their listing yet. Use our quote wizard and we'll match you with verified suppliers in your region.{% endif %}
</p> </p>
<a href="{{ url_for('leads.quote_request', country=supplier.country_code) }}" <a href="{{ url_for('leads.quote_request', country=supplier.country_code) }}"
class="sp-locked-popover__link">{{ t.sp_locked_popover_link }}</a> class="sp-locked-popover__link">{{ t.sp_locked_popover_link }}</a>
@@ -514,7 +514,7 @@
<div class="sp-cta-strip"> <div class="sp-cta-strip">
<div class="sp-cta-strip__text"> <div class="sp-cta-strip__text">
<h3>{{ t.sp_cta_claim_h3 }}</h3> <h3>{{ t.sp_cta_claim_h3 }}</h3>
<p>{% if lang == 'de' %}Beanspruchen und verifizieren Sie diesen Eintrag, um Projektanfragen von Padel-Entwicklern zu erhalten.{% else %}Claim and verify this listing to start receiving project enquiries from padel developers.{% endif %}</p> <p>{% if lang == 'de' %}Beanspruche und verifiziere diesen Eintrag, um Projektanfragen von Padel-Entwicklern zu erhalten.{% else %}Claim and verify this listing to start receiving project enquiries from padel developers.{% endif %}</p>
</div> </div>
<a href="{{ url_for('suppliers.claim', slug=supplier.slug) }}" class="sp-cta-strip__btn sp-cta-strip__btn--green"> <a href="{{ url_for('suppliers.claim', slug=supplier.slug) }}" class="sp-cta-strip__btn sp-cta-strip__btn--green">
{{ t.sp_cta_claim_btn }} {{ t.sp_cta_claim_btn }}

View File

@@ -434,10 +434,10 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
# ── Content / Markets ──────────────────────────────────────────────── # ── Content / Markets ────────────────────────────────────────────────
"mkt_heading": "Padel Markets", "mkt_heading": "Padel Markets",
"mkt_subheading": "Cost analysis and financial projections for padel centers worldwide.", "mkt_subheading": "Cost analysis and financial projections for padel centers worldwide.",
"mkt_search_placeholder": "Search articles\u2026", "mkt_search_placeholder": "Search markets\u2026",
"mkt_all_countries": "All Countries", "mkt_all_countries": "All Countries",
"mkt_all_regions": "All Regions", "mkt_all_regions": "All Regions",
"mkt_no_results": "No articles found. Try adjusting your filters.", "mkt_no_results": "No markets found. Try adjusting your filters.",
# ── Article detail ─────────────────────────────────────────────────── # ── Article detail ───────────────────────────────────────────────────
"art_run_numbers_h2": "Run Your Own Numbers", "art_run_numbers_h2": "Run Your Own Numbers",
"art_run_numbers_text": "Use our free financial planner to model a padel center with your own assumptions.", "art_run_numbers_text": "Use our free financial planner to model a padel center with your own assumptions.",
@@ -472,7 +472,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"base_feedback_placeholder": "Ideen zur Verbesserung dieser Seite\u2026", "base_feedback_placeholder": "Ideen zur Verbesserung dieser Seite\u2026",
# ── Cookie banner ──────────────────────────────────────────────────── # ── Cookie banner ────────────────────────────────────────────────────
"cookie_title": "Cookie-Einstellungen", "cookie_title": "Cookie-Einstellungen",
"cookie_message": "Wir verwenden Cookies, damit Sie angemeldet bleiben und die Website verbessert werden kann.", "cookie_message": "Wir verwenden Cookies, damit du angemeldet bleibst und die Website verbessert werden kann.",
"cookie_policy": "Cookie-Richtlinie", "cookie_policy": "Cookie-Richtlinie",
"cookie_essential_label": "Notwendig", "cookie_essential_label": "Notwendig",
"cookie_essential_desc": "Sitzungsverwaltung. Immer erforderlich.", "cookie_essential_desc": "Sitzungsverwaltung. Immer erforderlich.",
@@ -484,17 +484,17 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"cookie_accept_all": "Alle akzeptieren", "cookie_accept_all": "Alle akzeptieren",
"cookie_close": "Schlie\u00dfen", "cookie_close": "Schlie\u00dfen",
# ── Flash messages ─────────────────────────────────────────────────── # ── Flash messages ───────────────────────────────────────────────────
"flash_feedback_success": "Vielen Dank f\u00fcr Ihr Feedback!", "flash_feedback_success": "Vielen Dank f\u00fcr dein Feedback!",
"flash_feedback_empty": "Bitte geben Sie eine Nachricht ein.", "flash_feedback_empty": "Bitte gib eine Nachricht ein.",
"flash_feedback_rate_limit": "Zu viele Anfragen. Bitte versuchen Sie es sp\u00e4ter erneut.", "flash_feedback_rate_limit": "Zu viele Anfragen. Bitte versuch es sp\u00e4ter erneut.",
"flash_suppliers_success": "Danke! Wir verbinden Sie mit verifizierten Hoflieferanten.", "flash_suppliers_success": "Danke! Wir verbinden dich mit verifizierten Hoflieferanten.",
"flash_financing_success": "Danke! Wir verbinden Sie mit Finanzierungspartnern.", "flash_financing_success": "Danke! Wir verbinden dich mit Finanzierungspartnern.",
"flash_verify_invalid": "Ung\u00fcltiger Verifizierungslink.", "flash_verify_invalid": "Ung\u00fcltiger Verifizierungslink.",
"flash_verify_expired": "Dieser Link ist abgelaufen oder wurde bereits verwendet. Bitte stellen Sie eine neue Anfrage.", "flash_verify_expired": "Dieser Link ist abgelaufen oder wurde bereits verwendet. Bitte stelle eine neue Anfrage.",
"flash_verify_invalid_lead": "Dieses Angebot wurde bereits verifiziert oder existiert nicht.", "flash_verify_invalid_lead": "Dieses Angebot wurde bereits verifiziert oder existiert nicht.",
# ── Landing page ───────────────────────────────────────────────────── # ── Landing page ─────────────────────────────────────────────────────
"landing_hero_badge": "Padel-Kostenrechner & Finanzplaner", "landing_hero_badge": "Padel-Kostenrechner & Finanzplaner",
"landing_hero_h1_1": "Planen Sie Ihr Padel-", "landing_hero_h1_1": "Plan Dein Padel-",
"landing_hero_h1_2": "Business in Minuten,", "landing_hero_h1_2": "Business in Minuten,",
"landing_hero_h1_3": "nicht Monaten", "landing_hero_h1_3": "nicht Monaten",
"landing_hero_btn_primary": "Jetzt planen \u2192", "landing_hero_btn_primary": "Jetzt planen \u2192",
@@ -513,7 +513,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"landing_roi_annual_roi": "J\u00e4hrlicher ROI", "landing_roi_annual_roi": "J\u00e4hrlicher ROI",
"landing_roi_note": "Annahmen: Innenhalle Mietmodell, 8\u00a0\u20ac/m\u00b2 Miete, Personalkosten, 5\u00a0% Zinsen, 10-j\u00e4hriges Darlehen. Amortisation und ROI basieren auf der Gesamtinvestition.", "landing_roi_note": "Annahmen: Innenhalle Mietmodell, 8\u00a0\u20ac/m\u00b2 Miete, Personalkosten, 5\u00a0% Zinsen, 10-j\u00e4hriges Darlehen. Amortisation und ROI basieren auf der Gesamtinvestition.",
"landing_roi_cta": "Jetzt planen \u2192", "landing_roi_cta": "Jetzt planen \u2192",
"landing_journey_title": "Ihre Reise", "landing_journey_title": "Deine Reise",
"landing_journey_01": "Analysieren", "landing_journey_01": "Analysieren",
"landing_journey_01_badge": "Demnächst", "landing_journey_01_badge": "Demnächst",
"landing_journey_02": "Planen", "landing_journey_02": "Planen",
@@ -529,8 +529,8 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"landing_feature_4_h3": "Sensitivit\u00e4tsanalyse", "landing_feature_4_h3": "Sensitivit\u00e4tsanalyse",
"landing_feature_5_h3": "Professionelle Kennzahlen", "landing_feature_5_h3": "Professionelle Kennzahlen",
"landing_feature_6_h3": "Speichern & Vergleichen", "landing_feature_6_h3": "Speichern & Vergleichen",
"landing_supplier_title": "Die richtigen Anbieter f\u00fcr Ihr Projekt finden", "landing_supplier_title": "Die richtigen Anbieter f\u00fcr Dein Projekt finden",
"landing_supplier_step_1_title": "Anlage planen", "landing_supplier_step_1_title": "Padel-Platz planen",
"landing_supplier_step_2_title": "Angebote einholen", "landing_supplier_step_2_title": "Angebote einholen",
"landing_supplier_step_3_title": "Vergleichen & Bauen", "landing_supplier_step_3_title": "Vergleichen & Bauen",
"landing_supplier_browse_btn": "Anbieterverzeichnis durchsuchen", "landing_supplier_browse_btn": "Anbieterverzeichnis durchsuchen",
@@ -544,7 +544,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"landing_final_cta_h2": "Jetzt mit der Planung beginnen", "landing_final_cta_h2": "Jetzt mit der Planung beginnen",
"landing_final_cta_btn": "Jetzt planen \u2192", "landing_final_cta_btn": "Jetzt planen \u2192",
# ── Features page ──────────────────────────────────────────────────── # ── Features page ────────────────────────────────────────────────────
"features_h1": "Alles, was Sie f\u00fcr Ihr Padel-Business ben\u00f6tigen", "features_h1": "Alles, was du f\u00fcr dein Padel-Business brauchst",
"features_subtitle": "Professionelles Finanzmodell \u2014 vollst\u00e4ndig kostenlos.", "features_subtitle": "Professionelles Finanzmodell \u2014 vollst\u00e4ndig kostenlos.",
"features_card_1_h2": "60+ Variablen", "features_card_1_h2": "60+ Variablen",
"features_card_2_h2": "6 Analyse-Tabs", "features_card_2_h2": "6 Analyse-Tabs",
@@ -569,7 +569,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"suppliers_stat_avg_value": "Durchschn. Projektwert", "suppliers_stat_avg_value": "Durchschn. Projektwert",
"suppliers_stat_leads_label": "Leads diesen Monat", "suppliers_stat_leads_label": "Leads diesen Monat",
"suppliers_problem_h2": "Das Problem bei der Kundengewinnung heute", "suppliers_problem_h2": "Das Problem bei der Kundengewinnung heute",
"suppliers_problem_sub": "Die meisten Kan\u00e4le verschwenden Zeit und Budget, bevor Sie mit einem echten K\u00e4ufer sprechen.", "suppliers_problem_sub": "Die meisten Kan\u00e4le verschwenden Zeit und Budget, bevor du mit einem echten K\u00e4ufer sprichst.",
"suppliers_problem_1_h3": "Messen", "suppliers_problem_1_h3": "Messen",
"suppliers_problem_2_h3": "Google Ads", "suppliers_problem_2_h3": "Google Ads",
"suppliers_problem_3_h3": "Kaltakquise", "suppliers_problem_3_h3": "Kaltakquise",
@@ -597,7 +597,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"suppliers_why_2_h3": "Vollst\u00e4ndiger Projektbrief", "suppliers_why_2_h3": "Vollst\u00e4ndiger Projektbrief",
"suppliers_why_3_h3": "Keine Kaltakquise", "suppliers_why_3_h3": "Keine Kaltakquise",
"suppliers_pricing_h2": "Pl\u00e4ne & Preise", "suppliers_pricing_h2": "Pl\u00e4ne & Preise",
"suppliers_pricing_sub": "W\u00e4hlen Sie den Plan, der zu Ihren Wachstumszielen passt.", "suppliers_pricing_sub": "W\u00e4hle den Plan, der zu Deinen Wachstumszielen passt.",
"suppliers_billing_monthly": "Monatlich", "suppliers_billing_monthly": "Monatlich",
"suppliers_billing_yearly": "J\u00e4hrlich", "suppliers_billing_yearly": "J\u00e4hrlich",
"suppliers_save_badge": "Bis zu 26\u00a0% sparen", "suppliers_save_badge": "Bis zu 26\u00a0% sparen",
@@ -609,11 +609,11 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"suppliers_plan_get_listed": "Eintrag erstellen", "suppliers_plan_get_listed": "Eintrag erstellen",
"suppliers_plan_get_started": "Jetzt starten", "suppliers_plan_get_started": "Jetzt starten",
"suppliers_boosts_h2": "Boost-Add-ons", "suppliers_boosts_h2": "Boost-Add-ons",
"suppliers_boosts_sub": "Mit jedem bezahlten Plan verf\u00fcgbar. Verwalten Sie sie \u00fcber Ihr Dashboard.", "suppliers_boosts_sub": "Mit jedem bezahlten Plan verf\u00fcgbar. Verwalte sie \u00fcber Dein Dashboard.",
"suppliers_comparison_h2": "Der direkte Vergleich", "suppliers_comparison_h2": "Der direkte Vergleich",
"suppliers_faq_h2": "FAQ f\u00fcr Anbieter", "suppliers_faq_h2": "FAQ f\u00fcr Anbieter",
"suppliers_final_cta_h2": "Ihr n\u00e4chster Kunde erstellt gerade einen Gesch\u00e4ftsplan", "suppliers_final_cta_h2": "Dein n\u00e4chster Kunde erstellt gerade einen Gesch\u00e4ftsplan",
"suppliers_final_cta_desc": "Er hat die Rentabilit\u00e4t berechnet. Er kennt sein Budget. Er sucht einen Anbieter wie Sie.", "suppliers_final_cta_desc": "Er hat die Rentabilit\u00e4t berechnet. Er kennt sein Budget. Er sucht einen Anbieter wie dich.",
"suppliers_final_cta_btn": "Pl\u00e4ne & Preise ansehen", "suppliers_final_cta_btn": "Pl\u00e4ne & Preise ansehen",
# ── Planner landing section ────────────────────────────────────────── # ── Planner landing section ──────────────────────────────────────────
"planner_page_h2": "100\u00a0% kostenlos. Kein Haken.", "planner_page_h2": "100\u00a0% kostenlos. Kein Haken.",
@@ -622,38 +622,38 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"planner_card_1_price_sub": "\u2014 f\u00fcr immer", "planner_card_1_price_sub": "\u2014 f\u00fcr immer",
"planner_card_1_open": "Planer \u00f6ffnen", "planner_card_1_open": "Planer \u00f6ffnen",
"planner_card_1_signup": "Kostenloses Konto erstellen", "planner_card_1_signup": "Kostenloses Konto erstellen",
"planner_card_2_h3": "Brauchen Sie Hilfe beim Bauen?", "planner_card_2_h3": "Brauchst Du Hilfe beim Bauen?",
"planner_card_2_desc": "Wir verbinden Sie mit verifizierten Partnern", "planner_card_2_desc": "Wir verbinden dich mit verifizierten Partnern",
"planner_card_2_quotes_btn": "Anbieter-Angebote einholen", "planner_card_2_quotes_btn": "Anbieter-Angebote einholen",
"planner_card_2_signup_btn": "Registrieren und loslegen", "planner_card_2_signup_btn": "Registrieren und loslegen",
"planner_quote_cta_label": "N\u00e4chster Schritt", "planner_quote_cta_label": "N\u00e4chster Schritt",
"planner_quote_cta_title": "Angebote von verifizierten Platz-Anbietern einholen", "planner_quote_cta_title": "Angebote von verifizierten Anbietern einholen",
"planner_quote_cta_desc": "Teilen Sie Ihre Projektspezifikationen und wir verbinden Sie mit passenden Anbietern.", "planner_quote_cta_desc": "Teile Deine Projektspezifikationen und wir verbinden dich mit passenden Anbietern.",
"planner_quote_cta_check_1": "Passende Anbieter", "planner_quote_cta_check_1": "Passende Anbieter",
"planner_quote_cta_check_2": "Direktkontakt, kein Vermittler", "planner_quote_cta_check_2": "Direktkontakt, kein Vermittler",
"planner_quote_cta_check_3": "Keine Verpflichtung", "planner_quote_cta_check_3": "Keine Verpflichtung",
"planner_quote_cta_check_4": "Ihre Daten bleiben privat", "planner_quote_cta_check_4": "Deine Daten bleiben privat",
"planner_quote_cta_btn": "Anbieter-Angebote einholen \u2192", "planner_quote_cta_btn": "Anbieter-Angebote einholen \u2192",
"planner_quote_cta_hint": "Dauert ca. 2 Minuten", "planner_quote_cta_hint": "Dauert ca. 2 Minuten",
"planner_export_btn": "Gesch\u00e4ftsplan exportieren (PDF) \u2192", "planner_export_btn": "Gesch\u00e4ftsplan exportieren (PDF) \u2192",
"planner_export_hint": "99\u00a0\u20ac einmalig \u00b7 Bankfertig", "planner_export_hint": "99\u00a0\u20ac einmalig \u00b7 Bankfertig",
"planner_signup_bar_msg": "Erstellen Sie ein Konto, um Szenarien zu speichern und Pl\u00e4ne zu vergleichen.", "planner_signup_bar_msg": "Erstelle ein Konto, um Szenarien zu speichern und Pl\u00e4ne zu vergleichen.",
"planner_signup_bar_btn": "Kostenlos registrieren", "planner_signup_bar_btn": "Kostenlos registrieren",
# ── Export templates ───────────────────────────────────────────────── # ── Export templates ─────────────────────────────────────────────────
"export_title": "Gesch\u00e4ftsplan exportieren (PDF)", "export_title": "Gesch\u00e4ftsplan exportieren (PDF)",
"export_subtitle": "Bankfertige Finanzprojektionen aus Ihrem Planer-Szenario.", "export_subtitle": "Bankfertige Finanzprojektionen aus Deinem Planer-Szenario.",
"export_scenario_label": "Szenario", "export_scenario_label": "Szenario",
"export_language_label": "Sprache", "export_language_label": "Sprache",
"export_scenario_default": "Szenario ausw\u00e4hlen\u2026", "export_scenario_default": "Szenario ausw\u00e4hlen\u2026",
"export_btn": "Kaufen & PDF generieren \u2014 99\u00a0\u20ac", "export_btn": "Kaufen & PDF generieren \u2014 99\u00a0\u20ac",
"export_your_exports": "Ihre Exporte", "export_your_exports": "Deine Exporte",
"export_download": "PDF herunterladen", "export_download": "PDF herunterladen",
"export_generating": "Wird generiert\u2026", "export_generating": "Wird generiert\u2026",
"export_failed": "Fehlgeschlagen", "export_failed": "Fehlgeschlagen",
"export_back": "\u2190 Zur\u00fcck zum Planer", "export_back": "\u2190 Zur\u00fcck zum Planer",
"export_success_title": "Zahlung eingegangen", "export_success_title": "Zahlung eingegangen",
"export_success_subtitle": "Ihr Gesch\u00e4ftsplan-PDF wird generiert. Dies dauert \u00fcblicherweise weniger als eine Minute.", "export_success_subtitle": "Dein Gesch\u00e4ftsplan-PDF wird generiert. Dies dauert \u00fcblicherweise weniger als eine Minute.",
"export_success_status": "Ihr PDF wird erstellt. Aktualisieren Sie diese Seite gleich, oder \u00fcberpr\u00fcfen Sie Ihre E-Mail \u2014 wir senden Ihnen einen Download-Link, wenn es fertig ist.", "export_success_status": "Dein PDF wird erstellt. Aktualisiere diese Seite gleich, oder \u00fcberpr\u00fcfe Deine E-Mail \u2014 wir senden Dir einen Download-Link, wenn es fertig ist.",
"export_success_refresh": "Status aktualisieren", "export_success_refresh": "Status aktualisieren",
"export_success_all": "Alle Exporte anzeigen", "export_success_all": "Alle Exporte anzeigen",
"export_success_planner": "Zur\u00fcck zum Planer", "export_success_planner": "Zur\u00fcck zum Planer",
@@ -668,12 +668,12 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"scenario_badge_default": "Standard", "scenario_badge_default": "Standard",
"scenario_btn_load": "Laden", "scenario_btn_load": "Laden",
"scenario_btn_delete": "L\u00f6schen", "scenario_btn_delete": "L\u00f6schen",
"scenario_empty": "Noch keine gespeicherten Szenarien. Speichern Sie den aktuellen Plan mit der Schaltfl\u00e4che \u201eSpeichern\u201c.", "scenario_empty": "Noch keine gespeicherten Szenarien. Speichere den aktuellen Plan mit der Schaltfl\u00e4che \u201eSpeichern\u201c.",
"scenario_updated": "Aktualisiert", "scenario_updated": "Aktualisiert",
"scenario_created": "Erstellt", "scenario_created": "Erstellt",
# ── Directory ──────────────────────────────────────────────────────── # ── Directory ────────────────────────────────────────────────────────
"dir_heading": "Padel-Platz Anbieterverzeichnis", "dir_heading": "Padelplatz-Hersteller, Platzbauer & Anbieter",
"dir_subheading": "\u00dcber {n} Anbieter aus {c} L\u00e4ndern. Hersteller, Baufirmen und Spezialisten f\u00fcr Ihr Projekt.", "dir_subheading": "\u00dcber {n} Anbieter aus {c} L\u00e4ndern. Hersteller, Platzbauer und schl\u00fcsselfertige L\u00f6sungen f\u00fcr Deinen Padelplatz.",
"dir_stat_suppliers": "Anbieter", "dir_stat_suppliers": "Anbieter",
"dir_stat_countries": "L\u00e4nder", "dir_stat_countries": "L\u00e4nder",
"dir_stat_categories": "Kategorien", "dir_stat_categories": "Kategorien",
@@ -682,7 +682,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"dir_filter_all_categories": "Alle Kategorien", "dir_filter_all_categories": "Alle Kategorien",
"dir_search_btn": "Suchen", "dir_search_btn": "Suchen",
"dir_filter_clear": "Alle l\u00f6schen", "dir_filter_clear": "Alle l\u00f6schen",
"dir_cta_heading": "Sind Sie ein Padel-Platz-Anbieter?", "dir_cta_heading": "Bist Du ein Padelplatz-Anbieter?",
"dir_cta_subheading": "Eintrag erstellen und Kontakt zu planenden Unternehmern aufnehmen.", "dir_cta_subheading": "Eintrag erstellen und Kontakt zu planenden Unternehmern aufnehmen.",
"dir_cta_btn": "Eintrag erstellen", "dir_cta_btn": "Eintrag erstellen",
"dir_card_verified": "Verifiziert", "dir_card_verified": "Verifiziert",
@@ -691,9 +691,9 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"dir_card_unverified": "Nicht verifiziert", "dir_card_unverified": "Nicht verifiziert",
"dir_card_quote_btn": "Angebot anfragen \u2192", "dir_card_quote_btn": "Angebot anfragen \u2192",
"dir_card_view_btn": "Eintrag ansehen \u2192", "dir_card_view_btn": "Eintrag ansehen \u2192",
"dir_card_claim_btn": "Geh\u00f6rt das Ihnen? \u2192", "dir_card_claim_btn": "Geh\u00f6rt Dir das? \u2192",
"dir_empty_heading": "Keine Anbieter gefunden", "dir_empty_heading": "Keine Anbieter gefunden",
"dir_empty_sub": "Versuchen Sie, Ihre Suche oder Filter anzupassen.", "dir_empty_sub": "Passe Deine Suche oder Filter an.",
"dir_empty_clear": "Alle Filter zur\u00fccksetzen", "dir_empty_clear": "Alle Filter zur\u00fccksetzen",
# ── Supplier detail ────────────────────────────────────────────────── # ── Supplier detail ──────────────────────────────────────────────────
"sp_back": "Zur\u00fcck zum Verzeichnis", "sp_back": "Zur\u00fcck zum Verzeichnis",
@@ -704,7 +704,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"sp_services": "Angebotene Leistungen", "sp_services": "Angebotene Leistungen",
"sp_service_area": "Servicegebiet", "sp_service_area": "Servicegebiet",
"sp_enquiry_heading": "Anfrage senden", "sp_enquiry_heading": "Anfrage senden",
"sp_enquiry_name": "Ihr Name", "sp_enquiry_name": "Dein Name",
"sp_enquiry_email": "E-Mail", "sp_enquiry_email": "E-Mail",
"sp_enquiry_message": "Nachricht", "sp_enquiry_message": "Nachricht",
"sp_enquiry_submit": "Anfrage senden", "sp_enquiry_submit": "Anfrage senden",
@@ -713,7 +713,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"sp_projects": "Projekte", "sp_projects": "Projekte",
"sp_trust": "Verifizierter Eintrag \u2014 Identit\u00e4t und Inhaberschaft best\u00e4tigt", "sp_trust": "Verifizierter Eintrag \u2014 Identit\u00e4t und Inhaberschaft best\u00e4tigt",
"sp_cta_basic_h3": "Auf der Suche nach direkter Angebotsabstimmung?", "sp_cta_basic_h3": "Auf der Suche nach direkter Angebotsabstimmung?",
"sp_cta_claim_h3": "Ist das Ihr Unternehmen?", "sp_cta_claim_h3": "Ist das Dein Unternehmen?",
"sp_cta_claim_btn": "Eintrag beanspruchen \u2192", "sp_cta_claim_btn": "Eintrag beanspruchen \u2192",
"sp_locked_hint": "Eintrag noch nicht verifiziert", "sp_locked_hint": "Eintrag noch nicht verifiziert",
"sp_locked_popover_title": "Direkte Anfragen nicht verf\u00fcgbar", "sp_locked_popover_title": "Direkte Anfragen nicht verf\u00fcgbar",
@@ -721,13 +721,13 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"sp_locked_popover_dismiss": "Schlie\u00dfen", "sp_locked_popover_dismiss": "Schlie\u00dfen",
# ── Enquiry result ─────────────────────────────────────────────────── # ── Enquiry result ───────────────────────────────────────────────────
"enquiry_success_title": "Anfrage gesendet!", "enquiry_success_title": "Anfrage gesendet!",
"enquiry_error_title": "Bitte korrigieren Sie Folgendes:", "enquiry_error_title": "Bitte korrigiere Folgendes:",
# ── Quote wizard ───────────────────────────────────────────────────── # ── Quote wizard ─────────────────────────────────────────────────────
"q_btn_next": "Weiter \u2192", "q_btn_next": "Weiter \u2192",
"q_btn_back": "\u2190 Zur\u00fcck", "q_btn_back": "\u2190 Zur\u00fcck",
"q_btn_submit": "Absenden & Angebote erhalten \u2192", "q_btn_submit": "Absenden & Angebote erhalten \u2192",
"q1_heading": "Ihr Projekt", "q1_heading": "Dein Projekt",
"q1_subheading": "Welche Art von Padel-Anlage planen Sie?", "q1_subheading": "Welche Art von Padel-Anlage planst Du?",
"q1_facility_label": "Anlagentyp", "q1_facility_label": "Anlagentyp",
"q1_facility_indoor": "Indoor", "q1_facility_indoor": "Indoor",
"q1_facility_outdoor": "Outdoor", "q1_facility_outdoor": "Outdoor",
@@ -743,20 +743,20 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"q1_lighting_natural": "Tageslicht", "q1_lighting_natural": "Tageslicht",
"q1_lighting_not_sure": "Noch unklar", "q1_lighting_not_sure": "Noch unklar",
"q2_heading": "Standort", "q2_heading": "Standort",
"q2_subheading": "Wo planen Sie zu bauen?", "q2_subheading": "Wo planst Du zu bauen?",
"q2_city_label": "Stadt / Region", "q2_city_label": "Stadt / Region",
"q2_city_placeholder": "z.\u202fB. M\u00fcnchen, Bayern", "q2_city_placeholder": "z.\u202fB. M\u00fcnchen, Bayern",
"q2_country_label": "Land", "q2_country_label": "Land",
"q2_country_default": "Land ausw\u00e4hlen\u2026", "q2_country_default": "Land ausw\u00e4hlen\u2026",
"q3_heading": "Projektsituation", "q3_heading": "Projektsituation",
"q3_subheading": "Was beschreibt Ihr Projekt am besten?", "q3_subheading": "Was beschreibt Dein Projekt am besten?",
"q3_context_label": "Projektsituation", "q3_context_label": "Projektsituation",
"q3_context_new": "Neues eigenst\u00e4ndiges Geb\u00e4ude", "q3_context_new": "Neues eigenst\u00e4ndiges Geb\u00e4ude",
"q3_context_adding": "Erweiterung eines bestehenden Clubs", "q3_context_adding": "Erweiterung eines bestehenden Clubs",
"q3_context_converting": "Umbau eines Geb\u00e4udes", "q3_context_converting": "Umbau eines Geb\u00e4udes",
"q3_context_venue_search": "Hilfe bei der Standortsuche", "q3_context_venue_search": "Hilfe bei der Standortsuche",
"q4_heading": "Projektphase", "q4_heading": "Projektphase",
"q4_subheading": "Wo stehen Sie im Prozess?", "q4_subheading": "Wo stehst Du im Prozess?",
"q4_phase_label": "Projektphase", "q4_phase_label": "Projektphase",
"q4_phase_searching": "Noch auf der Suche nach einem Standort", "q4_phase_searching": "Noch auf der Suche nach einem Standort",
"q4_phase_found": "Standort identifiziert", "q4_phase_found": "Standort identifiziert",
@@ -766,7 +766,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"q4_phase_permit_pending": "Baugenehmigung in Bearbeitung", "q4_phase_permit_pending": "Baugenehmigung in Bearbeitung",
"q4_phase_permit_granted": "Baugenehmigung erteilt", "q4_phase_permit_granted": "Baugenehmigung erteilt",
"q5_heading": "Zeitplan", "q5_heading": "Zeitplan",
"q5_subheading": "Wann m\u00f6chten Sie beginnen?", "q5_subheading": "Wann m\u00f6chtest Du beginnen?",
"q5_timeline_label": "Zeitplan", "q5_timeline_label": "Zeitplan",
"q5_timeline_asap": "So schnell wie m\u00f6glich", "q5_timeline_asap": "So schnell wie m\u00f6glich",
"q5_timeline_3_6": "3\u20136 Monate", "q5_timeline_3_6": "3\u20136 Monate",
@@ -774,7 +774,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"q5_timeline_12_plus": "12+ Monate", "q5_timeline_12_plus": "12+ Monate",
"q5_budget_label": "Budgetsch\u00e4tzung (\u20ac)", "q5_budget_label": "Budgetsch\u00e4tzung (\u20ac)",
"q6_heading": "Finanzierung", "q6_heading": "Finanzierung",
"q6_subheading": "Wie finanzieren Sie das Projekt?", "q6_subheading": "Wie finanzierst Du das Projekt?",
"q6_status_label": "Finanzierungsstatus", "q6_status_label": "Finanzierungsstatus",
"q6_status_self": "Eigenfinanzierung", "q6_status_self": "Eigenfinanzierung",
"q6_status_loan": "Kredit zugesagt", "q6_status_loan": "Kredit zugesagt",
@@ -785,54 +785,54 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"q6_decision_solo": "Alleinentscheidung", "q6_decision_solo": "Alleinentscheidung",
"q6_decision_partners": "Mit Partnern", "q6_decision_partners": "Mit Partnern",
"q6_decision_committee": "Ausschuss / Vorstand", "q6_decision_committee": "Ausschuss / Vorstand",
"q7_heading": "\u00dcber Sie", "q7_heading": "\u00dcber Dich",
"q7_subheading": "Das hilft uns, Sie mit den richtigen Anbietern zusammenzubringen.", "q7_subheading": "Das hilft uns, dich mit den richtigen Anbietern zusammenzubringen.",
"q7_role_label": "Sie sind\u2026", "q7_role_label": "Du bist\u2026",
"q7_role_entrepreneur": "Unternehmer / Investor", "q7_role_entrepreneur": "Unternehmer / Investor",
"q7_role_tennis": "Tennis- / Sportclub", "q7_role_tennis": "Tennis- / Sportclub",
"q7_role_municipality": "Gemeinde / \u00f6ffentliche Einrichtung", "q7_role_municipality": "Gemeinde / \u00f6ffentliche Einrichtung",
"q7_role_developer": "Immobilienentwickler", "q7_role_developer": "Immobilienentwickler",
"q7_role_operator": "Bestehender Padel-Betreiber", "q7_role_operator": "Bestehender Padel-Betreiber",
"q7_role_architect": "Architekt / Ingenieur", "q7_role_architect": "Architekt / Ingenieur",
"q7_contact_label": "Haben Sie bereits Anbieter kontaktiert?", "q7_contact_label": "Hast Du bereits Anbieter kontaktiert?",
"q7_contact_first": "Zum ersten Mal", "q7_contact_first": "Zum ersten Mal",
"q7_contact_researching": "Optionen erkunden", "q7_contact_researching": "Optionen erkunden",
"q7_contact_received": "Bereits Angebote erhalten", "q7_contact_received": "Bereits Angebote erhalten",
"q8_heading": "Gew\u00fcnschte Leistungen", "q8_heading": "Gew\u00fcnschte Leistungen",
"q8_subheading": "W\u00e4hlen Sie alles Zutreffende aus. Das hilft Anbietern, relevante Angebote vorzubereiten.", "q8_subheading": "W\u00e4hle alles Zutreffende aus. Das hilft Anbietern, relevante Angebote vorzubereiten.",
"q8_services_label": "Leistungen", "q8_services_label": "Leistungen",
"q8_services_note": "(alles Zutreffende ausw\u00e4hlen)", "q8_services_note": "(alles Zutreffende ausw\u00e4hlen)",
"q8_court_supply": "Platzlieferung", "q8_court_supply": "Platzlieferung",
"q8_installation": "Montage", "q8_installation": "Montage",
"q8_construction": "Hallenbau", "q8_construction": "Hallenbau",
"q8_design": "Anlageplanung", "q8_design": "Padelplatz-Planung",
"q8_lighting": "Beleuchtung", "q8_lighting": "Beleuchtung",
"q8_flooring": "Bodenbelag", "q8_flooring": "Bodenbelag",
"q8_turnkey": "Schl\u00fcsselfertig", "q8_turnkey": "Schl\u00fcsselfertig",
"q8_additional_label": "Noch etwas?", "q8_additional_label": "Noch etwas?",
"q8_additional_placeholder": "Besondere Anforderungen, Fragen oder Hintergrundinformationen\u2026", "q8_additional_placeholder": "Besondere Anforderungen, Fragen oder Hintergrundinformationen\u2026",
"q9_heading": "Kontaktdaten", "q9_heading": "Kontaktdaten",
"q9_subheading": "Wie sollen passende Anbieter Sie erreichen?", "q9_subheading": "Wie sollen passende Anbieter dich erreichen?",
"q9_privacy_msg": "Ihre Kontaktdaten werden nur mit gepr\u00fcften Anbietern geteilt, die zu Ihren Projektspezifikationen passen.", "q9_privacy_msg": "Deine Kontaktdaten werden nur mit gepr\u00fcften Anbietern geteilt, die zu Deinen Projektspezifikationen passen.",
"q9_name_label": "Vollst\u00e4ndiger Name", "q9_name_label": "Vollst\u00e4ndiger Name",
"q9_email_label": "E-Mail", "q9_email_label": "E-Mail",
"q9_phone_label": "Telefon", "q9_phone_label": "Telefon",
"q9_company_label": "Unternehmen", "q9_company_label": "Unternehmen",
"q9_company_note": "(optional)", "q9_company_note": "(optional)",
"q9_consent_text": "Ich stimme zu, dass meine Projektdaten und Kontaktinformationen mit verifizierten Padel-Platz-Anbietern geteilt werden d\u00fcrfen, die zu meinem Projekt passen.", "q9_consent_text": "Ich stimme zu, dass meine Projektdaten und Kontaktinformationen mit verifizierten Padelplatz-Anbietern geteilt werden d\u00fcrfen, die zu meinem Projekt passen.",
"q9_consent_privacy": "Datenschutzerkl\u00e4rung", "q9_consent_privacy": "Datenschutzerkl\u00e4rung",
"q9_consent_terms": "AGB", "q9_consent_terms": "AGB",
"q9_no_obligation": "Keine Verpflichtung.", "q9_no_obligation": "Keine Verpflichtung.",
"qs_title": "Erfolgreich vermittelt!", "qs_title": "Erfolgreich vermittelt!",
"qs_next_h2": "Was als n\u00e4chstes passiert", "qs_next_h2": "Was als n\u00e4chstes passiert",
"qs_step_1": "Anbieter pr\u00fcfen Ihren Projektbrief und bereiten Angebote vor", "qs_step_1": "Anbieter pr\u00fcfen Deinen Projektbrief und bereiten Angebote vor",
"qs_step_1_time": "Jetzt", "qs_step_1_time": "Jetzt",
"qs_step_2": "Passende Anbieter kontaktieren Sie mit ma\u00dfgeschneiderten Angeboten", "qs_step_2": "Passende Anbieter kontaktieren Dich mit ma\u00dfgeschneiderten Angeboten",
"qs_step_2_time": "1\u20132 Tage", "qs_step_2_time": "1\u20132 Tage",
"qs_step_3": "Angebote vergleichen und R\u00fcckfragen stellen", "qs_step_3": "Angebote vergleichen und R\u00fcckfragen stellen",
"qs_step_3_time": "1\u20132 Wochen", "qs_step_3_time": "1\u20132 Wochen",
"qs_step_4": "Den Anbieter ausw\u00e4hlen, der am besten zu Ihrem Projekt passt", "qs_step_4": "Den Anbieter ausw\u00e4hlen, der am besten zu Deinem Projekt passt",
"qs_step_4_time": "In Ihrem Tempo", "qs_step_4_time": "In Deinem Tempo",
"qs_signup_h3": "Konto erstellen", "qs_signup_h3": "Konto erstellen",
"qs_signup_text": "Szenarien speichern, Projekt verfolgen und benachrichtigt werden, wenn Anbieter antworten.", "qs_signup_text": "Szenarien speichern, Projekt verfolgen und benachrichtigt werden, wenn Anbieter antworten.",
"qs_signup_btn": "Konto erstellen", "qs_signup_btn": "Konto erstellen",
@@ -849,7 +849,7 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
"sup_signup_step3": "Credit-Pakete", "sup_signup_step3": "Credit-Pakete",
"sup_signup_step4": "Kontodaten", "sup_signup_step4": "Kontodaten",
"sup_success_h2": "Alles bereit!", "sup_success_h2": "Alles bereit!",
"sup_success_text": "Ihr Anbieter-Konto wird aktiviert. Sie erhalten in K\u00fcrze qualifizierte Leads, die Ihren Leistungen entsprechen.", "sup_success_text": "Dein Anbieter-Konto wird aktiviert. Du erh\u00e4ltst in K\u00fcrze qualifizierte Leads, die Deinen Leistungen entsprechen.",
"sup_success_next_h3": "Was als n\u00e4chstes passiert:", "sup_success_next_h3": "Was als n\u00e4chstes passiert:",
"sup_success_btn": "Zum Lead-Feed", "sup_success_btn": "Zum Lead-Feed",
# ── Suppliers waitlist ─────────────────────────────────────────────── # ── Suppliers waitlist ───────────────────────────────────────────────
@@ -861,13 +861,13 @@ _TRANSLATIONS: dict[str, dict[str, str]] = {
# ── Content / Markets ──────────────────────────────────────────────── # ── Content / Markets ────────────────────────────────────────────────
"mkt_heading": "Padel-M\u00e4rkte", "mkt_heading": "Padel-M\u00e4rkte",
"mkt_subheading": "Kostenanalysen und Finanzprojektionen f\u00fcr Padel-Center weltweit.", "mkt_subheading": "Kostenanalysen und Finanzprojektionen f\u00fcr Padel-Center weltweit.",
"mkt_search_placeholder": "Artikel suchen\u2026", "mkt_search_placeholder": "M\u00e4rkte suchen\u2026",
"mkt_all_countries": "Alle L\u00e4nder", "mkt_all_countries": "Alle L\u00e4nder",
"mkt_all_regions": "Alle Regionen", "mkt_all_regions": "Alle Regionen",
"mkt_no_results": "Keine Artikel gefunden. Versuchen Sie, Ihre Filter anzupassen.", "mkt_no_results": "Keine M\u00e4rkte gefunden. Passe Deine Filter an.",
# ── Article detail ─────────────────────────────────────────────────── # ── Article detail ───────────────────────────────────────────────────
"art_run_numbers_h2": "Eigene Zahlen berechnen", "art_run_numbers_h2": "Eigene Zahlen berechnen",
"art_run_numbers_text": "Nutzen Sie unseren kostenlosen Finanzplaner, um ein Padel-Center mit Ihren eigenen Annahmen zu modellieren.", "art_run_numbers_text": "Nutze unseren kostenlosen Finanzplaner, um ein Padel-Center mit Deinen eigenen Annahmen zu modellieren.",
"art_open_planner_btn": "Planer \u00f6ffnen", "art_open_planner_btn": "Planer \u00f6ffnen",
}, },
} }
@@ -1117,7 +1117,7 @@ _PLANNER_TRANSLATIONS: dict[str, dict[str, str]] = {
"tab_returns": "Renditen & Exit", "tab_returns": "Renditen & Exit",
"tab_metrics": "Kennzahlen", "tab_metrics": "Kennzahlen",
# Wizard steps # Wizard steps
"wiz_venue": "Anlage", "wiz_venue": "Padel-Platz",
"wiz_pricing": "Preise", "wiz_pricing": "Preise",
"wiz_costs": "Kosten", "wiz_costs": "Kosten",
"wiz_finance": "Finanzierung", "wiz_finance": "Finanzierung",
@@ -1188,7 +1188,7 @@ _PLANNER_TRANSLATIONS: dict[str, dict[str, str]] = {
"sl_permits": "Genehmigungen & Auflagen", "sl_permits": "Genehmigungen & Auflagen",
"sl_working_capital": "Betriebskapital", "sl_working_capital": "Betriebskapital",
"sl_contingency": "Reserve", "sl_contingency": "Reserve",
"sl_budget_target": "Ihr Budgetziel", "sl_budget_target": "Dein Budgetziel",
# Slider labels — OPEX # Slider labels — OPEX
"sl_rent_sqm": "Miete (\u20ac/m\u00b2/Monat)", "sl_rent_sqm": "Miete (\u20ac/m\u00b2/Monat)",
"sl_outdoor_rent": "Monatliche Grundst\u00fccksmiete", "sl_outdoor_rent": "Monatliche Grundst\u00fccksmiete",

View File

@@ -9,7 +9,7 @@
<div class="q-field-group"> <div class="q-field-group">
<span class="q-label">{{ t.q7_role_label }} <span class="required">*</span></span> <span class="q-label">{{ t.q7_role_label }} <span class="required">*</span></span>
{% if 'stakeholder_type' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Bitte wählen Sie Ihre Rolle{% else %}Please select your role{% endif %}</p>{% endif %} {% if 'stakeholder_type' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Bitte wähle Deine Rolle{% else %}Please select your role{% endif %}</p>{% endif %}
<div class="q-pills"> <div class="q-pills">
{% for val, label in [('entrepreneur', t.q7_role_entrepreneur), ('tennis_club', t.q7_role_tennis), ('municipality', t.q7_role_municipality), ('developer', t.q7_role_developer), ('operator', t.q7_role_operator), ('architect', t.q7_role_architect)] %} {% for val, label in [('entrepreneur', t.q7_role_entrepreneur), ('tennis_club', t.q7_role_tennis), ('municipality', t.q7_role_municipality), ('developer', t.q7_role_developer), ('operator', t.q7_role_operator), ('architect', t.q7_role_architect)] %}
<label><input type="radio" name="stakeholder_type" value="{{ val }}" {{ 'checked' if data.get('stakeholder_type') == val }}><span class="q-pill">{{ label }}</span></label> <label><input type="radio" name="stakeholder_type" value="{{ val }}" {{ 'checked' if data.get('stakeholder_type') == val }}><span class="q-pill">{{ label }}</span></label>

View File

@@ -58,7 +58,7 @@
<h1 class="text-2xl" style="margin-bottom: 0.5rem;">{{ t.qs_title }}</h1> <h1 class="text-2xl" style="margin-bottom: 0.5rem;">{{ t.qs_title }}</h1>
<p style="color: #64748B; font-size: 0.9375rem;"> <p style="color: #64748B; font-size: 0.9375rem;">
{% if lang == 'de' %} {% if lang == 'de' %}
Wir haben Ihr{% if court_count %} {{ court_count }}-Platz-{% endif %}{% if facility_type %} {{ facility_type }}-{% endif %}Projekt{% if country %} in {{ country }}{% endif %} mit verifizierten Anbietern abgestimmt, die sich mit maßgeschneiderten Angeboten bei Ihnen melden. Wir haben Dein{% if court_count %} {{ court_count }}-Platz-{% endif %}{% if facility_type %} {{ facility_type }}-{% endif %}Projekt{% if country %} in {{ country }}{% endif %} mit verifizierten Anbietern abgestimmt, die sich mit maßgeschneiderten Angeboten bei Dir melden.
{% else %} {% else %}
We've matched your We've matched your
{% if court_count %}{{ court_count }}-court{% endif %} {% if court_count %}{{ court_count }}-court{% endif %}

View File

@@ -12,7 +12,7 @@
<p class="font-semibold text-navy my-2">{{ contact_email }}</p> <p class="font-semibold text-navy my-2">{{ contact_email }}</p>
<p class="text-slate text-sm" style="margin-top: 1rem;"> <p class="text-slate text-sm" style="margin-top: 1rem;">
{% if lang == 'de' %}Klicken Sie auf den Link in der E-Mail, um Ihre Adresse zu bestätigen und Ihre Angebotsanfrage zu aktivieren. Dadurch wird auch Ihr {{ config.APP_NAME }}-Konto erstellt und Sie werden automatisch angemeldet.{% else %}Click the link in the email to verify your address and activate your quote request. This will also create your {{ config.APP_NAME }} account and log you in automatically.{% endif %} {% if lang == 'de' %}Klick auf den Link in der E-Mail, um Deine Adresse zu bestätigen und Deine Angebotsanfrage zu aktivieren. Dadurch wird auch Dein {{ config.APP_NAME }}-Konto erstellt und du wirst automatisch angemeldet.{% else %}Click the link in the email to verify your address and activate your quote request. This will also create your {{ config.APP_NAME }} account and log you in automatically.{% endif %}
</p> </p>
<p class="text-slate text-sm" style="margin-top: 0.5rem;"> <p class="text-slate text-sm" style="margin-top: 0.5rem;">
@@ -25,7 +25,7 @@
<summary class="cursor-pointer text-sm font-medium text-navy">{% if lang == 'de' %}E-Mail nicht erhalten?{% else %}Didn't receive the email?{% endif %}</summary> <summary class="cursor-pointer text-sm font-medium text-navy">{% if lang == 'de' %}E-Mail nicht erhalten?{% else %}Didn't receive the email?{% endif %}</summary>
<ul class="list-disc pl-6 mt-2 space-y-1 text-sm text-slate-dark"> <ul class="list-disc pl-6 mt-2 space-y-1 text-sm text-slate-dark">
<li>{{ t.qv_spam }}</li> <li>{{ t.qv_spam }}</li>
<li>{% if lang == 'de' %}Stellen Sie sicher, dass <strong>{{ contact_email }}</strong> korrekt ist{% else %}Make sure <strong>{{ contact_email }}</strong> is correct{% endif %}</li> <li>{% if lang == 'de' %}Stell sicher, dass <strong>{{ contact_email }}</strong> korrekt ist{% else %}Make sure <strong>{{ contact_email }}</strong> is correct{% endif %}</li>
<li>{{ t.qv_wait }}</li> <li>{{ t.qv_wait }}</li>
</ul> </ul>
<p class="text-sm text-slate mt-3"> <p class="text-sm text-slate mt-3">

View File

@@ -8,7 +8,7 @@
<h1 class="text-2xl mb-4">{{ t.export_waitlist_title }}</h1> <h1 class="text-2xl mb-4">{{ t.export_waitlist_title }}</h1>
{% if lang == 'de' %} {% if lang == 'de' %}
<p class="text-slate-dark mb-6">Wir bereiten den Start unseres professionellen Geschäftsplan-PDF-Exports vor. Sie stehen bereits auf der Warteliste und werden benachrichtigt, sobald es verfügbar ist.</p> <p class="text-slate-dark mb-6">Wir bereiten den Start unseres professionellen Geschäftsplan-PDF-Exports vor. Du stehst bereits auf der Warteliste und wirst benachrichtigt, sobald es verfügbar ist.</p>
<div class="bg-slate-50 border border-slate-200 rounded-lg p-4 mb-6 text-left"> <div class="bg-slate-50 border border-slate-200 rounded-lg p-4 mb-6 text-left">
<h3 class="font-semibold text-navy text-sm mb-2">Was enthalten ist</h3> <h3 class="font-semibold text-navy text-sm mb-2">Was enthalten ist</h3>
@@ -41,7 +41,7 @@
</div> </div>
<div class="text-sm text-slate mb-6"> <div class="text-sm text-slate mb-6">
<p>Sie erhalten bei unserem Launch eine E-Mail mit:</p> <p>Du erhältst bei unserem Launch eine E-Mail mit:</p>
<ul class="mt-2 text-slate-dark"> <ul class="mt-2 text-slate-dark">
<li>• Frühem Zugang mit Sonderpreis</li> <li>• Frühem Zugang mit Sonderpreis</li>
<li>• Launch-Rabatt</li> <li>• Launch-Rabatt</li>

View File

@@ -49,8 +49,8 @@
<!-- Step 1: Your Venue --> <!-- Step 1: Your Venue -->
<div class="wizard-step active" data-wiz="1"> <div class="wizard-step active" data-wiz="1">
{% if lang == 'de' %} {% if lang == 'de' %}
<h2 class="wizard-step__title">Ihre Anlage</h2> <h2 class="wizard-step__title">Dein Padel-Platz</h2>
<p class="wizard-step__sub">Definieren Sie den Typ der Anlage, die Sie planen.</p> <p class="wizard-step__sub">Definiere den Typ des Padel-Platzes, den du planst.</p>
<div class="mb-section"> <div class="mb-section">
<label class="slider-group__label">Umgebung</label> <label class="slider-group__label">Umgebung</label>
<div class="toggle-group" id="tog-venue"></div> <div class="toggle-group" id="tog-venue"></div>
@@ -91,7 +91,7 @@
<div class="wizard-step" data-wiz="2"> <div class="wizard-step" data-wiz="2">
{% if lang == 'de' %} {% if lang == 'de' %}
<h2 class="wizard-step__title">Preise &amp; Auslastung</h2> <h2 class="wizard-step__title">Preise &amp; Auslastung</h2>
<p class="wizard-step__sub">Legen Sie Ihre Platztarife, Betriebszeiten und Nebeneinnahmen fest.</p> <p class="wizard-step__sub">Lege Deine Platztarife, Betriebszeiten und Nebeneinnahmen fest.</p>
<div class="mb-section"> <div class="mb-section">
<div class="section-header"><h3>Preise</h3><span class="hint">Pro Platz und Stunde</span></div> <div class="section-header"><h3>Preise</h3><span class="hint">Pro Platz und Stunde</span></div>
<div id="inp-pricing"></div> <div id="inp-pricing"></div>
@@ -118,7 +118,7 @@
<div class="wizard-step" data-wiz="3"> <div class="wizard-step" data-wiz="3">
{% if lang == 'de' %} {% if lang == 'de' %}
<h2 class="wizard-step__title">Investition &amp; Baukosten</h2> <h2 class="wizard-step__title">Investition &amp; Baukosten</h2>
<p class="wizard-step__sub">Konfigurieren Sie Baukosten, Glas- und Beleuchtungsoptionen sowie Ihr Budgetziel.</p> <p class="wizard-step__sub">Konfiguriere Baukosten, Glas- und Beleuchtungsoptionen sowie Dein Budgetziel.</p>
<div class="mb-section"> <div class="mb-section">
<div class="section-header"><h3>Bau &amp; CAPEX</h3><span class="hint">Nach Szenario anpassen</span></div> <div class="section-header"><h3>Bau &amp; CAPEX</h3><span class="hint">Nach Szenario anpassen</span></div>
<div id="inp-capex"></div> <div id="inp-capex"></div>

View File

@@ -118,7 +118,7 @@
.then(function(res) { return res.json().then(function(d) { return { ok: res.ok, data: d }; }); }) .then(function(res) { return res.json().then(function(d) { return { ok: res.ok, data: d }; }); })
.then(function(result) { .then(function(result) {
if (!result.ok || result.data.error) { if (!result.ok || result.data.error) {
errBox.textContent = result.data.error || '{% if lang == 'de' %}Etwas ist schiefgelaufen. Bitte versuchen Sie es erneut.{% else %}Something went wrong. Please try again.{% endif %}'; errBox.textContent = result.data.error || '{% if lang == 'de' %}Etwas ist schiefgelaufen. Bitte versuch es erneut.{% else %}Something went wrong. Please try again.{% endif %}';
errBox.hidden = false; errBox.hidden = false;
btn.disabled = false; btn.disabled = false;
btn.textContent = '{% if lang == 'de' %}Zur Kasse{% else %}Proceed to Checkout{% endif %}'; btn.textContent = '{% if lang == 'de' %}Zur Kasse{% else %}Proceed to Checkout{% endif %}';
@@ -133,7 +133,7 @@
btn.textContent = '{% if lang == 'de' %}Zur Kasse{% else %}Proceed to Checkout{% endif %}'; btn.textContent = '{% if lang == 'de' %}Zur Kasse{% else %}Proceed to Checkout{% endif %}';
}) })
.catch(function() { .catch(function() {
errBox.textContent = '{% if lang == 'de' %}Netzwerkfehler. Bitte überprüfen Sie Ihre Verbindung und versuchen Sie es erneut.{% else %}Network error. Please check your connection and try again.{% endif %}'; errBox.textContent = '{% if lang == 'de' %}Netzwerkfehler. Bitte überprüfe Deine Verbindung und versuch es erneut.{% else %}Network error. Please check your connection and try again.{% endif %}';
errBox.hidden = false; errBox.hidden = false;
btn.disabled = false; btn.disabled = false;
btn.textContent = '{% if lang == 'de' %}Zur Kasse{% else %}Proceed to Checkout{% endif %}'; btn.textContent = '{% if lang == 'de' %}Zur Kasse{% else %}Proceed to Checkout{% endif %}';

View File

@@ -7,17 +7,17 @@
<div class="card max-w-sm mx-auto mt-8 text-center"> <div class="card max-w-sm mx-auto mt-8 text-center">
{% set plan_info = plans.get(plan, plans['supplier_growth']) %} {% set plan_info = plans.get(plan, plans['supplier_growth']) %}
<h1 class="text-2xl mb-4">{% if lang == 'de' %}Sie stehen auf der Anbieter-Warteliste!{% else %}You're on the Supplier Waitlist!{% endif %}</h1> <h1 class="text-2xl mb-4">{% if lang == 'de' %}Du stehst auf der Anbieter-Warteliste!{% else %}You're on the Supplier Waitlist!{% endif %}</h1>
<p class="text-slate-dark">{% if lang == 'de' %}Wir haben eine Bestätigung gesendet an:{% else %}We've sent a confirmation to:{% endif %}</p> <p class="text-slate-dark">{% if lang == 'de' %}Wir haben eine Bestätigung gesendet an:{% else %}We've sent a confirmation to:{% endif %}</p>
<p class="font-semibold text-navy my-2">{{ email }}</p> <p class="font-semibold text-navy my-2">{{ email }}</p>
<p class="text-slate text-sm mb-2">{% if lang == 'de' %}Sie gehören zu den ersten Anbietern mit Zugang zum <strong>{{ plan_info.name }}</strong>-Tier bei unserem Launch.{% else %}You'll be among the first suppliers with access to the <strong>{{ plan_info.name }}</strong> tier when we launch.{% endif %}</p> <p class="text-slate text-sm mb-2">{% if lang == 'de' %}Du gehörst zu den ersten Anbietern mit Zugang zum <strong>{{ plan_info.name }}</strong>-Tier bei unserem Launch.{% else %}You'll be among the first suppliers with access to the <strong>{{ plan_info.name }}</strong> tier when we launch.{% endif %}</p>
<hr> <hr>
<div class="text-left mt-6"> <div class="text-left mt-6">
<h3 class="text-sm font-semibold text-navy mb-3">{% if lang == 'de' %}Was Sie als Frühmitglied erhalten:{% else %}What you'll get as an early member:{% endif %}</h3> <h3 class="text-sm font-semibold text-navy mb-3">{% if lang == 'de' %}Was du als Frühmitglied erhältst:{% else %}What you'll get as an early member:{% endif %}</h3>
<ul class="list-disc pl-6 space-y-1 text-sm text-slate-dark"> <ul class="list-disc pl-6 space-y-1 text-sm text-slate-dark">
<li>{% if lang == 'de' %}Erster Zugang zu qualifizierten Leads von Padel-Unternehmern{% else %}First access to qualified leads from padel entrepreneurs{% endif %}</li> <li>{% if lang == 'de' %}Erster Zugang zu qualifizierten Leads von Padel-Unternehmern{% else %}First access to qualified leads from padel entrepreneurs{% endif %}</li>
<li>{% if lang == 'de' %}Exklusiver Launch-Preis (für 12 Monate festgeschrieben){% else %}Exclusive launch pricing (locked in for 12 months){% endif %}</li> <li>{% if lang == 'de' %}Exklusiver Launch-Preis (für 12 Monate festgeschrieben){% else %}Exclusive launch pricing (locked in for 12 months){% endif %}</li>