waffensachkunde

Waffensachkunde – Lernsoftware für die Sachkundeprüfung nach § 7 WaffG. Barrierefrei, offline, EUPL-1.2.

/ app src shared hilfe.ts

59,7 KB Rohdatei
app/src/shared/hilfe.ts — 1112 Zeilen
1 /**
2 * Das Handbuch der Anwendung – Inhalt, Tastenlisten und Aufbau an einer Stelle.
3 *
4 * ## Warum die Hilfe ein Datenmodul ist und keine JSX-Seite
5 *
6 * Drei Gründe, in dieser Reihenfolge:
7 *
8 * 1. **Sie darf nicht auslaufen.** Ein Handbuch, das etwas anderes sagt als
9 * die Anwendung, ist schlimmer als keines – es sagt mit der Autorität
10 * eines Handbuchs etwas Falsches. Deshalb stehen Zahlen nicht als Text
11 * darin, sondern kommen aus derselben Konstante wie die Oberfläche:
12 * `SITZUNGSUMFANG`, `ANZEIGEGROESSEN`, `PRUEFUNGSPROFILE`, `KONTAKT`. Wer
13 * den Sitzungsumfang ändert, ändert das Handbuch mit, ohne es zu wissen.
14 * 2. **Sie ist prüfbar.** Als Datenstruktur lässt sich zusichern, dass jedes
15 * Kapitel eine Kennung und einen Titel hat, dass keine Kennung doppelt
16 * vorkommt und dass das Inhaltsverzeichnis auf vorhandene Kapitel zeigt.
17 * 3. **Sie ist da, wenn es klemmt.** Kein IPC-Kanal, keine Datei auf der
18 * Platte, kein Nachladen aus dem Netz. Dieselbe Überlegung wie bei
19 * `kontakt.ts`: Hilfe, die von einem funktionierenden Kanal abhängt, ist
20 * genau dann weg, wenn man sie braucht.
21 *
22 * ## Was hier NICHT steht
23 *
24 * Kein Fachwissen zum Waffenrecht. Das steht in den Erklärungen zu den Fragen
25 * und im Glossar. Dieses Handbuch erklärt ausschließlich die **Bedienung**
26 * dieser Anwendung – so verlangen es Prüfschritt 3.2.6 und Szenario S10 des
27 * Barrierefreiheits-Prüfplans.
28 */
29
30 import { ANZEIGEGROESSEN } from './ansicht';
31 import { KONTAKT } from './kontakt';
32 import { BEWERTUNG_BEZEICHNUNG } from './lernstand';
33 import { ANHEBUNG_AB_TAGEN, SITZUNGSUMFANG } from './lernplan';
34 import { HARTNAECKIG_AB_TAGEN } from './hartnaeckig';
35 import { PRUEFUNGSPROFILE } from './pruefung';
36 import { STUFE_WORT } from './reife';
37
38 // ─── Tastenlisten ────────────────────────────────────────────────────────
39
40 /**
41 * Wie mehrere Tasten zueinander stehen.
42 *
43 * Das gehört ins Modell und nicht in die Darstellung: „Strg und Plus“ heißt
44 * gleichzeitig, „1 bis 8“ heißt irgendeine davon. Wer den Unterschied nur
45 * über ein Leerzeichen zwischen zwei `<kbd>` andeutet, sagt ihn nicht.
46 */
47 export type Tastenverbindung = 'plus' | 'bis' | 'oder';
48
49 export interface Tastenzeile {
50 /** Die Tasten in der Reihenfolge, in der sie genannt werden. */
51 readonly tasten: readonly string[];
52 /** Nur nötig, wenn mehr als eine Taste genannt wird. */
53 readonly verbindung?: Tastenverbindung;
54 /** Was geschieht, wenn man sie drückt. */
55 readonly wirkung: string;
56 }
57
58 /**
59 * Die Zeichenkürzel der Lernsitzung – abschaltbar (WCAG 2.1.4).
60 *
61 * Einzelne Zeichen als Kürzel sind heikel: Sie lösen bei Spracheingabe und
62 * bei unabsichtlichen Anschlägen aus. WCAG 2.1.4 verlangt deshalb, dass sie
63 * sich abschalten lassen; läuft ein Bildschirmleser, sind sie von vornherein
64 * aus, weil die Ziffern in dessen Lesemodus für die Überschriftennavigation
65 * belegt sind.
66 *
67 * Diese Liste ist die einzige Quelle: `KuerzelHilfe` in den Einstellungen und
68 * das Kapitel „Bedienung ohne Maus“ im Handbuch lesen beide von hier. Vorher
69 * standen die Kürzel nur als JSX in `KuerzelHilfe` – ein zweiter Ort hätte
70 * ihnen beim nächsten neuen Kürzel widersprochen.
71 */
72 export const TASTENKUERZEL: readonly Tastenzeile[] = Object.freeze([
73 Object.freeze({
74 tasten: Object.freeze(['1', '8']),
75 verbindung: 'bis' as const,
76 wirkung: 'Antwortmöglichkeit an dieser Stelle wählen oder abwählen',
77 }),
78 Object.freeze({
79 tasten: Object.freeze(['Eingabe']),
80 wirkung: 'Antwort bestätigen, danach zur nächsten Frage',
81 }),
82 Object.freeze({
83 tasten: Object.freeze(['M']),
84 wirkung: 'Frage merken oder das Merken aufheben',
85 }),
86 ]);
87
88 /**
89 * Die Tasten, die immer wirken – unabhängig von jeder Einstellung.
90 *
91 * Sie sind nicht abschaltbar und müssen es auch nicht sein: Es sind entweder
92 * Standardtasten der Plattform (Tab, Pfeile, Leertaste) oder Griffe mit
93 * Zusatztaste, die WCAG 2.1.4 ausdrücklich ausnimmt.
94 */
95 export const TASTATURBEDIENUNG: readonly Tastenzeile[] = Object.freeze([
96 Object.freeze({
97 tasten: Object.freeze(['Tab']),
98 wirkung: 'Zum nächsten Bedienelement; zusammen mit der Umschalttaste zurück',
99 }),
100 Object.freeze({
101 tasten: Object.freeze(['Pfeiltasten']),
102 wirkung: 'Innerhalb einer Gruppe wechseln – etwa zwischen den Antwortmöglichkeiten',
103 }),
104 Object.freeze({
105 tasten: Object.freeze(['Leertaste']),
106 wirkung: 'Kontrollkästchen setzen oder lösen, Schaltfläche auslösen',
107 }),
108 Object.freeze({
109 tasten: Object.freeze(['Eingabe']),
110 wirkung: 'Schaltfläche auslösen',
111 }),
112 Object.freeze({
113 tasten: Object.freeze(['F1']),
114 wirkung: 'Diese Hilfe öffnen – aus jeder Ansicht, auch mitten in einer Simulation',
115 }),
116 Object.freeze({
117 tasten: Object.freeze(['Esc']),
118 wirkung: 'Die Hilfe wieder schließen',
119 }),
120 Object.freeze({
121 tasten: Object.freeze(['Strg', 'Plus']),
122 verbindung: 'plus' as const,
123 wirkung: 'Anzeige eine Stufe größer',
124 }),
125 Object.freeze({
126 tasten: Object.freeze(['Strg', 'Minus']),
127 verbindung: 'plus' as const,
128 wirkung: 'Anzeige eine Stufe kleiner',
129 }),
130 Object.freeze({
131 tasten: Object.freeze(['Strg', '0']),
132 verbindung: 'plus' as const,
133 wirkung: 'Zurück auf Normalgröße',
134 }),
135 ]);
136
137 // ─── Aufbau eines Kapitels ───────────────────────────────────────────────
138
139 /**
140 * Ein Baustein innerhalb eines Kapitels.
141 *
142 * Bewusst wenige Arten und ausschließlich reiner Text: In den Zeichenketten
143 * steht kein Markup, und nichts davon wird über `dangerouslySetInnerHTML`
144 * gerendert. Was hier nicht vorgesehen ist, kann auch nicht durch die
145 * Hintertür in die Oberfläche geraten.
146 */
147 export type Hilfeblock =
148 | { readonly art: 'absatz'; readonly text: string }
149 /** Aufzählung ohne Reihenfolge. */
150 | { readonly art: 'liste'; readonly punkte: readonly string[] }
151 /** Abfolge, bei der die Reihenfolge zählt – wird als `<ol>` gezeigt. */
152 | { readonly art: 'schritte'; readonly punkte: readonly string[] }
153 /** Tastenliste; die Zeilen kommen aus den Konstanten oben. */
154 | { readonly art: 'tasten'; readonly zeilen: readonly Tastenzeile[] };
155
156 export interface Hilfekapitel {
157 /** Stabile Kennung, Ziel des Inhaltsverzeichnisses. Nicht mehr ändern. */
158 readonly id: string;
159 readonly titel: string;
160 /** Eine Zeile, die im Inhaltsverzeichnis unter dem Titel steht. */
161 readonly kurz: string;
162 readonly bloecke: readonly Hilfeblock[];
163 }
164
165 // ─── Der Inhalt ──────────────────────────────────────────────────────────
166
167 const KLEINSTE_ANZEIGE = Math.min(...ANZEIGEGROESSEN);
168 const GROESSTE_ANZEIGE = Math.max(...ANZEIGEGROESSEN);
169
170 /**
171 * Welches Hilfekapitel zu welcher Ansicht gehört.
172 *
173 * Für das kontextsensitive F1: Wer mitten in der Prüfungssimulation drückt,
174 * landete bis 0.22.0 am Anfang des Handbuchs und musste das passende von elf
175 * Kapiteln selbst heraussuchen – unter Zeitdruck, und für
176 * Screenreader-Nutzende hieß das, das ganze Inhaltsverzeichnis durchzugehen.
177 *
178 * Die Tabelle steht hier und nicht in der Oberfläche, weil sie zu den
179 * Kapiteln gehört: Wer ein Kapitel umbenennt, sieht die Zuordnung daneben.
180 * Ansichten ohne Eintrag bekommen bewusst keines: Dort ist das
181 * Inhaltsverzeichnis die richtige Antwort. Der Startbildschirm stand bis
182 * Fassung 0.24.2 in dieser Gruppe; seit es „So kommen Sie durch“ gibt,
183 * beantwortet ein Kapitel seine Frage, und der Verweis darunter zeigt
184 * dorthin.
185 *
186 * Die Schlüssel sind die `art`-Werte aus `renderer/src/lernen/typen.ts`;
187 * `tests/hilfe.test.ts` hält fest, dass jede genannte Kennung wirklich ein
188 * Kapitel trifft.
189 */
190 export const HILFE_ZUR_ANSICHT: Readonly<Record<string, string>> = Object.freeze({
191 /* Der Startbildschirm hatte bis 0.24.2 bewusst kein Kapitel: Dort sei das
192 Inhaltsverzeichnis die richtige Antwort. Das trug, solange es kein
193 Kapitel gab, das die Frage des Startbildschirms beantwortet — „was tue
194 ich als Nächstes“. Seit es „So kommen Sie durch“ gibt, trägt es nicht
195 mehr: Wer dort F1 drückt, sucht genau diesen Text. */
196 start: 'weg',
197 sitzung: 'lernsitzung',
198 /* Bis 0.24.2 führte das Sitzungsende nach „wiedervorlage“. Das Kapitel
199 erklärt den Lernplan und kein Wort über die Anschlusswege, die am
200 Sitzungsende angeboten werden — die stehen seit 0.25.0 in
201 „lernsitzung“. */
202 auswertung: 'lernsitzung',
203 kapitelwahl: 'lernsitzung',
204 pruefungswahl: 'simulation',
205 pruefung: 'simulation',
206 pruefungsergebnis: 'simulation',
207 suche: 'suchen',
208 glossar: 'suchen',
209 });
210
211 export const HILFE_KAPITEL: readonly Hilfekapitel[] = Object.freeze([
212 Object.freeze({
213 id: 'ueberblick',
214 titel: 'Was diese Anwendung ist',
215 kurz: 'Wozu sie da ist – und wozu nicht',
216 bloecke: Object.freeze([
217 Object.freeze({
218 art: 'absatz' as const,
219 text:
220 'Diese Anwendung bereitet auf die Sachkundeprüfung nach § 7 des Waffengesetzes vor. ' +
221 'Grundlage ist der amtliche Fragenkatalog des Bundesverwaltungsamts. Welche Fassung ' +
222 'eingebaut ist, steht im Fußbereich jeder Ansicht und unter „Über diese Software“.',
223 }),
224 Object.freeze({
225 art: 'absatz' as const,
226 text:
227 'Sie läuft vollständig auf Ihrem Rechner. Es gibt kein Konto, keine Anmeldung und ' +
228 'keine Datenübertragung – auch diese Hilfe wird nicht aus dem Netz nachgeladen.',
229 }),
230 Object.freeze({
231 art: 'absatz' as const,
232 text:
233 'Was sie nicht ist: ein Ersatz für eine Ausbildung, und keine Rechtsberatung. Über das ' +
234 'Bestehen entscheidet allein der zuständige Prüfungsausschuss. Er bestimmt auch, wie ' +
235 'viele Fragen gestellt werden und wie viele davon richtig sein müssen.',
236 }),
237 Object.freeze({
238 art: 'absatz' as const,
239 text:
240 'Vor allem deckt sie nur einen Teil der Prüfung ab. Die Sachkundeprüfung besteht nach ' +
241 '§ 2 Absatz 3 der Allgemeinen Waffengesetz-Verordnung aus einem theoretischen und ' +
242 'einem praktischen Teil. Diese Anwendung übt den theoretischen: den Fragenkatalog, den ' +
243 'viele Prüfungsstellen schriftlich abfragen und um mündliche Fragen ergänzen. Der ' +
244 'praktische Teil verlangt die sichere Handhabung von Waffen und Munition ' +
245 'einschließlich ausreichender Fertigkeiten im Schießen (§ 1 Absatz 1 Nummer 3 der ' +
246 'Verordnung). Den kann keine Software vermitteln und diese auch nicht prüfen; er ' +
247 'gehört in einen Lehrgang mit einer Waffe in der Hand.',
248 }),
249 Object.freeze({
250 art: 'absatz' as const,
251 text:
252 'Wer also alle Fragen dieser Anwendung sicher beantwortet, hat den Stoff des ' +
253 'theoretischen Teils beisammen – die Prüfung bestanden hat er damit noch nicht. Wie ' +
254 'der praktische Teil bei Ihrer Prüfungsstelle abläuft und was dort verlangt wird, ' +
255 'erfahren Sie bei ihr selbst oder in Ihrem Lehrgang.',
256 }),
257 ]),
258 }),
259
260 Object.freeze({
261 id: 'erste-schritte',
262 titel: 'Erste Schritte',
263 kurz: 'Der kürzeste Weg von hier zur ersten Frage',
264 bloecke: Object.freeze([
265 Object.freeze({
266 art: 'schritte' as const,
267 punkte: Object.freeze([
268 `Auf dem Startbildschirm „Weiterlernen“ wählen. Das Programm stellt ${String(SITZUNGSUMFANG)} Fragen zusammen: zuerst, was zur Wiederholung ansteht, dann Neues. Steht mehr zur Wiederholung an, als in eine Sitzung passt, kommt zuerst, was am ehesten vergessen ist. Die Zahl lässt sich unter „Schwierigkeit“ ändern – eine beendete kurze Sitzung ist mehr wert als eine liegengelassene lange.`,
269 'Eine Antwort wählen und „Antwort bestätigen“ drücken. Erst danach zeigt sich, ob es richtig war – mit einer Erklärung und den Fundstellen im Gesetz. Bei einer offenen Frage schreiben Sie die Antwort selbst und drücken „Musterantwort anzeigen“.',
270 'Mit „Nächste Frage“ weiter. Was Sie später noch einmal ansehen wollen, legen Sie über „Frage merken“ auf die Merkliste.',
271 'Am Ende steht die Bilanz der Sitzung. Falsch beantwortete Fragen lassen sich von dort sofort wiederholen.',
272 'Wenn Ihr Prüfungstermin feststeht: Tragen Sie ihn auf dem Startbildschirm unter „Ihr Lernplan“ ein. Erst dann kann das Programm sagen, wie viel Sie täglich schaffen müssen.',
273 ]),
274 }),
275 Object.freeze({
276 art: 'absatz' as const,
277 text:
278 'Mehr ist für den Anfang nicht nötig. Alles Weitere – ein Kapitel gezielt wählen, nur ' +
279 'die Fehler üben, nach einem Stichwort suchen, eine ganze Simulation durchlaufen – steht ' +
280 'ebenfalls auf dem Startbildschirm und läuft Ihnen nicht davon.',
281 }),
282 ]),
283 }),
284
285 /*
286 Das einzige Kapitel, das nicht eine Funktion erklärt, sondern eine
287 Reihenfolge. Es fehlte bis Fassung 0.24.2, und das war die größte Lücke
288 des Handbuchs: Nachgezählt sagte im ganzen Text genau **ein** Satz, was
289 zu tun ist, um den Lernstand zu heben („Wer dem Tagespensum folgt, hält
290 sie oben.“) – als dritter Halbsatz eines Listenpunkts im fünften von elf
291 Kapiteln. „Woche“, „Rhythmus“ und „Strategie“ kamen kein einziges Mal
292 vor. Der Lernende stand nach „Erste Schritte“ vor einem Startbildschirm
293 mit fünf Einstiegen, vier Diagnosekarten, fünf Prüfungszuschnitten und
294 drei Druckstücken, ohne einen Satz zur Reihenfolge.
295
296 Zwei Grenzen sind dabei einzuhalten, beide aus Entscheidungsnotizen:
297 **keine Phasennamen** (`entscheidung-lernphasen.md` hat die vier Phasen
298 begründet abgelehnt; ein Handbuchtext, der sie einführt, holt sie durch
299 die Hintertür zurück) und **kein „Rückstand“** – die Größe ist nicht
300 wohldefiniert. Jede Wegmarke unten ist deshalb ein Zustand, den die
301 Anwendung ohnehin anzeigt, und keine neu erfundene Größe.
302 */
303 Object.freeze({
304 id: 'weg',
305 titel: 'So kommen Sie durch',
306 kurz: 'Von heute bis zum Prüfungstag',
307 bloecke: Object.freeze([
308 Object.freeze({
309 art: 'absatz' as const,
310 text:
311 'Diese Anwendung nimmt Ihnen die Auswahl ab. „Weiterlernen“ legt zuerst vor, was heute ' +
312 'fällig ist, füllt mit Fragen auf, die Sie noch nie hatten, und greift erst danach auf ' +
313 'Wiederholungen zurück, die noch nicht an der Reihe wären. Wer nichts weiter tut als ' +
314 'das, kommt an. Die übrigen Einstiege sind für die Fälle gedacht, in denen Sie mehr ' +
315 'wissen als das Programm.',
316 }),
317 Object.freeze({
318 art: 'absatz' as const,
319 text:
320 'Am Anfang sehen Sie überwiegend Fragen, die Sie noch nie hatten. Ihr Lernstand oben auf ' +
321 `dem Startbildschirm steht dann bei „${STUFE_WORT.ohne_beleg}“ oder ` +
322 `„${STUFE_WORT.zurueck}“, und das bleibt eine Weile so – eine Frage zählt erst als ` +
323 'belegt, wenn Sie sie nach mindestens einem Tag Abstand ein zweites Mal richtig ' +
324 'beantwortet haben. In dieser Zeit lohnt das Glossar: Die Fachwörter des Waffenrechts ' +
325 'entscheiden mit darüber, ob Sie eine Frage überhaupt verstehen.',
326 }),
327 Object.freeze({
328 art: 'absatz' as const,
329 text:
330 'Sobald Sie den Katalog einmal durchhaben, verschiebt sich die Arbeit vom Neuen zum ' +
331 'Wiederholen. Das Tagespensum wird dann von den fälligen Fragen bestimmt und schwankt ' +
332 'von Tag zu Tag. Jetzt lohnt der Blick auf „Ihr Lernstand im Einzelnen“: Die ' +
333 'Aufschlüsselung nach Kapiteln und Abschnitten zeigt, welcher Bereich zurückliegt, und ' +
334 'über „Kapitel wählen“ nehmen Sie ihn gezielt vor.',
335 }),
336 Object.freeze({
337 art: 'absatz' as const,
338 text:
339 `Steht oben „${STUFE_WORT.kippe}“ oder „${STUFE_WORT.reif}“, ist die erste ` +
340 'Prüfungssimulation an der Reihe. Sie beantwortet, was der Lernstand offenlässt: ob es ' +
341 'auch unter Zeitvorgabe und am Stück trägt. Ein einzelner Bogen sagt dabei wenig – er ' +
342 'zieht nur einen Teil des Katalogs. Wer wissen will, ob es vorangeht, fährt mehrere ' +
343 'Läufe mit demselben Zuschnitt und derselben Zeitvorgabe; nur Gleiches lässt sich ' +
344 'vergleichen.',
345 }),
346 Object.freeze({
347 art: 'absatz' as const,
348 text:
349 'Haben Sie einen Prüfungstermin eingetragen, ändert sich zum Termin hin etwas, das man ' +
350 `sonst nicht bemerkt: Ab ${String(ANHEBUNG_AB_TAGEN)} Tagen vor dem Termin hebt die ` +
351 'Anwendung ihren Anspruch an, wie sicher eine Frage sitzen soll. Die Wiederholungen ' +
352 'rücken dadurch enger zusammen, und das Tagespensum wächst. Das ist beabsichtigt und ' +
353 'kein Fehler.',
354 }),
355 Object.freeze({
356 art: 'absatz' as const,
357 text:
358 'In den letzten Wochen kommt es weniger auf neue Fragen an als darauf, dass das ' +
359 'Gelernte hält: die hartnäckigen Fragen abarbeiten, das Fehlerprotokoll ausdrucken und ' +
360 'auf Papier durchgehen, und den Bereich vornehmen, den die Simulation als schwach ' +
361 'gemeldet hat.',
362 }),
363 Object.freeze({
364 art: 'absatz' as const,
365 text:
366 'Einen festen Wochenplan gibt es hier nicht, und es soll auch keinen geben: Die ' +
367 'Anwendung rechnet Ihr Pensum täglich neu und weiß dabei mehr über Ihren Stand als ein ' +
368 'Plan, den Sie im Voraus aufstellen. Was sie nicht weiß, ist, wie viel Zeit Sie haben – ' +
369 'deshalb der Prüfungstermin unter „Ihr Lernplan“.',
370 }),
371 ]),
372 }),
373
374 Object.freeze({
375 id: 'lernsitzung',
376 titel: 'Die Lernsitzung',
377 kurz: 'Fragearten, Erklärungen, Merkliste, Selbstbewertung',
378 bloecke: Object.freeze([
379 Object.freeze({
380 art: 'absatz' as const,
381 text:
382 'Der amtliche Katalog kennt zwei Arten von Fragen, und die Sitzung behandelt sie ' +
383 'unterschiedlich.',
384 }),
385 Object.freeze({
386 art: 'liste' as const,
387 punkte: Object.freeze([
388 'Fragen zum Ankreuzen: Stehen runde Felder vor den Antworten, ist genau eine richtig. Stehen Kästchen davor, können es mehrere sein – dann zählt die Frage erst als richtig, wenn alle zutreffenden gewählt sind und keine weitere.',
389 `Offene Fragen: Sie schreiben die Antwort selbst. Danach erscheint die Musterantwort, und Sie bewerten sich in vier Stufen – „${BEWERTUNG_BEZEICHNUNG.nochmal}“, „${BEWERTUNG_BEZEICHNUNG.schwer}“, „${BEWERTUNG_BEZEICHNUNG.gut}“, „${BEWERTUNG_BEZEICHNUNG.leicht}“. Diese Selbstbewertung steuert, wann die Frage wiederkommt – zu milde zu bewerten schadet nur Ihnen. Ihre eigene Antwort bleibt dabei stehen, damit Sie sie Wort für Wort danebenhalten können.`,
390 'Haben Sie dieselbe offene Frage schon einmal beantwortet, erscheint nach dem Bestätigen zusätzlich Ihre letzte Antwort mit dem Datum – zwischen dem, was Sie heute geschrieben haben, und der Musterantwort. Vorher erscheint sie nicht: Sie soll kein Spickzettel sein, sondern zeigen, ob Sie heute genauer sind als beim letzten Mal.',
391 ]),
392 }),
393 Object.freeze({
394 art: 'absatz' as const,
395 text:
396 'Nach jeder Antwort steht eine Erklärung mit der Fundstelle im Gesetz da. Sie ist ein ' +
397 'redaktioneller Zusatz dieser Software und nicht Teil des amtlichen Katalogs; der ' +
398 'Wortlaut der Fragen und Antworten bleibt unangetastet.',
399 }),
400 Object.freeze({
401 art: 'absatz' as const,
402 text:
403 'Unter mancher Musterantwort steht eine Liste: „Im amtlichen Fragenkatalog ist hier ' +
404 'unterstrichen“. Das ist die Hervorhebung des Katalogs und keine Vorgabe für Ihre ' +
405 'Antwort – das Amt sagt nirgends, was es damit meint, und bei den meisten offenen ' +
406 'Fragen ist gar nichts unterstrichen. Eine richtige Antwort kann anders formuliert ' +
407 'sein und trotzdem stimmen.',
408 }),
409 Object.freeze({
410 art: 'absatz' as const,
411 text:
412 'Wer gezielt nur die offenen Fragen üben will, findet auf dem Startbildschirm den ' +
413 'Einstieg „Offene Fragen“. Sie sind der Teil der Prüfung, den ein Mensch bewertet – ' +
414 'und der einzige, den sich niemand durch Ankreuzen erschließen kann.',
415 }),
416 Object.freeze({
417 art: 'absatz' as const,
418 text:
419 'Wie eine solche Antwort gebaut ist, verrät ihr erstes Wort. An den 104 offenen ' +
420 'Fragen des Katalogs nachgezählt: 26 beginnen mit „Was“, 25 mit „Welche“, 7 mit ' +
421 '„Wie“, je 5 mit „Wann“ und „Nennen Sie“.',
422 }),
423 Object.freeze({
424 art: 'liste' as const,
425 punkte: Object.freeze([
426 '„Welche …“ und „Nennen Sie …“ verlangen eine Aufzählung. Eine einzige Nennung ist dort selten die ganze Antwort.',
427 '„Was …“ verlangt eine Bestimmung – was etwas ist oder was eine Vorschrift regelt.',
428 '„Wie …“ verlangt einen Ablauf oder eine Einordnung der Art nach: erst der eine Schritt, dann der nächste.',
429 '„Wann …“ verlangt die Voraussetzungen und nicht das Ergebnis. „Ja, wenn …“ ist eine Antwort, „Ja“ ist keine.',
430 ]),
431 }),
432 Object.freeze({
433 art: 'absatz' as const,
434 text:
435 'Nur 5 der 104 Fragen nennen selbst eine Anzahl. Wo eine dasteht, ist sie verbindlich: ' +
436 'Zwei richtige Nennungen bei drei verlangten sind eine unvollständige Antwort.',
437 }),
438 Object.freeze({
439 art: 'absatz' as const,
440 text:
441 'Drei Gewohnheiten, die am Prüfungstag zählen. Benutzen Sie das Wort, das das Gesetz ' +
442 'benutzt – das Glossar führt 118 davon. Schreiben Sie das Ergebnis zuerst und die ' +
443 'Begründung dahinter; wer mit der Begründung anfängt, lässt das Ergebnis oft weg. Und ' +
444 'hören Sie auf, wenn die Frage beantwortet ist: Was darüber hinaus steht, kann falsch ' +
445 'sein und zieht die Antwort mit hinunter.',
446 }),
447 Object.freeze({
448 art: 'absatz' as const,
449 text:
450 'Schreiben Sie die Antwort auf, bevor Sie die Musterantwort aufdecken – auch dann, ' +
451 'wenn Sie meinen, sie im Kopf zu haben. Was man beim Lesen wiedererkennt, hat man in ' +
452 'der Prüfung noch nicht geschrieben. Das ist der ganze Unterschied zwischen Üben und ' +
453 'Blättern.',
454 }),
455 Object.freeze({
456 art: 'absatz' as const,
457 text:
458 'Fachwörter in der Frage lassen sich an Ort und Stelle aufklappen – allerdings nur ' +
459 'in der Lernsitzung, nicht in der Simulation und nicht in der Suche. Das vollständige ' +
460 'Glossar erreichen Sie vom Startbildschirm aus über „Fachbegriffe nachschlagen“.',
461 }),
462 Object.freeze({
463 art: 'absatz' as const,
464 text:
465 'Bei den meisten offenen Fragen steht unter der Musterantwort eine Prüfliste: „Nach ' +
466 'Einschätzung dieser Software gehört zu einer vollständigen Antwort“. Gehen Sie diese ' +
467 'Punkte durch, bevor Sie eine der vier Stufen wählen – sonst hat Ihre Selbstbewertung ' +
468 'keinen Maßstab. Die Punkte sind eine Erkennungshilfe und kein Urteil über Ihre ' +
469 'Antwort; wo die Musterantwort aus einer einzigen Tatsache besteht, entfällt die Liste. ' +
470 'Dieselbe Prüfliste steht in der Prüfungssimulation, wenn Sie dort Ihre offenen Fragen ' +
471 'nachbewerten.',
472 }),
473 Object.freeze({
474 art: 'absatz' as const,
475 text:
476 'Haben Sie bei einer Auswahlfrage richtig geraten, sagen Sie es der Anwendung: Unter der ' +
477 'Auflösung steht dann „Ich hatte geraten“. Die Frage wird daraufhin behandelt, als hätten ' +
478 'Sie sie nicht gewusst – sie kommt in dieser Sitzung noch einmal, und als neuer Beleg für ' +
479 'Ihren Reifegrad zählt sie nicht. Das ist keine Bestrafung, sondern der einzige Weg, wie ' +
480 'die Anwendung von einem Glückstreffer erfahren kann: Ob eine angekreuzte Antwort gewusst ' +
481 'oder geraten war, sieht sie Ihnen nicht an.',
482 }),
483 Object.freeze({
484 art: 'absatz' as const,
485 text:
486 'Führt eine Erklärung Fundstellen auf, steht unter ihr „Im Gesetz nachlesen“. Die dort ' +
487 'genannten Stellen lassen sich aufklappen und zeigen den Wortlaut der Norm – die ' +
488 'Gesetzestexte sind mitgeliefert, es wird nichts nachgeladen. Bei einer Frage, die Sie ' +
489 'zum dritten Mal falsch haben, ist das der Ort, an dem sich das Wiederholen lohnt: Der ' +
490 'amtliche Wortlaut sagt oft in einem Halbsatz, woran die Frage hängt.',
491 }),
492 Object.freeze({
493 art: 'absatz' as const,
494 text:
495 'Am Ende einer Sitzung bietet die Anwendung an, was sich unmittelbar anschließen lässt: ' +
496 'weiterlernen mit dem, was heute noch fällig ist, die in dieser Sitzung falsch ' +
497 'beantworteten Fragen sofort wiederholen, oder unter „Verwandte Fragen“ die Fragen ' +
498 'üben, die denselben Gegenstand behandeln. Diese Zuordnung ist eine redaktionelle ' +
499 'Ergänzung dieser Software; der amtliche Katalog kennt keine Beziehung zwischen zwei ' +
500 'Fragen.',
501 }),
502 Object.freeze({
503 art: 'absatz' as const,
504 text:
505 'Zwei der Einstiege auf dem Startbildschirm sind leicht zu verwechseln. „Nur Fehler“ ' +
506 'sieht allein auf Ihre jeweils letzte Antwort: Eine Frage, die dreimal danebenging und ' +
507 'zuletzt saß, steht dort nicht mehr. „Gemerkte Fragen“ enthält, was Sie selbst mit dem ' +
508 'Merkzeichen versehen haben, und sonst nichts – die Anwendung trägt dort nie von sich ' +
509 'aus etwas ein.',
510 }),
511 Object.freeze({
512 art: 'absatz' as const,
513 text:
514 'Eine Sitzung lässt sich jederzeit über „Sitzung beenden“ verlassen. Was Sie bis dahin ' +
515 'beantwortet haben, ist bereits gespeichert – es geht nichts verloren.',
516 }),
517 ]),
518 }),
519
520 Object.freeze({
521 id: 'suchen',
522 /* Dieselbe Benennung wie auf dem Startbildschirm, auf der Schaltfläche
523 und über der Zielansicht. Bis Fassung 0.20.0 hieß dieselbe Sache hier
524 „Fragen finden und nachschlagen“ und dort „Fragen finden“. */
525 titel: 'Fragen durchsuchen',
526 kurz: 'Ein Stichwort, eine Nummer – oder ein ganzes Kapitel der Reihe nach',
527 bloecke: Object.freeze([
528 Object.freeze({
529 art: 'absatz' as const,
530 text:
531 'Über „Fragen durchsuchen“ auf dem Startbildschirm lässt sich der Wortlaut aller ' +
532 'Fragen samt ihrer Antwortmöglichkeiten durchsuchen. Groß- und Kleinschreibung, ' +
533 'Umlaute und ß spielen dabei keine Rolle: „schiessen“ findet dasselbe wie ' +
534 '„schießen“, „Buechse“ dasselbe wie „Büchse“.',
535 }),
536 Object.freeze({
537 art: 'liste' as const,
538 punkte: Object.freeze([
539 'Gesucht wird auch im Wortinneren. Wer „Besitzkarte“ eingibt, findet die „Waffenbesitzkarte“ – deutsche Zusammensetzungen verstecken das gesuchte Wort sonst.',
540 'Mehrere Wörter grenzen ein: Jedes muss in derselben Frage vorkommen, gleich ob in der Frage selbst oder in einer Antwortmöglichkeit.',
541 'Eine Fragennummer wie „2.150“ oder „45“ führt direkt zur Frage. Gibt es die Nummer in mehreren Kapiteln, stehen alle nebeneinander.',
542 'Bei leerem Suchfeld steht der gewählte Bereich vollständig da, in der Reihenfolge des amtlichen Katalogs – so lässt sich ein Kapitel der Reihe nach durchsehen.',
543 'Die Zeile über der Liste nennt den gewählten Bereich, sobald einer gesetzt ist – auch dann, wenn es Treffer gibt.',
544 ]),
545 }),
546 Object.freeze({
547 art: 'absatz' as const,
548 text:
549 'Jeder Treffer sagt, wo er sitzt: im Fragetext, im Wortinneren, in einer bestimmten ' +
550 'Antwortmöglichkeit – oder nur in der Musterantwort. Die wird in der Trefferliste ' +
551 'nicht gezeigt, denn bei den offenen Fragen ist sie die Lösung. Welche ' +
552 'Antwortmöglichkeit richtig ist, verrät die Suche ebenfalls nicht.',
553 }),
554 Object.freeze({
555 art: 'absatz' as const,
556 text:
557 'Von jedem Treffer führt ein Knopf direkt ins Üben, und aus der Auswertung geht es ' +
558 'zurück in die Suche: Der Suchbegriff steht dann noch da, und eine Einschränkung ' +
559 'auf einen Bereich kommt mit – Sie finden dieselbe Trefferliste vor, wieder von ' +
560 'ihrem Anfang an. Wer stattdessen zum Startbildschirm zurückgeht, beginnt beim ' +
561 'nächsten Öffnen der Suche von vorn: leeres Feld, ganzer Katalog.',
562 }),
563 Object.freeze({
564 art: 'absatz' as const,
565 text:
566 'Findet die Suche nichts, bleibt sie nicht dabei stehen: Sie benennt das Wort, das ' +
567 'im Katalog nicht vorkommt, rechnet vor, was ohne die Bereichseinschränkung zu ' +
568 'finden wäre, und schlägt bei zusammengesetzten Wörtern eine Zerlegung vor.',
569 }),
570 Object.freeze({
571 art: 'absatz' as const,
572 text:
573 'Wo der Katalog ein anderes Wort benutzt als der Alltag – „abhanden gekommen“ statt ' +
574 '„gestohlen“, „Sicherheitsbehältnis“ statt „Tresor“ –, bietet die Suche das an. Dieser ' +
575 'Vorschlag erscheint unabhängig davon, ob Sie schon Treffer haben: Auch wer etwas ' +
576 'findet, übersieht damit unter Umständen die Fragen, die den amtlichen Ausdruck ' +
577 'benutzen.',
578 }),
579 ]),
580 }),
581
582 Object.freeze({
583 id: 'wiedervorlage',
584 titel: 'Wiedervorlage und Lernplan',
585 kurz: 'Warum eine Frage wiederkommt – und wann',
586 bloecke: Object.freeze([
587 Object.freeze({
588 art: 'absatz' as const,
589 text:
590 'Das Programm schätzt für jede Frage, wie sicher Sie sie gerade noch abrufen können, ' +
591 'und legt danach fest, wann sie wieder vorgelegt wird. Was sitzt, kommt selten; was ' +
592 'wackelt, kommt bald. Einstellen müssen Sie dafür nichts.',
593 }),
594 Object.freeze({
595 art: 'absatz' as const,
596 text:
597 'Tragen Sie einen Prüfungstermin ein, rücken die Wiederholungen zum Termin hin enger ' +
598 'zusammen, und das Programm nennt ein Tagespensum. Steht kein Termin fest, lassen Sie ' +
599 'das Feld leer – dann wird ohne Stichtag geplant.',
600 }),
601 Object.freeze({
602 art: 'absatz' as const,
603 text:
604 'Das Pensum rechnet sich täglich neu. Sobald Sie heute etwas bearbeitet haben, nennt ' +
605 'es Ihre Arbeit und was wirklich noch offen ist. Wer Tage auslässt, bekommt danach ' +
606 'mehr – ein Rückstand wird nicht gesondert angemahnt, er steht bereits im Pensum. Am ' +
607 'Prüfungstag selbst kommen keine neuen Fragen mehr dazu: Eine Frage, die an diesem ' +
608 'Tag zum ersten Mal auftaucht, lässt sich nicht mehr belegen. Wiederholungen bleiben ' +
609 'unberührt.',
610 }),
611 Object.freeze({
612 art: 'absatz' as const,
613 text:
614 'Unter „Drucken“ lassen sich drei Dokumente als PDF speichern; Sie wählen dort zuerst, ' +
615 'welches es sein soll. Der „Lernbericht“ zeigt Ihren Stand ' +
616 'ohne Fragen und Antworten. Das „Fehlerprotokoll“ enthält die Fragen, die Sie zuletzt ' +
617 'falsch beantwortet haben – mit allen Antwortmöglichkeiten, der richtigen Antwort und ' +
618 'einer Begründung, wahlweise kurz oder ausführlich. Die „Fragenliste“ ist ein Bogen ' +
619 'zum Bearbeiten auf Papier: Kästchen zum Ankreuzen, Linien für die offenen Fragen, und ' +
620 'die Lösungen erst im Anhang. Sie lässt sich kapitel- oder abschnittsweise erzeugen.',
621 }),
622 Object.freeze({
623 art: 'absatz' as const,
624 text:
625 'Beim Fehlerprotokoll und bei der Fragenliste steht vor dem Speichern, wie viele ' +
626 'Seiten zu erwarten sind – die Zahl kann groß werden. Ein Fehlerprotokoll mit ' +
627 'ausführlicher Begründung über den ganzen Katalog ergibt im Großdruck weit über ' +
628 'tausend Seiten. Der Lernbericht bekommt keine Schätzung; er ist immer kurz. Jedes Dokument nennt auf ' +
629 'jeder Seite die Herkunft der Fragen und weist aus, was davon aus dem amtlichen ' +
630 'Katalog stammt und was Ergänzung dieser Software ist.',
631 }),
632 Object.freeze({
633 art: 'absatz' as const,
634 text:
635 'Ihr Stand steht auf dem Startbildschirm unter „Ihr Lernstand im Einzelnen“, ' +
636 'aufgeschlüsselt nach Bereichen. Dort steht auch, wann Sie zuletzt gelernt haben – ' +
637 '„heute“, „gestern“, „vor 14 Tagen“ oder „noch nie“. Wer nach einer Pause ' +
638 'zurückkommt, sieht einen gefallenen Stand und ein gewachsenes Pensum; diese Zeile ' +
639 'ist die Erklärung dazu. Wer den Stand schwarz auf weiß braucht, gibt ihn unter ' +
640 '„Drucken“ als Lernbericht aus.',
641 }),
642 Object.freeze({
643 art: 'absatz' as const,
644 text:
645 'Ganz oben steht, wie weit Sie sind: ein Wort und die Zahl, auf der es beruht – ' +
646 `wie viele Ihrer Fragen belegt sitzen und wie viele es insgesamt sind. Die vier Worte sind ` +
647 `„${STUFE_WORT.ohne_beleg}“, „${STUFE_WORT.zurueck}“, „${STUFE_WORT.kippe}“ und ` +
648 `„${STUFE_WORT.reif}“. Dasselbe steht je Kapitel und Abschnitt darunter.`,
649 }),
650 Object.freeze({
651 art: 'absatz' as const,
652 text:
653 'Belegt heißt: Sie haben die Frage nach mindestens einem Tag Abstand noch einmal ' +
654 'richtig beantwortet. Beim ersten Mal zählt sie nicht mit, auch wenn Sie richtig ' +
655 'geantwortet haben. Der Grund ist nicht Strenge, sondern Ehrlichkeit: Dass Sie die ' +
656 'richtige Antwort unter mehreren wiedererkennen, heißt noch nicht, dass Sie sie ' +
657 'morgen erinnern. Erst das Wiedersehen zeigt es.',
658 }),
659 Object.freeze({
660 art: 'liste' as const,
661 punkte: Object.freeze([
662 'Die Zahl kann fallen, ohne dass Sie etwas falsch gemacht haben – ein Beleg altert. ' +
663 'Wer dem Tagespensum folgt, hält sie oben.',
664 'Eine falsche Antwort nimmt den Beleg wieder weg. Die Frage kommt dann bald erneut.',
665 'Nach dem ersten Durchgang durch den Katalog steht die Zahl noch bei null. Das ist ' +
666 'richtig so – belegt ist dann noch nichts. Wie viel Sie bearbeitet haben, steht ' +
667 'gleich daneben.',
668 ]),
669 }),
670 Object.freeze({
671 art: 'absatz' as const,
672 text:
673 'Die Zahl sagt, was belegt sitzt – nicht, was in der Prüfung herauskäme. Raten ist ' +
674 'nicht eingerechnet, nie Gesehenes gilt als nicht gekonnt. Sie ist also eher zu ' +
675 'niedrig als zu hoch. Über das Bestehen entscheidet allein der Prüfungsausschuss.',
676 }),
677 Object.freeze({
678 art: 'absatz' as const,
679 text:
680 'Ein Sonderfall: Liegt ein einzelner Bereich weit zurück, kann das ganze Urteil ' +
681 'darauf zurückfallen, auch wenn es sonst gut aussieht. Bei Notwehr und Notstand ' +
682 'lassen manche Prüfungsstellen nur zwei Fehler zu, gleich wie gut der Rest ist. ' +
683 'Steht der Bereich zurück, sagt das Programm es an dieser Stelle ausdrücklich.',
684 }),
685 Object.freeze({
686 art: 'absatz' as const,
687 text:
688 'Nicht jede Prüfungsstelle prüft Kapitel IV, „Not- und Seenotsignalmittel“. Unter ' +
689 '„Ihr Lernplan“ steht dafür ein Schalter: „Kapitel IV – Not- und Seenotsignalmittel ' +
690 'mitlernen“. Schalten Sie ihn aus, kommen aus diesem Kapitel keine Fragen mehr in ' +
691 'Ihre Lernsitzungen, und Fortschritt, Tagespensum und Prognose rechnen ohne sie. Das ' +
692 'ist ein knappes Sechstel des Katalogs – wer es mitschleppt, ohne es zu brauchen, ' +
693 'sieht dauerhaft zu wenig Fortschritt.',
694 }),
695 Object.freeze({
696 art: 'absatz' as const,
697 text:
698 'Beim allerersten Start werden Sie danach gefragt, noch vor dem Startbildschirm – ' +
699 'damit der Schalter dort ankommt, wo er wirkt. Die Frage erscheint einmal; danach ' +
700 'ändern Sie es unter „Ihr Lernplan“.',
701 }),
702 Object.freeze({
703 art: 'absatz' as const,
704 text:
705 'Fragen Sie im Zweifel bei Ihrer Prüfungsstelle nach, bevor Sie abwählen. Die ' +
706 'Entscheidung gehört zum Lernprofil: Zwei Personen an einem Rechner können sie ' +
707 'verschieden treffen. Verloren geht dabei nichts – was Sie in Kapitel IV bereits ' +
708 'gelernt haben, bleibt gespeichert und ist beim Wiedereinschalten vollständig ' +
709 'wieder da. Nachschlagen können Sie die Fragen jederzeit über „Fragen durchsuchen“, ' +
710 'und in der Kapitelwahl bleibt Kapitel IV zum Üben stehen; es trägt dort den ' +
711 'Vermerk, dass es für dieses Profil abgewählt ist.',
712 }),
713 Object.freeze({
714 art: 'absatz' as const,
715 text:
716 'In der Prüfungssimulation steht dasselbe Kästchen noch einmal. Es übernimmt Ihre ' +
717 'Einstellung von hier als Vorgabe: Wer Kapitel IV abgewählt hat, bekommt daraus auch ' +
718 'in der Simulation keine Frage. Für eine einzelne Simulation lässt es sich umstellen – ' +
719 'am Schalter für das tägliche Lernen ändert das nichts.',
720 }),
721 Object.freeze({
722 art: 'absatz' as const,
723 text:
724 'Unter „Ihr Lernstand im Einzelnen“ erscheint der Abschnitt „Hartnäckige Fragen“, ' +
725 `sobald Ihnen eine Frage an ${String(HARTNAECKIG_AB_TAGEN)} verschiedenen Tagen ` +
726 'danebengegangen ist. Das ist etwas anderes als der Einstieg „Nur Fehler“, der allein ' +
727 'Ihre letzte Antwort ansieht. Mit „Diese Fragen üben“ starten Sie eine Sitzung aus genau ' +
728 'diesen Fragen. Nehmen Sie sich dort Zeit für die Erklärung und klappen Sie die ' +
729 'Fundstelle auf: Bloßes Wiederholen hat bei diesen Fragen schon dreimal nicht gereicht. ' +
730 'Solange keine Frage die Schwelle erreicht, erscheint der Abschnitt nicht.',
731 }),
732 Object.freeze({
733 art: 'absatz' as const,
734 text:
735 'Steht bei einer hartnäckigen Frage „Sie wählen dort meist …“, haben Sie immer wieder ' +
736 'dieselbe falsche Antwort angekreuzt. Dann verwechseln Sie zwei Dinge, und es hilft ein ' +
737 'Merksatz, der sie auseinanderhält. Fehlt dieser Zusatz, streuen Ihre Fehlgriffe über ' +
738 'mehrere Antworten – dann fehlt der Stoff und nicht die Unterscheidung.',
739 }),
740 ]),
741 }),
742
743 Object.freeze({
744 id: 'simulation',
745 titel: 'Die Prüfungssimulation',
746 kurz: 'Ein ganzer Bogen am Stück – und unterbrechbar',
747 bloecke: Object.freeze([
748 Object.freeze({
749 art: 'absatz' as const,
750 text:
751 'In der Simulation bearbeiten Sie einen Bogen – den Fragensatz eines Durchgangs – am ' +
752 'Stück, ohne Rückmeldung zwischendurch, so ' +
753 `wie es in der Prüfung zugeht. ${String(PRUEFUNGSPROFILE.length)} Zuschnitte stehen ` +
754 'bereit; sie unterscheiden sich in Fragenzahl, Zeit, Bestehensgrenze, im Anteil ' +
755 'offener Fragen, in der Verteilung über die Themenbereiche und darin, ob nach Quote ' +
756 'oder nach Fehlerpunkten gewertet wird. Keiner davon ist „die“ amtliche Prüfung – ' +
757 'welche Regeln gelten, bestimmt Ihr Prüfungsausschuss.',
758 }),
759 Object.freeze({
760 art: 'absatz' as const,
761 text:
762 'Auch ein bestandener Durchgang bildet immer nur den theoretischen Teil ab. Zur ' +
763 'Sachkundeprüfung gehört nach § 2 Absatz 3 der Allgemeinen Waffengesetz-Verordnung ' +
764 'ein praktischer Teil, den diese Anwendung weder übt noch prüft, und viele ' +
765 'Prüfungsstellen stellen zusätzlich mündliche Fragen. Siehe „Was diese Anwendung ' +
766 'ist“.',
767 }),
768 Object.freeze({
769 art: 'absatz' as const,
770 text:
771 'Im Profil „Selbst einstellen“ wählen Sie Fragenzahl, Zeit, Bestehensgrenze und den ' +
772 'Anteil offener Fragen selbst. Der Anteil ist eine Bitte, keine Zusage: Der amtliche ' +
773 'Katalog enthält nur einen Teil an offenen Fragen, und wer Kapitel IV abwählt, ' +
774 'verliert davon weitere. Unter dem Feld steht deshalb, wie viele offene Fragen Ihr ' +
775 'Wunsch ergäbe und wie viele wirklich zur Verfügung stehen. Reicht der Vorrat nicht, ' +
776 'füllt die Anwendung mit Auswahlfragen auf und sagt es Ihnen vorher. Weicht der fertige ' +
777 'Bogen aus einem anderen Grund von den Vorgaben ab – etwa weil ein Themenbereich zu ' +
778 'wenige Fragen hat –, steht das zu Beginn der Simulation als Hinweis über den Fragen.',
779 }),
780 Object.freeze({
781 art: 'absatz' as const,
782 text:
783 'Auch im Prüfungsbogen lässt sich eine Frage merken. Das ist die Notiz an sich ' +
784 'selbst für den Fall, den die Auswertung nicht kennt: Sie haben geraten und richtig ' +
785 'getroffen. Nach der Abgabe steht dort nur „richtig“, und ohne Merkzeichen finden ' +
786 'Sie die Frage nie wieder. Über die Lösung verrät der Knopf nichts.',
787 }),
788 Object.freeze({
789 art: 'absatz' as const,
790 text:
791 'Nach der Abgabe folgt bei offenen Fragen ein zweiter Schritt: Sie sehen Ihre eigene ' +
792 'Antwort neben der Musterantwort und entscheiden selbst, ob Sie das Wesentliche ' +
793 'getroffen haben – so, wie es in der Prüfung der Prüfungsausschuss täte. Ohne Wertung ' +
794 'zählt eine Antwort als falsch. Erst danach steht das Ergebnis fest.',
795 }),
796 Object.freeze({
797 art: 'absatz' as const,
798 text:
799 'Die Zeitvorgabe lässt sich verlängern oder ganz abschalten. Wer einen ' +
800 'Nachteilsausgleich bekommt, stellt hier dieselbe Verlängerung ein, die ihm in der ' +
801 'Prüfung zusteht, und übt unter den Bedingungen, unter denen er geprüft wird.',
802 }),
803 Object.freeze({
804 art: 'absatz' as const,
805 text:
806 'Ob Ihnen in der Prüfung ein Nachteilsausgleich zusteht, entscheidet diese Anwendung ' +
807 'nicht – und das Waffenrecht regelt ihn nicht. Nachgeschlagen: Das Wort kommt weder ' +
808 'im Waffengesetz noch in der Allgemeinen Waffengesetz-Verordnung vor. Entschieden ' +
809 'wird es dort, wo Ihre Prüfung abgenommen wird.',
810 }),
811 Object.freeze({
812 art: 'absatz' as const,
813 text:
814 'Wer das ist, hängt an Ihrem Weg. Die zuständige Behörde bildet die Prüfungsausschüsse ' +
815 '(§ 2 Absatz 1 AWaffV). Gehören Sie einem schießsportlichen Verein an, der einem ' +
816 'anerkannten Schießsportverband angehört, kann der Verein die Prüfung für seine ' +
817 'Mitglieder selbst abnehmen und bildet dafür einen eigenen Ausschuss ' +
818 '(§ 3 Absatz 5 AWaffV).',
819 }),
820 Object.freeze({
821 art: 'liste' as const,
822 punkte: Object.freeze([
823 'Ob ein Ausgleich möglich ist – und in welcher Form. Mehr Zeit ist nur eine von mehreren.',
824 'Welchen Nachweis die Stelle sehen will.',
825 'Bis wann der Antrag vorliegen muss.',
826 'Ob auch der praktische Teil berührt ist. Die Prüfung besteht aus einem theoretischen und einem praktischen Teil (§ 2 Absatz 3 AWaffV); diese Anwendung bereitet nur auf den theoretischen vor.',
827 ]),
828 }),
829 Object.freeze({
830 art: 'absatz' as const,
831 text:
832 'Fragen Sie früh, am besten vor der Anmeldung. Und üben Sie in beiden Zuständen: ' +
833 'Solange nichts zugesagt ist, ist die Zeitvorgabe ohne Verlängerung der Maßstab. Ein ' +
834 'zugesagter Ausgleich ist dann ein Vorteil und keine Voraussetzung.',
835 }),
836 Object.freeze({
837 art: 'absatz' as const,
838 text:
839 'Falls es beim ersten Mal nicht reicht: Die Prüfung lässt sich wiederholen, auch ' +
840 'mehrmals; der Prüfungsausschuss kann dafür eine Frist bestimmen ' +
841 '(§ 2 Absatz 5 AWaffV).',
842 }),
843 Object.freeze({
844 art: 'absatz' as const,
845 text:
846 'Eine unterbrochene Simulation geht nicht verloren: Wird das Fenster geschlossen oder ' +
847 'fällt der Strom aus, bietet der Startbildschirm sie beim nächsten Start zum ' +
848 'Fortsetzen an. Die Uhr steht still, solange das Programm zu ist, und läuft erst nach ' +
849 'einer ausdrücklichen Bestätigung weiter.',
850 }),
851 Object.freeze({
852 art: 'absatz' as const,
853 text:
854 'Zum Unterbrechen genügt es also, das Fenster zu schließen. „Simulation abbrechen“ im ' +
855 'laufenden Bogen tut etwas anderes: Es verwirft ihn. Die Anwendung fragt vorher nach, ' +
856 'und ein verworfener Bogen erscheint auch nicht im Verlauf – dort steht nur, was ' +
857 'abgegeben und ausgewertet wurde. Offen sein kann außerdem immer nur eine Simulation ' +
858 'je Lernprofil: Wer eine neue startet, verwirft damit die alte. Und wer seinen ' +
859 'Lernstand unter „Neu anfangen“ zurücksetzt, verliert einen offenen Bogen mit.',
860 }),
861 Object.freeze({
862 art: 'absatz' as const,
863 text:
864 'Diese Hilfe können Sie auch mitten in einer laufenden Simulation öffnen; sie bleibt ' +
865 'stehen, wo sie ist. Die Uhr läuft dabei weiter – sie anzuhalten würde die Simulation ' +
866 'verfälschen.',
867 }),
868 Object.freeze({
869 art: 'absatz' as const,
870 text:
871 'Ein Simulationslauf ist kein Nebenschauplatz. Jede Frage, die Sie im Bogen beantwortet ' +
872 'haben, geht denselben Weg wie eine Antwort aus der Lernsitzung: Sie zählt in der ' +
873 'Tagesbilanz mit, sie zählt für den Reifegrad, und die Anwendung setzt daraufhin den ' +
874 'nächsten Vorlagetermin. Eine falsch beantwortete Frage verliert dabei ihren Beleg. Ihr ' +
875 'Lernstand kann nach einem schwachen Bogen also sinken – das ist dieselbe Regel wie beim ' +
876 'täglichen Lernen und kein Fehler. Fragen, die im Bogen standen, zu denen Sie aber nicht ' +
877 'mehr gekommen sind, bleiben unberührt: Sie erscheinen in der Auswertung als nicht ' +
878 'beantwortet, verschieben aber keinen Termin und nehmen keinen Beleg weg.',
879 }),
880 Object.freeze({
881 art: 'absatz' as const,
882 text:
883 'Die Auswertung sagt mehr als bestanden oder nicht bestanden. Unter „Ergebnis nach ' +
884 'Themenbereichen“ steht, wie Sie in jedem Bereich abgeschnitten haben – dort sehen Sie, ' +
885 'welches Kapitel Sie als Nächstes vornehmen sollten. „Wiederkehrende Lücken“ erscheint, ' +
886 'sobald mehrere Simulationen vorliegen, und nennt die Bereiche, die nicht nur einmal, ' +
887 'sondern wiederholt unter der Grenze lagen; das ist der Unterschied zwischen einem ' +
888 'schlechten Tag und einer echten Lücke. Mit „Fehler wiederholen“ starten Sie unmittelbar ' +
889 'eine Lernsitzung aus den Fragen, die in diesem Bogen danebengingen.',
890 }),
891 ]),
892 }),
893
894 Object.freeze({
895 id: 'tastatur',
896 titel: 'Bedienung ohne Maus',
897 kurz: 'Alles ist mit der Tastatur erreichbar',
898 bloecke: Object.freeze([
899 Object.freeze({
900 art: 'absatz' as const,
901 text:
902 'Es gibt keine Funktion, die nur mit der Maus erreichbar wäre. Der erste Tabstopp im ' +
903 'Fenster ist immer der Sprunglink „Direkt zum Hauptinhalt springen“.',
904 }),
905 Object.freeze({ art: 'tasten' as const, zeilen: TASTATURBEDIENUNG }),
906 Object.freeze({
907 art: 'absatz' as const,
908 text:
909 'Unter macOS steht die Befehlstaste an der Stelle von Strg. Die Anzeigegröße lässt ' +
910 'sich außerdem über das Menü „Ansicht“ und auf dem Startbildschirm unter ' +
911 '„Anzeigegröße“ ändern.',
912 }),
913 Object.freeze({
914 art: 'absatz' as const,
915 text:
916 'Dazu kommen drei Kürzel aus einzelnen Zeichen. Sie wirken nur in der Lernsitzung und ' +
917 'nur außerhalb von Textfeldern, und sie lassen sich abschalten. Läuft ein ' +
918 'Bildschirmleser, sind sie von vornherein aus: Dessen Lesemodus belegt die Ziffern ' +
919 'bereits für die Navigation nach Überschriften.',
920 }),
921 Object.freeze({ art: 'tasten' as const, zeilen: TASTENKUERZEL }),
922 ]),
923 }),
924
925 Object.freeze({
926 id: 'anpassen',
927 titel: 'Anzeige, Farben und Vorlesen',
928 kurz: 'Was sich einstellen lässt, wenn das Lesen schwerfällt',
929 bloecke: Object.freeze([
930 Object.freeze({
931 art: 'absatz' as const,
932 text:
933 'Alle Einstellungen stehen auf dem Startbildschirm unter „Einstellungen“, gelten ' +
934 'sofort und überstehen das Schließen des Programms.',
935 }),
936 Object.freeze({
937 art: 'liste' as const,
938 punkte: Object.freeze([
939 `Anzeigegröße: ${String(KLEINSTE_ANZEIGE)} bis ${String(GROESSTE_ANZEIGE)} Prozent. Vergrößert wird alles gemeinsam, auch die Prüfzeichen auf den Bildern – eine reine Schriftvergrößerung ließe ausgerechnet die unberührt.`,
940 'Farbschema: hell, dunkel oder hoher Kontrast, wahlweise nach Vorgabe des Betriebssystems. Schaltet das System auf hohen Kontrast, folgt die Anwendung von selbst.',
941 'Textdarstellung: drei Stufen für Zeilen-, Wort- und Zeichenabstand. Sie sind etwas anderes als die Anzeigegröße: Die vergrößert alles gemeinsam und hilft bei zu kleiner Schrift; hier bekommt der Text mehr Luft zwischen den Buchstaben, ohne größer zu werden. Wer mit Legasthenie liest, braucht oft genau das.',
942 'Vorlesen: blendet eine Schaltfläche ein, die vorliest, was gerade dasteht – die Frage mit ihren Antwortmöglichkeiten, nach dem Bestätigen die Rückmeldung. Gesprochen wird nur auf Knopfdruck. Wer das nicht bei jeder Frage tun möchte, schaltet darunter „Frage und Rückmeldung von selbst vorlesen“ ein; mit „Bei falscher Antwort die ausführliche Begründung vorlesen“ kommt der lange Text unter „Warum das so ist“ dazu, aber nur wenn es danebenging. Beide stehen ab Werk aus und lassen sich einzeln setzen. Das selbsttätige Vorlesen gilt nur in der Lernsitzung, nicht in der Simulation – dort spricht die Anwendung ausschließlich auf Knopfdruck. Benutzt werden die Stimmen Ihres Betriebssystems. Gedacht ist das für Menschen ohne Bildschirmleser – beide zugleich sprechen durcheinander.',
943 'Schwierigkeit: zwei Schalter, beide ab Werk aus. Ausgeschaltet steht die Anwendung so nah am amtlichen Katalog wie möglich; eingeschaltet wird es schwerer, ohne dass ein Lernvorteil belegt wäre.',
944 ]),
945 }),
946 Object.freeze({
947 art: 'absatz' as const,
948 text:
949 'Die Rechtschreibprüfung ist im ganzen Fenster abgeschaltet, auch im Textfeld der ' +
950 'offenen Fragen. Der Grund: Ihre Wörterbücher würden aus dem Netz nachgeladen, und ' +
951 'die Zusage, dass nichts übertragen wird, gilt ohne Ausnahme.',
952 }),
953 ]),
954 }),
955
956 Object.freeze({
957 id: 'daten',
958 titel: 'Profile und Ihre Daten',
959 kurz: 'Wo der Lernstand liegt und wie er wieder verschwindet',
960 bloecke: Object.freeze([
961 Object.freeze({
962 art: 'absatz' as const,
963 text:
964 'Mehrere Personen können dieselbe Installation benutzen: Jedes Profil hat seinen ' +
965 'eigenen Lernstand, seine eigene Merkliste und seinen eigenen Prüfungstermin. ' +
966 'Angelegt, umbenannt, gewechselt und gelöscht werden Profile auf dem Startbildschirm ' +
967 'unter „Einstellungen“ – nur dort, weil dort weder eine Sitzung noch eine Simulation ' +
968 'läuft, die ein Wechsel durcheinanderbringen könnte.',
969 }),
970 Object.freeze({
971 art: 'absatz' as const,
972 text:
973 'Der Lernstand liegt in einer Datenbankdatei in Ihrem Benutzerprofil – unter Windows ' +
974 'im Ordner „AppData“, unter macOS unter „Library/Application Support“, jeweils in ' +
975 'einem Ordner mit dem Namen der Anwendung. Er verlässt den Rechner nicht.',
976 }),
977 Object.freeze({
978 art: 'absatz' as const,
979 text:
980 'Unter „Neu anfangen“ lässt sich der Lernstand des gewählten Profils vollständig ' +
981 'zurücksetzen. Das ist endgültig und wird vorher noch einmal abgefragt.',
982 }),
983 Object.freeze({
984 art: 'absatz' as const,
985 text:
986 'Sichern und übertragen: Auf dem Startbildschirm gibt es den Abschnitt „Lernstand ' +
987 'sichern und übertragen“. „Sicherung speichern“ schreibt Ihren ganzen Lernstand in eine ' +
988 'einzige Datei – alle Profile, alle Antworten, die Merklisten, die Prüfungstermine und ' +
989 'den Verlauf Ihrer Simulationen. Diese Datei können Sie aufheben oder auf einen anderen ' +
990 'Rechner mitnehmen. Es wird nichts übertragen: Die Datei geht nur dorthin, wohin Sie sie ' +
991 'legen.',
992 }),
993 Object.freeze({
994 art: 'absatz' as const,
995 text:
996 'Zusätzlich legt die Anwendung von selbst Sicherheitskopien an: einmal wöchentlich ' +
997 'beim Beenden, und vor jedem Schritt, der etwas vernichtet – „Neu anfangen“ und das ' +
998 'Löschen eines Lernprofils. Sie liegen im Unterordner „sicherungen“ neben Ihrer ' +
999 'Lernstandsdatei; „Ordner der Sicherheitskopien öffnen“ auf derselben Karte bringt ' +
1000 'Sie hin. Diese Kopien liegen auf derselben Festplatte und ersetzen deshalb keine ' +
1001 'Sicherung, die Sie anderswo aufheben.',
1002 }),
1003 Object.freeze({
1004 art: 'absatz' as const,
1005 text:
1006 '„Sicherung auswählen und ansehen“ geht den anderen Weg. Sie sehen zuerst, was in der ' +
1007 'Datei steht – wie viele Profile, wie viele Antworten, wann zuletzt gelernt wurde – und ' +
1008 'daneben dasselbe für den Stand auf diesem Rechner. Erst danach entscheiden Sie. Was Sie ' +
1009 'einlesen, tritt an die Stelle Ihres jetzigen Standes; zusammengeführt wird nichts. ' +
1010 'Unmittelbar vorher legt die Anwendung von selbst eine Sicherung Ihres jetzigen Standes ' +
1011 'an und nennt Ihnen deren Namen – das ist der Weg zurück.',
1012 }),
1013 Object.freeze({
1014 art: 'absatz' as const,
1015 text:
1016 'Beim Einlesen haben Sie zwei Möglichkeiten. „Ersetzen“ setzt Ihren ganzen ' +
1017 'Lernstand durch den aus der Datei – alles, was nur hier steht, ist danach fort. Vorher ' +
1018 'zählt die Anwendung aus, was das wäre, und nennt es Profil für Profil. „Ein Profil ' +
1019 'dazunehmen“ lässt alles Vorhandene unberührt und stellt das gewählte Profil daneben; ' +
1020 'das ist der Weg, wenn Sie auf zwei Rechnern lernen. Zusammengerechnet wird dabei ' +
1021 'nichts: Haben Sie hier und in der Datei dasselbe Profil, stehen danach beide ' +
1022 'nebeneinander.',
1023 }),
1024 Object.freeze({
1025 art: 'absatz' as const,
1026 text:
1027 'Nicht in der Sicherung stehen Ihre Einstellungen – Farbschema, Anzeigegröße, Vorlesen. ' +
1028 'Die sind auf einem neuen Rechner in einer Minute wieder eingestellt. Der Fragenkatalog ' +
1029 'auch nicht: Er gehört zum Programm. Enthalten ist dagegen alles, was Sie je bei einer ' +
1030 'offenen Frage getippt haben – die Sicherung kopiert Ihren vollständigen Lernstand. Und ' +
1031 'die Datei ist nicht verschlüsselt: Wer sie hat, kann sie lesen. Geben Sie sie also nur ' +
1032 'weiter, wenn Sie das wollen.',
1033 }),
1034 ]),
1035 }),
1036
1037 Object.freeze({
1038 id: 'probleme',
1039 titel: 'Wenn etwas nicht funktioniert',
1040 kurz: 'Die häufigsten Fälle und was dann zu tun ist',
1041 bloecke: Object.freeze([
1042 Object.freeze({
1043 art: 'liste' as const,
1044 punkte: Object.freeze([
1045 'Der Fragenkatalog lädt nicht: Es erscheint eine Meldung mit der Schaltfläche „Fragenkatalog erneut laden“. Hilft die nicht, ist die Installation unvollständig – dann ist ein erneutes Installieren der sicherste Weg.',
1046 'Das Fenster bleibt leer oder zeigt eine Fehlerseite: Ihr Lernstand ist davon nicht betroffen. „Anwendung neu laden“ auf der Fehlerseite oder „Ansicht → Neu laden“ im Menü setzt die Oberfläche neu auf.',
1047 `Die Schrift ist zu klein: Strg und Plus, oder auf dem Startbildschirm unter „Anzeigegröße“. Die Anwendung geht bis auf ${String(GROESSTE_ANZEIGE)} Prozent.`,
1048 'Die Vorlesefunktion schweigt: Dann bietet das Betriebssystem keine Stimme an. Unter Windows werden Stimmen in den Systemeinstellungen unter „Zeit und Sprache“ nachinstalliert.',
1049 'Eine Simulation scheint verschwunden: Sie ist es fast nie – der Startbildschirm bietet eine unterbrochene Simulation zum Fortsetzen an, solange sie nicht ausdrücklich verworfen wurde.',
1050 ]),
1051 }),
1052 Object.freeze({
1053 art: 'absatz' as const,
1054 text:
1055 'Bleibt es dabei, melden Sie es bitte. Für Rückfragen hilft der Abschnitt ' +
1056 '„Systemzustand“ auf dem Startbildschirm: Er nennt Programmfassung, Baustand und den ' +
1057 'Zustand der Datenbank.',
1058 }),
1059 ]),
1060 }),
1061
1062 Object.freeze({
1063 id: 'melden',
1064 titel: 'Eine Barriere oder einen Fehler melden',
1065 kurz: 'Wer antwortet, worauf – und bis wann',
1066 bloecke: Object.freeze([
1067 Object.freeze({
1068 art: 'absatz' as const,
1069 text:
1070 'Wenn Sie in dieser Anwendung auf eine Barriere stoßen oder einen Fehler finden, ' +
1071 `melden Sie es bitte. Sie bekommen eine Antwort ${KONTAKT.frist}.`,
1072 }),
1073 Object.freeze({
1074 art: 'liste' as const,
1075 punkte: Object.freeze([`Verantwortlich: ${KONTAKT.name}`, `E-Mail: ${KONTAKT.epost}`]),
1076 }),
1077 Object.freeze({
1078 art: 'absatz' as const,
1079 text:
1080 'Die Angaben stehen als Text da und sind nicht verknüpft: Die Anwendung öffnet von ' +
1081 'sich aus keine Verbindung ins Netz und startet auch kein E-Mail-Programm. Kopieren ' +
1082 'Sie die Adresse in das Programm Ihrer Wahl. Wofür dieser Weg im Einzelnen da ist, ' +
1083 'steht ausführlich unter „Über diese Software“.',
1084 }),
1085 Object.freeze({
1086 art: 'absatz' as const,
1087 text:
1088 'Aus einer Lernsitzung heraus geht es kürzer: Unter den Schaltflächen steht „Fehler zu ' +
1089 'dieser Frage melden“. Aufgeklappt zeigt der Block einen fertigen Text mit ' +
1090 'Fragennummer, Katalogstand und Programmfassung – alles, was zur Bearbeitung nötig ' +
1091 'ist. Schreiben Sie darunter, was Ihnen aufgefallen ist, kopieren Sie ihn mit der ' +
1092 'Schaltfläche und schicken Sie ihn an die oben genannte Adresse.',
1093 }),
1094 Object.freeze({
1095 art: 'absatz' as const,
1096 text:
1097 'Der Text steht sichtbar da, bevor Sie ihn kopieren: Sie sollen lesen können, was Sie ' +
1098 'weitergeben. Er enthält nichts über Sie und nichts über Ihren Lernstand. Steht die ' +
1099 'Schaltfläche einmal nicht zur Verfügung, markieren Sie den Text im Feld und kopieren ' +
1100 'ihn mit Strg und C.',
1101 }),
1102 ]),
1103 }),
1104 ]);
1105
1106 /** Die Überschrift des Hilfefensters – auch für Menü und Tests. */
1107 export const HILFE_TITEL = 'Hilfe';
1108
1109 /** Was unter der Überschrift steht, noch vor dem Inhaltsverzeichnis. */
1110 export const HILFE_EINLEITUNG =
1111 'Dieses Handbuch erklärt die Bedienung der Anwendung. Es legt sich über das, was gerade zu ' +
1112 'sehen ist – Ihre Lernsitzung oder Ihr Prüfungsbogen bleibt stehen, wo er ist.';