[mirotalksfu] - add more languages on speechRec

هذا الالتزام موجود في:
Miroslav Pejic
2025-04-27 08:10:10 +02:00
الأصل 2cadfd485f
التزام 925a9727a7
6 ملفات معدلة مع 653 إضافات و31 حذوفات

عرض الملف

@@ -64,7 +64,7 @@ let BRAND = {
},
about: {
imageUrl: '../images/mirotalk-logo.gif',
title: '<strong>WebRTC SFU v1.8.30</strong>',
title: '<strong>WebRTC SFU v1.8.31</strong>',
html: `
<button
id="support-button"

عرض الملف

@@ -11,7 +11,7 @@ if (location.href.substr(0, 5) !== 'https') location.href = 'https' + location.h
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.30
* @version 1.8.31
*
*/
@@ -1515,7 +1515,7 @@ function roomIsReady() {
!BUTTONS.poll.pollSaveButton && hide(pollSaveButton);
isWebkitSpeechRecognitionSupported && BUTTONS.chat.chatSpeechStartButton
speechRecognition && BUTTONS.chat.chatSpeechStartButton
? show(chatSpeechStartButton)
: (BUTTONS.chat.chatSpeechStartButton = false);
@@ -5351,7 +5351,7 @@ function showAbout() {
position: 'center',
imageUrl: BRAND.about?.imageUrl && BRAND.about.imageUrl.trim() !== '' ? BRAND.about.imageUrl : image.about,
customClass: { image: 'img-about' },
title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.8.30',
title: BRAND.about?.title && BRAND.about.title.trim() !== '' ? BRAND.about.title : 'WebRTC SFU v1.8.31',
html: `
<br />
<div id="about">

عرض الملف

@@ -9,7 +9,7 @@
* @license For commercial or closed source, contact us at license.mirotalk@gmail.com or purchase directly via CodeCanyon
* @license CodeCanyon: https://codecanyon.net/item/mirotalk-sfu-webrtc-realtime-video-conferences/40769970
* @author Miroslav Pejic - miroslav.pejic.85@gmail.com
* @version 1.8.30
* @version 1.8.31
*
*/

عرض الملف

@@ -1,19 +1,29 @@
'use strict';
let isWebkitSpeechRecognitionSupported = false;
let recognition;
let isVoiceCommandsEnabled = true;
let browserLanguage = navigator.language || navigator.userLanguage;
let isVoiceCommandSupported = browserLanguage.includes('en-') || browserLanguage.includes('bn-');
let currentLanguage = 'en';
let currentLangCode = 'en-US';
const browserLanguage = navigator.language || navigator.userLanguage;
const isVoiceCommandSupported =
browserLanguage.includes('en-') ||
browserLanguage.includes('bn-') ||
browserLanguage.includes('es-') ||
browserLanguage.includes('fr-') ||
browserLanguage.includes('it-') ||
browserLanguage.includes('de-') ||
browserLanguage.includes('ja-') ||
browserLanguage.includes('pt-') ||
browserLanguage.includes('zh-') ||
browserLanguage.includes('ar-');
const speechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
/**
* Enable real-time voice recognition in the chat, allowing you to execute commands using your voice.
* Note: Currently, it supports only the English and Bangla language.
* TODO add more languages...
* const supportedLanguages = ['en', 'bn', 'es', 'fr', 'it', 'de', 'ja', 'pt', 'zh', 'ar'];
*/
const languageHandlers = {
en: {
@@ -72,7 +82,15 @@ const languageHandlers = {
tiktok: 'open tiktok',
github: 'open github',
survey: 'open survey',
recognizeBangla: 'recognise bangla',
recognizeBangla: 'recognize bangla',
recognizeItalian: 'recognize italian',
recognizeSpanish: 'recognize spanish',
recognizeFrench: 'recognize french',
recognizeGerman: 'recognize german',
recognizeJapanese: 'recognize japanese',
recognizePortuguese: 'recognize portuguese',
recognizeChinese: 'recognize chinese',
recognizeArabic: 'recognize arabic',
stopRecognition: 'stop the voice recognition',
},
},
@@ -133,9 +151,569 @@ const languageHandlers = {
github: 'গিটহাব খুলো',
survey: 'সার্ভে খুলো',
recognizeEnglish: 'ইংরেজিতে করো',
recognizeItalian: 'ইতালীয় চেনা',
recognizeSpanish: 'স্পেনীয় চেনা',
recognizeFrench: 'ফরাসি চেনা',
recognizeGerman: 'জার্মান চেনা',
recognizeJapanese: 'জাপানি চেনা',
recognizePortuguese: 'পর্তুগিজ চেনা',
recognizeChinese: 'চীনা চেনা',
recognizeArabic: 'আরবি চেনা',
stopRecognition: 'ভয়েস রিকগনিশন বন্ধ করো',
},
},
es: {
langCode: 'es-ES',
commands: {
shareRoom: 'compartir sala',
hideMe: 'esconderme',
showMe: 'muéstrame',
newRoom: 'nueva sala',
leaveRoom: 'salir de la sala',
audioOn: 'activar audio',
audioOff: 'desactivar audio',
videoOn: 'activar video',
videoOff: 'desactivar video',
screenOn: 'activar pantalla',
screenOff: 'desactivar pantalla',
chatOn: 'abrir chat',
chatSend: 'enviar',
chatOff: 'cerrar chat',
pollOn: 'abrir encuesta',
pollOff: 'cerrar encuesta',
editorOn: 'abrir editor',
editorOff: 'cerrar editor',
toggleTr: 'alternar transcripción',
whiteboardOn: 'abrir pizarra',
whiteboardOff: 'cerrar pizarra',
snapshotRoom: 'capturar sala',
recordingOn: 'comenzar grabación',
recordingPause: 'pausar grabación',
recordingResume: 'reanudar grabación',
recordingOff: 'detener grabación',
settingsOn: 'abrir configuraciones',
settingsOff: 'cerrar configuraciones',
participantsOn: 'mostrar participantes',
participantsOff: 'ocultar participantes',
participantsVideoOff: 'desactivar video de participantes',
participantsAudioOff: 'desactivar audio de participantes',
participantsKickOut: 'expulsar participantes',
fileShareOn: 'abrir archivo',
fileShareOff: 'cerrar archivo',
videoShareOn: 'compartir video',
videoShareOff: 'dejar de compartir video',
swapCamera: 'cambiar cámara',
raiseHand: 'levantar la mano',
lowerHand: 'bajar la mano',
roomLock: 'bloquear la sala',
roomUnlock: 'desbloquear la sala',
about: 'mostrar información',
email: 'abrir correo',
google: 'abrir google',
googleTr: 'abrir google translate',
youtube: 'abrir youtube',
facebook: 'abrir facebook',
linkedin: 'abrir linkedin',
twitter: 'abrir twitter',
tiktok: 'abrir tiktok',
github: 'abrir github',
survey: 'abrir encuesta',
recognizeEnglish: 'reconocer inglés',
recognizeBangla: 'reconocer bengalí',
recognizeItalian: 'reconocer italiano',
recognizeSpanish: 'reconocer español',
recognizeFrench: 'reconocer francés',
recognizeGerman: 'reconocer alemán',
recognizeJapanese: 'reconocer japonés',
recognizePortuguese: 'reconocer portugués',
recognizeChinese: 'reconocer chino',
recognizeArabic: 'reconocer árabe',
stopRecognition: 'detener el reconocimiento de voz',
},
},
fr: {
langCode: 'fr-FR',
commands: {
shareRoom: 'partager la salle',
hideMe: 'cachez-moi',
showMe: 'montrez-moi',
newRoom: 'nouvelle salle',
leaveRoom: 'quitter la salle',
audioOn: "activer l'audio",
audioOff: "désactiver l'audio",
videoOn: 'activer la vidéo',
videoOff: 'désactiver la vidéo',
screenOn: "activer l'écran",
screenOff: "désactiver l'écran",
chatOn: 'ouvrir le chat',
chatSend: 'envoyer',
chatOff: 'fermer le chat',
pollOn: 'ouvrir le sondage',
pollOff: 'fermer le sondage',
editorOn: "ouvrir l'éditeur",
editorOff: "fermer l'éditeur",
toggleTr: 'basculer la transcription',
whiteboardOn: 'ouvrir le tableau blanc',
whiteboardOff: 'fermer le tableau blanc',
snapshotRoom: 'prendre une capture de la salle',
recordingOn: "commencer l'enregistrement",
recordingPause: "mettre en pause l'enregistrement",
recordingResume: "reprendre l'enregistrement",
recordingOff: "arrêter l'enregistrement",
settingsOn: 'ouvrir les paramètres',
settingsOff: 'fermer les paramètres',
participantsOn: 'afficher les participants',
participantsOff: 'masquer les participants',
participantsVideoOff: 'désactiver la vidéo des participants',
participantsAudioOff: "désactiver l'audio des participants",
participantsKickOut: 'expulser les participants',
fileShareOn: 'ouvrir le fichier',
fileShareOff: 'fermer le fichier',
videoShareOn: 'partager la vidéo',
videoShareOff: 'arrêter le partage de la vidéo',
swapCamera: 'changer de caméra',
raiseHand: 'lever la main',
lowerHand: 'baisser la main',
roomLock: 'verrouiller la salle',
roomUnlock: 'déverrouiller la salle',
about: 'montrer à propos',
email: 'ouvrir email',
google: 'ouvrir google',
googleTr: 'ouvrir google translate',
youtube: 'ouvrir youtube',
facebook: 'ouvrir facebook',
linkedin: 'ouvrir linkedin',
twitter: 'ouvrir twitter',
tiktok: 'ouvrir tiktok',
github: 'ouvrir github',
survey: 'ouvrir enquête',
recognizeEnglish: 'reconnaître anglais',
recognizeBangla: 'reconnaître bengali',
recognizeItalian: 'reconnaître italien',
recognizeSpanish: 'reconnaître espagnol',
recognizeFrench: 'reconnaître français',
recognizeGerman: 'reconnaître allemand',
recognizeJapanese: 'reconnaître japonais',
recognizePortuguese: 'reconnaître portugais',
recognizeChinese: 'reconnaître chinois',
recognizeArabic: 'reconnaître arabe',
stopRecognition: 'arrêter la reconnaissance vocale',
},
},
it: {
langCode: 'it-IT',
commands: {
shareRoom: 'condividi sala',
hideMe: 'nascondimi',
showMe: 'fammi vedere',
newRoom: 'nuova sala',
leaveRoom: 'esci dalla sala',
audioOn: 'attiva audio',
audioOff: 'disattiva audio',
videoOn: 'attiva video',
videoOff: 'disattiva video',
screenOn: 'attiva schermo',
screenOff: 'disattiva schermo',
chatOn: 'apri chat',
chatSend: 'invia',
chatOff: 'chiudi chat',
pollOn: 'apri sondaggio',
pollOff: 'chiudi sondaggio',
editorOn: 'apri editor',
editorOff: 'chiudi editor',
toggleTr: 'attiva/disattiva trascrizione',
whiteboardOn: 'apri lavagna',
whiteboardOff: 'chiudi lavagna',
snapshotRoom: 'scatta foto della sala',
recordingOn: 'avvia registrazione',
recordingPause: 'metti in pausa registrazione',
recordingResume: 'riprendi registrazione',
recordingOff: 'ferma registrazione',
settingsOn: 'apri impostazioni',
settingsOff: 'chiudi impostazioni',
participantsOn: 'mostra partecipanti',
participantsOff: 'nascondi partecipanti',
participantsVideoOff: 'disattiva video partecipanti',
participantsAudioOff: 'disattiva audio partecipanti',
participantsKickOut: 'espelli partecipanti',
fileShareOn: 'apri file',
fileShareOff: 'chiudi file',
videoShareOn: 'condividi video',
videoShareOff: 'interrompi condivisione video',
swapCamera: 'cambia fotocamera',
raiseHand: 'alza mano',
lowerHand: 'abbassa mano',
roomLock: 'blocca sala',
roomUnlock: 'sblocca sala',
about: 'mostra informazioni',
email: 'apri email',
google: 'apri google',
googleTr: 'apri google translate',
youtube: 'apri youtube',
facebook: 'apri facebook',
linkedin: 'apri linkedin',
twitter: 'apri twitter',
tiktok: 'apri tiktok',
github: 'apri github',
survey: 'apri sondaggio',
recognizeEnglish: 'riconoscere inglese',
recognizeBangla: 'riconoscere bengalese',
recognizeItalian: 'riconoscere italiano',
recognizeSpanish: 'riconoscere spagnolo',
recognizeFrench: 'riconoscere francese',
recognizeGerman: 'riconoscere tedesco',
recognizeJapanese: 'riconoscere giapponese',
recognizePortuguese: 'riconoscere portoghese',
recognizeChinese: 'riconoscere cinese',
recognizeArabic: 'riconoscere arabo',
stopRecognition: 'ferma riconoscimento vocale',
},
},
de: {
langCode: 'de-DE',
commands: {
shareRoom: 'Raum teilen',
hideMe: 'verstecke mich',
showMe: 'zeige mich',
newRoom: 'neuer Raum',
leaveRoom: 'Raum verlassen',
audioOn: 'Audio aktivieren',
audioOff: 'Audio deaktivieren',
videoOn: 'Video aktivieren',
videoOff: 'Video deaktivieren',
screenOn: 'Bildschirm aktivieren',
screenOff: 'Bildschirm deaktivieren',
chatOn: 'Chat öffnen',
chatSend: 'senden',
chatOff: 'Chat schließen',
pollOn: 'Umfrage öffnen',
pollOff: 'Umfrage schließen',
editorOn: 'Editor öffnen',
editorOff: 'Editor schließen',
toggleTr: 'Transkription umschalten',
whiteboardOn: 'Whiteboard öffnen',
whiteboardOff: 'Whiteboard schließen',
snapshotRoom: 'Raum schnappen',
recordingOn: 'Aufnahme starten',
recordingPause: 'Aufnahme pausieren',
recordingResume: 'Aufnahme fortsetzen',
recordingOff: 'Aufnahme stoppen',
settingsOn: 'Einstellungen öffnen',
settingsOff: 'Einstellungen schließen',
participantsOn: 'Teilnehmer anzeigen',
participantsOff: 'Teilnehmer verstecken',
participantsVideoOff: 'Teilnehmer Video deaktivieren',
participantsAudioOff: 'Teilnehmer Audio deaktivieren',
participantsKickOut: 'Teilnehmer rauswerfen',
fileShareOn: 'Datei öffnen',
fileShareOff: 'Datei schließen',
videoShareOn: 'Video teilen',
videoShareOff: 'Video teilen stoppen',
swapCamera: 'Kamera wechseln',
raiseHand: 'Hand heben',
lowerHand: 'Hand senken',
roomLock: 'Raum sperren',
roomUnlock: 'Raum entsperren',
about: 'Info anzeigen',
email: 'E-Mail öffnen',
google: 'Google öffnen',
googleTr: 'Google Übersetzer öffnen',
youtube: 'YouTube öffnen',
facebook: 'Facebook öffnen',
linkedin: 'LinkedIn öffnen',
twitter: 'Twitter öffnen',
tiktok: 'TikTok öffnen',
github: 'GitHub öffnen',
survey: 'Umfrage öffnen',
recognizeEnglish: 'Englisch erkennen',
recognizeBangla: 'Bangla erkennen',
recognizeItalian: 'Italienisch erkennen',
recognizeSpanish: 'Spanisch erkennen',
recognizeFrench: 'Französisch erkennen',
recognizeGerman: 'Deutsch erkennen',
recognizeJapanese: 'Japanisch erkennen',
recognizePortuguese: 'Portugiesisch erkennen',
recognizeChinese: 'Chinesisch erkennen',
recognizeArabic: 'Arabisch erkennen',
stopRecognition: 'Spracherkennung stoppen',
},
},
pt: {
langCode: 'pt-BR',
commands: {
shareRoom: 'compartilhar sala',
hideMe: 'me esconda',
showMe: 'me mostre',
newRoom: 'nova sala',
leaveRoom: 'sair da sala',
audioOn: 'ativar áudio',
audioOff: 'desativar áudio',
videoOn: 'ativar vídeo',
videoOff: 'desativar vídeo',
screenOn: 'ativar tela',
screenOff: 'desativar tela',
chatOn: 'abrir chat',
chatSend: 'enviar',
chatOff: 'fechar chat',
pollOn: 'abrir enquete',
pollOff: 'fechar enquete',
editorOn: 'abrir editor',
editorOff: 'fechar editor',
toggleTr: 'alternar transcrição',
whiteboardOn: 'abrir quadro branco',
whiteboardOff: 'fechar quadro branco',
snapshotRoom: 'tirar foto da sala',
recordingOn: 'iniciar gravação',
recordingPause: 'pausar gravação',
recordingResume: 'retomar gravação',
recordingOff: 'parar gravação',
settingsOn: 'abrir configurações',
settingsOff: 'fechar configurações',
participantsOn: 'mostrar participantes',
participantsOff: 'ocultar participantes',
participantsVideoOff: 'desativar vídeo dos participantes',
participantsAudioOff: 'desativar áudio dos participantes',
participantsKickOut: 'expulsar participantes',
fileShareOn: 'abrir arquivo',
fileShareOff: 'fechar arquivo',
videoShareOn: 'compartilhar vídeo',
videoShareOff: 'parar de compartilhar vídeo',
swapCamera: 'trocar câmera',
raiseHand: 'levantar mão',
lowerHand: 'abaixar mão',
roomLock: 'trancar sala',
roomUnlock: 'destrancar sala',
about: 'mostrar sobre',
email: 'abrir e-mail',
google: 'abrir google',
googleTr: 'abrir google translate',
youtube: 'abrir youtube',
facebook: 'abrir facebook',
linkedin: 'abrir linkedin',
twitter: 'abrir twitter',
tiktok: 'abrir tiktok',
github: 'abrir github',
survey: 'abrir pesquisa',
recognizeEnglish: 'reconhecer inglês',
recognizeBangla: 'reconhecer bengali',
recognizeItalian: 'reconhecer italiano',
recognizeSpanish: 'reconhecer espanhol',
recognizeFrench: 'reconhecer francês',
recognizeGerman: 'reconhecer alemão',
recognizeJapanese: 'reconhecer japonês',
recognizePortuguese: 'reconhecer português',
recognizeChinese: 'reconhecer chinês',
recognizeArabic: 'reconhecer árabe',
stopRecognition: 'parar reconhecimento de voz',
},
},
ja: {
langCode: 'ja-JP',
commands: {
shareRoom: 'ルームを共有',
hideMe: '私を隠す',
showMe: '私を見せる',
newRoom: '新しいルーム',
leaveRoom: 'ルームを退出',
audioOn: 'オーディオを開始',
audioOff: 'オーディオを停止',
videoOn: 'ビデオを開始',
videoOff: 'ビデオを停止',
screenOn: '画面共有を開始',
screenOff: '画面共有を停止',
chatOn: 'チャットを開く',
chatSend: '送信',
chatOff: 'チャットを閉じる',
pollOn: '投票を開く',
pollOff: '投票を閉じる',
editorOn: 'エディターを開く',
editorOff: 'エディターを閉じる',
toggleTr: '文字起こしを切り替え',
whiteboardOn: 'ホワイトボードを開く',
whiteboardOff: 'ホワイトボードを閉じる',
snapshotRoom: 'ルームのスナップショット',
recordingOn: '録画を開始',
recordingPause: '録画を一時停止',
recordingResume: '録画を再開',
recordingOff: '録画を停止',
settingsOn: '設定を開く',
settingsOff: '設定を閉じる',
participantsOn: '参加者を表示',
participantsOff: '参加者を非表示',
participantsVideoOff: '参加者のビデオを停止',
participantsAudioOff: '参加者のオーディオを停止',
participantsKickOut: '参加者を退出させる',
fileShareOn: 'ファイルを開く',
fileShareOff: 'ファイルを閉じる',
videoShareOn: 'ビデオを共有',
videoShareOff: 'ビデオ共有を停止',
swapCamera: 'カメラを切り替え',
raiseHand: '手を上げる',
lowerHand: '手を下げる',
roomLock: 'ルームをロック',
roomUnlock: 'ルームをアンロック',
about: '情報を表示',
email: 'メールを開く',
google: 'Googleを開く',
googleTr: 'Google翻訳を開く',
youtube: 'YouTubeを開く',
facebook: 'Facebookを開く',
linkedin: 'LinkedInを開く',
twitter: 'Twitterを開く',
tiktok: 'TikTokを開く',
github: 'GitHubを開く',
survey: 'アンケートを開く',
recognizeEnglish: '英語に切り替え',
recognizeBangla: 'ベンガル語に切り替え',
recognizeItalian: 'イタリア語に切り替え',
recognizeSpanish: 'スペイン語に切り替え',
recognizeFrench: 'フランス語に切り替え',
recognizeGerman: 'ドイツ語に切り替え',
recognizeJapanese: '日本語に切り替え',
recognizePortuguese: 'ポルトガル語に切り替え',
recognizeChinese: '中国語に切り替え',
recognizeArabic: 'アラビア語に切り替え',
stopRecognition: '音声認識を停止',
},
},
zh: {
langCode: 'zh-CN',
commands: {
shareRoom: '分享房间',
hideMe: '隐藏我',
showMe: '展示我',
newRoom: '新房间',
leaveRoom: '离开房间',
audioOn: '开启音频',
audioOff: '关闭音频',
videoOn: '开启视频',
videoOff: '关闭视频',
screenOn: '开启屏幕共享',
screenOff: '关闭屏幕共享',
chatOn: '打开聊天',
chatSend: '发送',
chatOff: '关闭聊天',
pollOn: '开启投票',
pollOff: '关闭投票',
editorOn: '开启编辑器',
editorOff: '关闭编辑器',
toggleTr: '切换字幕',
whiteboardOn: '开启白板',
whiteboardOff: '关闭白板',
snapshotRoom: '截取房间截图',
recordingOn: '开始录制',
recordingPause: '暂停录制',
recordingResume: '恢复录制',
recordingOff: '停止录制',
settingsOn: '开启设置',
settingsOff: '关闭设置',
participantsOn: '显示参与者',
participantsOff: '隐藏参与者',
participantsVideoOff: '关闭参与者视频',
participantsAudioOff: '关闭参与者音频',
participantsKickOut: '踢出参与者',
fileShareOn: '开启文件共享',
fileShareOff: '关闭文件共享',
videoShareOn: '分享视频',
videoShareOff: '停止分享视频',
swapCamera: '切换摄像头',
raiseHand: '举手',
lowerHand: '放下手',
roomLock: '锁定房间',
roomUnlock: '解锁房间',
about: '显示关于信息',
email: '打开电子邮件',
google: '打开谷歌',
googleTr: '打开谷歌翻译',
youtube: '打开YouTube',
facebook: '打开Facebook',
linkedin: '打开LinkedIn',
twitter: '打开Twitter',
tiktok: '打开TikTok',
github: '打开GitHub',
survey: '打开调查',
recognizeEnglish: '识别英语',
recognizeBangla: '识别孟加拉语',
recognizeItalian: '识别意大利语',
recognizeSpanish: '识别西班牙语',
recognizeFrench: '识别法语',
recognizeGerman: '识别德语',
recognizeJapanese: '识别日语',
recognizePortuguese: '识别葡萄牙语',
recognizeChinese: '识别中文',
recognizeArabic: '识别阿拉伯语',
stopRecognition: '停止语音识别',
},
},
ar: {
langCode: 'ar-SA',
commands: {
shareRoom: 'مشاركة الغرفة',
hideMe: 'اخفني',
showMe: 'أرني',
newRoom: 'غرفة جديدة',
leaveRoom: 'مغادرة الغرفة',
audioOn: 'تشغيل الصوت',
audioOff: 'إيقاف الصوت',
videoOn: 'تشغيل الفيديو',
videoOff: 'إيقاف الفيديو',
screenOn: 'تشغيل الشاشة',
screenOff: 'إيقاف الشاشة',
chatOn: 'فتح الدردشة',
chatSend: 'إرسال',
chatOff: 'إغلاق الدردشة',
pollOn: 'فتح الاستطلاع',
pollOff: 'إغلاق الاستطلاع',
editorOn: 'فتح المحرر',
editorOff: 'إغلاق المحرر',
toggleTr: 'التبديل بين الترجمة',
whiteboardOn: 'فتح السبورة',
whiteboardOff: 'إغلاق السبورة',
snapshotRoom: 'التقاط صورة للغرفة',
recordingOn: 'بدء التسجيل',
recordingPause: 'إيقاف التسجيل مؤقتاً',
recordingResume: 'استئناف التسجيل',
recordingOff: 'إيقاف التسجيل',
settingsOn: 'فتح الإعدادات',
settingsOff: 'إغلاق الإعدادات',
participantsOn: 'عرض المشاركين',
participantsOff: 'إخفاء المشاركين',
participantsVideoOff: 'إيقاف فيديو المشاركين',
participantsAudioOff: 'إيقاف صوت المشاركين',
participantsKickOut: 'طرد المشاركين',
fileShareOn: 'فتح الملف',
fileShareOff: 'إغلاق الملف',
videoShareOn: 'مشاركة الفيديو',
videoShareOff: 'إيقاف مشاركة الفيديو',
swapCamera: 'تبديل الكاميرا',
raiseHand: 'رفع اليد',
lowerHand: 'إنزال اليد',
roomLock: 'قفل الغرفة',
roomUnlock: 'فتح قفل الغرفة',
about: 'عرض المعلومات',
email: 'فتح البريد الإلكتروني',
google: 'فتح جوجل',
googleTr: 'فتح ترجمة جوجل',
youtube: 'فتح يوتيوب',
facebook: 'فتح فيسبوك',
linkedin: 'فتح لينكد إن',
twitter: 'فتح تويتر',
tiktok: 'فتح تيك توك',
github: 'فتح جيت هاب',
survey: 'فتح الاستطلاع',
recognizeEnglish: 'التعرف على الإنجليزية',
recognizeBangla: 'التعرف على البنغالية',
recognizeItalian: 'التعرف على الإيطالية',
recognizeSpanish: 'التعرف على الإسبانية',
recognizeFrench: 'التعرف على الفرنسية',
recognizeGerman: 'التعرف على الألمانية',
recognizeJapanese: 'التعرف على اليابانية',
recognizePortuguese: 'التعرف على البرتغالية',
recognizeChinese: 'التعرف على الصينية',
recognizeArabic: 'التعرف على العربية',
stopRecognition: 'إيقاف التعرف الصوتي',
},
},
};
const browser = {
@@ -194,10 +772,10 @@ if (speechRecognition) {
userLog('info', 'Speech recognition stopped', 'top-end');
};
isWebkitSpeechRecognitionSupported = true;
console.info('Browser supports webkitSpeechRecognition');
} else {
console.warn('This browser not supports webkitSpeechRecognition');
console.warn('This browser does not support webkitSpeechRecognition');
isVoiceCommandsEnabled = false;
}
function setRecognitionLanguage(recognition, languageCode) {
@@ -210,12 +788,34 @@ function setRecognitionLanguage(recognition, languageCode) {
}
function startSpeech() {
recognition.lang = languageHandlers[currentLanguage]?.langCode || 'en-US';
recognition.start();
try {
recognition.lang = languageHandlers[currentLanguage]?.langCode || 'en-US';
recognition.start();
} catch (error) {
console.error('Error starting speech recognition:', error);
userLog('error', 'Failed to start voice recognition', 'top-end');
}
}
function stopSpeech() {
try {
recognition.stop();
} catch (error) {
console.error('Error stopping speech recognition:', error);
}
}
function switchRecognitionLanguage(lang) {
currentLanguage = lang;
setRecognitionLanguage(recognition, languageHandlers[currentLanguage].langCode);
recognition.stop();
setTimeout(() => recognition.start(), 300);
userLog('info', `Switched to ${lang} recognition`, 'top-end');
}
function printCommand(command) {
console.log('Detected', { command: command });
userLog('info', `Voice command: ${command}`, 'top-end', 2000);
}
function execVoiceCommands(transcript) {
@@ -443,28 +1043,50 @@ function execVoiceCommands(transcript) {
break;
case languageHandlers[currentLanguage].commands.recognizeBangla:
printCommand(languageHandlers[currentLanguage].commands.recognizeBangla);
currentLanguage = 'bn';
setRecognitionLanguage(recognition, languageHandlers[currentLanguage].langCode);
recognition.stop();
setTimeout(() => recognition.start(), 300);
switchRecognitionLanguage('bn');
break;
case languageHandlers[currentLanguage].commands.recognizeEnglish:
printCommand(languageHandlers[currentLanguage].commands.recognizeBangla);
currentLanguage = 'en';
setRecognitionLanguage(recognition, languageHandlers[currentLanguage].langCode);
recognition.stop();
setTimeout(() => recognition.start(), 300);
printCommand(languageHandlers[currentLanguage].commands.recognizeEnglish);
switchRecognitionLanguage('en');
break;
case languageHandlers[currentLanguage].commands.recognizeItalian:
printCommand(languageHandlers[currentLanguage].commands.recognizeItalian);
switchRecognitionLanguage('it');
break;
case languageHandlers[currentLanguage].commands.recognizeSpanish:
printCommand(languageHandlers[currentLanguage].commands.recognizeSpanish);
switchRecognitionLanguage('es');
break;
case languageHandlers[currentLanguage].commands.recognizeFrench:
printCommand(languageHandlers[currentLanguage].commands.recognizeFrench);
switchRecognitionLanguage('fr');
break;
case languageHandlers[currentLanguage].commands.recognizeGerman:
printCommand(languageHandlers[currentLanguage].commands.recognizeGerman);
switchRecognitionLanguage('de');
break;
case languageHandlers[currentLanguage].commands.recognizeJapanese:
printCommand(languageHandlers[currentLanguage].commands.recognizeJapanese);
switchRecognitionLanguage('ja');
break;
case languageHandlers[currentLanguage].commands.recognizePortuguese:
printCommand(languageHandlers[currentLanguage].commands.recognizePortuguese);
switchRecognitionLanguage('pt');
break;
case languageHandlers[currentLanguage].commands.recognizeChinese:
printCommand(languageHandlers[currentLanguage].commands.recognizeChinese);
switchRecognitionLanguage('zh');
break;
case languageHandlers[currentLanguage].commands.recognizeArabic:
printCommand(languageHandlers[currentLanguage].commands.recognizeArabic);
switchRecognitionLanguage('ar');
break;
case languageHandlers[currentLanguage].commands.stopRecognition:
printCommand(languageHandlers[currentLanguage].commands.stopRecognition);
chatSpeechStopButton.click();
break;
// ...
default:
console.log('Unrecognized command:', transcript);
break;
}
}
function printCommand(command) {
console.log('Detected', { command: command });
}