Compare commits

...
2 Commits
2 changed files with 377 additions and 389 deletions

No files matched your search

+310
View File
@@ -0,0 +1,310 @@
{
"en": {
"pageTitle": "Jitsi Meeting",
"impressum": "Legal Notice",
"source": "Source",
"launcher": {
"title": "Jitsi Meeting",
"meetingPrefix": "The meeting",
"meetingSuffix": "will be joined.",
"openButton": "Join meeting"
},
"starting": {
"title": "Starting Jitsi Meet …",
"status": "The Jitsi Meet desktop client is being opened."
},
"fallback": {
"title": "Jitsi Meet could not be opened",
"description": "The Jitsi Meet desktop client may not have been started.",
"retryButton": "Try again"
},
"downloads": {
"windows": {
"title": "Jitsi Meet for Windows",
"description": "Install the Jitsi Meet desktop client and then try opening the meeting again.",
"button": "Download Jitsi for Windows"
},
"macos": {
"title": "Jitsi Meet for macOS",
"description": "Install the Jitsi Meet desktop client and then try opening the meeting again.",
"button": "Download Jitsi for macOS"
},
"linux": {
"title": "Jitsi Meet for Linux",
"description": "Install the Jitsi Meet desktop client and then try opening the meeting again.",
"button": "Download Jitsi for Linux"
},
"other": {
"title": "Jitsi Meet Desktop",
"description": "No desktop download is configured for your operating system."
}
},
"browser": {
"title": "Join in browser",
"description": "You can also join the meeting directly in your browser.",
"button": "Join in browser"
},
"error": {
"title": "No meeting specified",
"description": "Please specify a meeting using the",
"descriptionSuffix": "parameter.",
"invalidTitle": "Invalid meeting name",
"invalidDescription": "Only letters, numbers and hyphens are allowed:"
},
"creator": {
"title": "Create New Meeting",
"meetingNameLabel": "Meeting Name",
"meetingDescriptionLabel": "Description",
"meetingStartLabel": "Start Date & Time",
"meetingEndLabel": "End Date & Time",
"meetingOrganizerLabel": "Organizer Email",
"createButton": "Create Meeting",
"cancelButton": "Cancel",
"successMessage": "Meeting created! Download your calendar file and open it to import the meeting into your personal calendar.",
"downloadButton": "Download ICS File",
"createNewButton": "Create New Meeting",
"adhocButton": "Create Adhoc Link",
"adhocLinkLabel": "Your adhoc meeting link:",
"copyLinkButton": "Copy Link",
"copiedLabel": "Copied!",
"meetingNameRequired": "Please enter a meeting name",
"meetingNameInvalid": "Meeting name may only contain letters, numbers and hyphens",
"startTimeRequired": "Please select a start time",
"endTimeRequired": "Please select an end time",
"endAfterStart": "End time must be after start time",
"organizerRequired": "Please enter an organizer email",
"organizerInvalid": "Please enter a valid organizer email address"
}
},
"de": {
"pageTitle": "Jitsi Meeting öffnen",
"impressum": "Impressum",
"source": "Quellcode",
"launcher": {
"title": "Jitsi Meeting",
"meetingPrefix": "Das Meeting",
"meetingSuffix": "wird geöffnet.",
"openButton": "An Meeting teilnehmen"
},
"starting": {
"title": "Jitsi Meet wird gestartet …",
"status": "Der Jitsi Meet Desktop-Client wird geöffnet."
},
"fallback": {
"title": "Jitsi Meet konnte nicht geöffnet werden",
"description": "Der Jitsi Meet Desktop-Client wurde möglicherweise nicht gestartet.",
"retryButton": "Erneut versuchen"
},
"downloads": {
"windows": {
"title": "Jitsi Meet für Windows",
"description": "Installieren Sie den Jitsi Meet Desktop-Client und versuchen Sie anschließend erneut, das Meeting zu öffnen.",
"button": "Jitsi für Windows herunterladen"
},
"macos": {
"title": "Jitsi Meet für macOS",
"description": "Installieren Sie den Jitsi Meet Desktop-Client und versuchen Sie anschließend erneut, das Meeting zu öffnen.",
"button": "Jitsi für macOS herunterladen"
},
"linux": {
"title": "Jitsi Meet für Linux",
"description": "Installieren Sie den Jitsi Meet Desktop-Client und versuchen Sie anschließend erneut, das Meeting zu öffnen.",
"button": "Jitsi für Linux herunterladen"
},
"other": {
"title": "Jitsi Meet Desktop",
"description": "Für Ihr Betriebssystem ist kein Desktop-Download hinterlegt."
}
},
"browser": {
"title": "Im Browser teilnehmen",
"description": "Sie können dem Meeting auch direkt über Ihren Browser beitreten.",
"button": "Im Browser beitreten"
},
"error": {
"title": "Kein Meeting angegeben",
"description": "Bitte geben Sie ein Meeting über den Parameter",
"descriptionSuffix": "an.",
"invalidTitle": "Ungültiger Meeting-Name",
"invalidDescription": "Erlaubt sind nur Buchstaben, Zahlen und Bindestriche:"
},
"creator": {
"title": "Neues Meeting erstellen",
"meetingNameLabel": "Meeting-Name",
"meetingDescriptionLabel": "Beschreibung",
"meetingStartLabel": "Start Datum & Uhrzeit",
"meetingEndLabel": "Ende Datum & Uhrzeit",
"meetingOrganizerLabel": "Organisator E-Mail",
"createButton": "Meeting erstellen",
"cancelButton": "Abbrechen",
"successMessage": "Meeting erstellt! Laden Sie Ihre Kalenderdatei herunter und öffnen Sie diese, um das Meeting in Ihren persönlichen Kalender zu importieren.",
"downloadButton": "ICS-Datei herunterladen",
"createNewButton": "Neues Meeting erstellen",
"adhocButton": "Adhoc-Link erstellen",
"adhocLinkLabel": "Ihr Adhoc-Meeting-Link:",
"copyLinkButton": "Link kopieren",
"copiedLabel": "Kopiert!",
"meetingNameRequired": "Bitte geben Sie einen Meeting-Namen ein",
"meetingNameInvalid": "Der Meeting-Name darf nur Buchstaben, Zahlen und Bindestriche enthalten",
"startTimeRequired": "Bitte wählen Sie eine Startzeit",
"endTimeRequired": "Bitte wählen Sie eine Endzeit",
"endAfterStart": "Die Endzeit muss nach der Startzeit liegen",
"organizerRequired": "Bitte geben Sie eine Organisator-E-Mail ein",
"organizerInvalid": "Bitte geben Sie eine gültige Organisator-E-Mail-Adresse ein"
}
},
"fr": {
"pageTitle": "Réunion Jitsi",
"impressum": "Mentions légales",
"source": "Code source",
"launcher": {
"title": "Réunion Jitsi",
"meetingPrefix": "La réunion",
"meetingSuffix": "va être ouverte.",
"openButton": "Rejoindre la réunion"
},
"starting": {
"title": "Démarrage de Jitsi Meet…",
"status": "Le client bureau Jitsi Meet est en cours d'ouverture."
},
"fallback": {
"title": "Jitsi Meet n'a pas pu être ouvert",
"description": "Le client bureau Jitsi Meet n'a peut-être pas été démarré.",
"retryButton": "Réessayer"
},
"downloads": {
"windows": {
"title": "Jitsi Meet pour Windows",
"description": "Installez le client bureau Jitsi Meet, puis essayez de rouvrir la réunion.",
"button": "Télécharger Jitsi pour Windows"
},
"macos": {
"title": "Jitsi Meet pour macOS",
"description": "Installez le client bureau Jitsi Meet, puis essayez de rouvrir la réunion.",
"button": "Télécharger Jitsi pour macOS"
},
"linux": {
"title": "Jitsi Meet pour Linux",
"description": "Installez le client bureau Jitsi Meet, puis essayez de rouvrir la réunion.",
"button": "Télécharger Jitsi pour Linux"
},
"other": {
"title": "Jitsi Meet Desktop",
"description": "Aucun téléchargement bureau n'est configuré pour votre système d'exploitation."
}
},
"browser": {
"title": "Rejoindre dans le navigateur",
"description": "Vous pouvez également rejoindre la réunion directement dans votre navigateur.",
"button": "Rejoindre dans le navigateur"
},
"error": {
"title": "Aucune réunion spécifiée",
"description": "Veuillez spécifier une réunion à l'aide du paramètre",
"descriptionSuffix": ".",
"invalidTitle": "Nom de réunion invalide",
"invalidDescription": "Seuls les lettres, les chiffres et les tirets sont autorisés :"
},
"creator": {
"title": "Créer une nouvelle réunion",
"meetingNameLabel": "Nom de la réunion",
"meetingDescriptionLabel": "Description",
"meetingStartLabel": "Date et heure de début",
"meetingEndLabel": "Date et heure de fin",
"meetingOrganizerLabel": "Email de l'organisateur",
"createButton": "Créer la réunion",
"cancelButton": "Annuler",
"successMessage": "Réunion créée ! Téléchargez votre fichier calendrier et ouvrez-le pour importer la réunion dans votre calendrier personnel.",
"downloadButton": "Télécharger le fichier ICS",
"createNewButton": "Créer une nouvelle réunion",
"adhocButton": "Créer un lien adhoc",
"adhocLinkLabel": "Votre lien de réunion adhoc :",
"copyLinkButton": "Copier le lien",
"copiedLabel": "Copié !",
"meetingNameRequired": "Veuillez entrer un nom de réunion",
"meetingNameInvalid": "Le nom de la réunion ne peut contenir que des lettres, des chiffres et des tirets",
"startTimeRequired": "Veuillez sélectionner une heure de début",
"endTimeRequired": "Veuillez sélectionner une heure de fin",
"endAfterStart": "L'heure de fin doit être après l'heure de début",
"organizerRequired": "Veuillez entrer un email d'organisateur",
"organizerInvalid": "Veuillez entrer une adresse email d'organisateur valide"
}
},
"zh": {
"pageTitle": "Jitsi 会议",
"impressum": "法律声明",
"source": "源代码",
"launcher": {
"title": "Jitsi 会议",
"meetingPrefix": "会议",
"meetingSuffix": "即将打开。",
"openButton": "加入会议"
},
"starting": {
"title": "正在启动 Jitsi Meet …",
"status": "正在打开 Jitsi Meet 桌面客户端。"
},
"fallback": {
"title": "无法打开 Jitsi Meet",
"description": "Jitsi Meet 桌面客户端可能尚未启动。",
"retryButton": "重试"
},
"downloads": {
"windows": {
"title": "适用于 Windows 的 Jitsi Meet",
"description": "请安装 Jitsi Meet 桌面客户端,然后再次尝试打开会议。",
"button": "下载 Windows 版 Jitsi"
},
"macos": {
"title": "适用于 macOS 的 Jitsi Meet",
"description": "请安装 Jitsi Meet 桌面客户端,然后再次尝试打开会议。",
"button": "下载 macOS 版 Jitsi"
},
"linux": {
"title": "适用于 Linux 的 Jitsi Meet",
"description": "请安装 Jitsi Meet 桌面客户端,然后再次尝试打开会议。",
"button": "下载 Linux 版 Jitsi"
},
"other": {
"title": "Jitsi Meet 桌面版",
"description": "没有为您的操作系统配置桌面版下载。"
}
},
"browser": {
"title": "在浏览器中加入",
"description": "您也可以直接通过浏览器加入会议。",
"button": "在浏览器中加入"
},
"error": {
"title": "未指定会议",
"description": "请使用参数指定会议",
"descriptionSuffix": "。",
"invalidTitle": "会议名称无效",
"invalidDescription": "仅允许使用字母、数字和连字符:"
},
"creator": {
"title": "创建新会议",
"meetingNameLabel": "会议名称",
"meetingDescriptionLabel": "描述",
"meetingStartLabel": "开始日期和时间",
"meetingEndLabel": "结束日期和时间",
"meetingOrganizerLabel": "组织者邮箱",
"createButton": "创建会议",
"cancelButton": "取消",
"successMessage": "会议已创建!请下载您的日历文件并打开它,将会议导入您的个人日历。",
"downloadButton": "下载 ICS 文件",
"createNewButton": "创建新会议",
"adhocButton": "创建临时链接",
"adhocLinkLabel": "您的临时会议链接:",
"copyLinkButton": "复制链接",
"copiedLabel": "已复制!",
"meetingNameRequired": "请输入会议名称",
"meetingNameInvalid": "会议名称只能包含字母、数字和连字符",
"startTimeRequired": "请选择开始时间",
"endTimeRequired": "请选择结束时间",
"endAfterStart": "结束时间必须晚于开始时间",
"organizerRequired": "请输入组织者邮箱",
"organizerInvalid": "请输入有效的组织者邮箱地址"
}
}
}
+67 -389
View File
@@ -41,377 +41,12 @@ const CONFIG = {
* ============================================================ * ============================================================
*/ */
const TRANSLATIONS = { /*
en: { * Sprachen liegen in assets/i18n.json und werden beim
pageTitle: "Jitsi Meeting", * Start asynchron geladen (siehe START).
impressum: "Legal Notice", */
source: "Source", let TRANSLATIONS = {};
const I18N_URL = "assets/i18n.json";
launcher: {
title: "Jitsi Meeting",
meetingPrefix: "The meeting",
meetingSuffix: "will be joined.",
openButton: "Join meeting"
},
starting: {
title: "Starting Jitsi Meet …",
status: "The Jitsi Meet desktop client is being opened."
},
fallback: {
title: "Jitsi Meet could not be opened",
description: "The Jitsi Meet desktop client may not have been started.",
retryButton: "Try again"
},
downloads: {
windows: {
title: "Jitsi Meet for Windows",
description:
"Install the Jitsi Meet desktop client and then try opening the meeting again.",
button: "Download Jitsi for Windows"
},
macos: {
title: "Jitsi Meet for macOS",
description:
"Install the Jitsi Meet desktop client and then try opening the meeting again.",
button: "Download Jitsi for macOS"
},
linux: {
title: "Jitsi Meet for Linux",
description:
"Install the Jitsi Meet desktop client and then try opening the meeting again.",
button: "Download Jitsi for Linux"
},
other: {
title: "Jitsi Meet Desktop",
description:
"No desktop download is configured for your operating system."
}
},
browser: {
title: "Join in browser",
description:
"You can also join the meeting directly in your browser.",
button: "Join in browser"
},
error: {
title: "No meeting specified",
description: "Please specify a meeting using the",
descriptionSuffix: "parameter.",
invalidTitle: "Invalid meeting name",
invalidDescription: "Only letters, numbers and hyphens are allowed:"
},
creator: {
title: "Create New Meeting",
meetingNameLabel: "Meeting Name",
meetingDescriptionLabel: "Description",
meetingStartLabel: "Start Date & Time",
meetingEndLabel: "End Date & Time",
meetingOrganizerLabel: "Organizer Email",
createButton: "Create Meeting",
cancelButton: "Cancel",
successMessage: "Meeting created! Download your calendar file and open it to import the meeting into your personal calendar.",
downloadButton: "Download ICS File",
createNewButton: "Create New Meeting",
adhocButton: "Create Adhoc Link",
adhocLinkLabel: "Your adhoc meeting link:",
copyLinkButton: "Copy Link",
copiedLabel: "Copied!",
meetingNameRequired: "Please enter a meeting name",
meetingNameInvalid: "Meeting name may only contain letters, numbers and hyphens",
startTimeRequired: "Please select a start time",
endTimeRequired: "Please select an end time",
endAfterStart: "End time must be after start time",
organizerRequired: "Please enter an organizer email",
organizerInvalid: "Please enter a valid organizer email address"
}
},
de: {
pageTitle: "Jitsi Meeting öffnen",
impressum: "Impressum",
source: "Quellcode",
launcher: {
title: "Jitsi Meeting",
meetingPrefix: "Das Meeting",
meetingSuffix: "wird geöffnet.",
openButton: "An Meeting teilnehmen"
},
starting: {
title: "Jitsi Meet wird gestartet …",
status: "Der Jitsi Meet Desktop-Client wird geöffnet."
},
fallback: {
title: "Jitsi Meet konnte nicht geöffnet werden",
description:
"Der Jitsi Meet Desktop-Client wurde möglicherweise nicht gestartet.",
retryButton: "Erneut versuchen"
},
downloads: {
windows: {
title: "Jitsi Meet für Windows",
description:
"Installieren Sie den Jitsi Meet Desktop-Client und versuchen Sie anschließend erneut, das Meeting zu öffnen.",
button: "Jitsi für Windows herunterladen"
},
macos: {
title: "Jitsi Meet für macOS",
description:
"Installieren Sie den Jitsi Meet Desktop-Client und versuchen Sie anschließend erneut, das Meeting zu öffnen.",
button: "Jitsi für macOS herunterladen"
},
linux: {
title: "Jitsi Meet für Linux",
description:
"Installieren Sie den Jitsi Meet Desktop-Client und versuchen Sie anschließend erneut, das Meeting zu öffnen.",
button: "Jitsi für Linux herunterladen"
},
other: {
title: "Jitsi Meet Desktop",
description:
"Für Ihr Betriebssystem ist kein Desktop-Download hinterlegt."
}
},
browser: {
title: "Im Browser teilnehmen",
description:
"Sie können dem Meeting auch direkt über Ihren Browser beitreten.",
button: "Im Browser beitreten"
},
error: {
title: "Kein Meeting angegeben",
description:
"Bitte geben Sie ein Meeting über den Parameter",
descriptionSuffix: "an.",
invalidTitle: "Ungültiger Meeting-Name",
invalidDescription: "Erlaubt sind nur Buchstaben, Zahlen und Bindestriche:"
},
creator: {
title: "Neues Meeting erstellen",
meetingNameLabel: "Meeting-Name",
meetingDescriptionLabel: "Beschreibung",
meetingStartLabel: "Start Datum & Uhrzeit",
meetingEndLabel: "Ende Datum & Uhrzeit",
meetingOrganizerLabel: "Organisator E-Mail",
createButton: "Meeting erstellen",
cancelButton: "Abbrechen",
successMessage: "Meeting erstellt! Laden Sie Ihre Kalenderdatei herunter und öffnen Sie diese, um das Meeting in Ihren persönlichen Kalender zu importieren.",
downloadButton: "ICS-Datei herunterladen",
createNewButton: "Neues Meeting erstellen",
adhocButton: "Adhoc-Link erstellen",
adhocLinkLabel: "Ihr Adhoc-Meeting-Link:",
copyLinkButton: "Link kopieren",
copiedLabel: "Kopiert!",
meetingNameRequired: "Bitte geben Sie einen Meeting-Namen ein",
meetingNameInvalid: "Der Meeting-Name darf nur Buchstaben, Zahlen und Bindestriche enthalten",
startTimeRequired: "Bitte wählen Sie eine Startzeit",
endTimeRequired: "Bitte wählen Sie eine Endzeit",
endAfterStart: "Die Endzeit muss nach der Startzeit liegen",
organizerRequired: "Bitte geben Sie eine Organisator-E-Mail ein",
organizerInvalid: "Bitte geben Sie eine gültige Organisator-E-Mail-Adresse ein"
}
},
fr: {
pageTitle: "Réunion Jitsi",
impressum: "Mentions légales",
source: "Code source",
launcher: {
title: "Réunion Jitsi",
meetingPrefix: "La réunion",
meetingSuffix: "va être ouverte.",
openButton: "Rejoindre la réunion"
},
starting: {
title: "Démarrage de Jitsi Meet…",
status: "Le client bureau Jitsi Meet est en cours d'ouverture."
},
fallback: {
title: "Jitsi Meet n'a pas pu être ouvert",
description:
"Le client bureau Jitsi Meet n'a peut-être pas été démarré.",
retryButton: "Réessayer"
},
downloads: {
windows: {
title: "Jitsi Meet pour Windows",
description:
"Installez le client bureau Jitsi Meet, puis essayez de rouvrir la réunion.",
button: "Télécharger Jitsi pour Windows"
},
macos: {
title: "Jitsi Meet pour macOS",
description:
"Installez le client bureau Jitsi Meet, puis essayez de rouvrir la réunion.",
button: "Télécharger Jitsi pour macOS"
},
linux: {
title: "Jitsi Meet pour Linux",
description:
"Installez le client bureau Jitsi Meet, puis essayez de rouvrir la réunion.",
button: "Télécharger Jitsi pour Linux"
},
other: {
title: "Jitsi Meet Desktop",
description:
"Aucun téléchargement bureau n'est configuré pour votre système d'exploitation."
}
},
browser: {
title: "Rejoindre dans le navigateur",
description:
"Vous pouvez également rejoindre la réunion directement dans votre navigateur.",
button: "Rejoindre dans le navigateur"
},
error: {
title: "Aucune réunion spécifiée",
description: "Veuillez spécifier une réunion à l'aide du paramètre",
descriptionSuffix: ".",
invalidTitle: "Nom de réunion invalide",
invalidDescription: "Seuls les lettres, les chiffres et les tirets sont autorisés :"
},
creator: {
title: "Créer une nouvelle réunion",
meetingNameLabel: "Nom de la réunion",
meetingDescriptionLabel: "Description",
meetingStartLabel: "Date et heure de début",
meetingEndLabel: "Date et heure de fin",
meetingOrganizerLabel: "Email de l'organisateur",
createButton: "Créer la réunion",
cancelButton: "Annuler",
successMessage: "Réunion créée ! Téléchargez votre fichier calendrier et ouvrez-le pour importer la réunion dans votre calendrier personnel.",
downloadButton: "Télécharger le fichier ICS",
createNewButton: "Créer une nouvelle réunion",
adhocButton: "Créer un lien adhoc",
adhocLinkLabel: "Votre lien de réunion adhoc :",
copyLinkButton: "Copier le lien",
copiedLabel: "Copié !",
meetingNameRequired: "Veuillez entrer un nom de réunion",
meetingNameInvalid: "Le nom de la réunion ne peut contenir que des lettres, des chiffres et des tirets",
startTimeRequired: "Veuillez sélectionner une heure de début",
endTimeRequired: "Veuillez sélectionner une heure de fin",
endAfterStart: "L'heure de fin doit être après l'heure de début",
organizerRequired: "Veuillez entrer un email d'organisateur",
organizerInvalid: "Veuillez entrer une adresse email d'organisateur valide"
}
},
zh: {
pageTitle: "Jitsi 会议",
impressum: "法律声明",
source: "源代码",
launcher: {
title: "Jitsi 会议",
meetingPrefix: "会议",
meetingSuffix: "即将打开。",
openButton: "加入会议"
},
starting: {
title: "正在启动 Jitsi Meet …",
status: "正在打开 Jitsi Meet 桌面客户端。"
},
fallback: {
title: "无法打开 Jitsi Meet",
description: "Jitsi Meet 桌面客户端可能尚未启动。",
retryButton: "重试"
},
downloads: {
windows: {
title: "适用于 Windows 的 Jitsi Meet",
description: "请安装 Jitsi Meet 桌面客户端,然后再次尝试打开会议。",
button: "下载 Windows 版 Jitsi"
},
macos: {
title: "适用于 macOS 的 Jitsi Meet",
description: "请安装 Jitsi Meet 桌面客户端,然后再次尝试打开会议。",
button: "下载 macOS 版 Jitsi"
},
linux: {
title: "适用于 Linux 的 Jitsi Meet",
description: "请安装 Jitsi Meet 桌面客户端,然后再次尝试打开会议。",
button: "下载 Linux 版 Jitsi"
},
other: {
title: "Jitsi Meet 桌面版",
description: "没有为您的操作系统配置桌面版下载。"
}
},
browser: {
title: "在浏览器中加入",
description: "您也可以直接通过浏览器加入会议。",
button: "在浏览器中加入"
},
error: {
title: "未指定会议",
description: "请使用参数指定会议",
descriptionSuffix: "。",
invalidTitle: "会议名称无效",
invalidDescription: "仅允许使用字母、数字和连字符:"
},
creator: {
title: "创建新会议",
meetingNameLabel: "会议名称",
meetingDescriptionLabel: "描述",
meetingStartLabel: "开始日期和时间",
meetingEndLabel: "结束日期和时间",
meetingOrganizerLabel: "组织者邮箱",
createButton: "创建会议",
cancelButton: "取消",
successMessage: "会议已创建!请下载您的日历文件并打开它,将会议导入您的个人日历。",
downloadButton: "下载 ICS 文件",
createNewButton: "创建新会议",
adhocButton: "创建临时链接",
adhocLinkLabel: "您的临时会议链接:",
copyLinkButton: "复制链接",
copiedLabel: "已复制!",
meetingNameRequired: "请输入会议名称",
meetingNameInvalid: "会议名称只能包含字母、数字和连字符",
startTimeRequired: "请选择开始时间",
endTimeRequired: "请选择结束时间",
endAfterStart: "结束时间必须晚于开始时间",
organizerRequired: "请输入组织者邮箱",
organizerInvalid: "请输入有效的组织者邮箱地址"
}
}
};
/* ============================================================ /* ============================================================
* Detect language * Detect language
@@ -456,8 +91,8 @@ function detectLanguage() {
return "en"; return "en";
} }
let currentLanguage = detectLanguage(); let currentLanguage = "en";
let translation = TRANSLATIONS[currentLanguage]; let translation = {};
/* ============================================================ /* ============================================================
* Apply translations to webpage * Apply translations to webpage
@@ -466,7 +101,9 @@ let translation = TRANSLATIONS[currentLanguage];
function applyTranslations() { function applyTranslations() {
document.documentElement.lang = currentLanguage; document.documentElement.lang = currentLanguage;
document.title = translation.pageTitle; if (translation.pageTitle) {
document.title = translation.pageTitle;
}
document document
.querySelectorAll("[data-i18n]") .querySelectorAll("[data-i18n]")
@@ -860,11 +497,15 @@ function createAndroidIntentUrl(room) {
); );
} }
const ANDROID_APP_SCHEME = "org.jitsi.meet://"; /*
* Die Mobile-Apps (iOS, Firefox auf Android) registrieren
* "org.jitsi.meet", nicht das Desktop-Schema.
*/
const APP_SCHEME = "org.jitsi.meet://";
function createAndroidAppUrl(room) { function createAppSchemeUrl(room) {
return ( return (
ANDROID_APP_SCHEME + APP_SCHEME +
CONFIG.jitsiHost + CONFIG.jitsiHost +
"/" + "/" +
encodeURIComponent(room) encodeURIComponent(room)
@@ -876,12 +517,21 @@ function createAndroidAppUrl(room) {
* ============================================================ */ * ============================================================ */
function selectProtocolUrl(room) { function selectProtocolUrl(room) {
if (detectOperatingSystem() !== "android") { const os = detectOperatingSystem();
/*
* iOS-App kennt nur das App-Schema.
*/
if (os === "ios") {
return createAppSchemeUrl(room);
}
if (os !== "android") {
return createAppUrl(room); return createAppUrl(room);
} }
return detectBrowser() === "firefox" return detectBrowser() === "firefox"
? createAndroidAppUrl(room) ? createAppSchemeUrl(room)
: createAndroidIntentUrl(room); : createAndroidIntentUrl(room);
} }
@@ -944,11 +594,12 @@ function detectOperatingSystem() {
} }
/* /*
* iPadOS tarnt sich als macOS. * iPadOS tarnt sich als macOS – Touchpunkte verraten das iPad.
* Der Plattform-Check greift auch ohne geladenen ua-parser.
*/ */
if ( if (
uaResult.os.name === "macOS" && navigator.maxTouchPoints > 1 &&
navigator.maxTouchPoints > 1 (navigator.platform === "MacIntel" || uaResult.os.name === "macOS")
) { ) {
return OS_NAMES.iOS; return OS_NAMES.iOS;
} }
@@ -1092,7 +743,7 @@ function launchJitsi() {
* das Custom-Schema direkt in der Hauptnavigation starten. * das Custom-Schema direkt in der Hauptnavigation starten.
*/ */
try { try {
if (protocolUrl.startsWith(ANDROID_APP_SCHEME)) { if (protocolUrl.startsWith(APP_SCHEME)) {
window.location.href = protocolUrl; window.location.href = protocolUrl;
} else { } else {
iframe.src = protocolUrl; iframe.src = protocolUrl;
@@ -1550,6 +1201,7 @@ function initialize() {
language: currentLanguage, language: currentLanguage,
room: room, room: room,
operatingSystem: detectOperatingSystem(), operatingSystem: detectOperatingSystem(),
touchPoints: navigator.maxTouchPoints,
browser: detectBrowser(), browser: detectBrowser(),
protocol: selectProtocolUrl(room), protocol: selectProtocolUrl(room),
browserUrl: createBrowserUrl(room) browserUrl: createBrowserUrl(room)
@@ -1665,9 +1317,35 @@ window
* ============================================================ * ============================================================
*/ */
applyTranslations(); async function loadTranslations() {
applyTheme(); try {
applyBackgroundImage(); const response = await fetch(I18N_URL);
applyLogo(); TRANSLATIONS = await response.json();
updateLanguageMenu(); } catch (error) {
initialize(); /*
* Ohne Datei bleibt der englische Text aus dem HTML stehen.
*/
console.error("Error loading translations:", error);
}
currentLanguage = detectLanguage();
translation = TRANSLATIONS[currentLanguage] || {};
}
/*
* Theme/Logo sofort anwenden, damit nichts aufblinkt –
* Text erst nach dem Laden der Übersetzungen.
*/
async function start() {
applyTheme();
applyBackgroundImage();
applyLogo();
await loadTranslations();
applyTranslations();
updateLanguageMenu();
initialize();
}
start();