Umlaute statt Umschreibungen

Oberflaeche, Fehlermeldungen und Kommentare schrieben durchgehend ae, oe, ue
und ss. Dafuer gab es keinen Grund - die Anwendung ist deutschsprachig und
laeuft durchgehend in UTF-8.

Betroffen waren 55 Dateien, darunter alle sichtbaren Texte: Guthaben-Zaehler,
Import, Nutzerverwaltung, Passwortwechsel und die Zwei-Faktor-Einrichtung.

Der Name einer Migration bleibt im README-Beispiel bewusst bei ASCII, weil
daraus ein Verzeichnisname wird.
This commit is contained in:
2026-09-18 16:57:39 +02:00
parent b9364151b0
commit 724f68644b
49 changed files with 256 additions and 254 deletions
+19 -19
View File
@@ -99,7 +99,7 @@ function UsersTab({ onError, onDone }: TabProps) {
const resetPassword = (target: AdminUser) => {
const password = window.prompt(
`Neues Passwort fuer "${target.username}" (min. 12 Zeichen, Gross/Klein, Ziffer):`,
`Neues Passwort für "${target.username}" (min. 12 Zeichen, Groß/Klein, Ziffer):`,
);
if (!password) return;
void act(
@@ -108,7 +108,7 @@ function UsersTab({ onError, onDone }: TabProps) {
method: 'POST',
body: { newPassword: password },
}),
`Passwort fuer "${target.username}" gesetzt. Muss beim naechsten Login geaendert werden.`,
`Passwort für "${target.username}" gesetzt. Muss beim nächsten Login geändert werden.`,
);
};
@@ -122,7 +122,7 @@ function UsersTab({ onError, onDone }: TabProps) {
</div>
<Notice kind="info">
Es gibt keine oeffentliche Registrierung. Konten werden ausschliesslich hier angelegt.
Es gibt keine öffentliche Registrierung. Konten werden ausschließlich hier angelegt.
</Notice>
<div className="table-wrap">
@@ -156,7 +156,7 @@ function UsersTab({ onError, onDone }: TabProps) {
method: 'PATCH',
body: { role: event.target.value as Role },
}),
`Rolle von "${row.username}" geaendert.`,
`Rolle von "${row.username}" geändert.`,
)
}
>
@@ -200,14 +200,14 @@ function UsersTab({ onError, onDone }: TabProps) {
type="button"
className="btn btn-tiny btn-danger"
onClick={() => {
if (!window.confirm(`Konto "${row.username}" wirklich loeschen?`)) return;
if (!window.confirm(`Konto "${row.username}" wirklich löschen?`)) return;
void act(
() => api(`/api/admin/users/${row.id}`, { method: 'DELETE' }),
`"${row.username}" geloescht.`,
`"${row.username}" gelöscht.`,
);
}}
>
Loeschen
Löschen
</button>
</>
)}
@@ -280,8 +280,8 @@ function CreateUserModal({
required
/>
<p className="muted small">
Min. 12 Zeichen, Gross- und Kleinbuchstaben, eine Ziffer. Muss beim ersten Login
geaendert werden.
Min. 12 Zeichen, Groß- und Kleinbuchstaben, eine Ziffer. Muss beim ersten Login
geändert werden.
</p>
<label htmlFor="new-role">Rolle</label>
@@ -342,13 +342,13 @@ function MappingsTab({ onError, onDone }: TabProps) {
};
const remove = async (row: ProductMapping) => {
if (!window.confirm(`Mapping "${row.matchPattern}" loeschen?`)) return;
if (!window.confirm(`Mapping "${row.matchPattern}" löschen?`)) return;
try {
await api(`/api/admin/product-mappings/${row.id}`, { method: 'DELETE' });
await load();
onDone('Mapping geloescht.');
onDone('Mapping gelöscht.');
} catch (err) {
onError(err instanceof ApiError ? err.message : 'Loeschen fehlgeschlagen');
onError(err instanceof ApiError ? err.message : 'Löschen fehlgeschlagen');
}
};
@@ -356,8 +356,8 @@ function MappingsTab({ onError, onDone }: TabProps) {
<section className="block">
<h2>Produkt-Mappings</h2>
<Notice kind="info">
Beim Import wird der Produktname gegen diese Muster geprueft (Teiltreffer, Gross- und
Kleinschreibung egal). Das erste passende Muster mit der niedrigsten Prioritaet gewinnt.
Beim Import wird der Produktname gegen diese Muster geprüft (Teiltreffer, Groß- und
Kleinschreibung egal). Das erste passende Muster mit der niedrigsten Priorität gewinnt.
</Notice>
<form className="inline-form" onSubmit={add}>
@@ -373,7 +373,7 @@ function MappingsTab({ onError, onDone }: TabProps) {
<option value="IGNORE">Ignorieren</option>
</select>
<button type="submit" className="btn btn-primary">
Hinzufuegen
Hinzufügen
</button>
</form>
@@ -383,7 +383,7 @@ function MappingsTab({ onError, onDone }: TabProps) {
<tr>
<th>Muster</th>
<th>Bedeutung</th>
<th className="num">Prioritaet</th>
<th className="num">Priorität</th>
<th>Aktiv</th>
<th />
</tr>
@@ -401,7 +401,7 @@ function MappingsTab({ onError, onDone }: TabProps) {
className="btn btn-tiny btn-danger"
onClick={() => void remove(row)}
>
Loeschen
Löschen
</button>
</td>
</tr>
@@ -489,7 +489,7 @@ function AuditTab({ onError }: { onError: (message: string) => void }) {
{items.length === 0 && (
<tr>
<td colSpan={5} className="empty">
Keine Eintraege.
Keine Einträge.
</td>
</tr>
)}
@@ -499,7 +499,7 @@ function AuditTab({ onError }: { onError: (message: string) => void }) {
{total > items.length && (
<p className="muted">
{items.length} von {total} Eintraegen angezeigt.
{items.length} von {total} Einträgen angezeigt.
</p>
)}
</section>