Swedish adaptation: Instegscertifikat and HAREC

- Editions replaced by INSTEG, HAREC and UPPGRADERING (Instegscertifikat -> HAREC)
- Question pool optional; simulator, homework tool and solutions switch off without one
- All UI strings, templates, renderers and project JS localised to sv-SE
  (decimal comma, Swedish non-breaking-space rules, Å/Ä/Ö in Morse table)
- DARC branding, membership CTA and German links removed; attribution footer added
- Page names centralised in src/pages.py
- README and docs rewritten in Swedish

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-10 15:03:02 +02:00
co-authored by Claude Sonnet 5.5
parent 28cf11437e
commit 874838f525
81 changed files with 918 additions and 1329 deletions
+32 -32
View File
@@ -1,19 +1,19 @@
<div id="homework-generator" class="homework-generator mx-auto mb-5" v-cloak>
<div v-if="loading" class="d-flex align-items-center justify-content-center gap-3 py-5" role="status">
<div class="spinner-border text-primary" aria-hidden="true"></div>
<span>Kursdaten werden geladen …</span>
<span>Kursdata laddas …</span>
</div>
<div v-else-if="loadError" class="alert alert-danger" role="alert">
<h1 class="h4">Das Hausaufgabentool konnte nicht geladen werden</h1>
<h1 class="h4">Övningsverktyget kunde inte laddas</h1>
<p class="mb-0" v-text="loadError"></p>
</div>
<template v-else>
<h1>Hausaufgabe erstellen</h1>
<p class="lead">Stelle aus den behandelten Kapiteln und Sektionen eine Hausaufgabe zusammen.</p>
<h1>Skapa en övning</h1>
<p class="lead">Sätt ihop en övning av de kapitel och avsnitt som har gåtts igenom.</p>
<ol class="homework-steps list-unstyled d-flex flex-wrap gap-2 mb-4" aria-label="Arbeitsschritte">
<ol class="homework-steps list-unstyled d-flex flex-wrap gap-2 mb-4" aria-label="Steg">
<li v-for="item in stepLabels" :key="item.number"
class="badge rounded-pill"
:class="step === item.number ? 'text-bg-primary' : (step > item.number ? 'text-bg-secondary' : 'bg-light text-dark border')"
@@ -21,8 +21,8 @@
</ol>
<section v-if="step === 1" aria-labelledby="homework-course-heading">
<h2 id="homework-course-heading" class="h4">Kurs auswählen</h2>
<p>Welchen Kurs bietest du an?</p>
<h2 id="homework-course-heading" class="h4">Välj kurs</h2>
<p>Vilken kurs håller du?</p>
<div class="row row-cols-1 row-cols-md-3 g-2">
<div v-for="course in courseChoices" :key="course.edition" class="col">
<button type="button" class="btn w-100 h-100 py-3 text-white"
@@ -36,8 +36,8 @@
</section>
<section v-else-if="step === 2" aria-labelledby="homework-chapter-heading">
<h2 id="homework-chapter-heading" class="h4">Kapitel auswählen</h2>
<p><strong v-text="selectedCourse.label"></strong>: Wähle ein oder mehrere behandelte Kapitel aus.</p>
<h2 id="homework-chapter-heading" class="h4">Välj kapitel</h2>
<p><strong v-text="selectedCourse.label"></strong>: Välj ett eller flera kapitel som har gåtts igenom.</p>
<div class="list-group mb-3">
<label v-for="chapter in toc.chapters" :key="chapter.ident"
class="list-group-item d-flex align-items-start gap-2"
@@ -47,21 +47,21 @@
<span class="flex-grow-1">
<span class="d-block" v-text="chapter.title"></span>
<small v-if="chapterQuestionCount(chapter) > 0" class="text-secondary"
v-text="chapterQuestionCount(chapter) + ' Prüfungsfragen'"></small>
<small v-else>Keine Prüfungsfragen vorhanden</small>
v-text="chapterQuestionCount(chapter) + ' provfrågor'"></small>
<small v-else>Inga provfrågor finns</small>
</span>
</label>
</div>
<div class="d-flex justify-content-between gap-2">
<button type="button" class="btn btn-outline-secondary" @click="goToStep(1)">Zurück</button>
<button type="button" class="btn btn-outline-secondary" @click="goToStep(1)">Tillbaka</button>
<button type="button" class="btn btn-primary" :disabled="selectedChapterIds.length === 0"
@click="openSectionSelection">Weiter zu den Sektionen</button>
@click="openSectionSelection">Vidare till avsnitten</button>
</div>
</section>
<section v-else-if="step === 3" aria-labelledby="homework-section-heading">
<h2 id="homework-section-heading" class="h4">Sektionen auswählen</h2>
<p>Wähle die Sektionen aus, die bereits behandelt wurden.</p>
<h2 id="homework-section-heading" class="h4">Välj avsnitt</h2>
<p>Välj de avsnitt som redan har gåtts igenom.</p>
<div v-for="chapter in selectedChapters" :key="chapter.ident" class="mb-4">
<h3 class="h5" v-text="chapter.title"></h3>
<div class="list-group">
@@ -73,26 +73,26 @@
<span class="flex-grow-1">
<span class="d-block" v-text="section.title"></span>
<small v-if="sectionQuestionIds(section).length > 0" class="text-secondary"
v-text="sectionQuestionIds(section).length + ' Prüfungsfragen'"></small>
<small v-else>Keine Prüfungsfragen vorhanden</small>
v-text="sectionQuestionIds(section).length + ' provfrågor'"></small>
<small v-else>Inga provfrågor finns</small>
</span>
</label>
</div>
</div>
<div class="d-flex justify-content-between gap-2">
<button type="button" class="btn btn-outline-secondary" @click="goToStep(2)">Zurück</button>
<button type="button" class="btn btn-outline-secondary" @click="goToStep(2)">Tillbaka</button>
<button type="button" class="btn btn-primary" :disabled="selectedSectionIds.length === 0"
@click="openQuestionSelection">Weiter zu den Fragen</button>
@click="openQuestionSelection">Vidare till frågorna</button>
</div>
</section>
<section v-else-if="step === 4" aria-labelledby="homework-question-heading">
<h2 id="homework-question-heading" class="h4">Fragen auswählen</h2>
<p>Alle Fragen der gewählten Sektionen sind vorausgewählt. Nicht benötigte Fragen kannst du abwählen.</p>
<h2 id="homework-question-heading" class="h4">Välj frågor</h2>
<p>Alla frågor i de valda avsnitten är förvalda. Frågor du inte behöver kan du välja bort.</p>
<div class="d-flex flex-wrap gap-2 mb-3">
<button type="button" class="btn btn-outline-secondary btn-sm" @click="setAllQuestions(true)">Alle auswählen</button>
<button type="button" class="btn btn-outline-secondary btn-sm" @click="setAllQuestions(false)">Alle abwählen</button>
<span class="ms-auto"><strong v-text="selectedQuestionIds.length"></strong> von <span v-text="orderedQuestions.length"></span> ausgewählt</span>
<button type="button" class="btn btn-outline-secondary btn-sm" @click="setAllQuestions(true)">Markera alla</button>
<button type="button" class="btn btn-outline-secondary btn-sm" @click="setAllQuestions(false)">Avmarkera alla</button>
<span class="ms-auto"><strong v-text="selectedQuestionIds.length"></strong> av <span v-text="orderedQuestions.length"></span> valda</span>
</div>
<div class="course">
@@ -109,24 +109,24 @@
</div>
<div class="d-flex justify-content-between gap-2">
<button type="button" class="btn btn-outline-secondary" @click="goToStep(3)">Zurück</button>
<button type="button" class="btn btn-outline-secondary" @click="goToStep(3)">Tillbaka</button>
<button type="button" class="btn btn-primary" :disabled="selectedQuestionIds.length === 0"
@click="generateLink">Hausaufgabenlink erzeugen</button>
@click="generateLink">Skapa övningslänk</button>
</div>
</section>
<section v-else aria-labelledby="homework-link-heading">
<h2 id="homework-link-heading" class="h4">Hausaufgabe ist bereit</h2>
<p>Der Link enthält <strong v-text="selectedQuestionIds.length"></strong> Fragen in der Reihenfolge des Kurses.</p>
<label for="homework-link" class="form-label">Hausaufgabenlink</label>
<h2 id="homework-link-heading" class="h4">Övningen är klar</h2>
<p>Länken innehåller <strong v-text="selectedQuestionIds.length"></strong> frågor i kursens ordning.</p>
<label for="homework-link" class="form-label">Övningslänk</label>
<div class="input-group mb-3">
<input id="homework-link" class="form-control" type="text" readonly :value="generatedUrl" @focus="$event.target.select()">
<button type="button" class="btn btn-outline-secondary" @click="copyLink">Link kopieren</button>
<button type="button" class="btn btn-outline-secondary" @click="copyLink">Kopiera länk</button>
</div>
<div v-if="copyMessage" class="alert alert-success py-2" role="status" v-text="copyMessage"></div>
<div class="d-flex flex-wrap justify-content-between gap-2">
<button type="button" class="btn btn-outline-secondary" @click="goToStep(4)">Fragen ändern</button>
<a class="btn btn-primary" :href="generatedUrl" target="_blank" rel="noopener">Hausaufgabe öffnen</a>
<button type="button" class="btn btn-outline-secondary" @click="goToStep(4)">Ändra frågor</button>
<a class="btn btn-primary" :href="generatedUrl" target="_blank" rel="noopener">Öppna övningen</a>
</div>
</section>
</template>