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:
+19
-19
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user