refactor(i18n): Batch 2 — eliminate {% if lang %} blocks in leads templates
Add 19 new locale keys (q_page_title, q_step_counter, q1/2/5/7/9 error
hints, qs_matched_*, qv_sent_msg, qv_instructions, qv_no_email,
qv_check_email_pre/post) and replace all 22 {% if lang %} blocks across
quote_request.html, quote_verify_sent.html, quote_submitted.html, and
all 9 quote_step_*.html partials.
Progress bar OOB counter shared across all 9 step partials now uses
{{ t.q_step_counter | tformat(step=step, total=steps|length) }}.
Complex project description in quote_submitted.html uses 5 fragment
keys (qs_matched_*) with qs_matched_facility_fmt="{type}" vs "{type}-"
to handle EN/DE compound-word suffix without empty-value keys.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<div class="q-field-group">
|
<div class="q-field-group">
|
||||||
<span class="q-label">{{ t.q1_facility_label }} <span class="required">*</span></span>
|
<span class="q-label">{{ t.q1_facility_label }} <span class="required">*</span></span>
|
||||||
{% if 'facility_type' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Bitte wähle einen Anlagentyp{% else %}Please select a facility type{% endif %}</p>{% endif %}
|
{% if 'facility_type' in errors %}<p class="q-error-hint">{{ t.q1_error_facility }}</p>{% endif %}
|
||||||
<div class="q-pills">
|
<div class="q-pills">
|
||||||
{% for val, label in [('indoor', t.q1_facility_indoor), ('outdoor', t.q1_facility_outdoor), ('both', t.q1_facility_both)] %}
|
{% for val, label in [('indoor', t.q1_facility_indoor), ('outdoor', t.q1_facility_outdoor), ('both', t.q1_facility_both)] %}
|
||||||
<label><input type="radio" name="facility_type" value="{{ val }}" {{ 'checked' if data.get('facility_type') == val }}><span class="q-pill">{{ label }}</span></label>
|
<label><input type="radio" name="facility_type" value="{{ val }}" {{ 'checked' if data.get('facility_type') == val }}><span class="q-pill">{{ label }}</span></label>
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
<div class="q-field-group">
|
<div class="q-field-group">
|
||||||
<label class="q-label" for="country">{{ t.q2_country_label }} <span class="required">*</span></label>
|
<label class="q-label" for="country">{{ t.q2_country_label }} <span class="required">*</span></label>
|
||||||
{% if 'country' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Bitte wähle ein Land{% else %}Please select a country{% endif %}</p>{% endif %}
|
{% if 'country' in errors %}<p class="q-error-hint">{{ t.q2_error_country }}</p>{% endif %}
|
||||||
<select id="country" name="country" class="q-input {% if 'country' in errors %}q-input--error{% endif %}">
|
<select id="country" name="country" class="q-input {% if 'country' in errors %}q-input--error{% endif %}">
|
||||||
<option value="">{{ t.q2_country_default }}</option>
|
<option value="">{{ t.q2_country_default }}</option>
|
||||||
{% for code, name in [('DE', 'Germany'), ('ES', 'Spain'), ('IT', 'Italy'), ('FR', 'France'), ('NL', 'Netherlands'), ('SE', 'Sweden'), ('UK', 'United Kingdom'), ('PT', 'Portugal'), ('BE', 'Belgium'), ('AT', 'Austria'), ('CH', 'Switzerland'), ('DK', 'Denmark'), ('FI', 'Finland'), ('NO', 'Norway'), ('PL', 'Poland'), ('CZ', 'Czech Republic'), ('AE', 'UAE'), ('SA', 'Saudi Arabia'), ('US', 'United States'), ('OTHER', 'Other')] %}
|
{% for code, name in [('DE', 'Germany'), ('ES', 'Spain'), ('IT', 'Italy'), ('FR', 'France'), ('NL', 'Netherlands'), ('SE', 'Sweden'), ('UK', 'United Kingdom'), ('PT', 'Portugal'), ('BE', 'Belgium'), ('AT', 'Austria'), ('CH', 'Switzerland'), ('DK', 'Denmark'), ('FI', 'Finland'), ('NO', 'Norway'), ('PL', 'Poland'), ('CZ', 'Czech Republic'), ('AE', 'UAE'), ('SA', 'Saudi Arabia'), ('US', 'United States'), ('OTHER', 'Other')] %}
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
<div class="q-field-group">
|
<div class="q-field-group">
|
||||||
<span class="q-label">{{ t.q5_timeline_label }} <span class="required">*</span></span>
|
<span class="q-label">{{ t.q5_timeline_label }} <span class="required">*</span></span>
|
||||||
{% if 'timeline' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Bitte wähle einen Zeitplan{% else %}Please select a timeline{% endif %}</p>{% endif %}
|
{% if 'timeline' in errors %}<p class="q-error-hint">{{ t.q5_error_timeline }}</p>{% endif %}
|
||||||
<div class="q-pills">
|
<div class="q-pills">
|
||||||
{% for val, label in [('asap', t.q5_timeline_asap), ('3-6mo', t.q5_timeline_3_6), ('6-12mo', t.q5_timeline_6_12), ('12+mo', t.q5_timeline_12_plus)] %}
|
{% for val, label in [('asap', t.q5_timeline_asap), ('3-6mo', t.q5_timeline_3_6), ('6-12mo', t.q5_timeline_6_12), ('12+mo', t.q5_timeline_12_plus)] %}
|
||||||
<label><input type="radio" name="timeline" value="{{ val }}" {{ 'checked' if data.get('timeline') == val }}><span class="q-pill">{{ label }}</span></label>
|
<label><input type="radio" name="timeline" value="{{ val }}" {{ 'checked' if data.get('timeline') == val }}><span class="q-pill">{{ label }}</span></label>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -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ähle Deine Rolle{% else %}Please select your role{% endif %}</p>{% endif %}
|
{% if 'stakeholder_type' in errors %}<p class="q-error-hint">{{ t.q7_error_role }}</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>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -21,19 +21,19 @@
|
|||||||
|
|
||||||
<div class="q-field-group">
|
<div class="q-field-group">
|
||||||
<label class="q-label" for="contact_name">{{ t.q9_name_label }} <span class="required">*</span></label>
|
<label class="q-label" for="contact_name">{{ t.q9_name_label }} <span class="required">*</span></label>
|
||||||
{% if 'contact_name' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Vollständiger Name ist erforderlich{% else %}Full name is required{% endif %}</p>{% endif %}
|
{% if 'contact_name' in errors %}<p class="q-error-hint">{{ t.q9_error_name }}</p>{% endif %}
|
||||||
<input type="text" id="contact_name" name="contact_name" class="q-input {% if 'contact_name' in errors %}q-input--error{% endif %}" value="{{ data.get('contact_name', '') }}" required>
|
<input type="text" id="contact_name" name="contact_name" class="q-input {% if 'contact_name' in errors %}q-input--error{% endif %}" value="{{ data.get('contact_name', '') }}" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="q-field-group">
|
<div class="q-field-group">
|
||||||
<label class="q-label" for="contact_email">{{ t.q9_email_label }} <span class="required">*</span></label>
|
<label class="q-label" for="contact_email">{{ t.q9_email_label }} <span class="required">*</span></label>
|
||||||
{% if 'contact_email' in errors %}<p class="q-error-hint">{% if lang == 'de' %}E-Mail ist erforderlich{% else %}Email is required{% endif %}</p>{% endif %}
|
{% if 'contact_email' in errors %}<p class="q-error-hint">{{ t.q9_error_email }}</p>{% endif %}
|
||||||
<input type="email" id="contact_email" name="contact_email" class="q-input {% if 'contact_email' in errors %}q-input--error{% endif %}" value="{{ data.get('contact_email', '') }}" required>
|
<input type="email" id="contact_email" name="contact_email" class="q-input {% if 'contact_email' in errors %}q-input--error{% endif %}" value="{{ data.get('contact_email', '') }}" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="q-field-group">
|
<div class="q-field-group">
|
||||||
<label class="q-label" for="contact_phone">{{ t.q9_phone_label }} <span class="required">*</span></label>
|
<label class="q-label" for="contact_phone">{{ t.q9_phone_label }} <span class="required">*</span></label>
|
||||||
{% if 'contact_phone' in errors %}<p class="q-error-hint">{% if lang == 'de' %}Telefonnummer ist erforderlich{% else %}Phone number is required{% endif %}</p>{% endif %}
|
{% if 'contact_phone' in errors %}<p class="q-error-hint">{{ t.q9_error_phone }}</p>{% endif %}
|
||||||
<input type="tel" id="contact_phone" name="contact_phone" class="q-input {% if 'contact_phone' in errors %}q-input--error{% endif %}" value="{{ data.get('contact_phone', '') }}" required>
|
<input type="tel" id="contact_phone" name="contact_phone" class="q-input {% if 'contact_phone' in errors %}q-input--error{% endif %}" value="{{ data.get('contact_phone', '') }}" required>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<div id="q-progress" hx-swap-oob="innerHTML">
|
<div id="q-progress" hx-swap-oob="innerHTML">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}{% if lang == 'de' %}Angebote von Bauunternehmen erhalten - {{ config.APP_NAME }}{% else %}Get Builder Quotes - {{ config.APP_NAME }}{% endif %}{% endblock %}
|
{% block title %}{{ t.q_page_title }} - {{ config.APP_NAME }}{% endblock %}
|
||||||
|
|
||||||
{% block head %}
|
{% block head %}
|
||||||
<style>
|
<style>
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
<div class="q-progress" id="q-progress">
|
<div class="q-progress" id="q-progress">
|
||||||
<div class="q-progress__meta">
|
<div class="q-progress__meta">
|
||||||
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
<span class="q-progress__label">{{ steps[step - 1].title }}</span>
|
||||||
<span class="q-progress__count">{% if lang == 'de' %}Schritt {{ step }} von {{ steps|length }}{% else %}{{ step }} of {{ steps|length }}{% endif %}</span>
|
<span class="q-progress__count">{{ t.q_step_counter | tformat(step=step, total=steps|length) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="q-progress__track">
|
<div class="q-progress__track">
|
||||||
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
<div class="q-progress__fill" style="width: {{ (step / steps|length * 100) | round }}%"></div>
|
||||||
|
|||||||
@@ -57,16 +57,12 @@
|
|||||||
|
|
||||||
<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' %}
|
{{ t.qs_matched_pre }}
|
||||||
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.
|
{% if court_count %}{{ court_count }}{{ t.qs_matched_court_suffix }}{% endif %}
|
||||||
{% else %}
|
{% if facility_type %}{{ t.qs_matched_facility_fmt | tformat(type=facility_type) }}{% endif %}
|
||||||
We've matched your
|
{{ t.qs_matched_project }}
|
||||||
{% if court_count %}{{ court_count }}-court{% endif %}
|
|
||||||
{% if facility_type %}{{ facility_type }}{% endif %}
|
|
||||||
project
|
|
||||||
{% if country %}in {{ country }}{% endif %}
|
{% if country %}in {{ country }}{% endif %}
|
||||||
with verified suppliers who'll reach out with tailored proposals.
|
{{ t.qs_matched_post }}
|
||||||
{% endif %}
|
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="next-steps">
|
<div class="next-steps">
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
<h1 class="text-2xl mb-4">{{ t.qv_heading }}</h1>
|
<h1 class="text-2xl mb-4">{{ t.qv_heading }}</h1>
|
||||||
|
|
||||||
<p class="text-slate-dark">{% if lang == 'de' %}Wir haben einen Verifizierungslink an folgende Adresse gesendet:{% else %}We've sent a verification link to:{% endif %}</p>
|
<p class="text-slate-dark">{{ t.qv_sent_msg }}</p>
|
||||||
<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' %}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 %}
|
{{ t.qv_instructions | tformat(app_name=config.APP_NAME) }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p class="text-slate text-sm" style="margin-top: 0.5rem;">
|
<p class="text-slate text-sm" style="margin-top: 0.5rem;">
|
||||||
@@ -22,10 +22,10 @@
|
|||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
<details class="text-left">
|
<details class="text-left">
|
||||||
<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">{{ t.qv_no_email }}</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' %}Stell sicher, dass <strong>{{ contact_email }}</strong> korrekt ist{% else %}Make sure <strong>{{ contact_email }}</strong> is correct{% endif %}</li>
|
<li>{{ t.qv_check_email_pre }}<strong>{{ contact_email }}</strong>{{ t.qv_check_email_post }}</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">
|
||||||
|
|||||||
@@ -357,6 +357,8 @@
|
|||||||
"q_btn_next": "Weiter →",
|
"q_btn_next": "Weiter →",
|
||||||
"q_btn_back": "← Zurück",
|
"q_btn_back": "← Zurück",
|
||||||
"q_btn_submit": "Absenden & Angebote erhalten →",
|
"q_btn_submit": "Absenden & Angebote erhalten →",
|
||||||
|
"q_page_title": "Angebote von Bauunternehmen erhalten",
|
||||||
|
"q_step_counter": "Schritt {step} von {total}",
|
||||||
"q1_heading": "Dein Projekt",
|
"q1_heading": "Dein Projekt",
|
||||||
"q1_subheading": "Welche Art von Padel-Anlage planst Du?",
|
"q1_subheading": "Welche Art von Padel-Anlage planst Du?",
|
||||||
"q1_prefill_sub": "Aus dem Planer vorausgefüllt — passe die Angaben nach Bedarf an.",
|
"q1_prefill_sub": "Aus dem Planer vorausgefüllt — passe die Angaben nach Bedarf an.",
|
||||||
@@ -378,12 +380,14 @@
|
|||||||
"q1_lighting_led_comp": "LED Wettkampf",
|
"q1_lighting_led_comp": "LED Wettkampf",
|
||||||
"q1_lighting_natural": "Tageslicht",
|
"q1_lighting_natural": "Tageslicht",
|
||||||
"q1_lighting_not_sure": "Noch unklar",
|
"q1_lighting_not_sure": "Noch unklar",
|
||||||
|
"q1_error_facility": "Bitte wähle einen Anlagentyp",
|
||||||
"q2_heading": "Standort",
|
"q2_heading": "Standort",
|
||||||
"q2_subheading": "Wo planst Du zu bauen?",
|
"q2_subheading": "Wo planst Du zu bauen?",
|
||||||
"q2_city_label": "Stadt / Region",
|
"q2_city_label": "Stadt / Region",
|
||||||
"q2_city_placeholder": "z. B. München, Bayern",
|
"q2_city_placeholder": "z. B. München, Bayern",
|
||||||
"q2_country_label": "Land",
|
"q2_country_label": "Land",
|
||||||
"q2_country_default": "Land auswählen…",
|
"q2_country_default": "Land auswählen…",
|
||||||
|
"q2_error_country": "Bitte wähle ein Land",
|
||||||
"q3_heading": "Projektsituation",
|
"q3_heading": "Projektsituation",
|
||||||
"q3_subheading": "Was beschreibt Dein Projekt am besten?",
|
"q3_subheading": "Was beschreibt Dein Projekt am besten?",
|
||||||
"q3_context_label": "Projektsituation",
|
"q3_context_label": "Projektsituation",
|
||||||
@@ -409,6 +413,7 @@
|
|||||||
"q5_timeline_6_12": "6–12 Monate",
|
"q5_timeline_6_12": "6–12 Monate",
|
||||||
"q5_timeline_12_plus": "12+ Monate",
|
"q5_timeline_12_plus": "12+ Monate",
|
||||||
"q5_budget_label": "Budget (€)",
|
"q5_budget_label": "Budget (€)",
|
||||||
|
"q5_error_timeline": "Bitte wähle einen Zeitplan",
|
||||||
"q6_heading": "Finanzierung",
|
"q6_heading": "Finanzierung",
|
||||||
"q6_subheading": "Wie finanzierst Du das Projekt?",
|
"q6_subheading": "Wie finanzierst Du das Projekt?",
|
||||||
"q6_status_label": "Finanzierungsstatus",
|
"q6_status_label": "Finanzierungsstatus",
|
||||||
@@ -434,6 +439,7 @@
|
|||||||
"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",
|
||||||
|
"q7_error_role": "Bitte wähle Deine Rolle",
|
||||||
"q8_heading": "Gewünschte Leistungen",
|
"q8_heading": "Gewünschte Leistungen",
|
||||||
"q8_subheading": "Wähle alles Zutreffende aus. Das hilft Anbietern, relevante Angebote vorzubereiten.",
|
"q8_subheading": "Wähle alles Zutreffende aus. Das hilft Anbietern, relevante Angebote vorzubereiten.",
|
||||||
"q8_services_label": "Leistungen",
|
"q8_services_label": "Leistungen",
|
||||||
@@ -459,6 +465,9 @@
|
|||||||
"q9_consent_privacy": "Datenschutzerklärung",
|
"q9_consent_privacy": "Datenschutzerklärung",
|
||||||
"q9_consent_terms": "AGB",
|
"q9_consent_terms": "AGB",
|
||||||
"q9_no_obligation": "Keine Verpflichtung.",
|
"q9_no_obligation": "Keine Verpflichtung.",
|
||||||
|
"q9_error_name": "Vollständiger Name ist erforderlich",
|
||||||
|
"q9_error_email": "E-Mail ist erforderlich",
|
||||||
|
"q9_error_phone": "Telefonnummer ist erforderlich",
|
||||||
"qs_title": "Erfolgreich vermittelt!",
|
"qs_title": "Erfolgreich vermittelt!",
|
||||||
"qs_next_h2": "Was als nächstes passiert",
|
"qs_next_h2": "Was als nächstes passiert",
|
||||||
"qs_step_1": "Anbieter prüfen Deinen Projektbrief und bereiten Angebote vor",
|
"qs_step_1": "Anbieter prüfen Deinen Projektbrief und bereiten Angebote vor",
|
||||||
@@ -473,12 +482,22 @@
|
|||||||
"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",
|
||||||
"qs_back_planner": "Zum Planer",
|
"qs_back_planner": "Zum Planer",
|
||||||
|
"qs_matched_pre": "Wir haben Dein",
|
||||||
|
"qs_matched_court_suffix": "-Platz-",
|
||||||
|
"qs_matched_facility_fmt": "{type}-",
|
||||||
|
"qs_matched_project": "Projekt",
|
||||||
|
"qs_matched_post": "mit verifizierten Anbietern abgestimmt, die sich mit maßgeschneiderten Angeboten bei Dir melden.",
|
||||||
"qv_heading": "E-Mail prüfen",
|
"qv_heading": "E-Mail prüfen",
|
||||||
"qv_link_expiry": "Der Link läuft in 60 Minuten ab.",
|
"qv_link_expiry": "Der Link läuft in 60 Minuten ab.",
|
||||||
"qv_spam": "Spam-Ordner überprüfen",
|
"qv_spam": "Spam-Ordner überprüfen",
|
||||||
"qv_wait": "Einen Moment warten — die Zustellung kann etwas dauern",
|
"qv_wait": "Einen Moment warten — die Zustellung kann etwas dauern",
|
||||||
"qv_wrong_email": "Falsche E-Mail?",
|
"qv_wrong_email": "Falsche E-Mail?",
|
||||||
"qv_wrong_email_link": "Neue Anfrage stellen",
|
"qv_wrong_email_link": "Neue Anfrage stellen",
|
||||||
|
"qv_sent_msg": "Wir haben einen Verifizierungslink an folgende Adresse gesendet:",
|
||||||
|
"qv_instructions": "Klick auf den Link in der E-Mail, um Deine Adresse zu bestätigen und Deine Angebotsanfrage zu aktivieren. Dadurch wird auch Dein {app_name}-Konto erstellt und du wirst automatisch angemeldet.",
|
||||||
|
"qv_no_email": "E-Mail nicht erhalten?",
|
||||||
|
"qv_check_email_pre": "Stell sicher, dass ",
|
||||||
|
"qv_check_email_post": " korrekt ist",
|
||||||
"sup_signup_step1": "Plan auswählen",
|
"sup_signup_step1": "Plan auswählen",
|
||||||
"sup_signup_step2": "Boost-Add-ons",
|
"sup_signup_step2": "Boost-Add-ons",
|
||||||
"sup_signup_step3": "Credit-Pakete",
|
"sup_signup_step3": "Credit-Pakete",
|
||||||
@@ -991,4 +1010,4 @@
|
|||||||
"markets_country_label": "Land",
|
"markets_country_label": "Land",
|
||||||
"article_detail_published_label": "Veröffentlicht",
|
"article_detail_published_label": "Veröffentlicht",
|
||||||
"article_detail_research_label": "Padelnomics Forschung"
|
"article_detail_research_label": "Padelnomics Forschung"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -357,6 +357,8 @@
|
|||||||
"q_btn_next": "Next →",
|
"q_btn_next": "Next →",
|
||||||
"q_btn_back": "← Back",
|
"q_btn_back": "← Back",
|
||||||
"q_btn_submit": "Submit & Get Quotes →",
|
"q_btn_submit": "Submit & Get Quotes →",
|
||||||
|
"q_page_title": "Get Builder Quotes",
|
||||||
|
"q_step_counter": "{step} of {total}",
|
||||||
"q1_heading": "Your Project",
|
"q1_heading": "Your Project",
|
||||||
"q1_subheading": "What type of padel facility are you planning?",
|
"q1_subheading": "What type of padel facility are you planning?",
|
||||||
"q1_prefill_sub": "Pre-filled from your planner — adjust as needed.",
|
"q1_prefill_sub": "Pre-filled from your planner — adjust as needed.",
|
||||||
@@ -378,12 +380,14 @@
|
|||||||
"q1_lighting_led_comp": "LED Competition",
|
"q1_lighting_led_comp": "LED Competition",
|
||||||
"q1_lighting_natural": "Natural Light",
|
"q1_lighting_natural": "Natural Light",
|
||||||
"q1_lighting_not_sure": "Not Sure",
|
"q1_lighting_not_sure": "Not Sure",
|
||||||
|
"q1_error_facility": "Please select a facility type",
|
||||||
"q2_heading": "Location",
|
"q2_heading": "Location",
|
||||||
"q2_subheading": "Where are you planning to build?",
|
"q2_subheading": "Where are you planning to build?",
|
||||||
"q2_city_label": "City / Region",
|
"q2_city_label": "City / Region",
|
||||||
"q2_city_placeholder": "e.g. Munich, Bavaria",
|
"q2_city_placeholder": "e.g. Munich, Bavaria",
|
||||||
"q2_country_label": "Country",
|
"q2_country_label": "Country",
|
||||||
"q2_country_default": "Select country...",
|
"q2_country_default": "Select country...",
|
||||||
|
"q2_error_country": "Please select a country",
|
||||||
"q3_heading": "Build Context",
|
"q3_heading": "Build Context",
|
||||||
"q3_subheading": "What best describes your project?",
|
"q3_subheading": "What best describes your project?",
|
||||||
"q3_context_label": "Build Context",
|
"q3_context_label": "Build Context",
|
||||||
@@ -409,6 +413,7 @@
|
|||||||
"q5_timeline_6_12": "6–12 Months",
|
"q5_timeline_6_12": "6–12 Months",
|
||||||
"q5_timeline_12_plus": "12+ Months",
|
"q5_timeline_12_plus": "12+ Months",
|
||||||
"q5_budget_label": "Budget Estimate (€)",
|
"q5_budget_label": "Budget Estimate (€)",
|
||||||
|
"q5_error_timeline": "Please select a timeline",
|
||||||
"q6_heading": "Financing",
|
"q6_heading": "Financing",
|
||||||
"q6_subheading": "How are you funding the project?",
|
"q6_subheading": "How are you funding the project?",
|
||||||
"q6_status_label": "Financing Status",
|
"q6_status_label": "Financing Status",
|
||||||
@@ -434,6 +439,7 @@
|
|||||||
"q7_contact_first": "First time",
|
"q7_contact_first": "First time",
|
||||||
"q7_contact_researching": "Researching options",
|
"q7_contact_researching": "Researching options",
|
||||||
"q7_contact_received": "Already received quotes",
|
"q7_contact_received": "Already received quotes",
|
||||||
|
"q7_error_role": "Please select your role",
|
||||||
"q8_heading": "Services Needed",
|
"q8_heading": "Services Needed",
|
||||||
"q8_subheading": "Select all that apply. This helps suppliers prepare relevant proposals.",
|
"q8_subheading": "Select all that apply. This helps suppliers prepare relevant proposals.",
|
||||||
"q8_services_label": "Services",
|
"q8_services_label": "Services",
|
||||||
@@ -459,6 +465,9 @@
|
|||||||
"q9_consent_privacy": "Privacy Policy",
|
"q9_consent_privacy": "Privacy Policy",
|
||||||
"q9_consent_terms": "Terms",
|
"q9_consent_terms": "Terms",
|
||||||
"q9_no_obligation": "No obligation.",
|
"q9_no_obligation": "No obligation.",
|
||||||
|
"q9_error_name": "Full name is required",
|
||||||
|
"q9_error_email": "Email is required",
|
||||||
|
"q9_error_phone": "Phone number is required",
|
||||||
"qs_title": "You’re matched!",
|
"qs_title": "You’re matched!",
|
||||||
"qs_next_h2": "What happens next",
|
"qs_next_h2": "What happens next",
|
||||||
"qs_step_1": "Suppliers review your project brief and prepare proposals",
|
"qs_step_1": "Suppliers review your project brief and prepare proposals",
|
||||||
@@ -473,12 +482,22 @@
|
|||||||
"qs_signup_text": "Save scenarios, track your project, and get notified when suppliers respond.",
|
"qs_signup_text": "Save scenarios, track your project, and get notified when suppliers respond.",
|
||||||
"qs_signup_btn": "Create Account",
|
"qs_signup_btn": "Create Account",
|
||||||
"qs_back_planner": "Back to Planner",
|
"qs_back_planner": "Back to Planner",
|
||||||
|
"qs_matched_pre": "We've matched your",
|
||||||
|
"qs_matched_court_suffix": "-court",
|
||||||
|
"qs_matched_facility_fmt": "{type}",
|
||||||
|
"qs_matched_project": "project",
|
||||||
|
"qs_matched_post": "with verified suppliers who'll reach out with tailored proposals.",
|
||||||
"qv_heading": "Check your email",
|
"qv_heading": "Check your email",
|
||||||
"qv_link_expiry": "The link expires in 60 minutes.",
|
"qv_link_expiry": "The link expires in 60 minutes.",
|
||||||
"qv_spam": "Check your spam folder",
|
"qv_spam": "Check your spam folder",
|
||||||
"qv_wait": "Wait a minute — delivery can take a moment",
|
"qv_wait": "Wait a minute — delivery can take a moment",
|
||||||
"qv_wrong_email": "Wrong email?",
|
"qv_wrong_email": "Wrong email?",
|
||||||
"qv_wrong_email_link": "Submit a new request",
|
"qv_wrong_email_link": "Submit a new request",
|
||||||
|
"qv_sent_msg": "We've sent a verification link to:",
|
||||||
|
"qv_instructions": "Click the link in the email to verify your address and activate your quote request. This will also create your {app_name} account and log you in automatically.",
|
||||||
|
"qv_no_email": "Didn't receive the email?",
|
||||||
|
"qv_check_email_pre": "Make sure ",
|
||||||
|
"qv_check_email_post": " is correct",
|
||||||
"sup_signup_step1": "Choose Your Plan",
|
"sup_signup_step1": "Choose Your Plan",
|
||||||
"sup_signup_step2": "Boost Add-Ons",
|
"sup_signup_step2": "Boost Add-Ons",
|
||||||
"sup_signup_step3": "Credit Packs",
|
"sup_signup_step3": "Credit Packs",
|
||||||
@@ -991,4 +1010,4 @@
|
|||||||
"markets_country_label": "Country",
|
"markets_country_label": "Country",
|
||||||
"article_detail_published_label": "Published",
|
"article_detail_published_label": "Published",
|
||||||
"article_detail_research_label": "Padelnomics Research"
|
"article_detail_research_label": "Padelnomics Research"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user