···1414*.sqlite3
1515db.sqlite3
16161717+# Compiled translation files (generated from .po)
1818+*.mo
1919+1720# Shapefile components (use fetch_wahlkreis_data to regenerate GeoJSON)
1821*.shp
1922*.shx
+41
README.md
···774. Download constituency boundaries: `uv run python manage.py fetch_wahlkreis_data` (required for accurate address-based matching).
885. Launch the dev server with `uv run python manage.py runserver` and visit http://localhost:8000/.
991010+## Internationalization
1111+1212+WriteThem.eu supports German (default) and English.
1313+1414+### Using the Site
1515+1616+- Visit `/de/` for German interface
1717+- Visit `/en/` for English interface
1818+- Use the language switcher in the header to toggle languages
1919+- Language preference is saved in a cookie
2020+2121+### For Developers
2222+2323+**Translation workflow:**
2424+2525+1. Wrap new UI strings with translation functions:
2626+ - Templates: `{% trans "Text" %}` or `{% blocktrans %}`
2727+ - Python: `gettext()` or `gettext_lazy()`
2828+2929+2. Extract strings to .po files:
3030+ ```bash
3131+ cd website
3232+ uv run python manage.py makemessages -l de -l en
3333+ ```
3434+3535+3. Translate strings in `.po` files:
3636+ - Edit `locale/de/LC_MESSAGES/django.po` (German translations)
3737+ - Edit `locale/en/LC_MESSAGES/django.po` (English, mostly identity translations)
3838+3939+4. Compile translations:
4040+ ```bash
4141+ uv run python manage.py compilemessages
4242+ ```
4343+4444+5. Check translation completeness:
4545+ ```bash
4646+ uv run python manage.py check_translations
4747+ ```
4848+4949+**Important:** All code, comments, and translation keys should be in English. Only .po files contain actual translations.
5050+1051## Architecture
1152- **Frameworks**: Django 5.2 / Python 3.13 managed with `uv`. The project root holds dependency metadata; all Django code lives in `website/` (settings in `writethem/`, app logic in `letters/`).
1253- **Domain models**: `letters/models.py` defines parliaments, terms, constituencies, representatives, committees, letters, signatures, identity verification, and moderation reports. Relationships reflect multi-level mandates (EU/Federal/State) and committee membership.
+9
docs/matching-algorithm.md
···8181python manage.py test letters.tests.test_topic_mapping
8282python manage.py test letters.tests.test_constituency_suggestions
8383```
8484+8585+## Internationalization
8686+8787+The constituency matching system works identically in both German and English:
8888+8989+- Addresses can be entered in German format (standard use case)
9090+- UI language (German/English) does not affect geocoding or matching logic
9191+- Representative names, constituency names, and geographic data remain in original German
9292+- All user-facing labels and messages are translated
+1127
docs/plans/2025-10-14-i18n-implementation.md
···11+# German + English Internationalization Implementation Plan
22+33+> **For Claude:** Use `${SUPERPOWERS_SKILLS_ROOT}/skills/collaboration/executing-plans/SKILL.md` to implement this plan task-by-task.
44+55+**Goal:** Implement full bilingual support (German + English) using Django's built-in i18n system.
66+77+**Architecture:** Configure Django i18n settings, wrap all UI strings in gettext translation functions, create German and English locale files (.po), add language switcher component, and configure URL patterns with language prefixes.
88+99+**Tech Stack:** Django 5.2 i18n framework, gettext, .po/.mo translation files, LocaleMiddleware
1010+1111+---
1212+1313+## Task 1: Configure Django i18n Settings
1414+1515+**Files:**
1616+- Modify: `website/writethem/settings.py:104-146`
1717+1818+**Step 1: Write the failing test**
1919+2020+Create: `website/letters/tests/test_i18n.py`
2121+2222+```python
2323+# ABOUTME: Tests for internationalization configuration and functionality.
2424+# ABOUTME: Verifies language switching, URL prefixes, and translation completeness.
2525+2626+from django.test import TestCase
2727+from django.conf import settings
2828+2929+3030+class I18nConfigurationTests(TestCase):
3131+ def test_i18n_enabled(self):
3232+ """Test that USE_I18N is enabled."""
3333+ self.assertTrue(settings.USE_I18N)
3434+3535+ def test_supported_languages(self):
3636+ """Test that German and English are configured."""
3737+ language_codes = [code for code, name in settings.LANGUAGES]
3838+ self.assertIn('de', language_codes)
3939+ self.assertIn('en', language_codes)
4040+4141+ def test_locale_paths_configured(self):
4242+ """Test that LOCALE_PATHS is set."""
4343+ self.assertTrue(len(settings.LOCALE_PATHS) > 0)
4444+```
4545+4646+**Step 2: Run test to verify it fails**
4747+4848+Run: `uv run python manage.py test letters.tests.test_i18n::I18nConfigurationTests -v`
4949+Expected: FAIL with assertion errors (USE_I18N=False, LANGUAGES not configured, LOCALE_PATHS not set)
5050+5151+**Step 3: Update settings.py**
5252+5353+In `website/writethem/settings.py`, replace lines 104-114:
5454+5555+```python
5656+# Internationalization
5757+# https://docs.djangoproject.com/en/5.2/topics/i18n/
5858+5959+LANGUAGE_CODE = 'de'
6060+LANGUAGES = [
6161+ ('de', 'Deutsch'),
6262+ ('en', 'English'),
6363+]
6464+6565+TIME_ZONE = 'Europe/Berlin'
6666+6767+USE_I18N = True
6868+USE_L10N = True
6969+7070+USE_TZ = True
7171+7272+# Locale paths - where Django looks for .po files
7373+LOCALE_PATHS = [
7474+ BASE_DIR / 'locale',
7575+]
7676+```
7777+7878+**Step 4: Add LocaleMiddleware**
7979+8080+In `website/writethem/settings.py`, modify MIDDLEWARE list (lines 43-51):
8181+8282+```python
8383+MIDDLEWARE = [
8484+ 'django.middleware.security.SecurityMiddleware',
8585+ 'django.contrib.sessions.middleware.SessionMiddleware',
8686+ 'django.middleware.locale.LocaleMiddleware', # NEW - handles language detection
8787+ 'django.middleware.common.CommonMiddleware',
8888+ 'django.middleware.csrf.CsrfViewMiddleware',
8989+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
9090+ 'django.contrib.messages.middleware.MessageMiddleware',
9191+ 'django.middleware.clickjacking.XFrameOptionsMiddleware',
9292+]
9393+```
9494+9595+**Step 5: Run test to verify it passes**
9696+9797+Run: `uv run python manage.py test letters.tests.test_i18n::I18nConfigurationTests -v`
9898+Expected: PASS (3 tests)
9999+100100+**Step 6: Commit**
101101+102102+```bash
103103+git add website/writethem/settings.py website/letters/tests/test_i18n.py
104104+git commit -m "feat: configure Django i18n with German and English support"
105105+```
106106+107107+---
108108+109109+## Task 2: Configure URL Patterns with Language Prefixes
110110+111111+**Files:**
112112+- Modify: `website/writethem/urls.py`
113113+114114+**Step 1: Write the failing test**
115115+116116+Add to `website/letters/tests/test_i18n.py`:
117117+118118+```python
119119+class I18nURLTests(TestCase):
120120+ def test_german_url_prefix_works(self):
121121+ """Test that German URL prefix is accessible."""
122122+ response = self.client.get('/de/')
123123+ self.assertEqual(response.status_code, 200)
124124+125125+ def test_english_url_prefix_works(self):
126126+ """Test that English URL prefix is accessible."""
127127+ response = self.client.get('/en/')
128128+ self.assertEqual(response.status_code, 200)
129129+130130+ def test_set_language_endpoint_exists(self):
131131+ """Test that language switcher endpoint exists."""
132132+ from django.urls import reverse
133133+ url = reverse('set_language')
134134+ self.assertEqual(url, '/i18n/setlang/')
135135+```
136136+137137+**Step 2: Run test to verify it fails**
138138+139139+Run: `uv run python manage.py test letters.tests.test_i18n::I18nURLTests -v`
140140+Expected: FAIL (URLs not configured with language prefixes)
141141+142142+**Step 3: Update URLs configuration**
143143+144144+Replace entire contents of `website/writethem/urls.py`:
145145+146146+```python
147147+"""
148148+URL configuration for writethem project.
149149+150150+The `urlpatterns` list routes URLs to views. For more information please see:
151151+ https://docs.djangoproject.com/en/5.2/topics/http/urls/
152152+Examples:
153153+Function views
154154+ 1. Add an import: from my_app import views
155155+ 2. Add a URL to urlpatterns: path('', views.home, name='home')
156156+Class-based views
157157+ 1. Add an import: from other_app.views import Home
158158+ 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
159159+Including another URLconf
160160+ 1. Import the include() function: from django.urls import include, path
161161+ 2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
162162+"""
163163+from django.contrib import admin
164164+from django.urls import path, include
165165+from django.conf import settings
166166+from django.conf.urls.static import static
167167+from django.conf.urls.i18n import i18n_patterns
168168+from django.views.i18n import set_language
169169+170170+urlpatterns = [
171171+ # Language switcher endpoint (no prefix)
172172+ path('i18n/setlang/', set_language, name='set_language'),
173173+]
174174+175175+# All user-facing URLs get language prefix
176176+urlpatterns += i18n_patterns(
177177+ path('admin/', admin.site.urls),
178178+ path('', include('letters.urls')),
179179+ prefix_default_language=True,
180180+)
181181+182182+if settings.DEBUG:
183183+ urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
184184+```
185185+186186+**Step 4: Run test to verify it passes**
187187+188188+Run: `uv run python manage.py test letters.tests.test_i18n::I18nURLTests -v`
189189+Expected: PASS (3 tests)
190190+191191+**Step 5: Commit**
192192+193193+```bash
194194+git add website/writethem/urls.py
195195+git commit -m "feat: add i18n URL patterns with language prefixes"
196196+```
197197+198198+---
199199+200200+## Task 3: Create Locale Directory Structure
201201+202202+**Files:**
203203+- Create: `website/locale/` directory structure
204204+205205+**Step 1: Create directory structure**
206206+207207+Run:
208208+```bash
209209+cd website
210210+mkdir -p locale/de/LC_MESSAGES
211211+mkdir -p locale/en/LC_MESSAGES
212212+```
213213+214214+**Step 2: Verify directories exist**
215215+216216+Run: `ls -la locale/`
217217+Expected: Shows `de/` and `en/` directories
218218+219219+**Step 3: Create .gitkeep files**
220220+221221+Run:
222222+```bash
223223+touch locale/de/LC_MESSAGES/.gitkeep
224224+touch locale/en/LC_MESSAGES/.gitkeep
225225+```
226226+227227+This ensures git tracks the directory structure even before .po files are created.
228228+229229+**Step 4: Commit**
230230+231231+```bash
232232+git add locale/
233233+git commit -m "feat: create locale directory structure for translations"
234234+```
235235+236236+---
237237+238238+## Task 4: Wrap Base Template Strings
239239+240240+**Files:**
241241+- Modify: `website/letters/templates/letters/base.html`
242242+243243+**Step 1: Review current base template**
244244+245245+Run: `cat website/letters/templates/letters/base.html`
246246+247247+Identify all hardcoded strings that need translation.
248248+249249+**Step 2: Add i18n load tag and wrap strings**
250250+251251+At the top of `website/letters/templates/letters/base.html`, add after the first line:
252252+253253+```django
254254+{% load i18n %}
255255+```
256256+257257+Then wrap all user-facing strings with `{% trans %}` tags. For example:
258258+259259+- Navigation links: `{% trans "Home" %}`, `{% trans "Letters" %}`, `{% trans "Login" %}`, etc.
260260+- Button text: `{% trans "Sign Out" %}`, `{% trans "Sign In" %}`, etc.
261261+- Any other UI text
262262+263263+**Important:** The exact changes depend on the current template content. Wrap every hardcoded user-facing string.
264264+265265+**Step 3: Test template renders without errors**
266266+267267+Run: `uv run python manage.py runserver`
268268+Visit: `http://localhost:8000/de/`
269269+Expected: Page loads without template errors (strings still in English because .po files don't exist yet)
270270+271271+**Step 4: Commit**
272272+273273+```bash
274274+git add website/letters/templates/letters/base.html
275275+git commit -m "feat: wrap base template strings with i18n tags"
276276+```
277277+278278+---
279279+280280+## Task 5: Add Language Switcher Component
281281+282282+**Files:**
283283+- Modify: `website/letters/templates/letters/base.html`
284284+285285+**Step 1: Write the failing test**
286286+287287+Add to `website/letters/tests/test_i18n.py`:
288288+289289+```python
290290+class LanguageSwitcherTests(TestCase):
291291+ def test_language_switcher_present_in_page(self):
292292+ """Test that language switcher form is present."""
293293+ response = self.client.get('/de/')
294294+ self.assertContains(response, 'name="language"')
295295+ self.assertContains(response, 'Deutsch')
296296+ self.assertContains(response, 'English')
297297+298298+ def test_language_switch_changes_language(self):
299299+ """Test that submitting language form changes language."""
300300+ response = self.client.post(
301301+ '/i18n/setlang/',
302302+ {'language': 'en', 'next': '/en/'},
303303+ follow=True
304304+ )
305305+ self.assertEqual(response.status_code, 200)
306306+ # Check cookie was set
307307+ self.assertIn('django_language', response.cookies)
308308+```
309309+310310+**Step 2: Run test to verify it fails**
311311+312312+Run: `uv run python manage.py test letters.tests.test_i18n::LanguageSwitcherTests -v`
313313+Expected: FAIL (language switcher not present)
314314+315315+**Step 3: Add language switcher to base template**
316316+317317+In `website/letters/templates/letters/base.html`, add this component in an appropriate location (e.g., in the header/navigation area):
318318+319319+```django
320320+<div class="language-switcher">
321321+ <form action="{% url 'set_language' %}" method="post">
322322+ {% csrf_token %}
323323+ <input name="next" type="hidden" value="{{ request.get_full_path }}">
324324+ <select name="language" onchange="this.form.submit()" aria-label="{% trans 'Select language' %}">
325325+ {% get_current_language as CURRENT_LANGUAGE %}
326326+ {% get_available_languages as AVAILABLE_LANGUAGES %}
327327+ {% for lang_code, lang_name in AVAILABLE_LANGUAGES %}
328328+ <option value="{{ lang_code }}" {% if lang_code == CURRENT_LANGUAGE %}selected{% endif %}>
329329+ {{ lang_name }}
330330+ </option>
331331+ {% endfor %}
332332+ </select>
333333+ </form>
334334+</div>
335335+```
336336+337337+**Step 4: Run test to verify it passes**
338338+339339+Run: `uv run python manage.py test letters.tests.test_i18n::LanguageSwitcherTests -v`
340340+Expected: PASS (2 tests)
341341+342342+**Step 5: Commit**
343343+344344+```bash
345345+git add website/letters/templates/letters/base.html
346346+git commit -m "feat: add language switcher component to base template"
347347+```
348348+349349+---
350350+351351+## Task 6: Wrap Authentication Template Strings
352352+353353+**Files:**
354354+- Modify: `website/letters/templates/registration/login.html`
355355+- Modify: `website/letters/templates/registration/register.html`
356356+- Modify: `website/letters/templates/registration/password_reset_form.html`
357357+- Modify: `website/letters/templates/registration/password_reset_done.html`
358358+- Modify: `website/letters/templates/registration/password_reset_confirm.html`
359359+- Modify: `website/letters/templates/registration/password_reset_complete.html`
360360+361361+**Step 1: Add i18n load tag to each template**
362362+363363+For each template file listed above, add at the top (after `{% extends %}`):
364364+365365+```django
366366+{% load i18n %}
367367+```
368368+369369+**Step 2: Wrap all strings with trans tags**
370370+371371+For each template, wrap user-facing strings:
372372+- Headings: `<h1>{% trans "Login" %}</h1>`
373373+- Labels: `{% trans "Email" %}`, `{% trans "Password" %}`
374374+- Buttons: `{% trans "Sign In" %}`, `{% trans "Register" %}`, `{% trans "Reset Password" %}`
375375+- Messages: `{% trans "Forgot your password?" %}`, etc.
376376+377377+**Step 3: Test templates render**
378378+379379+Run: `uv run python manage.py runserver`
380380+Visit each auth page:
381381+- `/de/login/`
382382+- `/de/register/`
383383+- `/de/password-reset/`
384384+385385+Expected: Pages load without errors
386386+387387+**Step 4: Commit**
388388+389389+```bash
390390+git add website/letters/templates/registration/
391391+git commit -m "feat: wrap authentication template strings with i18n tags"
392392+```
393393+394394+---
395395+396396+## Task 7: Wrap Letter List and Detail Template Strings
397397+398398+**Files:**
399399+- Modify: `website/letters/templates/letters/letter_list.html`
400400+- Modify: `website/letters/templates/letters/letter_detail.html`
401401+402402+**Step 1: Add i18n load tag**
403403+404404+Add to both templates after `{% extends %}`:
405405+406406+```django
407407+{% load i18n %}
408408+```
409409+410410+**Step 2: Wrap strings in letter_list.html**
411411+412412+Wrap all user-facing strings:
413413+- Headings: `{% trans "Open Letters" %}`
414414+- Buttons: `{% trans "Write Letter" %}`, `{% trans "Filter" %}`, `{% trans "Sort" %}`
415415+- Labels: `{% trans "Topic" %}`, `{% trans "Signatures" %}`
416416+- Empty states: `{% trans "No letters found" %}`
417417+418418+For pluralization (e.g., signature counts), use `{% blocktrans %}`:
419419+420420+```django
421421+{% blocktrans count counter=letter.signatures.count %}
422422+ {{ counter }} signature
423423+{% plural %}
424424+ {{ counter }} signatures
425425+{% endblocktrans %}
426426+```
427427+428428+**Step 3: Wrap strings in letter_detail.html**
429429+430430+Wrap all strings:
431431+- Buttons: `{% trans "Sign Letter" %}`, `{% trans "Remove Signature" %}`, `{% trans "Share" %}`, `{% trans "Report" %}`
432432+- Labels: `{% trans "Recipient" %}`, `{% trans "Published" %}`, `{% trans "Signatures" %}`
433433+- Messages: `{% trans "You have signed this letter" %}`
434434+435435+**Step 4: Test templates render**
436436+437437+Run: `uv run python manage.py runserver`
438438+Visit: `/de/letters/` and any letter detail page
439439+Expected: Pages load without errors
440440+441441+**Step 5: Commit**
442442+443443+```bash
444444+git add website/letters/templates/letters/letter_list.html website/letters/templates/letters/letter_detail.html
445445+git commit -m "feat: wrap letter list and detail template strings with i18n tags"
446446+```
447447+448448+---
449449+450450+## Task 8: Wrap Letter Creation Template Strings
451451+452452+**Files:**
453453+- Modify: `website/letters/templates/letters/letter_form.html`
454454+455455+**Step 1: Add i18n load tag**
456456+457457+```django
458458+{% load i18n %}
459459+```
460460+461461+**Step 2: Wrap all strings**
462462+463463+Wrap:
464464+- Headings: `{% trans "Write an Open Letter" %}`
465465+- Form labels: `{% trans "Title" %}`, `{% trans "Content" %}`, `{% trans "Recipient" %}`
466466+- Help text: `{% trans "Minimum 500 characters" %}`
467467+- Warnings: `{% trans "Once published, letters cannot be edited" %}`
468468+- Buttons: `{% trans "Publish Letter" %}`, `{% trans "Preview" %}`, `{% trans "Cancel" %}`
469469+470470+**Step 3: Update form class with verbose_name**
471471+472472+Modify: `website/letters/forms.py`
473473+474474+Add at the top:
475475+```python
476476+from django.utils.translation import gettext_lazy as _
477477+```
478478+479479+For each form field, add `label` parameter:
480480+```python
481481+title = forms.CharField(
482482+ label=_("Title"),
483483+ max_length=200,
484484+ help_text=_("A clear, concise title for your letter")
485485+)
486486+```
487487+488488+**Step 4: Test template renders**
489489+490490+Visit: `/de/letters/new/`
491491+Expected: Page loads without errors
492492+493493+**Step 5: Commit**
494494+495495+```bash
496496+git add website/letters/templates/letters/letter_form.html website/letters/forms.py
497497+git commit -m "feat: wrap letter creation template and form strings with i18n"
498498+```
499499+500500+---
501501+502502+## Task 9: Wrap Profile and Account Template Strings
503503+504504+**Files:**
505505+- Modify: `website/letters/templates/letters/profile.html`
506506+- Modify: `website/letters/templates/letters/account_delete.html`
507507+- Modify: Any other account-related templates
508508+509509+**Step 1: Add i18n load tag to each template**
510510+511511+```django
512512+{% load i18n %}
513513+```
514514+515515+**Step 2: Wrap all strings**
516516+517517+Profile page:
518518+- Headings: `{% trans "Your Profile" %}`, `{% trans "Authored Letters" %}`, `{% trans "Signed Letters" %}`
519519+- Buttons: `{% trans "Edit Profile" %}`, `{% trans "Delete Account" %}`
520520+- Labels: `{% trans "Email" %}`, `{% trans "Verified" %}`, `{% trans "Unverified" %}`
521521+522522+Account deletion:
523523+- Warnings: `{% trans "This action cannot be undone" %}`
524524+- Buttons: `{% trans "Confirm Deletion" %}`, `{% trans "Cancel" %}`
525525+526526+**Step 3: Test templates render**
527527+528528+Visit profile and account pages
529529+Expected: Pages load without errors
530530+531531+**Step 4: Commit**
532532+533533+```bash
534534+git add website/letters/templates/letters/profile.html website/letters/templates/letters/account_delete.html
535535+git commit -m "feat: wrap profile and account template strings with i18n tags"
536536+```
537537+538538+---
539539+540540+## Task 10: Extract Translation Strings to .po Files
541541+542542+**Files:**
543543+- Create: `website/locale/de/LC_MESSAGES/django.po`
544544+- Create: `website/locale/en/LC_MESSAGES/django.po`
545545+546546+**Step 1: Run makemessages for German**
547547+548548+Run:
549549+```bash
550550+cd website
551551+uv run python manage.py makemessages -l de
552552+```
553553+554554+Expected: Creates/updates `locale/de/LC_MESSAGES/django.po` with all translatable strings
555555+556556+**Step 2: Run makemessages for English**
557557+558558+Run:
559559+```bash
560560+uv run python manage.py makemessages -l en
561561+```
562562+563563+Expected: Creates/updates `locale/en/LC_MESSAGES/django.po`
564564+565565+**Step 3: Verify .po files created**
566566+567567+Run:
568568+```bash
569569+ls -la locale/de/LC_MESSAGES/
570570+ls -la locale/en/LC_MESSAGES/
571571+```
572572+573573+Expected: Both show `django.po` files
574574+575575+**Step 4: Check .po file contents**
576576+577577+Run:
578578+```bash
579579+head -n 30 locale/de/LC_MESSAGES/django.po
580580+```
581581+582582+Expected: Shows header and first few msgid/msgstr pairs
583583+584584+**Step 5: Commit**
585585+586586+```bash
587587+git add locale/
588588+git commit -m "feat: extract translatable strings to .po files"
589589+```
590590+591591+---
592592+593593+## Task 11: Translate German Strings in .po File
594594+595595+**Files:**
596596+- Modify: `website/locale/de/LC_MESSAGES/django.po`
597597+598598+**Step 1: Open German .po file**
599599+600600+Open `website/locale/de/LC_MESSAGES/django.po` for editing
601601+602602+**Step 2: Translate strings systematically**
603603+604604+Go through each `msgid` and add German translation to `msgstr`:
605605+606606+```po
607607+#: letters/templates/letters/base.html:10
608608+msgid "Home"
609609+msgstr "Startseite"
610610+611611+#: letters/templates/letters/base.html:11
612612+msgid "Letters"
613613+msgstr "Briefe"
614614+615615+#: letters/templates/letters/base.html:12
616616+msgid "Sign In"
617617+msgstr "Anmelden"
618618+619619+#: letters/templates/letters/base.html:13
620620+msgid "Sign Out"
621621+msgstr "Abmelden"
622622+623623+#: letters/templates/letters/letter_list.html:5
624624+msgid "Open Letters"
625625+msgstr "Offene Briefe"
626626+627627+#: letters/templates/letters/letter_list.html:8
628628+msgid "Write Letter"
629629+msgstr "Brief Schreiben"
630630+631631+#: letters/templates/letters/letter_detail.html:15
632632+msgid "Sign Letter"
633633+msgstr "Brief Unterschreiben"
634634+635635+#: letters/templates/letters/letter_detail.html:18
636636+msgid "Remove Signature"
637637+msgstr "Unterschrift Entfernen"
638638+639639+#: letters/templates/letters/letter_detail.html:21
640640+msgid "Share"
641641+msgstr "Teilen"
642642+643643+#: letters/templates/letters/letter_form.html:5
644644+msgid "Write an Open Letter"
645645+msgstr "Einen Offenen Brief Schreiben"
646646+647647+#: letters/templates/letters/letter_form.html:10
648648+msgid "Title"
649649+msgstr "Titel"
650650+651651+#: letters/templates/letters/letter_form.html:11
652652+msgid "Content"
653653+msgstr "Inhalt"
654654+655655+#: letters/templates/letters/letter_form.html:12
656656+msgid "Minimum 500 characters"
657657+msgstr "Mindestens 500 Zeichen"
658658+659659+#: letters/templates/letters/letter_form.html:15
660660+msgid "Once published, letters cannot be edited"
661661+msgstr "Nach Verรถffentlichung kรถnnen Briefe nicht mehr bearbeitet werden"
662662+663663+#: letters/templates/letters/letter_form.html:20
664664+msgid "Publish Letter"
665665+msgstr "Brief Verรถffentlichen"
666666+667667+#: letters/templates/registration/login.html:5
668668+msgid "Login"
669669+msgstr "Anmeldung"
670670+671671+#: letters/templates/registration/login.html:10
672672+msgid "Email"
673673+msgstr "E-Mail"
674674+675675+#: letters/templates/registration/login.html:11
676676+msgid "Password"
677677+msgstr "Passwort"
678678+679679+#: letters/templates/registration/login.html:15
680680+msgid "Forgot your password?"
681681+msgstr "Passwort vergessen?"
682682+683683+#: letters/templates/registration/register.html:5
684684+msgid "Register"
685685+msgstr "Registrieren"
686686+```
687687+688688+**Note:** The exact strings will depend on what was extracted in Task 10. Translate ALL msgid entries systematically.
689689+690690+**Step 3: Save the file**
691691+692692+Ensure all translations are complete (no empty `msgstr ""` entries)
693693+694694+**Step 4: Commit**
695695+696696+```bash
697697+git add locale/de/LC_MESSAGES/django.po
698698+git commit -m "feat: add German translations to .po file"
699699+```
700700+701701+---
702702+703703+## Task 12: Populate English .po File
704704+705705+**Files:**
706706+- Modify: `website/locale/en/LC_MESSAGES/django.po`
707707+708708+**Step 1: Open English .po file**
709709+710710+Open `website/locale/en/LC_MESSAGES/django.po` for editing
711711+712712+**Step 2: Add identity translations**
713713+714714+For English, most translations are identity (msgstr = msgid):
715715+716716+```po
717717+#: letters/templates/letters/base.html:10
718718+msgid "Home"
719719+msgstr "Home"
720720+721721+#: letters/templates/letters/base.html:11
722722+msgid "Letters"
723723+msgstr "Letters"
724724+```
725725+726726+Go through all entries and copy msgid to msgstr (they should be identical for English).
727727+728728+**Step 3: Save the file**
729729+730730+**Step 4: Commit**
731731+732732+```bash
733733+git add locale/en/LC_MESSAGES/django.po
734734+git commit -m "feat: add English identity translations to .po file"
735735+```
736736+737737+---
738738+739739+## Task 13: Compile Translation Files
740740+741741+**Files:**
742742+- Create: `website/locale/de/LC_MESSAGES/django.mo`
743743+- Create: `website/locale/en/LC_MESSAGES/django.mo`
744744+745745+**Step 1: Run compilemessages**
746746+747747+Run:
748748+```bash
749749+cd website
750750+uv run python manage.py compilemessages
751751+```
752752+753753+Expected: Creates `django.mo` files for both German and English
754754+755755+**Step 2: Verify .mo files created**
756756+757757+Run:
758758+```bash
759759+ls -la locale/de/LC_MESSAGES/
760760+ls -la locale/en/LC_MESSAGES/
761761+```
762762+763763+Expected: Both show `django.mo` files (binary format)
764764+765765+**Step 3: Test translations work**
766766+767767+Run: `uv run python manage.py runserver`
768768+769769+Visit `/de/` - should show German interface
770770+Visit `/en/` - should show English interface
771771+772772+Use language switcher to toggle between languages.
773773+774774+**Step 4: Add .mo files to .gitignore**
775775+776776+Modify `.gitignore` in repository root, add:
777777+```
778778+# Compiled translation files (generated from .po)
779779+*.mo
780780+```
781781+782782+**Note:** .mo files are generated artifacts and don't need to be tracked in git.
783783+784784+**Step 5: Commit**
785785+786786+```bash
787787+git add .gitignore
788788+git commit -m "chore: add compiled translation files to .gitignore"
789789+```
790790+791791+---
792792+793793+## Task 14: Create Translation Completeness Check Command
794794+795795+**Files:**
796796+- Create: `website/letters/management/commands/check_translations.py`
797797+798798+**Step 1: Write the failing test**
799799+800800+Add to `website/letters/tests/test_i18n.py`:
801801+802802+```python
803803+from django.core.management import call_command
804804+from io import StringIO
805805+806806+807807+class TranslationCompletenessTests(TestCase):
808808+ def test_check_translations_command_exists(self):
809809+ """Test that check_translations command can be called."""
810810+ out = StringIO()
811811+ call_command('check_translations', stdout=out)
812812+ output = out.getvalue()
813813+ self.assertIn('Deutsch', output)
814814+ self.assertIn('English', output)
815815+```
816816+817817+**Step 2: Run test to verify it fails**
818818+819819+Run: `uv run python manage.py test letters.tests.test_i18n::TranslationCompletenessTests -v`
820820+Expected: FAIL (command doesn't exist)
821821+822822+**Step 3: Create management command**
823823+824824+Create: `website/letters/management/commands/check_translations.py`
825825+826826+```python
827827+# ABOUTME: Management command to check translation completeness and report coverage.
828828+# ABOUTME: Analyzes .po files to find untranslated strings and calculate coverage percentage.
829829+830830+from django.core.management.base import BaseCommand
831831+from django.conf import settings
832832+import pathlib
833833+834834+835835+class Command(BaseCommand):
836836+ help = "Check translation completeness for all configured languages"
837837+838838+ def add_arguments(self, parser):
839839+ parser.add_argument(
840840+ '--language',
841841+ type=str,
842842+ help='Check specific language (e.g., "de" or "en")',
843843+ )
844844+845845+ def handle(self, *args, **options):
846846+ locale_paths = settings.LOCALE_PATHS
847847+ languages = settings.LANGUAGES
848848+849849+ target_language = options.get('language')
850850+851851+ if target_language:
852852+ languages_to_check = [(target_language, None)]
853853+ else:
854854+ languages_to_check = languages
855855+856856+ for lang_code, lang_name in languages_to_check:
857857+ self.check_language(locale_paths[0], lang_code, lang_name)
858858+859859+ def check_language(self, locale_path, lang_code, lang_name):
860860+ """Check translation completeness for a single language."""
861861+ po_file = pathlib.Path(locale_path) / lang_code / 'LC_MESSAGES' / 'django.po'
862862+863863+ if not po_file.exists():
864864+ self.stdout.write(self.style.ERROR(
865865+ f"\n{lang_code}: No .po file found at {po_file}"
866866+ ))
867867+ return
868868+869869+ total = 0
870870+ translated = 0
871871+ untranslated = []
872872+873873+ with open(po_file, 'r', encoding='utf-8') as f:
874874+ current_msgid = None
875875+ for line in f:
876876+ line = line.strip()
877877+ if line.startswith('msgid "') and not line.startswith('msgid ""'):
878878+ current_msgid = line[7:-1] # Extract string between quotes
879879+ total += 1
880880+ elif line.startswith('msgstr "'):
881881+ msgstr = line[8:-1]
882882+ if msgstr: # Non-empty translation
883883+ translated += 1
884884+ elif current_msgid:
885885+ untranslated.append(current_msgid)
886886+ current_msgid = None
887887+888888+ if total == 0:
889889+ self.stdout.write(self.style.WARNING(
890890+ f"\n{lang_code}: No translatable strings found"
891891+ ))
892892+ return
893893+894894+ coverage = (translated / total) * 100
895895+ display_name = lang_name if lang_name else lang_code
896896+897897+ self.stdout.write(self.style.SUCCESS(
898898+ f"\n{display_name} ({lang_code}):"
899899+ ))
900900+ self.stdout.write(f" Total strings: {total}")
901901+ self.stdout.write(f" Translated: {translated}")
902902+ self.stdout.write(f" Untranslated: {len(untranslated)}")
903903+ self.stdout.write(f" Coverage: {coverage:.1f}%")
904904+905905+ if untranslated:
906906+ self.stdout.write(self.style.WARNING(
907907+ f"\nMissing translations ({len(untranslated)}):"
908908+ ))
909909+ for msgid in untranslated[:10]: # Show first 10
910910+ self.stdout.write(f" - {msgid}")
911911+ if len(untranslated) > 10:
912912+ self.stdout.write(f" ... and {len(untranslated) - 10} more")
913913+ else:
914914+ self.stdout.write(self.style.SUCCESS(
915915+ "\nAll strings translated!"
916916+ ))
917917+```
918918+919919+**Step 4: Run test to verify it passes**
920920+921921+Run: `uv run python manage.py test letters.tests.test_i18n::TranslationCompletenessTests -v`
922922+Expected: PASS
923923+924924+**Step 5: Test command manually**
925925+926926+Run:
927927+```bash
928928+uv run python manage.py check_translations
929929+```
930930+931931+Expected: Shows coverage report for both German and English
932932+933933+**Step 6: Commit**
934934+935935+```bash
936936+git add website/letters/management/commands/check_translations.py
937937+git commit -m "feat: add check_translations management command"
938938+```
939939+940940+---
941941+942942+## Task 15: Update Documentation
943943+944944+**Files:**
945945+- Modify: `README.md`
946946+- Modify: `docs/matching-algorithm.md` (add i18n section)
947947+948948+**Step 1: Update README with i18n information**
949949+950950+Add a new section to `README.md`:
951951+952952+```markdown
953953+## Internationalization
954954+955955+WriteThem.eu supports German (default) and English.
956956+957957+### Using the Site
958958+959959+- Visit `/de/` for German interface
960960+- Visit `/en/` for English interface
961961+- Use the language switcher in the header to toggle languages
962962+- Language preference is saved in a cookie
963963+964964+### For Developers
965965+966966+**Translation workflow:**
967967+968968+1. Wrap new UI strings with translation functions:
969969+ - Templates: `{% trans "Text" %}` or `{% blocktrans %}`
970970+ - Python: `gettext()` or `gettext_lazy()`
971971+972972+2. Extract strings to .po files:
973973+ ```bash
974974+ cd website
975975+ uv run python manage.py makemessages -l de -l en
976976+ ```
977977+978978+3. Translate strings in `.po` files:
979979+ - Edit `locale/de/LC_MESSAGES/django.po` (German translations)
980980+ - Edit `locale/en/LC_MESSAGES/django.po` (English, mostly identity translations)
981981+982982+4. Compile translations:
983983+ ```bash
984984+ uv run python manage.py compilemessages
985985+ ```
986986+987987+5. Check translation completeness:
988988+ ```bash
989989+ uv run python manage.py check_translations
990990+ ```
991991+992992+**Important:** All code, comments, and translation keys should be in English. Only .po files contain actual translations.
993993+```
994994+995995+**Step 2: Add i18n section to matching-algorithm.md**
996996+997997+Add at the end of `docs/matching-algorithm.md`:
998998+999999+```markdown
10001000+## Internationalization
10011001+10021002+The constituency matching system works identically in both German and English:
10031003+10041004+- Addresses can be entered in German format (standard use case)
10051005+- UI language (German/English) does not affect geocoding or matching logic
10061006+- Representative names, constituency names, and geographic data remain in original German
10071007+- All user-facing labels and messages are translated
10081008+```
10091009+10101010+**Step 3: Commit**
10111011+10121012+```bash
10131013+git add README.md docs/matching-algorithm.md
10141014+git commit -m "docs: add internationalization documentation"
10151015+```
10161016+10171017+---
10181018+10191019+## Task 16: Run Full Test Suite and Verify
10201020+10211021+**Step 1: Run all tests**
10221022+10231023+Run:
10241024+```bash
10251025+cd website
10261026+uv run python manage.py test letters.tests.test_i18n letters.tests.test_address_matching letters.tests.test_topic_mapping letters.tests.test_constituency_suggestions
10271027+```
10281028+10291029+Expected: All tests pass (check total count)
10301030+10311031+**Step 2: Check translation completeness**
10321032+10331033+Run:
10341034+```bash
10351035+uv run python manage.py check_translations
10361036+```
10371037+10381038+Expected: 100% coverage for both languages (or report any missing translations)
10391039+10401040+**Step 3: Manual verification checklist**
10411041+10421042+Run: `uv run python manage.py runserver`
10431043+10441044+Test each page in both languages:
10451045+10461046+**German (`/de/`):**
10471047+- [ ] Homepage loads in German
10481048+- [ ] Login page in German
10491049+- [ ] Register page in German
10501050+- [ ] Letter list in German
10511051+- [ ] Letter detail in German
10521052+- [ ] Letter creation form in German
10531053+- [ ] Profile page in German
10541054+- [ ] Language switcher works (toggles to English)
10551055+10561056+**English (`/en/`):**
10571057+- [ ] Homepage loads in English
10581058+- [ ] Login page in English
10591059+- [ ] Register page in English
10601060+- [ ] Letter list in English
10611061+- [ ] Letter detail in English
10621062+- [ ] Letter creation form in English
10631063+- [ ] Profile page in English
10641064+- [ ] Language switcher works (toggles to German)
10651065+10661066+**Step 4: Check for untranslated strings**
10671067+10681068+While testing, look for any English text appearing on German pages (or vice versa). These indicate missed translations.
10691069+10701070+If found, add them to .po files, compile, and test again.
10711071+10721072+**Step 5: Create summary commit**
10731073+10741074+```bash
10751075+git add .
10761076+git commit -m "test: verify i18n implementation with full test suite"
10771077+```
10781078+10791079+---
10801080+10811081+## Verification Checklist
10821082+10831083+Before merging this feature:
10841084+10851085+- [ ] USE_I18N=True in settings
10861086+- [ ] LANGUAGES configured with German and English
10871087+- [ ] LOCALE_PATHS configured
10881088+- [ ] LocaleMiddleware added to MIDDLEWARE
10891089+- [ ] URL patterns use i18n_patterns()
10901090+- [ ] Language switcher present in base template
10911091+- [ ] All templates have `{% load i18n %}`
10921092+- [ ] All UI strings wrapped with `{% trans %}` or `{% blocktrans %}`
10931093+- [ ] German .po file fully translated (100% coverage)
10941094+- [ ] English .po file complete (identity translations)
10951095+- [ ] .mo files compile without errors
10961096+- [ ] check_translations command works
10971097+- [ ] All automated tests pass
10981098+- [ ] Manual testing in both languages successful
10991099+- [ ] Documentation updated
11001100+- [ ] No untranslated strings visible in UI
11011101+11021102+---
11031103+11041104+## Notes for Implementation
11051105+11061106+**Language policy:**
11071107+- All code (variables, functions, classes): English
11081108+- All comments and docstrings: English
11091109+- All translation keys (msgid in .po): English
11101110+- .po files contain actual translations
11111111+11121112+**Testing strategy:**
11131113+- TDD throughout: write test โ verify fail โ implement โ verify pass โ commit
11141114+- Run `uv run python manage.py test` frequently
11151115+- Use `uv run python manage.py runserver` for manual verification
11161116+- Use `check_translations` command to catch missing translations
11171117+11181118+**Common pitfalls:**
11191119+- Forgetting `{% load i18n %}` at top of templates
11201120+- Not using `gettext_lazy` in models/forms (use lazy version for class-level strings)
11211121+- Mixing `{% trans %}` and `{% blocktrans %}` incorrectly (use blocktrans for variables)
11221122+- Not recompiling after editing .po files (run compilemessages)
11231123+11241124+**Skills to reference:**
11251125+- @skills/testing/test-driven-development for TDD workflow
11261126+- @skills/debugging/systematic-debugging if tests fail unexpectedly
11271127+- @skills/collaboration/finishing-a-development-branch when merging back to feat/matching
···3838 {% if is_paginated %}
3939 <div style="text-align: center; margin: 2rem 0;">
4040 {% if page_obj.has_previous %}
4141- <a href="?page={{ page_obj.previous_page_number }}" class="btn btn-secondary">Previous</a>
4141+ <a href="?page={{ page_obj.previous_page_number }}" class="btn btn-secondary">{% trans "Previous" %}</a>
4242 {% endif %}
4343- <span style="margin: 0 1rem;">Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}</span>
4343+ <span style="margin: 0 1rem;">{% blocktrans with page=page_obj.number total=page_obj.paginator.num_pages %}Page {{ page }} of {{ total }}{% endblocktrans %}</span>
4444 {% if page_obj.has_next %}
4545- <a href="?page={{ page_obj.next_page_number }}" class="btn btn-secondary">Next</a>
4545+ <a href="?page={{ page_obj.next_page_number }}" class="btn btn-secondary">{% trans "Next" %}</a>
4646 {% endif %}
4747 </div>
4848 {% endif %}
4949{% else %}
5050 <div class="card">
5151- <p>No letters found. <a href="{% url 'letter_create' %}">Be the first to write one!</a></p>
5151+ <p>{% trans "No letters found." %} <a href="{% url 'letter_create' %}">{% trans "Be the first to write one!" %}</a></p>
5252 </div>
5353{% endif %}
5454{% endblock %}
+89
website/letters/tests/test_i18n.py
···11+# ABOUTME: Tests for internationalization configuration and functionality.
22+# ABOUTME: Verifies language switching, URL prefixes, and translation completeness.
33+44+from django.test import TestCase
55+from django.conf import settings
66+from django.core.management import call_command
77+from io import StringIO
88+99+1010+class I18nConfigurationTests(TestCase):
1111+ def test_i18n_enabled(self):
1212+ """Test that USE_I18N is enabled."""
1313+ self.assertTrue(settings.USE_I18N)
1414+1515+ def test_supported_languages(self):
1616+ """Test that German and English are configured."""
1717+ language_codes = [code for code, name in settings.LANGUAGES]
1818+ self.assertIn('de', language_codes)
1919+ self.assertIn('en', language_codes)
2020+2121+ def test_locale_paths_configured(self):
2222+ """Test that LOCALE_PATHS is set."""
2323+ self.assertTrue(len(settings.LOCALE_PATHS) > 0)
2424+2525+2626+class I18nURLTests(TestCase):
2727+ def test_german_url_prefix_works(self):
2828+ """Test that German URL prefix is accessible."""
2929+ response = self.client.get('/de/')
3030+ self.assertEqual(response.status_code, 200)
3131+3232+ def test_english_url_prefix_works(self):
3333+ """Test that English URL prefix is accessible."""
3434+ response = self.client.get('/en/')
3535+ self.assertEqual(response.status_code, 200)
3636+3737+ def test_set_language_endpoint_exists(self):
3838+ """Test that language switcher endpoint exists."""
3939+ from django.urls import reverse
4040+ url = reverse('set_language')
4141+ self.assertEqual(url, '/i18n/setlang/')
4242+4343+4444+class LanguageSwitcherTests(TestCase):
4545+ def test_language_switcher_present_in_page(self):
4646+ """Test that language switcher form is present."""
4747+ response = self.client.get('/de/')
4848+ self.assertContains(response, 'name="language"')
4949+ self.assertContains(response, 'Deutsch')
5050+ self.assertContains(response, 'English')
5151+5252+ def test_language_switch_changes_language(self):
5353+ """Test that submitting language form changes language."""
5454+ response = self.client.post(
5555+ '/i18n/setlang/',
5656+ {'language': 'en', 'next': '/en/'},
5757+ )
5858+ # Check we got a redirect
5959+ self.assertEqual(response.status_code, 302)
6060+ # Check cookie was set
6161+ self.assertIn('django_language', response.cookies)
6262+ self.assertEqual(response.cookies['django_language'].value, 'en')
6363+6464+6565+class LetterFormI18nTests(TestCase):
6666+ def test_letter_form_template_renders(self):
6767+ """Test that letter creation form renders without errors."""
6868+ from django.contrib.auth.models import User
6969+ # Create a user and log them in
7070+ user = User.objects.create_user(username='testuser', password='testpass')
7171+ self.client.login(username='testuser', password='testpass')
7272+7373+ # Test German version
7474+ response = self.client.get('/de/letter/new/')
7575+ self.assertEqual(response.status_code, 200)
7676+7777+ # Test English version
7878+ response = self.client.get('/en/letter/new/')
7979+ self.assertEqual(response.status_code, 200)
8080+8181+8282+class TranslationCompletenessTests(TestCase):
8383+ def test_check_translations_command_exists(self):
8484+ """Test that check_translations command can be called."""
8585+ out = StringIO()
8686+ call_command('check_translations', stdout=out)
8787+ output = out.getvalue()
8888+ self.assertIn('Deutsch', output)
8989+ self.assertIn('English', output)
website/locale/de/LC_MESSAGES/.gitkeep
This is a binary file and will not be displayed.
website/locale/de/LC_MESSAGES/django.mo
This is a binary file and will not be displayed.
+840-409
website/locale/de/LC_MESSAGES/django.po
···66msgstr ""
77"Project-Id-Version: WriteThem.eu\n"
88"Report-Msgid-Bugs-To: \n"
99-"POT-Creation-Date: 2025-10-04 22:57+0200\n"
99+"POT-Creation-Date: 2025-10-15 00:27+0200\n"
1010"PO-Revision-Date: 2025-01-10 12:00+0100\n"
1111"Last-Translator: \n"
1212"Language-Team: German\n"
···1616"Content-Transfer-Encoding: 8bit\n"
1717"Plural-Forms: nplurals=2; plural=(n != 1);\n"
18181919-# Forms
2020-#: letters/forms.py:28
2121-msgid "Postal code (PLZ)"
2222-msgstr "Postleitzahl (PLZ)"
1919+#: letters/admin.py:75
2020+msgid "Mandate Details"
2121+msgstr "Mandatsdetails"
23222424-#: letters/forms.py:29
2525-#, fuzzy
2626-#| msgid "Use your PLZ to narrow down representatives from your constituency."
2727-msgid "Use your PLZ to narrow down representatives from your parliament."
2828-msgstr ""
2929-"Verwenden Sie Ihre PLZ, um Abgeordnete aus Ihrem Wahlkreis einzugrenzen."
2323+#: letters/admin.py:78
2424+msgid "Focus Areas"
2525+msgstr "Schwerpunktbereiche"
30263131-#: letters/forms.py:30
3232-msgid "e.g. 10115"
3333-msgstr "z.B. 10115"
2727+#: letters/admin.py:81 letters/admin.py:95
2828+msgid "Photo"
2929+msgstr "Foto"
34303535-#: letters/forms.py:35
3636-msgid "Comma-separated tags (e.g., \"climate, transport, education\")"
3737-msgstr "Komma-getrennte Schlagwรถrter (z.B. \"Klima, Verkehr, Bildung\")"
3131+#: letters/admin.py:85
3232+msgid "Metadata"
3333+msgstr "Metadaten"
38343939-#: letters/forms.py:36
4040-msgid "climate, transport, education"
4141-msgstr "Klima, Verkehr, Bildung"
3535+#: letters/admin.py:94
3636+msgid "No photo"
3737+msgstr "Kein Foto"
3838+3939+#: letters/admin.py:167
4040+msgid "Topic Areas"
4141+msgstr "Themenbereiche"
4242+4343+#: letters/forms.py:25
4444+msgid ""
4545+"An account with this email already exists. If you registered before, please "
4646+"check your inbox for the activation link or reset your password."
4747+msgstr ""
4848+"Ein Konto mit dieser E-Mail-Adresse existiert bereits. Falls Sie sich zuvor "
4949+"registriert haben, prรผfen Sie Ihren Posteingang auf den Aktivierungslink oder "
5050+"setzen Sie Ihr Passwort zurรผck."
42514343-#: letters/forms.py:43
5252+#: letters/forms.py:37
4453msgid "Title"
4554msgstr "Titel"
46554747-#: letters/forms.py:44
5656+#: letters/forms.py:38
4857msgid "Letter Body"
4958msgstr "Brieftext"
50595151-#: letters/forms.py:45
5252-#, fuzzy
5353-#| msgid "To Representative:"
6060+#: letters/forms.py:39
5461msgid "To Representative"
5555-msgstr "An Abgeordnete:"
6262+msgstr "An Abgeordnete"
56635757-#: letters/forms.py:48
6464+#: letters/forms.py:42
5865msgid "Describe your concern briefly"
5966msgstr "Beschreiben Sie Ihr Anliegen kurz"
60676161-#: letters/forms.py:49
6262-msgid "Write your letter here"
6363-msgstr "Schreiben Sie hier Ihren Brief"
6868+#: letters/forms.py:43
6969+msgid ""
7070+"Write your letter here. Markdown formatting (e.g. **bold**, _italic_) is "
7171+"supported."
7272+msgstr ""
7373+"Schreiben Sie hier Ihren Brief. Markdown-Formatierung (z.B. **fett**, _kursiv_) "
7474+"wird unterstรผtzt."
64756565-#: letters/forms.py:52
7676+#: letters/forms.py:46
6677msgid "Letter title"
6778msgstr "Brieftitel"
68796969-#: letters/forms.py:56
8080+#: letters/forms.py:50
7081msgid "Write your letter here..."
7182msgstr "Schreiben Sie hier Ihren Brief..."
72837373-#: letters/forms.py:156
8484+#: letters/forms.py:110
7485msgid "Comment (optional)"
7586msgstr "Kommentar (optional)"
76877777-#: letters/forms.py:159
8888+#: letters/forms.py:113
7889msgid "Add a personal note to your signature"
7990msgstr "Fรผgen Sie Ihrer Unterschrift eine persรถnliche Notiz hinzu"
80918181-#: letters/forms.py:165
9292+#: letters/forms.py:119
8293msgid "Optional: Add your comment..."
8394msgstr "Optional: Fรผgen Sie Ihren Kommentar hinzu..."
84958585-#: letters/forms.py:177
9696+#: letters/forms.py:131
8697msgid "Reason"
8798msgstr "Grund"
88998989-#: letters/forms.py:178
100100+#: letters/forms.py:132
90101msgid "Description"
91102msgstr "Beschreibung"
921039393-#: letters/forms.py:181
104104+#: letters/forms.py:135
94105msgid "Please provide details about why you are reporting this letter"
95106msgstr "Bitte geben Sie Details an, warum Sie diesen Brief melden"
961079797-#: letters/forms.py:188
108108+#: letters/forms.py:142
98109msgid "Please describe the issue..."
99110msgstr "Bitte beschreiben Sie das Problem..."
100111101101-#: letters/forms.py:198 letters/templates/letters/letter_list.html:19
112112+#: letters/forms.py:152 letters/templates/letters/letter_list.html:19
102113msgid "Search"
103114msgstr "Suchen"
104115105105-#: letters/forms.py:201 letters/templates/letters/letter_list.html:18
116116+#: letters/forms.py:155 letters/templates/letters/letter_list.html:18
106117msgid "Search letters..."
107118msgstr "Briefe suchen..."
108119109109-#: letters/forms.py:207
120120+#: letters/forms.py:161
110121msgid "Tag"
111122msgstr "Schlagwort"
112123113113-#: letters/forms.py:210
124124+#: letters/forms.py:164
114125msgid "Filter by tag..."
115126msgstr "Nach Schlagwort filtern..."
116127128128+#: letters/forms.py:180
129129+msgid "Bundestag constituency"
130130+msgstr "Bundestags-Wahlkreis"
131131+132132+#: letters/forms.py:181
133133+msgid "Pick your Bundestag direct mandate constituency (Wahlkreis)."
134134+msgstr "Wรคhlen Sie Ihren Bundestags-Direktwahlkreis (Wahlkreis)."
135135+136136+#: letters/forms.py:182 letters/forms.py:189
137137+msgid "Select constituency"
138138+msgstr "Wahlkreis auswรคhlen"
139139+140140+#: letters/forms.py:187
141141+msgid "State parliament constituency"
142142+msgstr "Landtags-Wahlkreis"
143143+144144+#: letters/forms.py:188
145145+msgid "Optionally pick your Landtag constituency if applicable."
146146+msgstr "Wรคhlen Sie optional Ihren Landtags-Wahlkreis, falls zutreffend."
147147+148148+#: letters/forms.py:240
149149+msgid "Please select at least one constituency to save your profile."
150150+msgstr "Bitte wรคhlen Sie mindestens einen Wahlkreis aus, um Ihr Profil zu speichern."
151151+152152+#: letters/forms.py:252
153153+msgid "Straรe und Hausnummer"
154154+msgstr "Straรe und Hausnummer"
155155+156156+#: letters/forms.py:255
157157+msgid "z.B. Unter den Linden 77"
158158+msgstr "z.B. Unter den Linden 77"
159159+160160+#: letters/forms.py:261
161161+msgid "Postleitzahl"
162162+msgstr "Postleitzahl"
163163+164164+#: letters/forms.py:264
165165+msgid "z.B. 10117"
166166+msgstr "z.B. 10117"
167167+168168+#: letters/forms.py:270
169169+msgid "Stadt"
170170+msgstr "Stadt"
171171+172172+#: letters/forms.py:273
173173+msgid "z.B. Berlin"
174174+msgstr "z.B. Berlin"
175175+176176+#: letters/forms.py:304
177177+msgid ""
178178+"Bitte geben Sie eine vollstรคndige Adresse ein (Straรe, PLZ und Stadt) oder "
179179+"lassen Sie alle Felder leer."
180180+msgstr ""
181181+"Bitte geben Sie eine vollstรคndige Adresse ein (Straรe, PLZ und Stadt) oder "
182182+"lassen Sie alle Felder leer."
183183+117184# Model choices - Constituency
118118-#: letters/models.py:13
185185+#: letters/models.py:15
119186msgid "European Union"
120187msgstr "Europรคische Union"
121188122122-#: letters/models.py:14
189189+#: letters/models.py:16
123190msgid "Federal"
124191msgstr "Bund"
125192126126-#: letters/models.py:15
193193+#: letters/models.py:17
127194msgid "State"
128195msgstr "Land"
129196130130-#: letters/models.py:16
197197+#: letters/models.py:18
131198msgid "Local"
132199msgstr "Kommune"
133200134134-#: letters/models.py:19
201201+#: letters/models.py:21
135202msgid "Name of the parliament"
136136-msgstr ""
203203+msgstr "Name des Parlaments"
137204138138-#: letters/models.py:23
205205+#: letters/models.py:25
139206msgid "e.g., 'Bundestag', 'Bayerischer Landtag', 'Gemeinderat Mรผnchen'"
140140-msgstr ""
207207+msgstr "z.B. 'Bundestag', 'Bayerischer Landtag', 'Gemeinderat Mรผnchen'"
141208142142-#: letters/models.py:27
209209+#: letters/models.py:29
143210msgid "Geographic identifier (state code, municipality code, etc.)"
144144-msgstr ""
211211+msgstr "Geografische Kennung (Bundeslandkรผrzel, Gemeindeschlรผssel, etc.)"
145212146146-#: letters/models.py:35
213213+#: letters/models.py:37
147214msgid "For hierarchical relationships (e.g., local within state)"
148148-msgstr ""
215215+msgstr "Fรผr hierarchische Beziehungen (z.B. Kommune innerhalb eines Bundeslandes)"
216216+217217+#: letters/models.py:43 letters/models.py:70 letters/models.py:105
218218+#: letters/models.py:165 letters/models.py:372 letters/models.py:421
219219+msgid "Last time this was synced from external API"
220220+msgstr "Zeitpunkt der letzten Synchronisierung von externer API"
149221150150-#: letters/models.py:44
222222+#: letters/models.py:47 letters/templates/letters/committee_detail.html:70
151223msgid "Parliament"
152152-msgstr ""
224224+msgstr "Parlament"
153225154154-#: letters/models.py:45
226226+#: letters/models.py:48
155227msgid "Parliaments"
156156-msgstr ""
157157-158158-#: letters/models.py:80
159159-#, fuzzy
160160-#| msgid "Federal"
161161-msgid "Federal district"
162162-msgstr "Bund"
163163-164164-#: letters/models.py:81
165165-msgid "State district"
166166-msgstr ""
167167-168168-#: letters/models.py:82
169169-msgid "Regional district"
170170-msgstr ""
228228+msgstr "Parlamente"
171229172172-#: letters/models.py:114
230230+#: letters/models.py:84
173231msgid "Federal electoral district"
174174-msgstr ""
232232+msgstr "Bundeswahlkreis"
175233176176-#: letters/models.py:115
234234+#: letters/models.py:85
177235msgid "Bundestag state list"
178178-msgstr ""
236236+msgstr "Bundestag-Landesliste"
179237180180-#: letters/models.py:116
238238+#: letters/models.py:86
181239msgid "Bundestag federal list"
182182-msgstr ""
240240+msgstr "Bundestag-Bundesliste"
183241184184-#: letters/models.py:117
242242+#: letters/models.py:87
185243msgid "State electoral district"
186186-msgstr ""
244244+msgstr "Landeswahlkreis"
187245188188-#: letters/models.py:118
246246+#: letters/models.py:88
189247msgid "State regional list"
190190-msgstr ""
248248+msgstr "Regionale Landesliste"
191249192192-#: letters/models.py:119
250250+#: letters/models.py:89
193251msgid "State wide list"
194194-msgstr ""
252252+msgstr "Landesweite Liste"
195253196196-#: letters/models.py:120
254254+#: letters/models.py:90
197255msgid "EU at large"
198198-msgstr ""
256256+msgstr "EU insgesamt"
199257200200-#: letters/models.py:153
258258+#: letters/models.py:119
201259msgid "Direct mandate"
202202-msgstr ""
260260+msgstr "Direktmandat"
203261204204-#: letters/models.py:154
262262+#: letters/models.py:120
205263msgid "State list mandate"
206206-msgstr ""
264264+msgstr "Landeslisten-Mandat"
207265208208-#: letters/models.py:155
266266+#: letters/models.py:121
209267msgid "State regional list mandate"
210210-msgstr ""
268268+msgstr "Regionales Landeslisten-Mandat"
211269212212-#: letters/models.py:156
270270+#: letters/models.py:122
213271msgid "Federal list mandate"
214214-msgstr ""
272272+msgstr "Bundeslisten-Mandat"
215273216216-#: letters/models.py:157
274274+#: letters/models.py:123
217275msgid "EU list mandate"
218218-msgstr ""
276276+msgstr "EU-Listen-Mandat"
219277220278# Model choices - Letter
221221-#: letters/models.py:422
279279+#: letters/models.py:444
222280msgid "Draft"
223281msgstr "Entwurf"
224282225225-#: letters/models.py:423
283283+#: letters/models.py:445
226284msgid "Published"
227285msgstr "Verรถffentlicht"
228286229229-#: letters/models.py:424
287287+#: letters/models.py:446
230288msgid "Flagged for Review"
231289msgstr "Zur รberprรผfung markiert"
232290233233-#: letters/models.py:425
291291+#: letters/models.py:447
234292msgid "Removed"
235293msgstr "Entfernt"
236294237237-#: letters/services.py:1149
295295+#: letters/models.py:487
296296+msgid "Deleted user"
297297+msgstr "Gelรถschter Benutzer"
298298+299299+#: letters/services.py:2451
238300#, python-format
239301msgid "Detected policy area: %(topic)s."
240240-msgstr ""
302302+msgstr "Erkannter Politikbereich: %(topic)s."
241303242242-#: letters/services.py:1154
243243-#, fuzzy, python-format
244244-#| msgid "Use your PLZ to narrow down representatives from your constituency."
304304+#: letters/services.py:2456
305305+#, python-format
245306msgid "Prioritising representatives for %(constituencies)s."
246246-msgstr ""
247247-"Verwenden Sie Ihre PLZ, um Abgeordnete aus Ihrem Wahlkreis einzugrenzen."
307307+msgstr "Priorisiere Abgeordnete fรผr %(constituencies)s."
248308249249-#: letters/services.py:1159
309309+#: letters/services.py:2461
250310#, python-format
251311msgid "Filtering by state %(state)s."
252252-msgstr ""
312312+msgstr "Filtere nach Bundesland %(state)s."
253313254254-#: letters/services.py:1163
314314+#: letters/services.py:2465
255315#, python-format
256316msgid ""
257317"Postal code %(plz)s had no direct match; showing broader representatives."
258318msgstr ""
319319+"Postleitzahl %(plz)s hatte keine direkte รbereinstimmung; zeige allgemeinere Abgeordnete."
259320260260-#: letters/services.py:1167
261261-#, fuzzy
262262-#| msgid "No external resources available for this representative."
321321+#: letters/services.py:2469
263322msgid "Showing generally relevant representatives."
264264-msgstr "Keine externen Ressourcen fรผr diesen Abgeordneten verfรผgbar."
323323+msgstr "Zeige allgemein relevante Abgeordnete."
324324+325325+#: letters/templates/letters/account_activation_invalid.html:4
326326+#: letters/templates/letters/account_activation_invalid.html:8
327327+msgid "Activation link invalid"
328328+msgstr "Aktivierungslink ungรผltig"
329329+330330+#: letters/templates/letters/account_activation_invalid.html:10
331331+msgid ""
332332+"We could not verify your activation link. It may have already been used or "
333333+"expired."
334334+msgstr ""
335335+"Wir konnten Ihren Aktivierungslink nicht verifizieren. Er wurde mรถglicherweise bereits "
336336+"verwendet oder ist abgelaufen."
337337+338338+#: letters/templates/letters/account_activation_invalid.html:13
339339+msgid ""
340340+"If you still cannot access your account, try registering again or contact "
341341+"support."
342342+msgstr ""
343343+"Falls Sie weiterhin nicht auf Ihr Konto zugreifen kรถnnen, versuchen Sie sich erneut zu "
344344+"registrieren oder kontaktieren Sie den Support."
345345+346346+#: letters/templates/letters/account_activation_invalid.html:15
347347+msgid "Register again"
348348+msgstr "Erneut registrieren"
349349+350350+#: letters/templates/letters/account_activation_sent.html:4
351351+msgid "Activate your account"
352352+msgstr "Aktivieren Sie Ihr Konto"
353353+354354+#: letters/templates/letters/account_activation_sent.html:8
355355+#: letters/templates/letters/password_reset_done.html:8
356356+msgid "Check your inbox"
357357+msgstr "Prรผfen Sie Ihren Posteingang"
358358+359359+#: letters/templates/letters/account_activation_sent.html:10
360360+msgid ""
361361+"We sent you an email with a confirmation link. Please click it to activate "
362362+"your account."
363363+msgstr ""
364364+"Wir haben Ihnen eine E-Mail mit einem Bestรคtigungslink gesendet. Bitte klicken Sie "
365365+"darauf, um Ihr Konto zu aktivieren."
366366+367367+#: letters/templates/letters/account_activation_sent.html:13
368368+msgid ""
369369+"If you do not receive the email within a few minutes, check your spam folder "
370370+"or try registering again."
371371+msgstr ""
372372+"Falls Sie die E-Mail nicht innerhalb weniger Minuten erhalten, prรผfen Sie Ihren "
373373+"Spam-Ordner oder versuchen Sie sich erneut zu registrieren."
374374+375375+#: letters/templates/letters/account_activation_sent.html:15
376376+msgid "Back to homepage"
377377+msgstr "Zurรผck zur Startseite"
378378+379379+#: letters/templates/letters/account_delete_confirm.html:4
380380+#: letters/templates/letters/profile.html:142
381381+msgid "Delete account"
382382+msgstr "Konto lรถschen"
383383+384384+#: letters/templates/letters/account_delete_confirm.html:8
385385+msgid "Delete your account"
386386+msgstr "Lรถschen Sie Ihr Konto"
387387+388388+#: letters/templates/letters/account_delete_confirm.html:10
389389+msgid ""
390390+"Deleting your account will remove your personal data and signatures. Letters "
391391+"you have published stay online but are shown without your name."
392392+msgstr ""
393393+"Das Lรถschen Ihres Kontos entfernt Ihre persรถnlichen Daten und Unterschriften. Von Ihnen "
394394+"verรถffentlichte Briefe bleiben online, werden aber ohne Ihren Namen angezeigt."
395395+396396+#: letters/templates/letters/account_delete_confirm.html:14
397397+msgid "Yes, delete my account"
398398+msgstr "Ja, mein Konto lรถschen"
399399+400400+#: letters/templates/letters/account_delete_confirm.html:15
401401+#: letters/templates/letters/letter_form.html:61
402402+msgid "Cancel"
403403+msgstr "Abbrechen"
265404266405# Navigation
267267-#: letters/templates/letters/base.html:124
406406+#: letters/templates/letters/base.html:140
268407msgid "Letters"
269408msgstr "Briefe"
270409271271-#: letters/templates/letters/base.html:126
272272-#: letters/templates/letters/representative_detail.html:196
410410+#: letters/templates/letters/base.html:141
411411+msgid "Competencies"
412412+msgstr "Kompetenzen"
413413+414414+#: letters/templates/letters/base.html:143
415415+#: letters/templates/letters/representative_detail.html:149
273416msgid "Write Letter"
274417msgstr "Brief schreiben"
275418276276-#: letters/templates/letters/base.html:127
419419+#: letters/templates/letters/base.html:144
277420#: letters/templates/letters/profile.html:4
278421msgid "Profile"
279422msgstr "Profil"
280423281281-#: letters/templates/letters/base.html:128
424424+#: letters/templates/letters/base.html:145
282425msgid "Logout"
283426msgstr "Abmelden"
284427285285-#: letters/templates/letters/base.html:130
286286-#: letters/templates/letters/letter_detail.html:46
287287-#: letters/templates/letters/letter_detail.html:80
428428+#: letters/templates/letters/base.html:147
429429+#: letters/templates/letters/letter_detail.html:47
430430+#: letters/templates/letters/letter_detail.html:81
288431#: letters/templates/letters/login.html:4
289432#: letters/templates/letters/login.html:8
290433#: letters/templates/letters/login.html:33
291434msgid "Login"
292435msgstr "Anmelden"
293436294294-#: letters/templates/letters/base.html:131
437437+#: letters/templates/letters/base.html:148
295438#: letters/templates/letters/register.html:4
296439#: letters/templates/letters/register.html:8
297297-#: letters/templates/letters/register.html:65
440440+#: letters/templates/letters/register.html:66
298441msgid "Register"
299442msgstr "Registrieren"
300443301301-#: letters/templates/letters/base.html:134
444444+#: letters/templates/letters/base.html:151
302445msgid "Admin"
303446msgstr "Admin"
304447448448+#: letters/templates/letters/base.html:157
449449+msgid "Select language"
450450+msgstr "Sprache auswรคhlen"
451451+305452# Footer
306306-#: letters/templates/letters/base.html:154
453453+#: letters/templates/letters/base.html:182
307454msgid "Empowering citizens to write to their representatives"
308455msgstr "Bรผrgern ermรถglichen, an ihre Abgeordneten zu schreiben"
309456457457+#: letters/templates/letters/committee_detail.html:22
458458+msgid "Related Topics"
459459+msgstr "Verwandte Themen"
460460+461461+#: letters/templates/letters/committee_detail.html:36
462462+msgid "Members"
463463+msgstr "Mitglieder"
464464+465465+#: letters/templates/letters/committee_detail.html:46
466466+msgid "Role"
467467+msgstr "Rolle"
468468+469469+#: letters/templates/letters/committee_detail.html:48
470470+#: letters/templates/letters/representative_detail.html:61
471471+msgid "Active"
472472+msgstr "Aktiv"
473473+474474+#: letters/templates/letters/committee_detail.html:51
475475+#: letters/templates/letters/partials/representative_card.html:29
476476+msgid "Since"
477477+msgstr "Seit"
478478+479479+#: letters/templates/letters/committee_detail.html:58
480480+msgid "No members recorded for this committee."
481481+msgstr "Fรผr diesen Ausschuss sind keine Mitglieder verzeichnet."
482482+483483+#: letters/templates/letters/committee_detail.html:67
484484+msgid "Committee Info"
485485+msgstr "Ausschussinformationen"
486486+487487+#: letters/templates/letters/committee_detail.html:71
488488+msgid "Term"
489489+msgstr "Amtszeit"
490490+491491+#: letters/templates/letters/committee_detail.html:74
492492+#: letters/templates/letters/representative_detail.html:105
493493+msgid "View on Abgeordnetenwatch"
494494+msgstr "Auf Abgeordnetenwatch ansehen"
495495+310496#: letters/templates/letters/letter_detail.html:10
311497#: letters/templates/letters/partials/letter_card.html:5
312498msgid "By"
313499msgstr "Von"
314500315315-#: letters/templates/letters/letter_detail.html:11
316316-#: letters/templates/letters/partials/letter_card.html:6
317317-#: letters/templates/letters/profile.html:68
318318-msgid "To"
319319-msgstr "An"
320320-321321-#: letters/templates/letters/letter_detail.html:28
501501+#: letters/templates/letters/letter_detail.html:29
322502#, python-format
323503msgid "Signatures (%(counter)s)"
324504msgid_plural "Signatures (%(counter)s)"
325505msgstr[0] "Unterschrift (%(counter)s)"
326506msgstr[1] "Unterschriften (%(counter)s)"
327507328328-#: letters/templates/letters/letter_detail.html:30
329329-#, fuzzy, python-format
330330-#| msgid "<strong>%(counter)s</strong> constituent of %(constituency)s"
331331-#| msgid_plural "<strong>%(counter)s</strong> constituents of %(constituency)s"
508508+#: letters/templates/letters/letter_detail.html:31
509509+#, python-format
332510msgid "%(counter)s constituent of %(constituency_name)s"
333511msgid_plural "%(counter)s constituents of %(constituency_name)s"
334512msgstr[0] "%(counter)s Wรคhler aus %(constituency_name)s"
335513msgstr[1] "%(counter)s Wรคhler aus %(constituency_name)s"
336514337337-#: letters/templates/letters/letter_detail.html:31
338338-#, fuzzy, python-format
339339-#| msgid "%(counter)s verified"
515515+#: letters/templates/letters/letter_detail.html:32
516516+#, python-format
340517msgid "%(counter)s other verified"
341518msgid_plural "%(counter)s other verified"
342342-msgstr[0] "%(counter)s verifiziert"
343343-msgstr[1] "%(counter)s verifiziert"
519519+msgstr[0] "%(counter)s weitere verifiziert"
520520+msgstr[1] "%(counter)s weitere verifiziert"
344521345345-#: letters/templates/letters/letter_detail.html:32
522522+#: letters/templates/letters/letter_detail.html:33
346523#, python-format
347524msgid "%(counter)s unverified"
348525msgid_plural "%(counter)s unverified"
349526msgstr[0] "%(counter)s nicht verifiziert"
350527msgstr[1] "%(counter)s nicht verifiziert"
351528352352-#: letters/templates/letters/letter_detail.html:40
529529+#: letters/templates/letters/letter_detail.html:41
353530msgid "Sign this letter"
354531msgstr "Brief unterzeichnen"
355532356356-#: letters/templates/letters/letter_detail.html:43
533533+#: letters/templates/letters/letter_detail.html:44
357534msgid "You have signed this letter"
358535msgstr "Sie haben diesen Brief unterzeichnet"
359536360360-#: letters/templates/letters/letter_detail.html:46
361361-#, fuzzy
362362-#| msgid "Login to sign this letter"
537537+#: letters/templates/letters/letter_detail.html:47
363538msgid "to sign this letter"
364364-msgstr "Anmelden um zu unterzeichnen"
539539+msgstr "um diesen Brief zu unterzeichnen"
365540366366-#: letters/templates/letters/letter_detail.html:69
541541+#: letters/templates/letters/letter_detail.html:58
542542+msgid "โ Verified Constituent"
543543+msgstr "โ Verifizierter Wรคhler"
544544+545545+#: letters/templates/letters/letter_detail.html:60
546546+msgid "โ Verified"
547547+msgstr "โ Verifiziert"
548548+549549+#: letters/templates/letters/letter_detail.html:70
367550msgid "No signatures yet. Be the first to sign!"
368551msgstr "Noch keine Unterschriften. Seien Sie der Erste!"
369552370370-#: letters/templates/letters/letter_detail.html:74
371371-#: letters/templates/letters/letter_detail.html:78
553553+#: letters/templates/letters/letter_detail.html:75
554554+#: letters/templates/letters/letter_detail.html:79
372555msgid "Report this letter"
373556msgstr "Brief melden"
374557375375-#: letters/templates/letters/letter_detail.html:75
558558+#: letters/templates/letters/letter_detail.html:76
376559msgid "If you believe this letter violates our guidelines, please report it."
377377-msgstr ""
560560+msgstr "Falls Sie glauben, dass dieser Brief gegen unsere Richtlinien verstรถรt, melden Sie ihn bitte."
378561379379-#: letters/templates/letters/letter_detail.html:80
380380-#, fuzzy
381381-#| msgid "Report this letter"
562562+#: letters/templates/letters/letter_detail.html:81
382563msgid "to report this letter"
383383-msgstr "Brief melden"
564564+msgstr "um diesen Brief zu melden"
384565385385-#: letters/templates/letters/letter_detail.html:85
566566+#: letters/templates/letters/letter_detail.html:86
386567msgid "Back to all letters"
387568msgstr "Zurรผck zu allen Briefen"
388569389570#: letters/templates/letters/letter_form.html:4
390390-#: letters/templates/letters/representative_detail.html:190
571571+#: letters/templates/letters/representative_detail.html:143
391572msgid "Write a Letter"
392573msgstr "Brief schreiben"
393574394575# Letter form
395395-#: letters/templates/letters/letter_form.html:11
576576+#: letters/templates/letters/letter_form.html:10
396577msgid "Write an Open Letter"
397578msgstr "Einen offenen Brief schreiben"
398579399399-#: letters/templates/letters/letter_form.html:13
580580+#: letters/templates/letters/letter_form.html:12
400581msgid ""
401401-"Write an open letter to a German political representative. Your letter will "
402402-"be published publicly and others can sign it."
582582+"Write an open letter to a political representative. Your letter will be "
583583+"published publicly so others can read and sign it."
403584msgstr ""
404404-"Schreiben Sie einen offenen Brief an einen deutschen Abgeordneten. Ihr Brief "
405405-"wird รถffentlich verรถffentlicht und andere kรถnnen ihn unterzeichnen."
585585+"Schreiben Sie einen offenen Brief an einen Abgeordneten. Ihr Brief wird "
586586+"รถffentlich verรถffentlicht, damit andere ihn lesen und unterzeichnen kรถnnen."
587587+588588+#: letters/templates/letters/letter_form.html:16
589589+msgid "Before you write"
590590+msgstr "Bevor Sie schreiben"
591591+592592+#: letters/templates/letters/letter_form.html:18
593593+msgid "Be thoughtful but feel free to be critical."
594594+msgstr "Seien Sie nachdenklich, aber scheuen Sie sich nicht, kritisch zu sein."
595595+596596+#: letters/templates/letters/letter_form.html:19
597597+msgid "Representatives are humans tooโstay respectful."
598598+msgstr "Abgeordnete sind auch Menschen โ bleiben Sie respektvoll."
406599407600#: letters/templates/letters/letter_form.html:20
601601+msgid "Keep your arguments clear and concise."
602602+msgstr "Halten Sie Ihre Argumente klar und prรคgnant."
603603+604604+#: letters/templates/letters/letter_form.html:21
605605+msgid "No insults or hate speech."
606606+msgstr "Keine Beleidigungen oder Hassrede."
607607+608608+#: letters/templates/letters/letter_form.html:22
609609+msgid "Stay within the bounds of the Grundgesetz when making demands."
610610+msgstr "Bleiben Sie bei Forderungen im Rahmen des Grundgesetzes."
611611+612612+#: letters/templates/letters/letter_form.html:30
408613msgid "Title:"
409614msgstr "Titel:"
410615411411-#: letters/templates/letters/letter_form.html:26
616616+#: letters/templates/letters/letter_form.html:36
412617msgid ""
413413-"Describe your concern. We'll suggest the right representatives based on your "
414414-"title."
415415-msgstr ""
416416-"Beschreiben Sie Ihr Anliegen. Wir schlagen Ihnen passende Abgeordnete "
417417-"basierend auf Ihrem Titel vor."
418418-419419-#: letters/templates/letters/letter_form.html:31
420420-msgid "Your postal code (PLZ):"
421421-msgstr "Ihre Postleitzahl (PLZ):"
422422-423423-#: letters/templates/letters/letter_form.html:37
424424-msgid "We'll use this PLZ to highlight representatives from your constituency."
618618+"Describe your concern in a sentence; we'll use it to suggest representatives."
425619msgstr ""
426426-"Wir verwenden diese PLZ, um Abgeordnete aus Ihrem Wahlkreis hervorzuheben."
620620+"Beschreiben Sie Ihr Anliegen in einem Satz; wir verwenden ihn, um Ihnen Abgeordnete "
621621+"vorzuschlagen."
427622428428-#: letters/templates/letters/letter_form.html:45
623623+#: letters/templates/letters/letter_form.html:41
429624msgid "To Representative:"
430625msgstr "An Abgeordnete:"
431626432432-#: letters/templates/letters/letter_form.html:51
433433-msgid "Or select from suggestions on the right โ"
434434-msgstr "Oder wรคhlen Sie aus den Vorschlรคgen rechts โ"
627627+#: letters/templates/letters/letter_form.html:47
628628+msgid ""
629629+"Already know who to address? Pick them here. Otherwise, use the suggestions "
630630+"below."
631631+msgstr ""
632632+"Wissen Sie bereits, wen Sie ansprechen mรถchten? Wรคhlen Sie hier aus. Andernfalls nutzen "
633633+"Sie die Vorschlรคge unten."
435634436436-#: letters/templates/letters/letter_form.html:56
635635+#: letters/templates/letters/letter_form.html:53
437636msgid "Letter Body:"
438637msgstr "Brieftext:"
439638440440-#: letters/templates/letters/letter_form.html:64
441441-msgid "Tags (optional):"
442442-msgstr "Schlagwรถrter (optional):"
443443-444444-#: letters/templates/letters/letter_form.html:71
639639+#: letters/templates/letters/letter_form.html:60
445640msgid "Publish Letter"
446641msgstr "Brief verรถffentlichen"
447642448448-#: letters/templates/letters/letter_form.html:72
449449-msgid "Cancel"
450450-msgstr "Abbrechen"
451451-452452-#: letters/templates/letters/letter_form.html:81
643643+#: letters/templates/letters/letter_form.html:67
453644msgid "Smart Suggestions"
454645msgstr "Intelligente Vorschlรคge"
455646456456-#: letters/templates/letters/letter_form.html:83
457457-#, fuzzy
458458-#| msgid ""
459459-#| "Type your letter title and we'll help you find the right representative "
460460-#| "and show similar letters."
647647+#: letters/templates/letters/letter_form.html:69
461648msgid ""
462462-"Add a title and your PLZ to see tailored representatives, tags, and similar "
463463-"letters."
649649+"Type your title and we'll use your verified profile to suggest "
650650+"representatives, topics, and related letters."
464651msgstr ""
465465-"Geben Sie Ihren Brieftitel ein und wir helfen Ihnen, den richtigen "
466466-"Abgeordneten zu finden und zeigen รคhnliche Briefe."
652652+"Geben Sie Ihren Titel ein und wir verwenden Ihr verifiziertes Profil, um Ihnen "
653653+"Abgeordnete, Themen und verwandte Briefe vorzuschlagen."
467654468468-#: letters/templates/letters/letter_form.html:98
655655+#: letters/templates/letters/letter_form.html:81
469656msgid "Loading..."
470657msgstr "Lรคdt..."
471658472472-#: letters/templates/letters/letter_form.html:100
659659+#: letters/templates/letters/letter_form.html:83
473660msgid "Analyzing your title..."
474661msgstr "Analysiere Ihren Titel..."
475662···510697msgid "Popular tags:"
511698msgstr "Beliebte Schlagwรถrter:"
512699700700+#: letters/templates/letters/letter_list.html:41
701701+msgid "Previous"
702702+msgstr "Zurรผck"
703703+704704+#: letters/templates/letters/letter_list.html:43
705705+#, python-format
706706+msgid "Page %(page)s of %(total)s"
707707+msgstr "Seite %(page)s von %(total)s"
708708+709709+#: letters/templates/letters/letter_list.html:45
710710+msgid "Next"
711711+msgstr "Weiter"
712712+713713+#: letters/templates/letters/letter_list.html:51
714714+msgid "No letters found."
715715+msgstr "Keine Briefe gefunden."
716716+717717+#: letters/templates/letters/letter_list.html:51
718718+msgid "Be the first to write one!"
719719+msgstr "Schreiben Sie den ersten!"
720720+513721# Login page
514722#: letters/templates/letters/login.html:14
515515-#: letters/templates/letters/register.html:14
723723+#: letters/templates/letters/register.html:15
516724msgid "Username:"
517725msgstr "Benutzername:"
518726519727#: letters/templates/letters/login.html:22
520520-#: letters/templates/letters/register.html:46
728728+#: letters/templates/letters/register.html:47
521729msgid "Password:"
522730msgstr "Passwort:"
523731524732#: letters/templates/letters/login.html:37
733733+msgid "Forgot your password?"
734734+msgstr "Passwort vergessen?"
735735+736736+#: letters/templates/letters/login.html:41
525737msgid "Don't have an account?"
526738msgstr "Noch kein Konto?"
527739528528-#: letters/templates/letters/login.html:37
740740+#: letters/templates/letters/login.html:41
529741msgid "Register here"
530742msgstr "Hier registrieren"
531743744744+#: letters/templates/letters/partials/letter_card.html:6
745745+msgid "To"
746746+msgstr "An"
747747+532748# Plurals for signatures
533749#: letters/templates/letters/partials/letter_card.html:20
534534-#: letters/templates/letters/partials/suggestions.html:126
535750#, python-format
536751msgid "%(counter)s signature"
537752msgid_plural "%(counter)s signatures"
···539754msgstr[1] "%(counter)s Unterschriften"
540755541756#: letters/templates/letters/partials/letter_card.html:20
542542-#, fuzzy, python-format
543543-#| msgid "%(counter)s verified"
757757+#, python-format
544758msgid "%(counter)s verified"
545759msgid_plural "%(counter)s verified"
546760msgstr[0] "%(counter)s verifiziert"
547761msgstr[1] "%(counter)s verifiziert"
548762763763+#: letters/templates/letters/partials/representative_card.html:21
764764+#: letters/templates/letters/partials/representative_card.html:23
765765+msgid "Constituency"
766766+msgstr "Wahlkreis"
767767+768768+#: letters/templates/letters/partials/representative_card.html:27
769769+msgid "Mandate"
770770+msgstr "Mandat"
771771+772772+#: letters/templates/letters/partials/representative_card.html:34
773773+msgid "Focus"
774774+msgstr "Schwerpunkt"
775775+776776+#: letters/templates/letters/partials/representative_card.html:34
777777+msgid "self-declared"
778778+msgstr "selbst erklรคrt"
779779+780780+#: letters/templates/letters/partials/representative_card.html:45
781781+msgid "Committees"
782782+msgstr "Ausschรผsse"
783783+784784+#: letters/templates/letters/partials/representative_card.html:57
785785+msgid "Email"
786786+msgstr "E-Mail"
787787+788788+#: letters/templates/letters/partials/representative_card.html:60
789789+msgid "Website"
790790+msgstr "Webseite"
791791+792792+#: letters/templates/letters/partials/representative_card.html:66
793793+msgid "View profile"
794794+msgstr "Profil ansehen"
795795+796796+#: letters/templates/letters/partials/suggestions.html:10
797797+msgid ""
798798+"We couldn't match you to a constituency yet. Update your profile "
799799+"verification to see local representatives."
800800+msgstr ""
801801+"Wir konnten Sie noch keinem Wahlkreis zuordnen. Aktualisieren Sie Ihre Profilverifizierung, "
802802+"um lokale Abgeordnete zu sehen."
803803+549804# Suggestions partial
550550-#: letters/templates/letters/partials/suggestions.html:11
805805+#: letters/templates/letters/partials/suggestions.html:16
551806msgid "Our Interpretation"
552807msgstr "Unsere Interpretation"
553808554554-#: letters/templates/letters/partials/suggestions.html:16
809809+#: letters/templates/letters/partials/suggestions.html:21
555810msgid "Topic:"
556811msgstr "Thema:"
557812558558-#: letters/templates/letters/partials/suggestions.html:23
813813+#: letters/templates/letters/partials/suggestions.html:28
559814msgid "No specific policy area detected. Try adding more keywords."
560815msgstr ""
561816"Kein spezifischer Politikbereich erkannt. Versuchen Sie, mehr "
562817"Schlรผsselwรถrter hinzuzufรผgen."
563818564564-#: letters/templates/letters/partials/suggestions.html:31
565565-msgid "Suggested Representatives"
566566-msgstr "Vorgeschlagene Abgeordnete"
819819+#: letters/templates/letters/partials/suggestions.html:37
820820+msgid "Related Keywords"
821821+msgstr "Verwandte Schlagwรถrter"
822822+823823+#: letters/templates/letters/partials/suggestions.html:51
824824+msgid "Your Direct Representatives"
825825+msgstr "Ihre direkten Abgeordneten"
826826+827827+#: letters/templates/letters/partials/suggestions.html:56
828828+msgid "These representatives directly represent your constituency:"
829829+msgstr "Diese Abgeordneten vertreten Ihren Wahlkreis direkt:"
567830568568-#: letters/templates/letters/partials/suggestions.html:37
831831+#: letters/templates/letters/partials/suggestions.html:67
832832+#: letters/templates/letters/partials/suggestions.html:102
833833+msgid "Select"
834834+msgstr "Auswรคhlen"
835835+836836+#: letters/templates/letters/partials/suggestions.html:81
837837+msgid "Topic Experts"
838838+msgstr "Themenexperten"
839839+840840+#: letters/templates/letters/partials/suggestions.html:86
569841#, python-format
570842msgid ""
571571-"Based on the topic \"%(topic)s\", we suggest contacting representatives from "
572572-"the %(level)s:"
843843+"These representatives are experts on \"%(topic)s\" based on their committee "
844844+"memberships:"
573845msgstr ""
574574-"Basierend auf dem Thema \"%(topic)s\" empfehlen wir, Abgeordnete des "
575575-"%(level)s zu kontaktieren:"
846846+"Diese Abgeordneten sind Experten fรผr \"%(topic)s\" basierend auf ihren "
847847+"Ausschussmitgliedschaften:"
576848577577-#: letters/templates/letters/partials/suggestions.html:51
578578-msgid "Constituency:"
579579-msgstr "Wahlkreis:"
580580-581581-#: letters/templates/letters/partials/suggestions.html:57
849849+#: letters/templates/letters/partials/suggestions.html:95
582850msgid "of"
583851msgstr "von"
584852585585-#: letters/templates/letters/partials/suggestions.html:61
586586-msgid "View profile"
587587-msgstr "Profil ansehen"
853853+#: letters/templates/letters/partials/suggestions.html:116
854854+msgid "Suggested Representatives"
855855+msgstr "Vorgeschlagene Abgeordnete"
588856589589-#: letters/templates/letters/partials/suggestions.html:66
590590-msgid "Select"
591591-msgstr "Auswรคhlen"
592592-593593-#: letters/templates/letters/partials/suggestions.html:73
857857+#: letters/templates/letters/partials/suggestions.html:119
594858msgid ""
595859"No representatives found. Representatives may need to be synced for this "
596860"governmental level."
···598862"Keine Abgeordneten gefunden. Abgeordnete mรผssen mรถglicherweise fรผr diese "
599863"Verwaltungsebene synchronisiert werden."
600864601601-#: letters/templates/letters/partials/suggestions.html:82
602602-#, fuzzy
603603-#| msgid "Suggested Representatives"
604604-msgid "Suggested Tags"
605605-msgstr "Vorgeschlagene Abgeordnete"
865865+#: letters/templates/letters/partials/suggestions.html:148
866866+msgid "Selected:"
867867+msgstr "Ausgewรคhlt:"
868868+869869+#: letters/templates/letters/password_reset_complete.html:4
870870+#: letters/templates/letters/password_reset_complete.html:8
871871+msgid "Password updated"
872872+msgstr "Passwort aktualisiert"
873873+874874+#: letters/templates/letters/password_reset_complete.html:9
875875+msgid "You can now sign in using your new password."
876876+msgstr "Sie kรถnnen sich jetzt mit Ihrem neuen Passwort anmelden."
877877+878878+#: letters/templates/letters/password_reset_complete.html:10
879879+msgid "Go to login"
880880+msgstr "Zur Anmeldung"
881881+882882+#: letters/templates/letters/password_reset_confirm.html:4
883883+#: letters/templates/letters/password_reset_confirm.html:9
884884+msgid "Choose a new password"
885885+msgstr "Wรคhlen Sie ein neues Passwort"
886886+887887+#: letters/templates/letters/password_reset_confirm.html:13
888888+msgid "New password"
889889+msgstr "Neues Passwort"
890890+891891+#: letters/templates/letters/password_reset_confirm.html:20
892892+msgid "Confirm password"
893893+msgstr "Passwort bestรคtigen"
894894+895895+#: letters/templates/letters/password_reset_confirm.html:26
896896+msgid "Update password"
897897+msgstr "Passwort aktualisieren"
606898607607-#: letters/templates/letters/partials/suggestions.html:85
608608-msgid "Click a tag to add it to your letter."
899899+#: letters/templates/letters/password_reset_confirm.html:29
900900+msgid "Reset link invalid"
901901+msgstr "Zurรผcksetzungslink ungรผltig"
902902+903903+#: letters/templates/letters/password_reset_confirm.html:30
904904+msgid "This password reset link is no longer valid. Please request a new one."
905905+msgstr "Dieser Passwort-Zurรผcksetzungslink ist nicht mehr gรผltig. Bitte fordern Sie einen neuen an."
906906+907907+#: letters/templates/letters/password_reset_confirm.html:31
908908+msgid "Request new link"
909909+msgstr "Neuen Link anfordern"
910910+911911+#: letters/templates/letters/password_reset_done.html:4
912912+msgid "Reset email sent"
913913+msgstr "Zurรผcksetzungs-E-Mail gesendet"
914914+915915+#: letters/templates/letters/password_reset_done.html:9
916916+msgid ""
917917+"If an account exists for that email address, we just sent you instructions "
918918+"to choose a new password."
609919msgstr ""
920920+"Falls ein Konto fรผr diese E-Mail-Adresse existiert, haben wir Ihnen gerade Anweisungen "
921921+"zum Festlegen eines neuen Passworts gesendet."
610922611611-#: letters/templates/letters/partials/suggestions.html:101
612612-msgid "Related Keywords"
613613-msgstr "Verwandte Schlagwรถrter"
923923+#: letters/templates/letters/password_reset_done.html:10
924924+msgid "The link will stay valid for a limited time."
925925+msgstr "Der Link bleibt fรผr eine begrenzte Zeit gรผltig."
614926615615-#: letters/templates/letters/partials/suggestions.html:115
616616-msgid "Similar Letters"
617617-msgstr "รhnliche Briefe"
927927+#: letters/templates/letters/password_reset_done.html:11
928928+msgid "Back to login"
929929+msgstr "Zurรผck zur Anmeldung"
618930619619-#: letters/templates/letters/partials/suggestions.html:118
620620-msgid "Others have written about similar topics:"
621621-msgstr "Andere haben รผber รคhnliche Themen geschrieben:"
931931+#: letters/templates/letters/password_reset_form.html:4
932932+msgid "Reset password"
933933+msgstr "Passwort zurรผcksetzen"
622934623623-#: letters/templates/letters/partials/suggestions.html:129
624624-#, fuzzy
625625-#| msgid "To"
626626-msgid "To:"
627627-msgstr "An"
935935+#: letters/templates/letters/password_reset_form.html:8
936936+msgid "Reset your password"
937937+msgstr "Setzen Sie Ihr Passwort zurรผck"
628938629629-#: letters/templates/letters/partials/suggestions.html:131
630630-msgid "by"
939939+#: letters/templates/letters/password_reset_form.html:9
940940+msgid ""
941941+"Enter the email address you used during registration. We will send you a "
942942+"link to create a new password."
631943msgstr ""
944944+"Geben Sie die E-Mail-Adresse ein, die Sie bei der Registrierung verwendet haben. Wir "
945945+"senden Ihnen einen Link zum Erstellen eines neuen Passworts."
632946633633-#: letters/templates/letters/partials/suggestions.html:163
634634-msgid "Selected:"
635635-msgstr "Ausgewรคhlt:"
947947+#: letters/templates/letters/password_reset_form.html:17
948948+msgid "Send reset link"
949949+msgstr "Zurรผcksetzungslink senden"
636950637951# Profile page
638638-#: letters/templates/letters/profile.html:8
952952+#: letters/templates/letters/profile.html:13
639953#, python-format
640954msgid "%(username)s's Profile"
641955msgstr "Profil von %(username)s"
642956643643-#: letters/templates/letters/profile.html:11
644644-msgid "Identity Verification"
645645-msgstr "Identitรคtsverifizierung"
957957+#: letters/templates/letters/profile.html:16
958958+msgid "Identity & Constituency"
959959+msgstr "Identitรคt & Wahlkreis"
646960647647-#: letters/templates/letters/profile.html:15
648648-msgid "Identity Verified"
649649-msgstr "Identitรคt verifiziert"
650650-651651-#: letters/templates/letters/profile.html:17
652652-msgid "Your signatures will be marked as verified constituent signatures."
653653-msgstr ""
654654-"Ihre Unterschriften werden als verifizierte Wรคhlerunterschriften markiert."
961961+#: letters/templates/letters/profile.html:19
962962+msgid "Status:"
963963+msgstr "Status:"
655964656965#: letters/templates/letters/profile.html:21
657657-#: letters/templates/letters/representative_detail.html:23
658658-msgid "Parliament:"
966966+msgid "Type:"
967967+msgstr "Typ:"
968968+969969+#: letters/templates/letters/profile.html:28
970970+msgid ""
971971+"You self-declared your constituency. Representatives will see your "
972972+"signatures as self-declared constituents."
659973msgstr ""
974974+"Sie haben Ihren Wahlkreis selbst angegeben. Abgeordnete werden Ihre Unterschriften als "
975975+"selbst angegebene Wรคhler sehen."
660976661661-#: letters/templates/letters/profile.html:27
662662-msgid "Verification Pending"
663663-msgstr "Verifizierung ausstehend"
977977+#: letters/templates/letters/profile.html:30
978978+msgid "Start third-party verification"
979979+msgstr "Drittanbieter-Verifizierung starten"
980980+981981+#: letters/templates/letters/profile.html:33
982982+msgid ""
983983+"Your identity was verified via a third-party provider. Signatures will "
984984+"appear as verified constituents."
985985+msgstr ""
986986+"Ihre Identitรคt wurde รผber einen Drittanbieter verifiziert. Unterschriften werden als "
987987+"verifizierte Wรคhler angezeigt."
664988665665-#: letters/templates/letters/profile.html:29
989989+#: letters/templates/letters/profile.html:38
666990msgid "Your verification is being processed."
667991msgstr "Ihre Verifizierung wird bearbeitet."
668992669669-#: letters/templates/letters/profile.html:31
993993+#: letters/templates/letters/profile.html:39
670994msgid "Complete Verification (Stub)"
671995msgstr "Verifizierung abschlieรen (Stub)"
672996673673-#: letters/templates/letters/profile.html:35
674674-msgid "Verification Failed"
675675-msgstr "Verifizierung fehlgeschlagen"
997997+#: letters/templates/letters/profile.html:43
998998+msgid "Verification failed. Please try again or contact support."
999999+msgstr "Verifizierung fehlgeschlagen. Bitte versuchen Sie es erneut oder kontaktieren Sie den Support."
6761000677677-#: letters/templates/letters/profile.html:37
678678-msgid "Please try again or contact support."
679679-msgstr "Bitte versuchen Sie es erneut oder kontaktieren Sie den Support."
10011001+#: letters/templates/letters/profile.html:48
10021002+msgid ""
10031003+"You can self-declare your constituency below or start a verification with a "
10041004+"trusted provider. Verified signatures carry more weight."
10051005+msgstr ""
10061006+"Sie kรถnnen Ihren Wahlkreis unten selbst angeben oder eine Verifizierung mit einem "
10071007+"vertrauenswรผrdigen Anbieter starten. Verifizierte Unterschriften haben mehr Gewicht."
6801008681681-#: letters/templates/letters/profile.html:43
10091009+#: letters/templates/letters/profile.html:50
10101010+msgid "Start Third-party Verification"
10111011+msgstr "Drittanbieter-Verifizierung starten"
10121012+10131013+#: letters/templates/letters/profile.html:55
10141014+msgid "Ihre Adresse"
10151015+msgstr "Ihre Adresse"
10161016+10171017+#: letters/templates/letters/profile.html:57
6821018msgid ""
683683-"Verify your identity to prove you're a constituent of the representatives "
684684-"you write to. Verified signatures carry more weight!"
10191019+"Geben Sie Ihre vollstรคndige Adresse ein, um prรคzise Wahlkreis- und "
10201020+"Abgeordnetenempfehlungen zu erhalten."
6851021msgstr ""
686686-"Verifizieren Sie Ihre Identitรคt, um zu beweisen, dass Sie Wรคhler der "
687687-"Abgeordneten sind, an die Sie schreiben. Verifizierte Unterschriften haben "
688688-"mehr Gewicht!"
10221022+"Geben Sie Ihre vollstรคndige Adresse ein, um prรคzise Wahlkreis- und "
10231023+"Abgeordnetenempfehlungen zu erhalten."
6891024690690-#: letters/templates/letters/profile.html:45
691691-msgid "Start Verification"
692692-msgstr "Verifizierung starten"
10251025+#: letters/templates/letters/profile.html:61
10261026+msgid "Gespeicherte Adresse:"
10271027+msgstr "Gespeicherte Adresse:"
10281028+10291029+#: letters/templates/letters/profile.html:83
10301030+msgid "Adresse speichern"
10311031+msgstr "Adresse speichern"
6931032694694-#: letters/templates/letters/profile.html:51
10331033+#: letters/templates/letters/profile.html:88
10341034+msgid "Self-declare your constituency"
10351035+msgstr "Geben Sie Ihren Wahlkreis selbst an"
10361036+10371037+#: letters/templates/letters/profile.html:90
10381038+msgid ""
10391039+"Select the constituencies you live in so we can prioritise the right "
10401040+"representatives."
10411041+msgstr ""
10421042+"Wรคhlen Sie die Wahlkreise aus, in denen Sie leben, damit wir die richtigen "
10431043+"Abgeordneten priorisieren kรถnnen."
10441044+10451045+#: letters/templates/letters/profile.html:109
10461046+msgid "Save constituencies"
10471047+msgstr "Wahlkreise speichern"
10481048+10491049+#: letters/templates/letters/profile.html:114
6951050msgid "Your Letters"
6961051msgstr "Ihre Briefe"
6971052698698-#: letters/templates/letters/profile.html:57
10531053+#: letters/templates/letters/profile.html:120
6991054msgid "You haven't written any letters yet."
7001055msgstr "Sie haben noch keine Briefe geschrieben."
7011056702702-#: letters/templates/letters/profile.html:57
10571057+#: letters/templates/letters/profile.html:120
7031058msgid "Write one now!"
7041059msgstr "Schreiben Sie jetzt einen!"
7051060706706-#: letters/templates/letters/profile.html:62
10611061+#: letters/templates/letters/profile.html:125
7071062msgid "Letters You've Signed"
7081063msgstr "Briefe, die Sie unterzeichnet haben"
7091064710710-# Letter detail page
711711-#: letters/templates/letters/profile.html:68
712712-msgid "Signed on"
713713-msgstr "Unterzeichnet am"
714714-715715-#: letters/templates/letters/profile.html:71
716716-msgid "Your comment:"
717717-msgstr "Ihr Kommentar:"
718718-719719-#: letters/templates/letters/profile.html:76
10651065+#: letters/templates/letters/profile.html:133
7201066msgid "You haven't signed any letters yet."
7211067msgstr "Sie haben noch keine Briefe unterzeichnet."
7221068723723-#: letters/templates/letters/profile.html:76
10691069+#: letters/templates/letters/profile.html:133
7241070msgid "Browse letters"
7251071msgstr "Briefe durchsuchen"
7261072727727-#: letters/templates/letters/register.html:22
728728-#: letters/templates/letters/representative_detail.html:56
10731073+#: letters/templates/letters/profile.html:138
10741074+msgid "Account"
10751075+msgstr "Konto"
10761076+10771077+#: letters/templates/letters/profile.html:140
10781078+msgid ""
10791079+"Need a fresh start? You can delete your account at any time. Your letters "
10801080+"stay visible but without your name."
10811081+msgstr ""
10821082+"Brauchen Sie einen Neuanfang? Sie kรถnnen Ihr Konto jederzeit lรถschen. Ihre Briefe "
10831083+"bleiben sichtbar, aber ohne Ihren Namen."
10841084+10851085+#: letters/templates/letters/register.html:9
10861086+msgid ""
10871087+"After registration we'll send you an email to confirm your address before "
10881088+"you can sign in."
10891089+msgstr ""
10901090+"Nach der Registrierung senden wir Ihnen eine E-Mail, um Ihre Adresse zu bestรคtigen, "
10911091+"bevor Sie sich anmelden kรถnnen."
10921092+10931093+#: letters/templates/letters/register.html:23
7291094msgid "Email:"
7301095msgstr "E-Mail:"
73110967321097# Register page
733733-#: letters/templates/letters/register.html:30
10981098+#: letters/templates/letters/register.html:31
7341099msgid "First Name (optional):"
7351100msgstr "Vorname (optional):"
7361101737737-#: letters/templates/letters/register.html:38
11021102+#: letters/templates/letters/register.html:39
7381103msgid "Last Name (optional):"
7391104msgstr "Nachname (optional):"
7401105741741-#: letters/templates/letters/register.html:54
11061106+#: letters/templates/letters/register.html:55
7421107msgid "Confirm Password:"
7431108msgstr "Passwort bestรคtigen:"
7441109745745-#: letters/templates/letters/register.html:69
11101110+#: letters/templates/letters/register.html:70
7461111msgid "Already have an account?"
7471112msgstr "Bereits ein Konto?"
7481113749749-#: letters/templates/letters/register.html:69
11141114+#: letters/templates/letters/register.html:70
7501115msgid "Login here"
7511116msgstr "Hier anmelden"
7521117753753-# Representative detail
7541118#: letters/templates/letters/representative_detail.html:19
755755-msgid "Party:"
756756-msgstr "Partei:"
757757-758758-#: letters/templates/letters/representative_detail.html:27
759759-msgid "Legislative Body:"
760760-msgstr "Parlament:"
761761-762762-#: letters/templates/letters/representative_detail.html:32
763763-msgid "Role:"
764764-msgstr "Rolle:"
765765-766766-#: letters/templates/letters/representative_detail.html:38
767767-msgid "Term:"
768768-msgstr "Amtszeit:"
769769-770770-#: letters/templates/letters/representative_detail.html:43
771771-msgid "Present"
772772-msgstr "Heute"
773773-774774-#: letters/templates/letters/representative_detail.html:47
775775-msgid "Status:"
776776-msgstr "Status:"
777777-778778-#: letters/templates/letters/representative_detail.html:49
779779-#: letters/templates/letters/representative_detail.html:98
780780-msgid "Active"
781781-msgstr "Aktiv"
11191119+msgid "รber"
11201120+msgstr "รber"
7821121783783-#: letters/templates/letters/representative_detail.html:51
784784-msgid "Inactive"
785785-msgstr "Inaktiv"
786786-787787-#: letters/templates/letters/representative_detail.html:62
788788-msgid "Website:"
789789-msgstr "Webseite:"
790790-791791-#: letters/templates/letters/representative_detail.html:75
11221122+#: letters/templates/letters/representative_detail.html:30
7921123msgid "Committee Memberships"
7931124msgstr "Ausschussmitgliedschaften"
7941125795795-#: letters/templates/letters/representative_detail.html:113
796796-msgid "Policy Competences"
797797-msgstr "Politische Kompetenzen"
798798-799799-#: letters/templates/letters/representative_detail.html:117
800800-msgid ""
801801-"Based on committee memberships, this representative works on the following "
802802-"policy areas:"
803803-msgstr ""
804804-"Basierend auf Ausschussmitgliedschaften arbeitet dieser Abgeordnete in "
805805-"folgenden Politikbereichen:"
806806-807807-#: letters/templates/letters/representative_detail.html:134
11261126+#: letters/templates/letters/representative_detail.html:75
8081127msgid "Open Letters"
8091128msgstr "Offene Briefe"
8101129811811-#: letters/templates/letters/representative_detail.html:142
11301130+#: letters/templates/letters/representative_detail.html:83
8121131msgid "No letters have been written to this representative yet."
8131132msgstr "An diesen Abgeordneten wurden noch keine Briefe geschrieben."
8141133815815-#: letters/templates/letters/representative_detail.html:144
11341134+#: letters/templates/letters/representative_detail.html:85
8161135msgid "Write the First Letter"
8171136msgstr "Ersten Brief schreiben"
8181137819819-#: letters/templates/letters/representative_detail.html:156
11381138+#: letters/templates/letters/representative_detail.html:95
8201139msgid "External Resources"
8211140msgstr "Externe Ressourcen"
8221141823823-#: letters/templates/letters/representative_detail.html:161
11421142+#: letters/templates/letters/representative_detail.html:100
8241143msgid "Abgeordnetenwatch Profile"
8251144msgstr "Abgeordnetenwatch-Profil"
8261145827827-#: letters/templates/letters/representative_detail.html:163
11461146+#: letters/templates/letters/representative_detail.html:102
8281147msgid ""
8291148"View voting record, questions, and detailed profile on Abgeordnetenwatch.de"
8301149msgstr ""
8311150"Abstimmungsverhalten, Fragen und detailliertes Profil auf Abgeordnetenwatch."
8321151"de ansehen"
8331152834834-#: letters/templates/letters/representative_detail.html:166
835835-msgid "View on Abgeordnetenwatch"
836836-msgstr "Auf Abgeordnetenwatch ansehen"
11531153+#: letters/templates/letters/representative_detail.html:112
11541154+msgid "Wikipedia Article"
11551155+msgstr "Wikipedia-Artikel"
8371156838838-#: letters/templates/letters/representative_detail.html:173
839839-msgid "Wikipedia Article (German)"
840840-msgstr "Wikipedia-Artikel (Deutsch)"
841841-842842-#: letters/templates/letters/representative_detail.html:175
11571157+#: letters/templates/letters/representative_detail.html:114
8431158msgid "Read more about this representative on Wikipedia"
8441159msgstr "Mehr รผber diesen Abgeordneten auf Wikipedia lesen"
8451160846846-#: letters/templates/letters/representative_detail.html:178
11611161+#: letters/templates/letters/representative_detail.html:117
8471162msgid "View on Wikipedia"
8481163msgstr "Auf Wikipedia ansehen"
8491164850850-#: letters/templates/letters/representative_detail.html:184
11651165+#: letters/templates/letters/representative_detail.html:123
8511166msgid "No external resources available for this representative."
8521167msgstr "Keine externen Ressourcen fรผr diesen Abgeordneten verfรผgbar."
8531168854854-#: letters/templates/letters/representative_detail.html:192
11691169+#: letters/templates/letters/representative_detail.html:130
11701170+msgid "Kontakt"
11711171+msgstr "Kontakt"
11721172+11731173+#: letters/templates/letters/representative_detail.html:145
8551174#, python-format
8561175msgid "Start a new open letter to %(name)s"
8571176msgstr "Einen neuen offenen Brief an %(name)s beginnen"
8581177859859-#: letters/templates/letters/representative_detail.html:200
11781178+#: letters/templates/letters/representative_detail.html:153
8601179msgid "Login to Write Letter"
8611180msgstr "Anmelden um Brief zu schreiben"
862118111821182+#: letters/views.py:52
11831183+msgid "Confirm your WriteThem.eu account"
11841184+msgstr "Bestรคtigen Sie Ihr WriteThem.eu-Konto"
11851185+8631186# Flash messages
864864-#: letters/views.py:158
11871187+#: letters/views.py:184
8651188msgid "Your letter has been published and your signature has been added!"
866866-msgstr ""
867867-"Ihr Brief wurde verรถffentlicht und Ihre Unterschrift wurde hinzugefรผgt!"
11891189+msgstr "Ihr Brief wurde verรถffentlicht und Ihre Unterschrift wurde hinzugefรผgt!"
8681190869869-#: letters/views.py:171
11911191+#: letters/views.py:197
8701192msgid "You have already signed this letter."
8711193msgstr "Sie haben diesen Brief bereits unterzeichnet."
8721194873873-#: letters/views.py:181
11951195+#: letters/views.py:207
8741196msgid "Your signature has been added!"
8751197msgstr "Ihre Unterschrift wurde hinzugefรผgt!"
8761198877877-#: letters/views.py:199
11991199+#: letters/views.py:225
8781200msgid "Thank you for your report. Our team will review it."
8791201msgstr "Vielen Dank fรผr Ihre Meldung. Unser Team wird sie รผberprรผfen."
8801202881881-#: letters/views.py:226
882882-#, python-format
883883-msgid "Welcome, %(username)s! Your account has been created."
884884-msgstr "Willkommen, %(username)s! Ihr Konto wurde erstellt."
12031203+#: letters/views.py:259
12041204+msgid ""
12051205+"Please confirm your email address. We sent you a link to activate your "
12061206+"account."
12071207+msgstr ""
12081208+"Bitte bestรคtigen Sie Ihre E-Mail-Adresse. Wir haben Ihnen einen Link zum Aktivieren "
12091209+"Ihres Kontos gesendet."
8851210886886-#~ msgid "Previous"
887887-#~ msgstr "Zurรผck"
12111211+#: letters/views.py:289
12121212+msgid "Your account has been activated. You can now log in."
12131213+msgstr "Ihr Konto wurde aktiviert. Sie kรถnnen sich jetzt anmelden."
12141214+12151215+#: letters/views.py:292
12161216+msgid "Your account is already active."
12171217+msgstr "Ihr Konto ist bereits aktiv."
8881218889889-#~ msgid "Next"
890890-#~ msgstr "Weiter"
12191219+#: letters/views.py:347
12201220+msgid "Ihre Adresse wurde gespeichert."
12211221+msgstr "Ihre Adresse wurde gespeichert."
12221222+12231223+#: letters/views.py:363
12241224+msgid "Your constituency information has been updated."
12251225+msgstr "Ihre Wahlkreisinformationen wurden aktualisiert."
12261226+12271227+#: letters/views.py:391
12281228+msgid ""
12291229+"Your account has been deleted. Your published letters remain available to "
12301230+"the public."
12311231+msgstr ""
12321232+"Ihr Konto wurde gelรถscht. Ihre verรถffentlichten Briefe bleiben fรผr die "
12331233+"รffentlichkeit verfรผgbar."
12341234+12351235+# Forms
12361236+#~ msgid "Postal code (PLZ)"
12371237+#~ msgstr "Postleitzahl (PLZ)"
12381238+12391239+#, fuzzy
12401240+#~| msgid "Use your PLZ to narrow down representatives from your constituency."
12411241+#~ msgid "Use your PLZ to narrow down representatives from your parliament."
12421242+#~ msgstr ""
12431243+#~ "Verwenden Sie Ihre PLZ, um Abgeordnete aus Ihrem Wahlkreis einzugrenzen."
12441244+12451245+#~ msgid "Comma-separated tags (e.g., \"climate, transport, education\")"
12461246+#~ msgstr "Komma-getrennte Schlagwรถrter (z.B. \"Klima, Verkehr, Bildung\")"
12471247+12481248+#~ msgid "climate, transport, education"
12491249+#~ msgstr "Klima, Verkehr, Bildung"
12501250+12511251+#~ msgid "Write your letter here"
12521252+#~ msgstr "Schreiben Sie hier Ihren Brief"
12531253+12541254+#, fuzzy
12551255+#~| msgid "Federal"
12561256+#~ msgid "Federal district"
12571257+#~ msgstr "Bund"
12581258+12591259+#~ msgid "Your postal code (PLZ):"
12601260+#~ msgstr "Ihre Postleitzahl (PLZ):"
12611261+12621262+#~ msgid "Or select from suggestions on the right โ"
12631263+#~ msgstr "Oder wรคhlen Sie aus den Vorschlรคgen rechts โ"
12641264+12651265+#~ msgid "Tags (optional):"
12661266+#~ msgstr "Schlagwรถrter (optional):"
89112678921268#, python-format
893893-#~ msgid "Page %(page)s of %(total)s"
894894-#~ msgstr "Seite %(page)s von %(total)s"
12691269+#~ msgid ""
12701270+#~ "Based on the topic \"%(topic)s\", we suggest contacting representatives "
12711271+#~ "from the %(level)s:"
12721272+#~ msgstr ""
12731273+#~ "Basierend auf dem Thema \"%(topic)s\" empfehlen wir, Abgeordnete des "
12741274+#~ "%(level)s zu kontaktieren:"
12751275+12761276+#, fuzzy
12771277+#~| msgid "Suggested Representatives"
12781278+#~ msgid "Suggested Tags"
12791279+#~ msgstr "Vorgeschlagene Abgeordnete"
12801280+12811281+#~ msgid "Similar Letters"
12821282+#~ msgstr "รhnliche Briefe"
12831283+12841284+#~ msgid "Others have written about similar topics:"
12851285+#~ msgstr "Andere haben รผber รคhnliche Themen geschrieben:"
8951286896896-#~ msgid "No letters found."
897897-#~ msgstr "Keine Briefe gefunden."
12871287+#, fuzzy
12881288+#~| msgid "To"
12891289+#~ msgid "To:"
12901290+#~ msgstr "An"
12911291+12921292+#~ msgid "Identity Verification"
12931293+#~ msgstr "Identitรคtsverifizierung"
8981294899899-#~ msgid "Be the first to write one!"
900900-#~ msgstr "Schreiben Sie den ersten!"
12951295+#~ msgid "Your signatures will be marked as verified constituent signatures."
12961296+#~ msgstr ""
12971297+#~ "Ihre Unterschriften werden als verifizierte Wรคhlerunterschriften markiert."
12981298+12991299+#~ msgid "Verification Pending"
13001300+#~ msgstr "Verifizierung ausstehend"
13011301+13021302+#~ msgid "Verification Failed"
13031303+#~ msgstr "Verifizierung fehlgeschlagen"
13041304+13051305+# Letter detail page
13061306+#~ msgid "Signed on"
13071307+#~ msgstr "Unterzeichnet am"
13081308+13091309+#~ msgid "Your comment:"
13101310+#~ msgstr "Ihr Kommentar:"
13111311+13121312+# Representative detail
13131313+#~ msgid "Party:"
13141314+#~ msgstr "Partei:"
13151315+13161316+#~ msgid "Legislative Body:"
13171317+#~ msgstr "Parlament:"
13181318+13191319+#~ msgid "Present"
13201320+#~ msgstr "Heute"
13211321+13221322+#~ msgid "Inactive"
13231323+#~ msgstr "Inaktiv"
13241324+13251325+#~ msgid ""
13261326+#~ "Based on committee memberships, this representative works on the "
13271327+#~ "following policy areas:"
13281328+#~ msgstr ""
13291329+#~ "Basierend auf Ausschussmitgliedschaften arbeitet dieser Abgeordnete in "
13301330+#~ "folgenden Politikbereichen:"
13311331+13321332+#, python-format
13331333+#~ msgid "Welcome, %(username)s! Your account has been created."
13341334+#~ msgstr "Willkommen, %(username)s! Ihr Konto wurde erstellt."
90113359021336#, python-format
9031337#~ msgid "<strong>%(counter)s</strong> other verified"
···91513499161350#~ msgid "Committee Memberships:"
9171351#~ msgstr "Ausschussmitgliedschaften:"
918918-919919-#~ msgid "Policy Areas:"
920920-#~ msgstr "Politikbereiche:"
92113529221353# Services explanations
9231354#~ msgid "No matching policy areas found. Please try different keywords."
website/locale/en/LC_MESSAGES/.gitkeep
This is a binary file and will not be displayed.
+1218
website/locale/en/LC_MESSAGES/django.po
···11+# SOME DESCRIPTIVE TITLE.
22+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
33+# This file is distributed under the same license as the PACKAGE package.
44+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
55+#
66+#, fuzzy
77+msgid ""
88+msgstr ""
99+"Project-Id-Version: PACKAGE VERSION\n"
1010+"Report-Msgid-Bugs-To: \n"
1111+"POT-Creation-Date: 2025-10-15 00:28+0200\n"
1212+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
1313+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
1414+"Language-Team: LANGUAGE <LL@li.org>\n"
1515+"Language: \n"
1616+"MIME-Version: 1.0\n"
1717+"Content-Type: text/plain; charset=UTF-8\n"
1818+"Content-Transfer-Encoding: 8bit\n"
1919+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
2020+2121+#: letters/admin.py:75
2222+msgid "Mandate Details"
2323+msgstr "Mandate Details"
2424+2525+#: letters/admin.py:78
2626+msgid "Focus Areas"
2727+msgstr "Focus Areas"
2828+2929+#: letters/admin.py:81 letters/admin.py:95
3030+msgid "Photo"
3131+msgstr "Photo"
3232+3333+#: letters/admin.py:85
3434+msgid "Metadata"
3535+msgstr "Metadata"
3636+3737+#: letters/admin.py:94
3838+msgid "No photo"
3939+msgstr "No photo"
4040+4141+#: letters/admin.py:167
4242+msgid "Topic Areas"
4343+msgstr "Topic Areas"
4444+4545+#: letters/forms.py:25
4646+msgid ""
4747+"An account with this email already exists. If you registered before, please "
4848+"check your inbox for the activation link or reset your password."
4949+msgstr ""
5050+"An account with this email already exists. If you registered before, please "
5151+"check your inbox for the activation link or reset your password."
5252+5353+#: letters/forms.py:37
5454+msgid "Title"
5555+msgstr "Title"
5656+5757+#: letters/forms.py:38
5858+msgid "Letter Body"
5959+msgstr "Letter Body"
6060+6161+#: letters/forms.py:39
6262+msgid "To Representative"
6363+msgstr "To Representative"
6464+6565+#: letters/forms.py:42
6666+msgid "Describe your concern briefly"
6767+msgstr "Describe your concern briefly"
6868+6969+#: letters/forms.py:43
7070+msgid ""
7171+"Write your letter here. Markdown formatting (e.g. **bold**, _italic_) is "
7272+"supported."
7373+msgstr ""
7474+"Write your letter here. Markdown formatting (e.g. **bold**, _italic_) is "
7575+"supported."
7676+7777+#: letters/forms.py:46
7878+msgid "Letter title"
7979+msgstr "Letter title"
8080+8181+#: letters/forms.py:50
8282+msgid "Write your letter here..."
8383+msgstr "Write your letter here..."
8484+8585+#: letters/forms.py:110
8686+msgid "Comment (optional)"
8787+msgstr "Comment (optional)"
8888+8989+#: letters/forms.py:113
9090+msgid "Add a personal note to your signature"
9191+msgstr "Add a personal note to your signature"
9292+9393+#: letters/forms.py:119
9494+msgid "Optional: Add your comment..."
9595+msgstr "Optional: Add your comment..."
9696+9797+#: letters/forms.py:131
9898+msgid "Reason"
9999+msgstr "Reason"
100100+101101+#: letters/forms.py:132
102102+msgid "Description"
103103+msgstr "Description"
104104+105105+#: letters/forms.py:135
106106+msgid "Please provide details about why you are reporting this letter"
107107+msgstr "Please provide details about why you are reporting this letter"
108108+109109+#: letters/forms.py:142
110110+msgid "Please describe the issue..."
111111+msgstr "Please describe the issue..."
112112+113113+#: letters/forms.py:152 letters/templates/letters/letter_list.html:19
114114+msgid "Search"
115115+msgstr "Search"
116116+117117+#: letters/forms.py:155 letters/templates/letters/letter_list.html:18
118118+msgid "Search letters..."
119119+msgstr "Search letters..."
120120+121121+#: letters/forms.py:161
122122+msgid "Tag"
123123+msgstr "Tag"
124124+125125+#: letters/forms.py:164
126126+msgid "Filter by tag..."
127127+msgstr "Filter by tag..."
128128+129129+#: letters/forms.py:180
130130+msgid "Bundestag constituency"
131131+msgstr "Bundestag constituency"
132132+133133+#: letters/forms.py:181
134134+msgid "Pick your Bundestag direct mandate constituency (Wahlkreis)."
135135+msgstr "Pick your Bundestag direct mandate constituency (Wahlkreis)."
136136+137137+#: letters/forms.py:182 letters/forms.py:189
138138+msgid "Select constituency"
139139+msgstr "Select constituency"
140140+141141+#: letters/forms.py:187
142142+msgid "State parliament constituency"
143143+msgstr "State parliament constituency"
144144+145145+#: letters/forms.py:188
146146+msgid "Optionally pick your Landtag constituency if applicable."
147147+msgstr "Optionally pick your Landtag constituency if applicable."
148148+149149+#: letters/forms.py:240
150150+msgid "Please select at least one constituency to save your profile."
151151+msgstr "Please select at least one constituency to save your profile."
152152+153153+#: letters/forms.py:252
154154+msgid "Straรe und Hausnummer"
155155+msgstr "Straรe und Hausnummer"
156156+157157+#: letters/forms.py:255
158158+msgid "z.B. Unter den Linden 77"
159159+msgstr "z.B. Unter den Linden 77"
160160+161161+#: letters/forms.py:261
162162+msgid "Postleitzahl"
163163+msgstr "Postleitzahl"
164164+165165+#: letters/forms.py:264
166166+msgid "z.B. 10117"
167167+msgstr "z.B. 10117"
168168+169169+#: letters/forms.py:270
170170+msgid "Stadt"
171171+msgstr "Stadt"
172172+173173+#: letters/forms.py:273
174174+msgid "z.B. Berlin"
175175+msgstr "z.B. Berlin"
176176+177177+#: letters/forms.py:304
178178+msgid ""
179179+"Bitte geben Sie eine vollstรคndige Adresse ein (Straรe, PLZ und Stadt) oder "
180180+"lassen Sie alle Felder leer."
181181+msgstr ""
182182+"Bitte geben Sie eine vollstรคndige Adresse ein (Straรe, PLZ und Stadt) oder "
183183+"lassen Sie alle Felder leer."
184184+185185+#: letters/models.py:15
186186+msgid "European Union"
187187+msgstr "European Union"
188188+189189+#: letters/models.py:16
190190+msgid "Federal"
191191+msgstr "Federal"
192192+193193+#: letters/models.py:17
194194+msgid "State"
195195+msgstr "State"
196196+197197+#: letters/models.py:18
198198+msgid "Local"
199199+msgstr "Local"
200200+201201+#: letters/models.py:21
202202+msgid "Name of the parliament"
203203+msgstr "Name of the parliament"
204204+205205+#: letters/models.py:25
206206+msgid "e.g., 'Bundestag', 'Bayerischer Landtag', 'Gemeinderat Mรผnchen'"
207207+msgstr "e.g., 'Bundestag', 'Bayerischer Landtag', 'Gemeinderat Mรผnchen'"
208208+209209+#: letters/models.py:29
210210+msgid "Geographic identifier (state code, municipality code, etc.)"
211211+msgstr "Geographic identifier (state code, municipality code, etc.)"
212212+213213+#: letters/models.py:37
214214+msgid "For hierarchical relationships (e.g., local within state)"
215215+msgstr "For hierarchical relationships (e.g., local within state)"
216216+217217+#: letters/models.py:43 letters/models.py:70 letters/models.py:105
218218+#: letters/models.py:165 letters/models.py:372 letters/models.py:421
219219+msgid "Last time this was synced from external API"
220220+msgstr "Last time this was synced from external API"
221221+222222+#: letters/models.py:47 letters/templates/letters/committee_detail.html:70
223223+msgid "Parliament"
224224+msgstr "Parliament"
225225+226226+#: letters/models.py:48
227227+msgid "Parliaments"
228228+msgstr "Parliaments"
229229+230230+#: letters/models.py:84
231231+msgid "Federal electoral district"
232232+msgstr "Federal electoral district"
233233+234234+#: letters/models.py:85
235235+msgid "Bundestag state list"
236236+msgstr "Bundestag state list"
237237+238238+#: letters/models.py:86
239239+msgid "Bundestag federal list"
240240+msgstr "Bundestag federal list"
241241+242242+#: letters/models.py:87
243243+msgid "State electoral district"
244244+msgstr "State electoral district"
245245+246246+#: letters/models.py:88
247247+msgid "State regional list"
248248+msgstr "State regional list"
249249+250250+#: letters/models.py:89
251251+msgid "State wide list"
252252+msgstr "State wide list"
253253+254254+#: letters/models.py:90
255255+msgid "EU at large"
256256+msgstr "EU at large"
257257+258258+#: letters/models.py:119
259259+msgid "Direct mandate"
260260+msgstr "Direct mandate"
261261+262262+#: letters/models.py:120
263263+msgid "State list mandate"
264264+msgstr "State list mandate"
265265+266266+#: letters/models.py:121
267267+msgid "State regional list mandate"
268268+msgstr "State regional list mandate"
269269+270270+#: letters/models.py:122
271271+msgid "Federal list mandate"
272272+msgstr "Federal list mandate"
273273+274274+#: letters/models.py:123
275275+msgid "EU list mandate"
276276+msgstr "EU list mandate"
277277+278278+#: letters/models.py:444
279279+msgid "Draft"
280280+msgstr "Draft"
281281+282282+#: letters/models.py:445
283283+msgid "Published"
284284+msgstr "Published"
285285+286286+#: letters/models.py:446
287287+msgid "Flagged for Review"
288288+msgstr "Flagged for Review"
289289+290290+#: letters/models.py:447
291291+msgid "Removed"
292292+msgstr "Removed"
293293+294294+#: letters/models.py:487
295295+msgid "Deleted user"
296296+msgstr "Deleted user"
297297+298298+#: letters/services.py:2451
299299+#, python-format
300300+msgid "Detected policy area: %(topic)s."
301301+msgstr "Detected policy area: %(topic)s."
302302+303303+#: letters/services.py:2456
304304+#, python-format
305305+msgid "Prioritising representatives for %(constituencies)s."
306306+msgstr "Prioritising representatives for %(constituencies)s."
307307+308308+#: letters/services.py:2461
309309+#, python-format
310310+msgid "Filtering by state %(state)s."
311311+msgstr "Filtering by state %(state)s."
312312+313313+#: letters/services.py:2465
314314+#, python-format
315315+msgid ""
316316+"Postal code %(plz)s had no direct match; showing broader representatives."
317317+msgstr ""
318318+"Postal code %(plz)s had no direct match; showing broader representatives."
319319+320320+#: letters/services.py:2469
321321+msgid "Showing generally relevant representatives."
322322+msgstr "Showing generally relevant representatives."
323323+324324+#: letters/templates/letters/account_activation_invalid.html:4
325325+#: letters/templates/letters/account_activation_invalid.html:8
326326+msgid "Activation link invalid"
327327+msgstr "Activation link invalid"
328328+329329+#: letters/templates/letters/account_activation_invalid.html:10
330330+msgid ""
331331+"We could not verify your activation link. It may have already been used or "
332332+"expired."
333333+msgstr ""
334334+"We could not verify your activation link. It may have already been used or "
335335+"expired."
336336+337337+#: letters/templates/letters/account_activation_invalid.html:13
338338+msgid ""
339339+"If you still cannot access your account, try registering again or contact "
340340+"support."
341341+msgstr ""
342342+"If you still cannot access your account, try registering again or contact "
343343+"support."
344344+345345+#: letters/templates/letters/account_activation_invalid.html:15
346346+msgid "Register again"
347347+msgstr "Register again"
348348+349349+#: letters/templates/letters/account_activation_sent.html:4
350350+msgid "Activate your account"
351351+msgstr "Activate your account"
352352+353353+#: letters/templates/letters/account_activation_sent.html:8
354354+#: letters/templates/letters/password_reset_done.html:8
355355+msgid "Check your inbox"
356356+msgstr "Check your inbox"
357357+358358+#: letters/templates/letters/account_activation_sent.html:10
359359+msgid ""
360360+"We sent you an email with a confirmation link. Please click it to activate "
361361+"your account."
362362+msgstr ""
363363+"We sent you an email with a confirmation link. Please click it to activate "
364364+"your account."
365365+366366+#: letters/templates/letters/account_activation_sent.html:13
367367+msgid ""
368368+"If you do not receive the email within a few minutes, check your spam folder "
369369+"or try registering again."
370370+msgstr ""
371371+"If you do not receive the email within a few minutes, check your spam folder "
372372+"or try registering again."
373373+374374+#: letters/templates/letters/account_activation_sent.html:15
375375+msgid "Back to homepage"
376376+msgstr "Back to homepage"
377377+378378+#: letters/templates/letters/account_delete_confirm.html:4
379379+#: letters/templates/letters/profile.html:142
380380+msgid "Delete account"
381381+msgstr "Delete account"
382382+383383+#: letters/templates/letters/account_delete_confirm.html:8
384384+msgid "Delete your account"
385385+msgstr "Delete your account"
386386+387387+#: letters/templates/letters/account_delete_confirm.html:10
388388+msgid ""
389389+"Deleting your account will remove your personal data and signatures. Letters "
390390+"you have published stay online but are shown without your name."
391391+msgstr ""
392392+"Deleting your account will remove your personal data and signatures. Letters "
393393+"you have published stay online but are shown without your name."
394394+395395+#: letters/templates/letters/account_delete_confirm.html:14
396396+msgid "Yes, delete my account"
397397+msgstr "Yes, delete my account"
398398+399399+#: letters/templates/letters/account_delete_confirm.html:15
400400+#: letters/templates/letters/letter_form.html:61
401401+msgid "Cancel"
402402+msgstr "Cancel"
403403+404404+#: letters/templates/letters/base.html:140
405405+msgid "Letters"
406406+msgstr "Letters"
407407+408408+#: letters/templates/letters/base.html:141
409409+msgid "Competencies"
410410+msgstr "Competencies"
411411+412412+#: letters/templates/letters/base.html:143
413413+#: letters/templates/letters/representative_detail.html:149
414414+msgid "Write Letter"
415415+msgstr "Write Letter"
416416+417417+#: letters/templates/letters/base.html:144
418418+#: letters/templates/letters/profile.html:4
419419+msgid "Profile"
420420+msgstr "Profile"
421421+422422+#: letters/templates/letters/base.html:145
423423+msgid "Logout"
424424+msgstr "Logout"
425425+426426+#: letters/templates/letters/base.html:147
427427+#: letters/templates/letters/letter_detail.html:47
428428+#: letters/templates/letters/letter_detail.html:81
429429+#: letters/templates/letters/login.html:4
430430+#: letters/templates/letters/login.html:8
431431+#: letters/templates/letters/login.html:33
432432+msgid "Login"
433433+msgstr "Login"
434434+435435+#: letters/templates/letters/base.html:148
436436+#: letters/templates/letters/register.html:4
437437+#: letters/templates/letters/register.html:8
438438+#: letters/templates/letters/register.html:66
439439+msgid "Register"
440440+msgstr "Register"
441441+442442+#: letters/templates/letters/base.html:151
443443+msgid "Admin"
444444+msgstr "Admin"
445445+446446+#: letters/templates/letters/base.html:157
447447+msgid "Select language"
448448+msgstr "Select language"
449449+450450+#: letters/templates/letters/base.html:182
451451+msgid "Empowering citizens to write to their representatives"
452452+msgstr "Empowering citizens to write to their representatives"
453453+454454+#: letters/templates/letters/committee_detail.html:22
455455+msgid "Related Topics"
456456+msgstr "Related Topics"
457457+458458+#: letters/templates/letters/committee_detail.html:36
459459+msgid "Members"
460460+msgstr "Members"
461461+462462+#: letters/templates/letters/committee_detail.html:46
463463+msgid "Role"
464464+msgstr "Role"
465465+466466+#: letters/templates/letters/committee_detail.html:48
467467+#: letters/templates/letters/representative_detail.html:61
468468+msgid "Active"
469469+msgstr "Active"
470470+471471+#: letters/templates/letters/committee_detail.html:51
472472+#: letters/templates/letters/partials/representative_card.html:29
473473+msgid "Since"
474474+msgstr "Since"
475475+476476+#: letters/templates/letters/committee_detail.html:58
477477+msgid "No members recorded for this committee."
478478+msgstr "No members recorded for this committee."
479479+480480+#: letters/templates/letters/committee_detail.html:67
481481+msgid "Committee Info"
482482+msgstr "Committee Info"
483483+484484+#: letters/templates/letters/committee_detail.html:71
485485+msgid "Term"
486486+msgstr "Term"
487487+488488+#: letters/templates/letters/committee_detail.html:74
489489+#: letters/templates/letters/representative_detail.html:105
490490+msgid "View on Abgeordnetenwatch"
491491+msgstr "View on Abgeordnetenwatch"
492492+493493+#: letters/templates/letters/letter_detail.html:10
494494+#: letters/templates/letters/partials/letter_card.html:5
495495+msgid "By"
496496+msgstr "By"
497497+498498+#: letters/templates/letters/letter_detail.html:29
499499+#, python-format
500500+msgid "Signatures (%(counter)s)"
501501+msgid_plural "Signatures (%(counter)s)"
502502+msgstr[0] "Signatures (%(counter)s)"
503503+msgstr[1] "Signatures (%(counter)s)"
504504+505505+#: letters/templates/letters/letter_detail.html:31
506506+#, python-format
507507+msgid "%(counter)s constituent of %(constituency_name)s"
508508+msgid_plural "%(counter)s constituents of %(constituency_name)s"
509509+msgstr[0] "%(counter)s constituent of %(constituency_name)s"
510510+msgstr[1] "%(counter)s constituents of %(constituency_name)s"
511511+512512+#: letters/templates/letters/letter_detail.html:32
513513+#, python-format
514514+msgid "%(counter)s other verified"
515515+msgid_plural "%(counter)s other verified"
516516+msgstr[0] "%(counter)s other verified"
517517+msgstr[1] "%(counter)s other verified"
518518+519519+#: letters/templates/letters/letter_detail.html:33
520520+#, python-format
521521+msgid "%(counter)s unverified"
522522+msgid_plural "%(counter)s unverified"
523523+msgstr[0] "%(counter)s unverified"
524524+msgstr[1] "%(counter)s unverified"
525525+526526+#: letters/templates/letters/letter_detail.html:41
527527+msgid "Sign this letter"
528528+msgstr "Sign this letter"
529529+530530+#: letters/templates/letters/letter_detail.html:44
531531+msgid "You have signed this letter"
532532+msgstr "You have signed this letter"
533533+534534+#: letters/templates/letters/letter_detail.html:47
535535+msgid "to sign this letter"
536536+msgstr "to sign this letter"
537537+538538+#: letters/templates/letters/letter_detail.html:58
539539+msgid "โ Verified Constituent"
540540+msgstr "โ Verified Constituent"
541541+542542+#: letters/templates/letters/letter_detail.html:60
543543+msgid "โ Verified"
544544+msgstr "โ Verified"
545545+546546+#: letters/templates/letters/letter_detail.html:70
547547+msgid "No signatures yet. Be the first to sign!"
548548+msgstr "No signatures yet. Be the first to sign!"
549549+550550+#: letters/templates/letters/letter_detail.html:75
551551+#: letters/templates/letters/letter_detail.html:79
552552+msgid "Report this letter"
553553+msgstr "Report this letter"
554554+555555+#: letters/templates/letters/letter_detail.html:76
556556+msgid "If you believe this letter violates our guidelines, please report it."
557557+msgstr "If you believe this letter violates our guidelines, please report it."
558558+559559+#: letters/templates/letters/letter_detail.html:81
560560+msgid "to report this letter"
561561+msgstr "to report this letter"
562562+563563+#: letters/templates/letters/letter_detail.html:86
564564+msgid "Back to all letters"
565565+msgstr "Back to all letters"
566566+567567+#: letters/templates/letters/letter_form.html:4
568568+#: letters/templates/letters/representative_detail.html:143
569569+msgid "Write a Letter"
570570+msgstr "Write a Letter"
571571+572572+#: letters/templates/letters/letter_form.html:10
573573+msgid "Write an Open Letter"
574574+msgstr "Write an Open Letter"
575575+576576+#: letters/templates/letters/letter_form.html:12
577577+msgid ""
578578+"Write an open letter to a political representative. Your letter will be "
579579+"published publicly so others can read and sign it."
580580+msgstr ""
581581+"Write an open letter to a political representative. Your letter will be "
582582+"published publicly so others can read and sign it."
583583+584584+#: letters/templates/letters/letter_form.html:16
585585+msgid "Before you write"
586586+msgstr "Before you write"
587587+588588+#: letters/templates/letters/letter_form.html:18
589589+msgid "Be thoughtful but feel free to be critical."
590590+msgstr "Be thoughtful but feel free to be critical."
591591+592592+#: letters/templates/letters/letter_form.html:19
593593+msgid "Representatives are humans tooโstay respectful."
594594+msgstr "Representatives are humans tooโstay respectful."
595595+596596+#: letters/templates/letters/letter_form.html:20
597597+msgid "Keep your arguments clear and concise."
598598+msgstr "Keep your arguments clear and concise."
599599+600600+#: letters/templates/letters/letter_form.html:21
601601+msgid "No insults or hate speech."
602602+msgstr "No insults or hate speech."
603603+604604+#: letters/templates/letters/letter_form.html:22
605605+msgid "Stay within the bounds of the Grundgesetz when making demands."
606606+msgstr "Stay within the bounds of the Grundgesetz when making demands."
607607+608608+#: letters/templates/letters/letter_form.html:30
609609+msgid "Title:"
610610+msgstr "Title:"
611611+612612+#: letters/templates/letters/letter_form.html:36
613613+msgid ""
614614+"Describe your concern in a sentence; we'll use it to suggest representatives."
615615+msgstr ""
616616+"Describe your concern in a sentence; we'll use it to suggest representatives."
617617+618618+#: letters/templates/letters/letter_form.html:41
619619+msgid "To Representative:"
620620+msgstr "To Representative:"
621621+622622+#: letters/templates/letters/letter_form.html:47
623623+msgid ""
624624+"Already know who to address? Pick them here. Otherwise, use the suggestions "
625625+"below."
626626+msgstr ""
627627+"Already know who to address? Pick them here. Otherwise, use the suggestions "
628628+"below."
629629+630630+#: letters/templates/letters/letter_form.html:53
631631+msgid "Letter Body:"
632632+msgstr "Letter Body:"
633633+634634+#: letters/templates/letters/letter_form.html:60
635635+msgid "Publish Letter"
636636+msgstr "Publish Letter"
637637+638638+#: letters/templates/letters/letter_form.html:67
639639+msgid "Smart Suggestions"
640640+msgstr "Smart Suggestions"
641641+642642+#: letters/templates/letters/letter_form.html:69
643643+msgid ""
644644+"Type your title and we'll use your verified profile to suggest "
645645+"representatives, topics, and related letters."
646646+msgstr ""
647647+"Type your title and we'll use your verified profile to suggest "
648648+"representatives, topics, and related letters."
649649+650650+#: letters/templates/letters/letter_form.html:81
651651+msgid "Loading..."
652652+msgstr "Loading..."
653653+654654+#: letters/templates/letters/letter_form.html:83
655655+msgid "Analyzing your title..."
656656+msgstr "Analyzing your title..."
657657+658658+#: letters/templates/letters/letter_list.html:4
659659+msgid "Browse Letters"
660660+msgstr "Browse Letters"
661661+662662+#: letters/templates/letters/letter_list.html:8
663663+msgid "About This"
664664+msgstr "About This"
665665+666666+#: letters/templates/letters/letter_list.html:9
667667+msgid ""
668668+"Make your voice heard, reach out to your representative, participate in "
669669+"democracy."
670670+msgstr ""
671671+"Make your voice heard, reach out to your representative, participate in "
672672+"democracy."
673673+674674+#: letters/templates/letters/letter_list.html:10
675675+msgid "Open letters authored and signed by fellow citizens."
676676+msgstr "Open letters authored and signed by fellow citizens."
677677+678678+#: letters/templates/letters/letter_list.html:11
679679+msgid ""
680680+"Physical letters mailed to representatives when number of verified "
681681+"signatures > 100."
682682+msgstr ""
683683+"Physical letters mailed to representatives when number of verified "
684684+"signatures > 100."
685685+686686+#: letters/templates/letters/letter_list.html:15
687687+msgid "Browse Open Letters"
688688+msgstr "Browse Open Letters"
689689+690690+#: letters/templates/letters/letter_list.html:25
691691+msgid "Popular tags:"
692692+msgstr "Popular tags:"
693693+694694+#: letters/templates/letters/letter_list.html:41
695695+msgid "Previous"
696696+msgstr "Previous"
697697+698698+#: letters/templates/letters/letter_list.html:43
699699+#, python-format
700700+msgid "Page %(page)s of %(total)s"
701701+msgstr "Page %(page)s of %(total)s"
702702+703703+#: letters/templates/letters/letter_list.html:45
704704+msgid "Next"
705705+msgstr "Next"
706706+707707+#: letters/templates/letters/letter_list.html:51
708708+msgid "No letters found."
709709+msgstr "No letters found."
710710+711711+#: letters/templates/letters/letter_list.html:51
712712+msgid "Be the first to write one!"
713713+msgstr "Be the first to write one!"
714714+715715+#: letters/templates/letters/login.html:14
716716+#: letters/templates/letters/register.html:15
717717+msgid "Username:"
718718+msgstr "Username:"
719719+720720+#: letters/templates/letters/login.html:22
721721+#: letters/templates/letters/register.html:47
722722+msgid "Password:"
723723+msgstr "Password:"
724724+725725+#: letters/templates/letters/login.html:37
726726+msgid "Forgot your password?"
727727+msgstr "Forgot your password?"
728728+729729+#: letters/templates/letters/login.html:41
730730+msgid "Don't have an account?"
731731+msgstr "Don't have an account?"
732732+733733+#: letters/templates/letters/login.html:41
734734+msgid "Register here"
735735+msgstr "Register here"
736736+737737+#: letters/templates/letters/partials/letter_card.html:6
738738+msgid "To"
739739+msgstr "To"
740740+741741+#: letters/templates/letters/partials/letter_card.html:20
742742+#, python-format
743743+msgid "%(counter)s signature"
744744+msgid_plural "%(counter)s signatures"
745745+msgstr[0] "%(counter)s signature"
746746+msgstr[1] "%(counter)s signatures"
747747+748748+#: letters/templates/letters/partials/letter_card.html:20
749749+#, python-format
750750+msgid "%(counter)s verified"
751751+msgid_plural "%(counter)s verified"
752752+msgstr[0] "%(counter)s verified"
753753+msgstr[1] "%(counter)s verified"
754754+755755+#: letters/templates/letters/partials/representative_card.html:21
756756+#: letters/templates/letters/partials/representative_card.html:23
757757+msgid "Constituency"
758758+msgstr "Constituency"
759759+760760+#: letters/templates/letters/partials/representative_card.html:27
761761+msgid "Mandate"
762762+msgstr "Mandate"
763763+764764+#: letters/templates/letters/partials/representative_card.html:34
765765+msgid "Focus"
766766+msgstr "Focus"
767767+768768+#: letters/templates/letters/partials/representative_card.html:34
769769+msgid "self-declared"
770770+msgstr "self-declared"
771771+772772+#: letters/templates/letters/partials/representative_card.html:45
773773+msgid "Committees"
774774+msgstr "Committees"
775775+776776+#: letters/templates/letters/partials/representative_card.html:57
777777+msgid "Email"
778778+msgstr "Email"
779779+780780+#: letters/templates/letters/partials/representative_card.html:60
781781+msgid "Website"
782782+msgstr "Website"
783783+784784+#: letters/templates/letters/partials/representative_card.html:66
785785+msgid "View profile"
786786+msgstr "View profile"
787787+788788+#: letters/templates/letters/partials/suggestions.html:10
789789+msgid ""
790790+"We couldn't match you to a constituency yet. Update your profile "
791791+"verification to see local representatives."
792792+msgstr ""
793793+"We couldn't match you to a constituency yet. Update your profile "
794794+"verification to see local representatives."
795795+796796+#: letters/templates/letters/partials/suggestions.html:16
797797+msgid "Our Interpretation"
798798+msgstr "Our Interpretation"
799799+800800+#: letters/templates/letters/partials/suggestions.html:21
801801+msgid "Topic:"
802802+msgstr "Topic:"
803803+804804+#: letters/templates/letters/partials/suggestions.html:28
805805+msgid "No specific policy area detected. Try adding more keywords."
806806+msgstr "No specific policy area detected. Try adding more keywords."
807807+808808+#: letters/templates/letters/partials/suggestions.html:37
809809+msgid "Related Keywords"
810810+msgstr "Related Keywords"
811811+812812+#: letters/templates/letters/partials/suggestions.html:51
813813+msgid "Your Direct Representatives"
814814+msgstr "Your Direct Representatives"
815815+816816+#: letters/templates/letters/partials/suggestions.html:56
817817+msgid "These representatives directly represent your constituency:"
818818+msgstr "These representatives directly represent your constituency:"
819819+820820+#: letters/templates/letters/partials/suggestions.html:67
821821+#: letters/templates/letters/partials/suggestions.html:102
822822+msgid "Select"
823823+msgstr "Select"
824824+825825+#: letters/templates/letters/partials/suggestions.html:81
826826+msgid "Topic Experts"
827827+msgstr "Topic Experts"
828828+829829+#: letters/templates/letters/partials/suggestions.html:86
830830+#, python-format
831831+msgid ""
832832+"These representatives are experts on \"%(topic)s\" based on their committee "
833833+"memberships:"
834834+msgstr ""
835835+"These representatives are experts on \"%(topic)s\" based on their committee "
836836+"memberships:"
837837+838838+#: letters/templates/letters/partials/suggestions.html:95
839839+msgid "of"
840840+msgstr "of"
841841+842842+#: letters/templates/letters/partials/suggestions.html:116
843843+msgid "Suggested Representatives"
844844+msgstr "Suggested Representatives"
845845+846846+#: letters/templates/letters/partials/suggestions.html:119
847847+msgid ""
848848+"No representatives found. Representatives may need to be synced for this "
849849+"governmental level."
850850+msgstr ""
851851+"No representatives found. Representatives may need to be synced for this "
852852+"governmental level."
853853+854854+#: letters/templates/letters/partials/suggestions.html:148
855855+msgid "Selected:"
856856+msgstr "Selected:"
857857+858858+#: letters/templates/letters/password_reset_complete.html:4
859859+#: letters/templates/letters/password_reset_complete.html:8
860860+msgid "Password updated"
861861+msgstr "Password updated"
862862+863863+#: letters/templates/letters/password_reset_complete.html:9
864864+msgid "You can now sign in using your new password."
865865+msgstr "You can now sign in using your new password."
866866+867867+#: letters/templates/letters/password_reset_complete.html:10
868868+msgid "Go to login"
869869+msgstr "Go to login"
870870+871871+#: letters/templates/letters/password_reset_confirm.html:4
872872+#: letters/templates/letters/password_reset_confirm.html:9
873873+msgid "Choose a new password"
874874+msgstr "Choose a new password"
875875+876876+#: letters/templates/letters/password_reset_confirm.html:13
877877+msgid "New password"
878878+msgstr "New password"
879879+880880+#: letters/templates/letters/password_reset_confirm.html:20
881881+msgid "Confirm password"
882882+msgstr "Confirm password"
883883+884884+#: letters/templates/letters/password_reset_confirm.html:26
885885+msgid "Update password"
886886+msgstr "Update password"
887887+888888+#: letters/templates/letters/password_reset_confirm.html:29
889889+msgid "Reset link invalid"
890890+msgstr "Reset link invalid"
891891+892892+#: letters/templates/letters/password_reset_confirm.html:30
893893+msgid "This password reset link is no longer valid. Please request a new one."
894894+msgstr "This password reset link is no longer valid. Please request a new one."
895895+896896+#: letters/templates/letters/password_reset_confirm.html:31
897897+msgid "Request new link"
898898+msgstr "Request new link"
899899+900900+#: letters/templates/letters/password_reset_done.html:4
901901+msgid "Reset email sent"
902902+msgstr "Reset email sent"
903903+904904+#: letters/templates/letters/password_reset_done.html:9
905905+msgid ""
906906+"If an account exists for that email address, we just sent you instructions "
907907+"to choose a new password."
908908+msgstr ""
909909+"If an account exists for that email address, we just sent you instructions "
910910+"to choose a new password."
911911+912912+#: letters/templates/letters/password_reset_done.html:10
913913+msgid "The link will stay valid for a limited time."
914914+msgstr "The link will stay valid for a limited time."
915915+916916+#: letters/templates/letters/password_reset_done.html:11
917917+msgid "Back to login"
918918+msgstr "Back to login"
919919+920920+#: letters/templates/letters/password_reset_form.html:4
921921+msgid "Reset password"
922922+msgstr "Reset password"
923923+924924+#: letters/templates/letters/password_reset_form.html:8
925925+msgid "Reset your password"
926926+msgstr "Reset your password"
927927+928928+#: letters/templates/letters/password_reset_form.html:9
929929+msgid ""
930930+"Enter the email address you used during registration. We will send you a "
931931+"link to create a new password."
932932+msgstr ""
933933+"Enter the email address you used during registration. We will send you a "
934934+"link to create a new password."
935935+936936+#: letters/templates/letters/password_reset_form.html:17
937937+msgid "Send reset link"
938938+msgstr "Send reset link"
939939+940940+#: letters/templates/letters/profile.html:13
941941+#, python-format
942942+msgid "%(username)s's Profile"
943943+msgstr "%(username)s's Profile"
944944+945945+#: letters/templates/letters/profile.html:16
946946+msgid "Identity & Constituency"
947947+msgstr "Identity & Constituency"
948948+949949+#: letters/templates/letters/profile.html:19
950950+msgid "Status:"
951951+msgstr "Status:"
952952+953953+#: letters/templates/letters/profile.html:21
954954+msgid "Type:"
955955+msgstr "Type:"
956956+957957+#: letters/templates/letters/profile.html:28
958958+msgid ""
959959+"You self-declared your constituency. Representatives will see your "
960960+"signatures as self-declared constituents."
961961+msgstr ""
962962+"You self-declared your constituency. Representatives will see your "
963963+"signatures as self-declared constituents."
964964+965965+#: letters/templates/letters/profile.html:30
966966+msgid "Start third-party verification"
967967+msgstr "Start third-party verification"
968968+969969+#: letters/templates/letters/profile.html:33
970970+msgid ""
971971+"Your identity was verified via a third-party provider. Signatures will "
972972+"appear as verified constituents."
973973+msgstr ""
974974+"Your identity was verified via a third-party provider. Signatures will "
975975+"appear as verified constituents."
976976+977977+#: letters/templates/letters/profile.html:38
978978+msgid "Your verification is being processed."
979979+msgstr "Your verification is being processed."
980980+981981+#: letters/templates/letters/profile.html:39
982982+msgid "Complete Verification (Stub)"
983983+msgstr "Complete Verification (Stub)"
984984+985985+#: letters/templates/letters/profile.html:43
986986+msgid "Verification failed. Please try again or contact support."
987987+msgstr "Verification failed. Please try again or contact support."
988988+989989+#: letters/templates/letters/profile.html:48
990990+msgid ""
991991+"You can self-declare your constituency below or start a verification with a "
992992+"trusted provider. Verified signatures carry more weight."
993993+msgstr ""
994994+"You can self-declare your constituency below or start a verification with a "
995995+"trusted provider. Verified signatures carry more weight."
996996+997997+#: letters/templates/letters/profile.html:50
998998+msgid "Start Third-party Verification"
999999+msgstr "Start Third-party Verification"
10001000+10011001+#: letters/templates/letters/profile.html:55
10021002+msgid "Ihre Adresse"
10031003+msgstr "Ihre Adresse"
10041004+10051005+#: letters/templates/letters/profile.html:57
10061006+msgid ""
10071007+"Geben Sie Ihre vollstรคndige Adresse ein, um prรคzise Wahlkreis- und "
10081008+"Abgeordnetenempfehlungen zu erhalten."
10091009+msgstr ""
10101010+"Geben Sie Ihre vollstรคndige Adresse ein, um prรคzise Wahlkreis- und "
10111011+"Abgeordnetenempfehlungen zu erhalten."
10121012+10131013+#: letters/templates/letters/profile.html:61
10141014+msgid "Gespeicherte Adresse:"
10151015+msgstr "Gespeicherte Adresse:"
10161016+10171017+#: letters/templates/letters/profile.html:83
10181018+msgid "Adresse speichern"
10191019+msgstr "Adresse speichern"
10201020+10211021+#: letters/templates/letters/profile.html:88
10221022+msgid "Self-declare your constituency"
10231023+msgstr "Self-declare your constituency"
10241024+10251025+#: letters/templates/letters/profile.html:90
10261026+msgid ""
10271027+"Select the constituencies you live in so we can prioritise the right "
10281028+"representatives."
10291029+msgstr ""
10301030+"Select the constituencies you live in so we can prioritise the right "
10311031+"representatives."
10321032+10331033+#: letters/templates/letters/profile.html:109
10341034+msgid "Save constituencies"
10351035+msgstr "Save constituencies"
10361036+10371037+#: letters/templates/letters/profile.html:114
10381038+msgid "Your Letters"
10391039+msgstr "Your Letters"
10401040+10411041+#: letters/templates/letters/profile.html:120
10421042+msgid "You haven't written any letters yet."
10431043+msgstr "You haven't written any letters yet."
10441044+10451045+#: letters/templates/letters/profile.html:120
10461046+msgid "Write one now!"
10471047+msgstr "Write one now!"
10481048+10491049+#: letters/templates/letters/profile.html:125
10501050+msgid "Letters You've Signed"
10511051+msgstr "Letters You've Signed"
10521052+10531053+#: letters/templates/letters/profile.html:133
10541054+msgid "You haven't signed any letters yet."
10551055+msgstr "You haven't signed any letters yet."
10561056+10571057+#: letters/templates/letters/profile.html:133
10581058+msgid "Browse letters"
10591059+msgstr "Browse letters"
10601060+10611061+#: letters/templates/letters/profile.html:138
10621062+msgid "Account"
10631063+msgstr "Account"
10641064+10651065+#: letters/templates/letters/profile.html:140
10661066+msgid ""
10671067+"Need a fresh start? You can delete your account at any time. Your letters "
10681068+"stay visible but without your name."
10691069+msgstr ""
10701070+"Need a fresh start? You can delete your account at any time. Your letters "
10711071+"stay visible but without your name."
10721072+10731073+#: letters/templates/letters/register.html:9
10741074+msgid ""
10751075+"After registration we'll send you an email to confirm your address before "
10761076+"you can sign in."
10771077+msgstr ""
10781078+"After registration we'll send you an email to confirm your address before "
10791079+"you can sign in."
10801080+10811081+#: letters/templates/letters/register.html:23
10821082+msgid "Email:"
10831083+msgstr "Email:"
10841084+10851085+#: letters/templates/letters/register.html:31
10861086+msgid "First Name (optional):"
10871087+msgstr "First Name (optional):"
10881088+10891089+#: letters/templates/letters/register.html:39
10901090+msgid "Last Name (optional):"
10911091+msgstr "Last Name (optional):"
10921092+10931093+#: letters/templates/letters/register.html:55
10941094+msgid "Confirm Password:"
10951095+msgstr "Confirm Password:"
10961096+10971097+#: letters/templates/letters/register.html:70
10981098+msgid "Already have an account?"
10991099+msgstr "Already have an account?"
11001100+11011101+#: letters/templates/letters/register.html:70
11021102+msgid "Login here"
11031103+msgstr "Login here"
11041104+11051105+#: letters/templates/letters/representative_detail.html:19
11061106+msgid "รber"
11071107+msgstr "รber"
11081108+11091109+#: letters/templates/letters/representative_detail.html:30
11101110+msgid "Committee Memberships"
11111111+msgstr "Committee Memberships"
11121112+11131113+#: letters/templates/letters/representative_detail.html:75
11141114+msgid "Open Letters"
11151115+msgstr "Open Letters"
11161116+11171117+#: letters/templates/letters/representative_detail.html:83
11181118+msgid "No letters have been written to this representative yet."
11191119+msgstr "No letters have been written to this representative yet."
11201120+11211121+#: letters/templates/letters/representative_detail.html:85
11221122+msgid "Write the First Letter"
11231123+msgstr "Write the First Letter"
11241124+11251125+#: letters/templates/letters/representative_detail.html:95
11261126+msgid "External Resources"
11271127+msgstr "External Resources"
11281128+11291129+#: letters/templates/letters/representative_detail.html:100
11301130+msgid "Abgeordnetenwatch Profile"
11311131+msgstr "Abgeordnetenwatch Profile"
11321132+11331133+#: letters/templates/letters/representative_detail.html:102
11341134+msgid ""
11351135+"View voting record, questions, and detailed profile on Abgeordnetenwatch.de"
11361136+msgstr ""
11371137+"View voting record, questions, and detailed profile on Abgeordnetenwatch.de"
11381138+11391139+#: letters/templates/letters/representative_detail.html:112
11401140+msgid "Wikipedia Article"
11411141+msgstr "Wikipedia Article"
11421142+11431143+#: letters/templates/letters/representative_detail.html:114
11441144+msgid "Read more about this representative on Wikipedia"
11451145+msgstr "Read more about this representative on Wikipedia"
11461146+11471147+#: letters/templates/letters/representative_detail.html:117
11481148+msgid "View on Wikipedia"
11491149+msgstr "View on Wikipedia"
11501150+11511151+#: letters/templates/letters/representative_detail.html:123
11521152+msgid "No external resources available for this representative."
11531153+msgstr "No external resources available for this representative."
11541154+11551155+#: letters/templates/letters/representative_detail.html:130
11561156+msgid "Kontakt"
11571157+msgstr "Kontakt"
11581158+11591159+#: letters/templates/letters/representative_detail.html:145
11601160+#, python-format
11611161+msgid "Start a new open letter to %(name)s"
11621162+msgstr "Start a new open letter to %(name)s"
11631163+11641164+#: letters/templates/letters/representative_detail.html:153
11651165+msgid "Login to Write Letter"
11661166+msgstr "Login to Write Letter"
11671167+11681168+#: letters/views.py:52
11691169+msgid "Confirm your WriteThem.eu account"
11701170+msgstr "Confirm your WriteThem.eu account"
11711171+11721172+#: letters/views.py:184
11731173+msgid "Your letter has been published and your signature has been added!"
11741174+msgstr "Your letter has been published and your signature has been added!"
11751175+11761176+#: letters/views.py:197
11771177+msgid "You have already signed this letter."
11781178+msgstr "You have already signed this letter."
11791179+11801180+#: letters/views.py:207
11811181+msgid "Your signature has been added!"
11821182+msgstr "Your signature has been added!"
11831183+11841184+#: letters/views.py:225
11851185+msgid "Thank you for your report. Our team will review it."
11861186+msgstr "Thank you for your report. Our team will review it."
11871187+11881188+#: letters/views.py:259
11891189+msgid ""
11901190+"Please confirm your email address. We sent you a link to activate your "
11911191+"account."
11921192+msgstr ""
11931193+"Please confirm your email address. We sent you a link to activate your "
11941194+"account."
11951195+11961196+#: letters/views.py:289
11971197+msgid "Your account has been activated. You can now log in."
11981198+msgstr "Your account has been activated. You can now log in."
11991199+12001200+#: letters/views.py:292
12011201+msgid "Your account is already active."
12021202+msgstr "Your account is already active."
12031203+12041204+#: letters/views.py:347
12051205+msgid "Ihre Adresse wurde gespeichert."
12061206+msgstr "Ihre Adresse wurde gespeichert."
12071207+12081208+#: letters/views.py:363
12091209+msgid "Your constituency information has been updated."
12101210+msgstr "Your constituency information has been updated."
12111211+12121212+#: letters/views.py:391
12131213+msgid ""
12141214+"Your account has been deleted. Your published letters remain available to "
12151215+"the public."
12161216+msgstr ""
12171217+"Your account has been deleted. Your published letters remain available to "
12181218+"the public."