Internationalization
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
globalThis.Wegwichtel ??= {};
|
||||
(function (ns) {
|
||||
'use strict';
|
||||
|
||||
function messageText(error) {
|
||||
const value = error?.responseJSON?.message || error?.message || error;
|
||||
if (typeof value !== 'string') return '';
|
||||
try {
|
||||
const parsed = JSON.parse(value);
|
||||
return typeof parsed.message === 'string' ? parsed.message : '';
|
||||
} catch {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
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"]
|
||||
];
|
||||
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"]
|
||||
]);
|
||||
|
||||
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;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function errorMessage(error, fallback = ns.I18n.t("editor-ui.das.hat.leider.nicht.geklappt.bitte.versuche")) {
|
||||
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");
|
||||
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");
|
||||
return readableMessage(message, fallback);
|
||||
}
|
||||
|
||||
ns.UserMessages = Object.freeze({ error: errorMessage });
|
||||
}(globalThis.Wegwichtel));
|
||||
Reference in New Issue
Block a user