fix sonar findings and translation structure
Sonarqube Scanner / Prepare environment (push) Successful in 19s
Sonarqube Scanner / Build and test (push) Successful in 43s
Sonarqube Scanner / SonarQube analysis (push) Failing after 2m28s
Sonarqube Scanner / Deploy to Server (push) Successful in 16s

This commit is contained in:
Florian Zumpe
2026-10-01 16:31:46 +02:00
parent 2b42507f13
commit 5c4d20bd1d
30 changed files with 1753 additions and 894 deletions
+21 -14
View File
@@ -14,35 +14,42 @@ globalThis.Wegwichtel ??= {};
}
const explanations = [
[/Freigegebene Strecken dürfen nur/, "user-messages.diese.strecke.kann.nur.die.person.loschen"],
[/Freigegebene Strecken können/, "user-messages.diese.strecke.ist.fur.alle.freigegeben.du"],
[/GPX|XML|Trackpunkte/, "user-messages.die.datei.enthalt.keinen.lesbaren.weg.wahle"],
[/POI.*nicht gefunden/, "user-messages.diese.station.wurde.nicht.gefunden.offne.die"],
[/POI-Koordinaten/, "user-messages.der.ort.dieser.station.fehlt.oder.konnte"],
[/Bildformat|Bilddatei/, "user-messages.dieses.bild.kann.nicht.geoffnet.werden.wahle"],
[/Audioformat|Audiodatei/, "user-messages.diese.tonaufnahme.kann.nicht.geoffnet.werden.wahle"]
[/Freigegebene Strecken dürfen nur/, "errors.delete-published"],
[/Freigegebene Strecken können/, "errors.edit-published"],
[/GPX|XML|Trackpunkte/, "errors.invalid-track"],
[/POI.*nicht gefunden/, "errors.station-missing"],
[/POI-Koordinaten/, "errors.station-location"],
[/Bildformat|Bilddatei/, "errors.image-format"],
[/Audioformat|Audiodatei/, "errors.audio-format"]
];
const statusExplanations = new Map([
[413, "user-messages.diese.datei.ist.zu.gross.wahle.eine"],
[401, "user-messages.du.darfst.diese.aktion.hier.nicht.ausfuhren"],
[403, "user-messages.du.darfst.diese.aktion.hier.nicht.ausfuhren"]
[413, "errors.file-size"],
[401, "errors.permission"],
[403, "errors.permission"]
]);
function readableMessage(message, fallback) {
if (/\b(?:HTTP|API|HTTPS|JSON|IndexedDB|OPFS|CacheStorage|Base64|Blob|Server|sequence|dataUrl|PUT|POST)\b|https?:\/\/|[{}]/i.test(message)) return fallback;
if (/\b(?:Failed|NetworkError|TypeError|AbortError|SecurityError|NotAllowedError|undefined)\b/i.test(message)) return fallback;
if (message && /[äöüÄÖÜß]|\b(?:Die|Der|Das|Dein|Deine|Diese|Dieser|Dieses|Bitte|Wähle|Erlaube|Ein|Eine|Kein|Keine|Speicher|Strecke|Station|Wegwichtel|Gespeichert|Entferne)\b/.test(message)) return message;
if (message && readablePatterns.some(pattern => pattern.test(message))) return message;
return fallback;
}
function errorMessage(error, fallback = ns.I18n.t("editor-ui.das.hat.leider.nicht.geklappt.bitte.versuche")) {
const readablePatterns = [
/[äöüÄÖÜß]/,
/\b(?:The|This|Your|Please|Choose|Allow|Give|Save|Remove|Trail|Stop|There)\b/,
/\b(?:Die|Der|Das|Dein|Deine|Diese|Dieser|Dieses|Bitte|Wähle|Erlaube)\b/,
/\b(?:Ein|Eine|Kein|Keine|Speicher|Strecke|Station|Wegwichtel|Gespeichert|Entferne)\b/
];
function errorMessage(error, fallback = ns.I18n.t("editor.error.generic")) {
const message = messageText(error);
if (error?.name === 'QuotaExceededError' || error?.cause?.name === 'QuotaExceededError') return ns.I18n.t("user-messages.der.platz.ist.voll.entferne.gespeicherte.strecken");
if (error?.name === 'QuotaExceededError' || error?.cause?.name === 'QuotaExceededError') return ns.I18n.t("errors.quota");
const explanation = explanations.find(([pattern]) => pattern.test(message));
if (explanation) return ns.I18n.t(explanation[1]);
const statusExplanation = statusExplanations.get(error?.status);
if (statusExplanation) return ns.I18n.t(statusExplanation);
if (error?.status >= 500) return ns.I18n.t("user-messages.wegwichtel.ist.gerade.nicht.erreichbar.bitte.versuche");
if (error?.status >= 500) return ns.I18n.t("errors.unavailable");
return readableMessage(message, fallback);
}