transliterate special chars better

This commit is contained in:
stefan.tollkuehn committed 2026-09-30 14:49:46 +02:00
1 parent 5b128f9d50
commit de8ea49ee7
1 file changed
+48 -2
+48 -2
View File
@@ -1373,6 +1373,52 @@
}, CONFIG.launchTimeout); }, CONFIG.launchTimeout);
} }
/* ============================================================
* ROOM NAME
* ============================================================
*/
/*
* Sonderzeichen in das nächstliegende ASCII-Zeichen
* umwandeln.
*
* Beispiel:
*
* "Grundstück" ergibt "Grundstueck"
* "François" ergibt "Francois"
*/
function transliterate(text) {
const extras = {
"ß": "ss",
"ẞ": "ss",
"æ": "ae",
"Æ": "ae",
"œ": "oe",
"Œ": "oe",
"ø": "o",
"Ø": "o"
};
return text
.normalize("NFD")
.replace(/[\u0300-\u036f]/g, "")
.replace(/[ßẞæÆœŒøØ]/g, (char) => extras[char]);
}
/*
* Aus dem Meeting-Namen einen gültigen Room-Namen ableiten.
*
* Beispiel:
*
* "Grund Stück Planung" ergibt "grund-stuck-planung"
*/
function createRoomName(meetingName) {
return transliterate(meetingName)
.toLowerCase()
.replace(/\s+/g, "-")
.replace(/[^a-z0-9-]/g, "");
}
/* ============================================================ /* ============================================================
* ICS FILE GENERATION * ICS FILE GENERATION
* ============================================================ * ============================================================
@@ -1380,7 +1426,7 @@
function generateICS(meetingName, description, startTime, endTime, organizer) { function generateICS(meetingName, description, startTime, endTime, organizer) {
/* Generate a unique room name from the meeting name */ /* Generate a unique room name from the meeting name */
const roomName = meetingName.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, ''); const roomName = createRoomName(meetingName);
const meetingUrl = `https://${CONFIG.jitsiLauncher}/launch.html?room=${encodeURIComponent(roomName)}`; const meetingUrl = `https://${CONFIG.jitsiLauncher}/launch.html?room=${encodeURIComponent(roomName)}`;
/* Format dates for ICS */ /* Format dates for ICS */
@@ -1525,7 +1571,7 @@ END:VCALENDAR`;
return; return;
} }
if (!ROOM_PATTERN.test(meetingName)) { if (!ROOM_PATTERN.test(createRoomName(meetingName))) {
alert(getTranslation('creator.meetingNameInvalid') || 'Meeting name may only contain letters, numbers and hyphens'); alert(getTranslation('creator.meetingNameInvalid') || 'Meeting name may only contain letters, numbers and hyphens');
return; return;
} }