Pass current language into Jitsi (#24609
* Pass current language into Jitsi Jitsi itself now uses the current language of the user. However, this does not yet apply to the welcome page of the Jitsi widget that says "Join conference", which is only hard-coded to english for now. Signed-off-by: Oliver Sand <oliver.sand@nordeck.net> * Map between Element and Jitsi language codes --------- Signed-off-by: Oliver Sand <oliver.sand@nordeck.net>
This commit is contained in:
parent
9f673fdb04
commit
5de1b0a012
1 changed files with 28 additions and 0 deletions
|
@ -57,6 +57,7 @@ let roomName: string;
|
||||||
let startAudioOnly: boolean;
|
let startAudioOnly: boolean;
|
||||||
let isVideoChannel: boolean;
|
let isVideoChannel: boolean;
|
||||||
let supportsScreensharing: boolean;
|
let supportsScreensharing: boolean;
|
||||||
|
let language: string;
|
||||||
|
|
||||||
let widgetApi: WidgetApi;
|
let widgetApi: WidgetApi;
|
||||||
let meetApi: any; // JitsiMeetExternalAPI
|
let meetApi: any; // JitsiMeetExternalAPI
|
||||||
|
@ -86,6 +87,7 @@ const setupCompleted = (async (): Promise<string | void> => {
|
||||||
const parentUrl = qsParam("parentUrl", true);
|
const parentUrl = qsParam("parentUrl", true);
|
||||||
const widgetId = qsParam("widgetId", true);
|
const widgetId = qsParam("widgetId", true);
|
||||||
const theme = qsParam("theme", true);
|
const theme = qsParam("theme", true);
|
||||||
|
language = qsParam("language", true) ?? "en";
|
||||||
|
|
||||||
if (theme) {
|
if (theme) {
|
||||||
document.body.classList.add(`theme-${theme.replace(" ", "_")}`);
|
document.body.classList.add(`theme-${theme.replace(" ", "_")}`);
|
||||||
|
@ -313,6 +315,31 @@ function closeConference(): void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Converts from IETF language tags used by Element (en-US) to the format used
|
||||||
|
// by Jitsi (enUS)
|
||||||
|
function normalizeLanguage(language: string): string {
|
||||||
|
const [lang, variant] = language.replace("_", "-").split("-");
|
||||||
|
|
||||||
|
if (!variant || lang === variant) {
|
||||||
|
return lang;
|
||||||
|
}
|
||||||
|
|
||||||
|
return lang + variant.toUpperCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapLanguage(language: string): string {
|
||||||
|
// Element and Jitsi don't agree how to interpret en, so we go with Elements
|
||||||
|
// interpretation to stay consistent
|
||||||
|
switch (language) {
|
||||||
|
case "en":
|
||||||
|
return "enGB";
|
||||||
|
case "enUS":
|
||||||
|
return "en";
|
||||||
|
default:
|
||||||
|
return language;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// event handler bound in HTML
|
// event handler bound in HTML
|
||||||
// An audio input of undefined instructs Jitsi to start unmuted with whatever
|
// An audio input of undefined instructs Jitsi to start unmuted with whatever
|
||||||
// audio input it can find, while an input of null instructs it to start muted,
|
// audio input it can find, while an input of null instructs it to start muted,
|
||||||
|
@ -371,6 +398,7 @@ function joinConference(audioInput?: string | null, videoInput?: string | null):
|
||||||
apiLogLevels: ["warn", "error"],
|
apiLogLevels: ["warn", "error"],
|
||||||
} as any,
|
} as any,
|
||||||
jwt: jwt,
|
jwt: jwt,
|
||||||
|
lang: mapLanguage(normalizeLanguage(language)),
|
||||||
};
|
};
|
||||||
|
|
||||||
// Video channel widgets need some more tailored config options
|
// Video channel widgets need some more tailored config options
|
||||||
|
|
Loading…
Reference in a new issue