Merge branch 'v2.0.x-release' of https://github.com/bigbluebutton/bigbluebutton into video-dock-refactor
This commit is contained in:
commit
65a2fb592f
@ -1,22 +1,22 @@
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2014 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* BigBlueButton open source conferencing system - http://www.bigbluebutton.org/
|
||||
*
|
||||
* Copyright (c) 2014 BigBlueButton Inc. and by respective authors (see below).
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under the
|
||||
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||
* Foundation; either version 3.0 of the License, or (at your option) any later
|
||||
* version.
|
||||
*
|
||||
* BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License along
|
||||
* with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.bigbluebutton.clientcheck.service
|
||||
{
|
||||
import flash.events.AsyncErrorEvent;
|
||||
@ -60,7 +60,7 @@ package org.bigbluebutton.clientcheck.service
|
||||
// sip has a different way of connecting to the red5 server, need to fake connection data.
|
||||
if (systemConfiguration.rtmpApps[i].applicationUri.indexOf("sip") > 0)
|
||||
{
|
||||
_netConnection.connect(systemConfiguration.rtmpApps[i].applicationUri, ROOM_MOCK, EXTERNAL_USER_ID_MOCK, USER_NAME_MOCK);
|
||||
_netConnection.connect(systemConfiguration.rtmpApps[i].applicationUri, ROOM_MOCK, EXTERNAL_USER_ID_MOCK, USER_NAME_MOCK, INTERNAL_USER_ID_MOCK);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = الإتصال بالخادم
|
||||
bbb.mainshell.statusProgress.loading = تحميل
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = عفوا, لا يمكن الاتصال بالخادم.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (إصدار {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = افتح نافذة السجلّ
|
||||
bbb.mainshell.meetingNotFound = الاجتماع غير موجود
|
||||
bbb.mainshell.invalidAuthToken = رمز مصادقة غير صالح
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = تنبيه الاعدادات
|
||||
bbb.clientstatus.notification = الإخطارات الغير مقروءة
|
||||
bbb.clientstatus.close = إغلاق
|
||||
bbb.clientstatus.tunneling.title = برنامج الحماية
|
||||
bbb.clientstatus.tunneling.message = "يمنع أحد جدران الحماية العميل التابع لك من الاتصال بصورة مباشرة من خلال بوابة 1935 بالخادم البعيد؛ ونرجح الاتصال من خلال شبكة أقل تقييدا لإمكانية التواصل بشكل أكثر استقرارا وثباتا. "
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = إصدار المتصفح
|
||||
bbb.clientstatus.browser.message = "إذا كان لمتصفح الخاص بك ({0}) غير مُحدث؛ نرجح تحديث هذا المتصفح ليتواكب مع أحدث نسخة صادرة من هذا النوع من المتصفحات. "
|
||||
bbb.clientstatus.flash.title = مشغل الفلاش
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurační oznámení
|
||||
bbb.clientstatus.notification = Nepřečtená oznámení
|
||||
bbb.clientstatus.close = Zavřít
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Firewall znemožňuje přímé připojení ke vzdálenému serveru na portu 1935. Pro stabilní připojení doporučujeme méně retriktivní nastavení sítě.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Verze prohlížeče
|
||||
bbb.clientstatus.browser.message = Váš prohlížeč ({0}) je zastaralý. Doporučujeme aktualizovat na poslední verzi.
|
||||
bbb.clientstatus.flash.title = Flash přehrávač
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title =
|
||||
bbb.clientstatus.notification =
|
||||
bbb.clientstatus.close = Cau
|
||||
bbb.clientstatus.tunneling.title = Mur gwarchod
|
||||
bbb.clientstatus.tunneling.message = Mae mur gwarchod yn atal eich cleient rhag cysylltu yn uniongyrchol ar borth 1935 i'r gweinydd. Argymell ymuno â rhwydwaith llai cyfyngol ar gyfer cysylltiad mwy sefydlog
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Fersiwn Porwr
|
||||
bbb.clientstatus.browser.message =
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Tilslutter til serveren
|
||||
bbb.mainshell.statusProgress.loading = Indlæser
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Vi kan desværre ikke oprette forbindelse til serveren.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Åbn log-vinduet
|
||||
bbb.mainshell.meetingNotFound = Ingen møde fundet.
|
||||
bbb.mainshell.invalidAuthToken = Ugyldig godkendelse
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurations meddelelser
|
||||
bbb.clientstatus.notification = Ikke læst notifikationer
|
||||
bbb.clientstatus.close = Luk
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = En firewall forhindrer din klient i at forbinde direkte med port 1935. Vi anbefaler at deltage i en mindre restriktiv netværk for at opnå en mere stabil forbindelse.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Browser version
|
||||
bbb.clientstatus.browser.message = Din browser ({0}) er ikke op til date. Vi anbefaler at du opdatere til den seneste version.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Offentliggør
|
||||
bbb.polling.closeButton.label = Luk
|
||||
bbb.polling.customPollOption.label = Brugeropsat afstemning...
|
||||
bbb.polling.pollModal.title = Live undersøgelse resultater
|
||||
bbb.polling.pollModal.hint = Efterlad dette vindue åbent for at give eleverne mulighed for at svare på afstemningen. Afstemningen lukkes ved trykke på Luk eller Offentliggør.
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Indtast svarmuligheder
|
||||
bbb.polling.respondersLabel.novotes = Venter på svar
|
||||
bbb.polling.respondersLabel.text = {0} brugere har svaret
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Baue Verbindung zum Server auf
|
||||
bbb.mainshell.statusProgress.loading = Lade
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Verbindung zum Server konnte nicht hergestellt werden.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Protokollfenster öffnen
|
||||
bbb.mainshell.meetingNotFound = Kein Meeting gefunden
|
||||
bbb.mainshell.invalidAuthToken = Ungültiges Authentifizierungs-Token
|
||||
@ -45,7 +45,7 @@ bbb.micSettings.changeMic = Mikrofon testen oder ändern
|
||||
bbb.micSettings.changeMic.toolTip = Öffne die Mikrofoneinstellungen des Flash Players
|
||||
bbb.micSettings.comboMicList.toolTip = Wählen Sie ein Mikrofon
|
||||
bbb.micSettings.micRecordVolume.label = Pegel
|
||||
bbb.micSettings.micRecordVolume.toolTip = Stellen Sie Ihr Mikrofon erneut ein
|
||||
bbb.micSettings.micRecordVolume.toolTip = Stellen Sie Ihren Mikrofonpegel ein
|
||||
bbb.micSettings.nextButton = Weiter
|
||||
bbb.micSettings.nextButton.toolTip = Echotest starten
|
||||
bbb.micSettings.join = Jetzt teilnehmen
|
||||
@ -115,8 +115,8 @@ bbb.mainToolbar.recordBtn.toolTip.onlyModerators = Nur Moderatoren können die A
|
||||
bbb.mainToolbar.recordBtn.toolTip.wontInterrupt = Die Aufzeichnung kann nicht unterbrochen werden
|
||||
bbb.mainToolbar.recordBtn.toolTip.wontRecord = Diese Sitzung kann nicht aufgezeichnet werden
|
||||
bbb.mainToolbar.recordBtn.confirm.title = Aufzeichnung bestätigen
|
||||
bbb.mainToolbar.recordBtn.confirm.message.start = Sind Sie sicher, dass Sie die Aufzeichnung der Sitzung starten wollen?
|
||||
bbb.mainToolbar.recordBtn.confirm.message.stop = Sind Sie sicher, dass Sie die Aufzeichnung der Sitzung beenden wollen?
|
||||
bbb.mainToolbar.recordBtn.confirm.message.start = Sind Sie sicher, dass Sie die Aufzeichnung der Konferenz starten wollen?
|
||||
bbb.mainToolbar.recordBtn.confirm.message.stop = Sind Sie sicher, dass Sie die Aufzeichnung der Konferenz beenden wollen?
|
||||
bbb.mainToolbar.recordBtn.notification.title = Aufnahme-Benachrichtigung
|
||||
bbb.mainToolbar.recordBtn.notification.message1 = Sie können diese Konferenz aufnehmen.
|
||||
bbb.mainToolbar.recordBtn.notification.message2 = Klicken Sie den Aufnahme Start-/Stop-Button in der Titelleiste, um die Aufnahme zu beginnen oder zu beenden.
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurationsmeldungen
|
||||
bbb.clientstatus.notification = Ungelesene Meldungen
|
||||
bbb.clientstatus.close = Schließen
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Eine Firewall verhindert, dass ihr BBB Client sich direkt auf Port 1935 mit dem Server verbindet. Es wird empfohlen ein weniger restriktives Netzwerk zu verwenden, um eine stabilere Verbindung zum Server herzustellen.
|
||||
bbb.clientstatus.tunneling.message = Eine Firewall verhindert, dass sich Ihr Client direkt mit dem Server verbinden kann. Es wird empfohlen, aus einem weniger restriktiven Netzwerk an Konferenzen teilzunehmen, damit die Verbindung stabiler ist.
|
||||
bbb.clientstatus.browser.title = Browser Version
|
||||
bbb.clientstatus.browser.message = Ihr Browser ({0}) ist nicht aktuell. Es wird empfohlen, ihn auf die neuste Version zu aktualisieren
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Veröffentlichen
|
||||
bbb.polling.closeButton.label = Schließen
|
||||
bbb.polling.customPollOption.label = Benutzerdefinierte Umfrage...
|
||||
bbb.polling.pollModal.title = Live Umfrageergebnisse
|
||||
bbb.polling.pollModal.hint = Lassen Sie dieses Fenster geöffnet, damit die Teilnehmer ihre Antworten abgeben können. Wenn Sie auf Veröffentlichen oder Schließen klicken, wird die Umfrage dadurch beendet.
|
||||
bbb.polling.pollModal.hint = Lassen Sie dieses Fenster offen, um auf die Antworten der Teilnehmer zu warten. Sobald Sie auf Veröffentlichen oder Schließen klicken, wird die Umfrage beendet.
|
||||
bbb.polling.customChoices.title = Antwortoptionen eingeben
|
||||
bbb.polling.respondersLabel.novotes = Warte auf Rückmeldungen
|
||||
bbb.polling.respondersLabel.text = {0} Nutzer haben geantwortet
|
||||
@ -801,7 +801,7 @@ bbb.shortcutkey.specialKeys.minus = Minus
|
||||
bbb.toolbar.videodock.toolTip.closeAllVideos = Alle Videos schließen
|
||||
bbb.users.settings.lockAll = Alle Teilnehmer stummschalten
|
||||
bbb.users.settings.lockAllExcept = Teilnehmer sperren außer Präsentator
|
||||
bbb.users.settings.lockSettings = Teilnehmer sperren...
|
||||
bbb.users.settings.lockSettings = Teilnehmerfunktionen einschränken
|
||||
bbb.users.settings.breakoutRooms = Breakout-Räume ...
|
||||
bbb.users.settings.sendBreakoutRoomsInvitations = Einladungen für Breakout-Räume verschicken ...
|
||||
bbb.users.settings.unlockAll = Alle Teilnehmer freigeben
|
||||
@ -815,15 +815,15 @@ bbb.lockSettings.cancel.toolTip = Fenster schließen ohne zu speichern
|
||||
|
||||
bbb.lockSettings.hint = Diese Optionen ermöglichen es, bestimmte Funktionen für Zuschauer einzuschränken, wie z.B. die Nutzung des privaten Chats. (Diese Einschränkungen gelten nicht für Moderatoren)
|
||||
bbb.lockSettings.moderatorLocking = Sperrung durch Moderator
|
||||
bbb.lockSettings.privateChat = Privater Chat
|
||||
bbb.lockSettings.publicChat = Öffentlicher Chat
|
||||
bbb.lockSettings.webcam = Webcam
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Webcams der anderen Zuschauer ausblenden
|
||||
bbb.lockSettings.microphone = Mikrofon
|
||||
bbb.lockSettings.layout = Layout
|
||||
bbb.lockSettings.title=Teilnehmer sperren
|
||||
bbb.lockSettings.privateChat = Privater Chat gesperrt
|
||||
bbb.lockSettings.publicChat = Öffentlicher Chat gesperrt
|
||||
bbb.lockSettings.webcam = Webcamfreigabe gesperrt
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Webcams anderer Teilnehmer sehen
|
||||
bbb.lockSettings.microphone = Mikrofonfreigabe gesperrt
|
||||
bbb.lockSettings.layout = Layoutwechsel gesperrt
|
||||
bbb.lockSettings.title=Funktionen einschränken
|
||||
bbb.lockSettings.feature=Eigenschaft
|
||||
bbb.lockSettings.locked=Gesperrt
|
||||
bbb.lockSettings.locked=Aktiviert
|
||||
bbb.lockSettings.lockOnJoin=Beim Konferenzbeitritt sperren
|
||||
|
||||
bbb.users.breakout.breakoutRooms = Breakout-Räume
|
||||
|
@ -1,8 +1,8 @@
|
||||
bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Σύνδεση στον διακομιστή
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.loading = Φορτώνει
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Λυπούμαστε, αλλά δεν μπορούμε να συνδεθούμε στο διακομιστή
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2016 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Ανοίξτε το παράθυρο καταγραφής
|
||||
bbb.mainshell.meetingNotFound = Δεν βρέθηκε η συνεδρίαση
|
||||
bbb.mainshell.invalidAuthToken = Λάθος στοιχεία πιστοποίησης
|
||||
@ -17,9 +17,9 @@ bbb.mainshell.quote.attribution.2 =
|
||||
bbb.mainshell.quote.sentence.3 =
|
||||
bbb.mainshell.quote.attribution.3 =
|
||||
bbb.mainshell.quote.sentence.4 =
|
||||
bbb.mainshell.quote.attribution.4 =
|
||||
bbb.mainshell.quote.attribution.4 = Anthony J. D'Angelo
|
||||
bbb.mainshell.quote.sentence.5 =
|
||||
bbb.mainshell.quote.attribution.5 =
|
||||
bbb.mainshell.quote.attribution.5 = Neil Armstrong
|
||||
bbb.oldlocalewindow.reminder1 = Μπορεί να έχετε παλαιότερη μετάφραση του BigBlueButton.
|
||||
bbb.oldlocalewindow.reminder2 = Παρακαλούμε εκκαθαρίστε το πρόσφατο ιστορικό του περιηγητή σας και ξαναπροσπαθήστε.
|
||||
bbb.oldlocalewindow.windowTitle = Προσοχή: Παλαιά Μετάφραση
|
||||
@ -97,7 +97,7 @@ bbb.webrtcWarning.connection.reestablished = Αποκαταστάθηκε η σ
|
||||
bbb.inactivityWarning.title =
|
||||
bbb.inactivityWarning.message =
|
||||
bbb.shuttingDown.message =
|
||||
bbb.inactivityWarning.cancel =
|
||||
bbb.inactivityWarning.cancel = Ακύρωση
|
||||
bbb.mainToolbar.helpBtn = Βοήθεια
|
||||
bbb.mainToolbar.logoutBtn = Αποσύνδεση
|
||||
bbb.mainToolbar.logoutBtn.toolTip = Αποσύνδεση
|
||||
@ -123,16 +123,16 @@ bbb.mainToolbar.recordBtn.notification.message2 = Για την εκκίνηση
|
||||
bbb.mainToolbar.recordingLabel.recording = (Εγγραφή)
|
||||
bbb.mainToolbar.recordingLabel.notRecording = Δεν γίνεται εγγραφή
|
||||
bbb.waitWindow.waitMessage.message =
|
||||
bbb.waitWindow.waitMessage.title =
|
||||
bbb.guests.title =
|
||||
bbb.waitWindow.waitMessage.title = Αναμονή
|
||||
bbb.guests.title = Επισκέπτες
|
||||
bbb.guests.message.singular =
|
||||
bbb.guests.message.plural =
|
||||
bbb.guests.allowBtn.toolTip =
|
||||
bbb.guests.allowBtn.toolTip = Επιτρέπω
|
||||
bbb.guests.allowEveryoneBtn.text =
|
||||
bbb.guests.denyBtn.toolTip =
|
||||
bbb.guests.denyEveryoneBtn.text =
|
||||
bbb.guests.rememberAction.text =
|
||||
bbb.guests.alwaysAccept =
|
||||
bbb.guests.alwaysAccept = Αποδοχή πάντα
|
||||
bbb.guests.alwaysDeny =
|
||||
bbb.guests.askModerator =
|
||||
bbb.guests.Management =
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Ειδοποιήσεις ρυθμίσεων
|
||||
bbb.clientstatus.notification = Αδιάβαστες ειδοποιήσεις
|
||||
bbb.clientstatus.close = Κλείσιμο
|
||||
bbb.clientstatus.tunneling.title = Τείχος Προστασίας
|
||||
bbb.clientstatus.tunneling.message = Ένα τείχος προστασίας εμποδίζει τον πελάτη σας να συνδεθεί απευθείας στη θύρα 1935 στον απομακρυσμένο διακομιστή. Προτείνουμε να ενταχθεί σε ένα λιγότερο περιοριστικό δίκτυο για μια πιο σταθερή σύνδεση.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Έκδοση περιηγητή
|
||||
bbb.clientstatus.browser.message = Ο περιηγητής σας ({0}) δεν είναι ενημερωμένος. Προτείνεται ενημέρωση στην τελευταία έκδοση.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -151,7 +151,7 @@ bbb.clientstatus.webrtc.almostStrongStatus =
|
||||
bbb.clientstatus.webrtc.almostWeakStatus =
|
||||
bbb.clientstatus.webrtc.weakStatus =
|
||||
bbb.clientstatus.webrtc.message = Συνιστούμε τη χρήση είτε του Firefox ή του Chrome για καλύτερη ακουστική.
|
||||
bbb.clientstatus.java.title =
|
||||
bbb.clientstatus.java.title = Java
|
||||
bbb.clientstatus.java.notdetected =
|
||||
bbb.clientstatus.java.notinstalled =
|
||||
bbb.clientstatus.java.oldversion =
|
||||
@ -200,7 +200,7 @@ bbb.users.usersGrid.statusItemRenderer.speakFaster =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSlower =
|
||||
bbb.users.usersGrid.statusItemRenderer.away =
|
||||
bbb.users.usersGrid.statusItemRenderer.confused =
|
||||
bbb.users.usersGrid.statusItemRenderer.neutral =
|
||||
bbb.users.usersGrid.statusItemRenderer.neutral = Ουδέτερο
|
||||
bbb.users.usersGrid.statusItemRenderer.happy =
|
||||
bbb.users.usersGrid.statusItemRenderer.sad =
|
||||
bbb.users.usersGrid.statusItemRenderer.clearStatus = Καθαρισμός κατάστασης
|
||||
@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Κάντε κλικ για ν
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute = Κάντε κλικ για να απενεργοποιήσετε τον ήχο στον χρήστη
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock = Κλείδωμα του χρήστη {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Ξεκλείδωμα του χρήστη {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser = Διαγραφή {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam = Η κάμερα διαμοιράζεται
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff = Μικρόφωνο κλειστό
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = Μικρόφωνο ανοικτό
|
||||
@ -225,15 +225,15 @@ bbb.users.usersGrid.mediaItemRenderer.demoteUser =
|
||||
bbb.users.emojiStatus.clear = Καθαρισμός
|
||||
bbb.users.emojiStatus.raiseHand =
|
||||
bbb.users.emojiStatus.happy =
|
||||
bbb.users.emojiStatus.neutral =
|
||||
bbb.users.emojiStatus.neutral = Ουδέτερο
|
||||
bbb.users.emojiStatus.sad =
|
||||
bbb.users.emojiStatus.confused =
|
||||
bbb.users.emojiStatus.away =
|
||||
bbb.users.emojiStatus.thumbsUp =
|
||||
bbb.users.emojiStatus.thumbsDown =
|
||||
bbb.users.emojiStatus.applause =
|
||||
bbb.users.emojiStatus.agree =
|
||||
bbb.users.emojiStatus.disagree =
|
||||
bbb.users.emojiStatus.agree = Συμφωνώ
|
||||
bbb.users.emojiStatus.disagree = Δεν Συμφωνώ
|
||||
bbb.users.emojiStatus.none =
|
||||
bbb.users.emojiStatus.speakLouder =
|
||||
bbb.users.emojiStatus.speakSofter =
|
||||
@ -257,7 +257,7 @@ bbb.presentation.uploadcomplete = Η μεταφόρτωση ολοκληρώθη
|
||||
bbb.presentation.uploaded = μεταφορτώθηκε.
|
||||
bbb.presentation.document.supported = Το μεταφορτωμένο έγγραφο υποστηρίζεται. Ξεκινάει η διαδικασία μετατροπής...
|
||||
bbb.presentation.document.converted = Το έγγραφο του office μετατράπηκε επιτυχώς.
|
||||
bbb.presentation.error.document.convert.failed =
|
||||
bbb.presentation.error.document.convert.failed = Δοκιμάστε να μετατρέψετε το έγγραφο σε PDF και ανεβάστε το ξανά.
|
||||
bbb.presentation.error.document.convert.invalid =
|
||||
bbb.presentation.error.io = IO (ERROR)Σφάλμα (Εισόδου-Εξόδου): Παρακαλούμε επικοινωνήστε με τον διαχειριστή.
|
||||
bbb.presentation.error.security = Security Σφάλμα (Σφάλμα Ασφαλείας): Παρακαλούμε επικοινωνήστε με τον διαχειριστή.
|
||||
@ -287,7 +287,7 @@ bbb.fileupload.deleteBtn.toolTip = Διαγραφή παρουσίασης
|
||||
bbb.fileupload.showBtn = Προβολή
|
||||
bbb.fileupload.retry =
|
||||
bbb.fileupload.showBtn.toolTip = Προβολή παρουσίασης
|
||||
bbb.fileupload.close.tooltip =
|
||||
bbb.fileupload.close.tooltip = Κλείσιμο
|
||||
bbb.fileupload.close.accessibilityName =
|
||||
bbb.fileupload.genThumbText = Δημιουργία μικρογραφιών...
|
||||
bbb.fileupload.progBarLbl = Πρόοδος:
|
||||
@ -295,10 +295,10 @@ bbb.fileupload.fileFormatHint =
|
||||
bbb.fileupload.letUserDownload =
|
||||
bbb.fileupload.letUserDownload.tooltip =
|
||||
bbb.filedownload.title =
|
||||
bbb.filedownload.close.tooltip =
|
||||
bbb.filedownload.close.tooltip = Κλείσιμο
|
||||
bbb.filedownload.close.accessibilityName =
|
||||
bbb.filedownload.fileLbl =
|
||||
bbb.filedownload.downloadBtn =
|
||||
bbb.filedownload.downloadBtn = Κατέβασμα
|
||||
bbb.filedownload.downloadBtn.toolTip =
|
||||
bbb.filedownload.thisFileIsDownloadable =
|
||||
bbb.chat.title = Συζήτηση
|
||||
@ -309,13 +309,13 @@ bbb.chat.sendBtn.toolTip = Αποστολή μηνύματος
|
||||
bbb.chat.sendBtn.accessibilityName = Αποστολή μηνύματος
|
||||
bbb.chat.saveBtn.toolTip =
|
||||
bbb.chat.saveBtn.accessibilityName =
|
||||
bbb.chat.saveBtn.label =
|
||||
bbb.chat.saveBtn.label = Αποθήκευση
|
||||
bbb.chat.save.complete =
|
||||
bbb.chat.save.ioerror =
|
||||
bbb.chat.save.filename =
|
||||
bbb.chat.copyBtn.toolTip =
|
||||
bbb.chat.copyBtn.accessibilityName =
|
||||
bbb.chat.copyBtn.label =
|
||||
bbb.chat.copyBtn.label = Αντιγραφή
|
||||
bbb.chat.copy.complete =
|
||||
bbb.chat.clearBtn.toolTip =
|
||||
bbb.chat.clearBtn.accessibilityName =
|
||||
@ -334,7 +334,7 @@ bbb.chat.usersList.accessibilityName = Επιλέξτε το χρήστη για
|
||||
bbb.chat.chatOptions = Παράθυρο συνομιλίας Επιλογές συνομιλίας
|
||||
bbb.chat.fontSize = Παράθυρο συνομιλίας Μέγεθος γραμματοσειράς
|
||||
bbb.chat.cmbFontSize.toolTip = Επιλογή Μεγέθους Γραμματοσειράς Παράθυρου Συνομιλίας
|
||||
bbb.chat.messageList =
|
||||
bbb.chat.messageList = Μηνύματα Συνομιλίας
|
||||
bbb.chat.minimizeBtn.accessibilityName = Ελαχιστοποίηση του παραθύρου συνομιλίας
|
||||
bbb.chat.maximizeRestoreBtn.accessibilityName = Μεγιστοποίηση του παραθύρου συνομιλίας
|
||||
bbb.chat.closeBtn.accessibilityName = Κλείσιμο του παραθύρου συνομιλίας
|
||||
@ -373,17 +373,17 @@ bbb.video.streamClose.toolTip = Κλείσιμο ροής για: {0}
|
||||
bbb.video.message.browserhttp =
|
||||
bbb.screensharePublish.title =
|
||||
bbb.screensharePublish.pause.tooltip =
|
||||
bbb.screensharePublish.pause.label =
|
||||
bbb.screensharePublish.pause.label = Παύση
|
||||
bbb.screensharePublish.restart.tooltip =
|
||||
bbb.screensharePublish.restart.label =
|
||||
bbb.screensharePublish.restart.label = Συνέχεια
|
||||
bbb.screensharePublish.maximizeRestoreBtn.toolTip =
|
||||
bbb.screensharePublish.closeBtn.toolTip =
|
||||
bbb.screensharePublish.closeBtn.accessibilityName =
|
||||
bbb.screensharePublish.minimizeBtn.toolTip =
|
||||
bbb.screensharePublish.minimizeBtn.toolTip = Ελαχιστοποίηση
|
||||
bbb.screensharePublish.minimizeBtn.accessibilityName =
|
||||
bbb.screensharePublish.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screensharePublish.commonHelpText.text =
|
||||
bbb.screensharePublish.helpButton.toolTip =
|
||||
bbb.screensharePublish.helpButton.toolTip = Βοήθεια
|
||||
bbb.screensharePublish.helpButton.accessibilityName =
|
||||
bbb.screensharePublish.helpText.PCIE1 =
|
||||
bbb.screensharePublish.helpText.PCIE2 =
|
||||
@ -413,7 +413,7 @@ bbb.screensharePublish.helpText.LinuxChrome1 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome2 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome3 =
|
||||
bbb.screensharePublish.shareTypeLabel.text =
|
||||
bbb.screensharePublish.shareType.fullScreen =
|
||||
bbb.screensharePublish.shareType.fullScreen = Πλήρης οθόνη
|
||||
bbb.screensharePublish.shareType.region =
|
||||
bbb.screensharePublish.pauseMessage.label =
|
||||
bbb.screensharePublish.startFailed.label =
|
||||
@ -422,9 +422,9 @@ bbb.screensharePublish.jwsCrashed.label =
|
||||
bbb.screensharePublish.commonErrorMessage.label =
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one =
|
||||
bbb.screensharePublish.tunnelingErrorMessage.two =
|
||||
bbb.screensharePublish.cancelButton.label =
|
||||
bbb.screensharePublish.startButton.label =
|
||||
bbb.screensharePublish.stopButton.label =
|
||||
bbb.screensharePublish.cancelButton.label = Ακύρωση
|
||||
bbb.screensharePublish.startButton.label = Έναρξη
|
||||
bbb.screensharePublish.stopButton.label = Διακοπή
|
||||
bbb.screensharePublish.stopButton.toolTip =
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label =
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label =
|
||||
@ -440,17 +440,17 @@ bbb.screenshareView.actualSize =
|
||||
bbb.screenshareView.minimizeBtn.accessibilityName =
|
||||
bbb.screenshareView.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screenshareView.closeBtn.accessibilityName =
|
||||
bbb.toolbar.phone.toolTip.start =
|
||||
bbb.toolbar.phone.toolTip.stop =
|
||||
bbb.toolbar.phone.toolTip.start = Ενεργοποίηση Ήχου (μικρόφωνο ή μόνο ακρόαση)
|
||||
bbb.toolbar.phone.toolTip.stop = Απενεργοποίηση Ήχου
|
||||
bbb.toolbar.phone.toolTip.mute = Διακοπή παρακολούθησης συνεδρίου
|
||||
bbb.toolbar.phone.toolTip.unmute = Εκκίνηση παρακολούθησης συνεδρίου
|
||||
bbb.toolbar.phone.toolTip.nomic = Δε βρέθηκε μικρόφωνο
|
||||
bbb.toolbar.deskshare.toolTip.start =
|
||||
bbb.toolbar.deskshare.toolTip.stop =
|
||||
bbb.toolbar.deskshare.toolTip.start = Άνοιγμα του παραθύρου διαμοιρασμού επιφάνειας εργασίας
|
||||
bbb.toolbar.deskshare.toolTip.stop = Διακοπή διαμοιρασμού της επιφάνειας εργασίας σου
|
||||
bbb.toolbar.sharednotes.toolTip =
|
||||
bbb.toolbar.video.toolTip.start = Διαμοιρασμός της κάμερας σας
|
||||
bbb.toolbar.video.toolTip.stop = Κλείσιμο διαμοιρασμού της κάμεράς σου
|
||||
bbb.layout.addButton.label =
|
||||
bbb.layout.addButton.label = Προσθήκη
|
||||
bbb.layout.addButton.toolTip = Προσθήκη της προσαρμοσμένης εμφάνισης στην λίστα
|
||||
bbb.layout.overwriteLayoutName.title =
|
||||
bbb.layout.overwriteLayoutName.text =
|
||||
@ -464,7 +464,7 @@ bbb.layout.combo.custom = * Προσαρμοσμένη εμφάνιση
|
||||
bbb.layout.combo.customName = Προσαρμοσμένη εμφάνιση
|
||||
bbb.layout.combo.remote = Απομακρυσμένο
|
||||
bbb.layout.window.name =
|
||||
bbb.layout.window.close.tooltip =
|
||||
bbb.layout.window.close.tooltip = Κλείσιμο
|
||||
bbb.layout.window.close.accessibilityName =
|
||||
bbb.layout.save.complete = Οι εμφανίσεις αποθηκεύτηκαν επιτυχώς
|
||||
bbb.layout.save.ioerror =
|
||||
@ -517,9 +517,9 @@ bbb.logout.refresh.message = Εάν αυτή η αποσύνδεση ήταν α
|
||||
bbb.logout.refresh.label = Επανασύνδεση
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.label =
|
||||
bbb.settings.title =
|
||||
bbb.settings.ok =
|
||||
bbb.settings.cancel =
|
||||
bbb.settings.title = Ρυθμίσεις
|
||||
bbb.settings.ok = OK
|
||||
bbb.settings.cancel = Ακύρωση
|
||||
bbb.settings.btn.toolTip =
|
||||
bbb.logout.confirm.title = Επιβεβαίωση Αποσύνδεσης
|
||||
bbb.logout.confirm.message = Είστε σίγουρος/η οτι θέλετε να αποσυνδεθείτε;
|
||||
@ -542,7 +542,7 @@ bbb.notes.saveBtn.toolTip = Αποθήκευση σημείωσης
|
||||
bbb.sharedNotes.title =
|
||||
bbb.sharedNotes.quickLink.label =
|
||||
bbb.sharedNotes.createNoteWindow.label =
|
||||
bbb.sharedNotes.createNoteWindow.close.tooltip =
|
||||
bbb.sharedNotes.createNoteWindow.close.tooltip = Κλείσιμο
|
||||
bbb.sharedNotes.createNoteWindow.close.accessibilityName =
|
||||
bbb.sharedNotes.typing.single =
|
||||
bbb.sharedNotes.typing.double =
|
||||
@ -551,8 +551,8 @@ bbb.sharedNotes.save.toolTip =
|
||||
bbb.sharedNotes.save.complete =
|
||||
bbb.sharedNotes.save.ioerror =
|
||||
bbb.sharedNotes.save.htmlLabel =
|
||||
bbb.sharedNotes.save.txtLabel =
|
||||
bbb.sharedNotes.new.label =
|
||||
bbb.sharedNotes.save.txtLabel = Απλο κείμενο (.txt)
|
||||
bbb.sharedNotes.new.label = Δημιουργία
|
||||
bbb.sharedNotes.new.toolTip =
|
||||
bbb.sharedNotes.limit.label =
|
||||
bbb.sharedNotes.clear.label =
|
||||
@ -578,21 +578,21 @@ bbb.settings.flash.label = Σφάλμα έκδοσης Flash
|
||||
bbb.settings.flash.text = Έχετε εγκατεστημένη την έκδοση {0} του Flash, αλλά χρειάζεστε τουλάχιστον την έκδοση {1} για να λειτουργεί το BigBlueButton απρόσκοπτα. Κάντε κλικ στο πλήκτρο παρακάτω για να εγκαταστήσετε τη νεότερη έκδοση του προγράμματος Adobe Flash.
|
||||
bbb.settings.flash.command = Εγκατάσταση νεότερης έκδοσης Flash
|
||||
bbb.settings.isight.label = Σφάλμα κάμερας iSight
|
||||
bbb.settings.isight.text =
|
||||
bbb.settings.isight.text = Εάν αντιμετωπίζετε προβλήματα με την iSight κάμερά σας, ενδεχομένως αυτό να οφείλεται στο ότι χρησιμοποιείτε OS X 10.6.5., κάτι που είναι γνωστό ότι δημιουργεί προβλήματα στο Flash και δεν είναι δυνατή η σύλληψη εικόνας από την iSight κάμερα. Για να το διορθώσετε, κάντε κλικ στον παρακάτω σύνδεσμο για να εγκαταστήσετε μια νεότερη έκδοση του Flash, ή αναβαθμίστε το λογισμικό Mac σε νεότερη έκδοση.
|
||||
bbb.settings.isight.command = Εγκατάσταση Flash 10.2 RC2
|
||||
bbb.settings.warning.label = Προειδοποίηση
|
||||
bbb.settings.warning.close = Κλείσιμο της προειδοποίησης
|
||||
bbb.settings.noissues = Δεν εντοπίστηκαν εκκρεμή ζητήματα
|
||||
bbb.settings.instructions = Αποδεχτείτε το αίτημα του Flash που ζητά δικαιώματα πρόσβασης στην κάμερά σας. Εάν βλέπετε και ακούτε τον εαυτό σας σωστά, ο περιηγητής σας έχει ρυθμιστεί σωστά. Άλλα σημαντικά ζητήματα εμφανίζονται παρακάτω. Κάντε κλικ σε καθένα από αυτά για να βρείτε πιθανές λύσεις.
|
||||
bbb.bwmonitor.title =
|
||||
bbb.bwmonitor.upload =
|
||||
bbb.bwmonitor.upload.short =
|
||||
bbb.bwmonitor.download =
|
||||
bbb.bwmonitor.download.short =
|
||||
bbb.bwmonitor.total =
|
||||
bbb.bwmonitor.upload = Μεταφόρτωση
|
||||
bbb.bwmonitor.upload.short = Πάνω
|
||||
bbb.bwmonitor.download = Κατέβασμα
|
||||
bbb.bwmonitor.download.short = Κάτω
|
||||
bbb.bwmonitor.total = Σύνολο
|
||||
bbb.bwmonitor.current =
|
||||
bbb.bwmonitor.available =
|
||||
bbb.bwmonitor.latency =
|
||||
bbb.bwmonitor.available = Διαθέσιμος/η
|
||||
bbb.bwmonitor.latency = Καθυστέρηση
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle = Τρίγωνο
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = Αλλαγή του κέρσορα της οθόνης σε τρίγωνο
|
||||
ltbcustom.bbb.highlighter.toolbar.line = Γραμμή
|
||||
@ -620,12 +620,12 @@ bbb.caption.option.takeowner =
|
||||
bbb.caption.option.takeowner.tooltip =
|
||||
bbb.caption.option.fontfamily =
|
||||
bbb.caption.option.fontfamily.tooltip =
|
||||
bbb.caption.option.fontsize =
|
||||
bbb.caption.option.fontsize.tooltip =
|
||||
bbb.caption.option.fontsize = Μέγεθος γραμματοσειράς:
|
||||
bbb.caption.option.fontsize.tooltip = Μέγεθος γραμματοσειράς
|
||||
bbb.caption.option.backcolor =
|
||||
bbb.caption.option.backcolor.tooltip =
|
||||
bbb.caption.option.textcolor =
|
||||
bbb.caption.option.textcolor.tooltip =
|
||||
bbb.caption.option.textcolor = Χρώμα γραμματοσειράς:
|
||||
bbb.caption.option.textcolor.tooltip = Χρώμα γραμματοσειράς
|
||||
|
||||
|
||||
bbb.accessibility.clientReady = Έτοιμο
|
||||
@ -662,7 +662,7 @@ bbb.shortcutkey.general.minimize.function = Ελαχιστοποίηση τρέ
|
||||
bbb.shortcutkey.general.maximize = 187
|
||||
bbb.shortcutkey.general.maximize.function = Μεγιστοποίηση τρέχοντος παραθύρου
|
||||
|
||||
bbb.shortcutkey.flash.exit =
|
||||
bbb.shortcutkey.flash.exit = 79
|
||||
bbb.shortcutkey.flash.exit.function = Επικέντρωση εκτός του flash παραθύρου
|
||||
bbb.shortcutkey.users.muteme = 77
|
||||
bbb.shortcutkey.users.muteme.function = Σίγαση και ενεργοποίηση του μικροφώνου σου
|
||||
@ -681,7 +681,7 @@ bbb.shortcutkey.focus.presentation = 51
|
||||
bbb.shortcutkey.focus.presentation.function = Μετακίνηση της εστίασης στο παράθυρο της Παρουσίασης
|
||||
bbb.shortcutkey.focus.chat = 52
|
||||
bbb.shortcutkey.focus.chat.function = Μεταφορά της εστίασης στο παράθυρο συνομιλίας
|
||||
bbb.shortcutkey.focus.caption =
|
||||
bbb.shortcutkey.focus.caption = 53
|
||||
bbb.shortcutkey.focus.caption.function =
|
||||
|
||||
bbb.shortcutkey.share.desktop = 68
|
||||
@ -696,7 +696,7 @@ bbb.shortcutkey.logout.function = Αποσύνδεση από αυτή την σ
|
||||
bbb.shortcutkey.raiseHand = 82
|
||||
bbb.shortcutkey.raiseHand.function = Ύψωσε το χέρι σου
|
||||
|
||||
bbb.shortcutkey.present.upload =
|
||||
bbb.shortcutkey.present.upload = 89
|
||||
bbb.shortcutkey.present.upload.function = Ανέβασμα παρουσίασης
|
||||
bbb.shortcutkey.present.previous = 65
|
||||
bbb.shortcutkey.present.previous.function = Πήγαινε στην προηγούμενη διαφάνεια
|
||||
@ -706,12 +706,12 @@ bbb.shortcutkey.present.next = 69
|
||||
bbb.shortcutkey.present.next.function = Πήγαινε στην επόμενη διαφάνεια
|
||||
bbb.shortcutkey.present.fitWidth = 70
|
||||
bbb.shortcutkey.present.fitWidth.function = Προσάρμοσε τις διαφάνειες στο πλάτος
|
||||
bbb.shortcutkey.present.fitPage =
|
||||
bbb.shortcutkey.present.fitPage = 82
|
||||
bbb.shortcutkey.present.fitPage.function = Προσάρμοσε τις διαφάνειες στη σελίδα
|
||||
|
||||
bbb.shortcutkey.users.makePresenter =
|
||||
bbb.shortcutkey.users.makePresenter = 89
|
||||
bbb.shortcutkey.users.makePresenter.function = Κάνε το επιλεγμένο άτομο παρουσιαστή
|
||||
bbb.shortcutkey.users.kick =
|
||||
bbb.shortcutkey.users.kick = 69
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.mute = 83
|
||||
bbb.shortcutkey.users.mute.function = Σίγαση ή ενεργοποίηση του ήχου στο επιλεγμένο άτομο
|
||||
@ -719,18 +719,18 @@ bbb.shortcutkey.users.muteall = 65
|
||||
bbb.shortcutkey.users.muteall.function = Σίγαση ή ενεργοποίηση του ήχου σε όλους τους χρήστες
|
||||
bbb.shortcutkey.users.muteAllButPres = 65
|
||||
bbb.shortcutkey.users.muteAllButPres.function = Σίγαση σε όλους εκτός του παρουσιαστή
|
||||
bbb.shortcutkey.users.breakoutRooms =
|
||||
bbb.shortcutkey.users.breakoutRooms = 75
|
||||
bbb.shortcutkey.users.breakoutRooms.function =
|
||||
bbb.shortcutkey.users.focusBreakoutRooms =
|
||||
bbb.shortcutkey.users.focusBreakoutRooms = 82
|
||||
bbb.shortcutkey.users.focusBreakoutRooms.function =
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom =
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom = 76
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom.function =
|
||||
bbb.shortcutkey.users.joinBreakoutRoom =
|
||||
bbb.shortcutkey.users.joinBreakoutRoom = 79
|
||||
bbb.shortcutkey.users.joinBreakoutRoom.function =
|
||||
|
||||
bbb.shortcutkey.chat.focusTabs = 89
|
||||
bbb.shortcutkey.chat.focusTabs.function = Εστίασε στις καρτέλες συνομιλιών
|
||||
bbb.shortcutkey.chat.focusBox =
|
||||
bbb.shortcutkey.chat.focusBox = 82
|
||||
bbb.shortcutkey.chat.focusBox.function =
|
||||
bbb.shortcutkey.chat.changeColour = 67
|
||||
bbb.shortcutkey.chat.changeColour.function = Εστίαση στην επιλογή χρώματος γραμματαοσειράς.
|
||||
@ -756,7 +756,7 @@ bbb.shortcutkey.chat.chatbox.goread.function = Πλοήγηση στο πιο π
|
||||
bbb.shortcutkey.chat.chatbox.debug = 71
|
||||
bbb.shortcutkey.chat.chatbox.debug.function = Προσωρινό ενεργό κουμπί αποσφαλμάτωσης
|
||||
|
||||
bbb.shortcutkey.caption.takeOwnership =
|
||||
bbb.shortcutkey.caption.takeOwnership = 79
|
||||
bbb.shortcutkey.caption.takeOwnership.function =
|
||||
|
||||
bbb.polling.startButton.tooltip = Έναρξη Ψηφοφορίας
|
||||
@ -831,21 +831,21 @@ bbb.users.breakout.updateBreakoutRooms =
|
||||
bbb.users.breakout.timerForRoom.toolTip =
|
||||
bbb.users.breakout.timer.toolTip =
|
||||
bbb.users.breakout.calculatingRemainingTime =
|
||||
bbb.users.breakout.closing =
|
||||
bbb.users.breakout.closing = Κλείνει
|
||||
bbb.users.breakout.closewarning.text =
|
||||
bbb.users.breakout.rooms =
|
||||
bbb.users.breakout.rooms = Δωμάτια
|
||||
bbb.users.breakout.roomsCombo.accessibilityName =
|
||||
bbb.users.breakout.room =
|
||||
bbb.users.breakout.room = Δωμάτιο
|
||||
bbb.users.breakout.timeLimit =
|
||||
bbb.users.breakout.durationStepper.accessibilityName =
|
||||
bbb.users.breakout.minutes =
|
||||
bbb.users.breakout.record =
|
||||
bbb.users.breakout.minutes = Λεπτά
|
||||
bbb.users.breakout.record = Εγγραφή
|
||||
bbb.users.breakout.recordCheckbox.accessibilityName =
|
||||
bbb.users.breakout.notAssigned =
|
||||
bbb.users.breakout.dragAndDropToolTip =
|
||||
bbb.users.breakout.start =
|
||||
bbb.users.breakout.invite =
|
||||
bbb.users.breakout.close =
|
||||
bbb.users.breakout.start = Έναρξη
|
||||
bbb.users.breakout.invite = Προσκάλεσε
|
||||
bbb.users.breakout.close = Κλείσιμο
|
||||
bbb.users.breakout.closeAllRooms =
|
||||
bbb.users.breakout.insufficientUsers =
|
||||
bbb.users.breakout.confirm =
|
||||
@ -853,19 +853,19 @@ bbb.users.breakout.invited =
|
||||
bbb.users.breakout.accept =
|
||||
bbb.users.breakout.joinSession =
|
||||
bbb.users.breakout.joinSession.accessibilityName =
|
||||
bbb.users.breakout.joinSession.close.tooltip =
|
||||
bbb.users.breakout.joinSession.close.tooltip = Κλείσιμο
|
||||
bbb.users.breakout.joinSession.close.accessibilityName =
|
||||
bbb.users.breakout.youareinroom =
|
||||
bbb.users.roomsGrid.room =
|
||||
bbb.users.roomsGrid.users =
|
||||
bbb.users.roomsGrid.action =
|
||||
bbb.users.roomsGrid.room = Δωμάτιο
|
||||
bbb.users.roomsGrid.users = Χρήστες
|
||||
bbb.users.roomsGrid.action = Ενέργεια
|
||||
bbb.users.roomsGrid.transfer =
|
||||
bbb.users.roomsGrid.join =
|
||||
bbb.users.roomsGrid.noUsers =
|
||||
|
||||
bbb.langSelector.default=
|
||||
|
||||
bbb.alert.cancel =
|
||||
bbb.alert.ok =
|
||||
bbb.alert.no =
|
||||
bbb.alert.yes =
|
||||
bbb.alert.cancel = Ακύρωση
|
||||
bbb.alert.ok = OK
|
||||
bbb.alert.no = Οχι
|
||||
bbb.alert.yes = Ναι
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Conectando al servidor
|
||||
bbb.mainshell.statusProgress.loading = Cargando
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Lo sentimos, no se puede conectar al servidor.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (versión {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Abrir la ventana de Registro (Log)
|
||||
bbb.mainshell.meetingNotFound = Sesión no encontrada
|
||||
bbb.mainshell.invalidAuthToken = Token de autenticación inválido
|
||||
@ -70,7 +70,7 @@ bbb.micPermissions.message.browserhttp =
|
||||
bbb.micPermissions.firefox.title = Permisos de micrófono en Firefox
|
||||
bbb.micPermissions.firefox.message =
|
||||
bbb.micPermissions.chrome.title = Permisos de micrófono en Chrome
|
||||
bbb.micPermissions.chrome.message =
|
||||
bbb.micPermissions.chrome.message = Haz click para dar permiso a Chrome de usar tu micrófono.
|
||||
bbb.micWarning.title = Alerta de audio
|
||||
bbb.micWarning.joinBtn.label = Unirse de todas formas
|
||||
bbb.micWarning.testAgain.label = Probar de nuevo
|
||||
@ -123,33 +123,33 @@ bbb.mainToolbar.recordBtn.notification.message2 = Debe hacer click en el botón
|
||||
bbb.mainToolbar.recordingLabel.recording = (Grabación)
|
||||
bbb.mainToolbar.recordingLabel.notRecording = No grabando
|
||||
bbb.waitWindow.waitMessage.message =
|
||||
bbb.waitWindow.waitMessage.title =
|
||||
bbb.waitWindow.waitMessage.title = Esperando
|
||||
bbb.guests.title =
|
||||
bbb.guests.message.singular =
|
||||
bbb.guests.message.plural =
|
||||
bbb.guests.message.singular = {0} participantes desean unirse a esta reunión
|
||||
bbb.guests.message.plural = {0} participantes desean ingresar a esta reunión
|
||||
bbb.guests.allowBtn.toolTip =
|
||||
bbb.guests.allowEveryoneBtn.text =
|
||||
bbb.guests.denyBtn.toolTip =
|
||||
bbb.guests.denyEveryoneBtn.text =
|
||||
bbb.guests.denyBtn.toolTip = Negar
|
||||
bbb.guests.denyEveryoneBtn.text = Negar a todos
|
||||
bbb.guests.rememberAction.text =
|
||||
bbb.guests.alwaysAccept =
|
||||
bbb.guests.alwaysDeny =
|
||||
bbb.guests.askModerator =
|
||||
bbb.guests.Management =
|
||||
bbb.guests.alwaysDeny = Siempre negar
|
||||
bbb.guests.askModerator = Preguntar al moderador
|
||||
bbb.guests.Management = Gestión de invitados
|
||||
bbb.clientstatus.title = Notificaciones de configuración
|
||||
bbb.clientstatus.notification = Notificaciones sin leer
|
||||
bbb.clientstatus.close = Cerrar
|
||||
bbb.clientstatus.tunneling.title = Contrafuegos
|
||||
bbb.clientstatus.tunneling.message = Un cortafuegos está evitando que el cliente se conecte directamente al servidor remoto por el puerto 1935. Se recomienda utilizar una red menos restringida para obtener una conexión más estable
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Versión de navegador
|
||||
bbb.clientstatus.browser.message = El navegador ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
|
||||
bbb.clientstatus.flash.title = Reproductor Flash
|
||||
bbb.clientstatus.flash.message = El reproductor Flash ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
|
||||
bbb.clientstatus.webrtc.title = Audio
|
||||
bbb.clientstatus.webrtc.strongStatus =
|
||||
bbb.clientstatus.webrtc.almostStrongStatus =
|
||||
bbb.clientstatus.webrtc.almostWeakStatus =
|
||||
bbb.clientstatus.webrtc.weakStatus =
|
||||
bbb.clientstatus.webrtc.strongStatus = Tu conexión de audio WebRTC es genial
|
||||
bbb.clientstatus.webrtc.almostStrongStatus = Tu conexión de audio WebRTC es buena
|
||||
bbb.clientstatus.webrtc.almostWeakStatus = Tu conexión de audio WebRTC es mala
|
||||
bbb.clientstatus.webrtc.weakStatus = Quizas existe un problema con su conexión de audio WebRTC
|
||||
bbb.clientstatus.webrtc.message = Se recomienda utilizar Firefox o Chrome para obtener mejor calidad de audio.
|
||||
bbb.clientstatus.java.title =
|
||||
bbb.clientstatus.java.notdetected =
|
||||
@ -189,14 +189,14 @@ bbb.users.usersGrid.statusItemRenderer = Estado
|
||||
bbb.users.usersGrid.statusItemRenderer.changePresenter = Haga click para cambiar a presentador
|
||||
bbb.users.usersGrid.statusItemRenderer.presenter = Presentador
|
||||
bbb.users.usersGrid.statusItemRenderer.moderator = Moderador
|
||||
bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser =
|
||||
bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = Solo voz
|
||||
bbb.users.usersGrid.statusItemRenderer.raiseHand =
|
||||
bbb.users.usersGrid.statusItemRenderer.applause = Aplauso
|
||||
bbb.users.usersGrid.statusItemRenderer.thumbsUp =
|
||||
bbb.users.usersGrid.statusItemRenderer.thumbsDown =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakLouder =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSofter =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakFaster =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSofter = Hablar más suave
|
||||
bbb.users.usersGrid.statusItemRenderer.speakFaster = Hablar rápido
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSlower =
|
||||
bbb.users.usersGrid.statusItemRenderer.away = Ausente
|
||||
bbb.users.usersGrid.statusItemRenderer.confused = Confundido
|
||||
@ -215,13 +215,13 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Activar audio a {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute = Desactivar audio a {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock = Bloquear {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Desbloquear {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser = Expulsar {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam = Compartiendo cámara Web
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff = Micrófono apagado
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = Micrófono encendido
|
||||
bbb.users.usersGrid.mediaItemRenderer.noAudio = No está en la Conferencia de Voz
|
||||
bbb.users.usersGrid.mediaItemRenderer.promoteUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.demoteUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.demoteUser = Degradar {0} al participante
|
||||
bbb.users.emojiStatus.clear = Limpiar
|
||||
bbb.users.emojiStatus.raiseHand = Levantar la mano
|
||||
bbb.users.emojiStatus.happy = Contento
|
||||
@ -232,13 +232,13 @@ bbb.users.emojiStatus.away = Ausente
|
||||
bbb.users.emojiStatus.thumbsUp = Señal de aprobación
|
||||
bbb.users.emojiStatus.thumbsDown = Señal de desaprobación
|
||||
bbb.users.emojiStatus.applause = Aplauso
|
||||
bbb.users.emojiStatus.agree =
|
||||
bbb.users.emojiStatus.disagree =
|
||||
bbb.users.emojiStatus.agree = Estoy de acuerdo
|
||||
bbb.users.emojiStatus.disagree = No estoy de acuerdo
|
||||
bbb.users.emojiStatus.none =
|
||||
bbb.users.emojiStatus.speakLouder =
|
||||
bbb.users.emojiStatus.speakLouder = Podrías hablar mas alto?
|
||||
bbb.users.emojiStatus.speakSofter =
|
||||
bbb.users.emojiStatus.speakFaster =
|
||||
bbb.users.emojiStatus.speakSlower =
|
||||
bbb.users.emojiStatus.speakSlower = Por favor, podrías hablar mas despacio?
|
||||
bbb.users.emojiStatus.beRightBack =
|
||||
bbb.presentation.title = Presentación
|
||||
bbb.presentation.titleWithPres = Presentación: {0}
|
||||
@ -258,7 +258,7 @@ bbb.presentation.uploaded = cargado.
|
||||
bbb.presentation.document.supported = El documento cargado es soportado. Iniciando la conversión...
|
||||
bbb.presentation.document.converted = La conversión del documento de Office fué exitosa.
|
||||
bbb.presentation.error.document.convert.failed = Intenta convertir el archivo a PDF y reintenta subirlo
|
||||
bbb.presentation.error.document.convert.invalid =
|
||||
bbb.presentation.error.document.convert.invalid = Por favor, convertir este documento primero en PDF.
|
||||
bbb.presentation.error.io = Error de comunicación: Por favor contacte al administrador.
|
||||
bbb.presentation.error.security = Error de seguridad: Por favor contacte al administrador.
|
||||
bbb.presentation.error.convert.notsupported = Error: El documento cargado no esta soportado. Por favor, carge un tipo de documento soportado.
|
||||
@ -291,13 +291,13 @@ bbb.fileupload.close.tooltip = Cerrar
|
||||
bbb.fileupload.close.accessibilityName =
|
||||
bbb.fileupload.genThumbText = Generando vistas en miniatura..
|
||||
bbb.fileupload.progBarLbl = Progreso:
|
||||
bbb.fileupload.fileFormatHint =
|
||||
bbb.fileupload.fileFormatHint = Puede cargar cualquier documento Office o Documento en Formato Portable (PDF). Para mejores resultados, recomendamos cargar un PDF.
|
||||
bbb.fileupload.letUserDownload =
|
||||
bbb.fileupload.letUserDownload.tooltip =
|
||||
bbb.filedownload.title =
|
||||
bbb.fileupload.letUserDownload.tooltip = Haz click aquí si desea que los otros usuarios descarguen su presentación
|
||||
bbb.filedownload.title = Descargar las presentaciones
|
||||
bbb.filedownload.close.tooltip = Cerrar
|
||||
bbb.filedownload.close.accessibilityName =
|
||||
bbb.filedownload.fileLbl =
|
||||
bbb.filedownload.fileLbl = Escoge archivo para descargar:
|
||||
bbb.filedownload.downloadBtn =
|
||||
bbb.filedownload.downloadBtn.toolTip =
|
||||
bbb.filedownload.thisFileIsDownloadable =
|
||||
@ -309,16 +309,16 @@ bbb.chat.sendBtn.toolTip = Enviar Mensaje
|
||||
bbb.chat.sendBtn.accessibilityName = Enviar mensaje del chat
|
||||
bbb.chat.saveBtn.toolTip =
|
||||
bbb.chat.saveBtn.accessibilityName =
|
||||
bbb.chat.saveBtn.label =
|
||||
bbb.chat.saveBtn.label = Guardar
|
||||
bbb.chat.save.complete =
|
||||
bbb.chat.save.ioerror =
|
||||
bbb.chat.save.filename =
|
||||
bbb.chat.copyBtn.toolTip =
|
||||
bbb.chat.save.filename = Chat público
|
||||
bbb.chat.copyBtn.toolTip = Copiar chat
|
||||
bbb.chat.copyBtn.accessibilityName =
|
||||
bbb.chat.copyBtn.label =
|
||||
bbb.chat.copyBtn.label = Copiar
|
||||
bbb.chat.copy.complete =
|
||||
bbb.chat.clearBtn.toolTip =
|
||||
bbb.chat.clearBtn.accessibilityName =
|
||||
bbb.chat.clearBtn.toolTip = Limpiar chat público
|
||||
bbb.chat.clearBtn.accessibilityName = Limpiar el historial público del chat
|
||||
bbb.chat.clearBtn.chatMessage =
|
||||
bbb.chat.clearBtn.alert.title =
|
||||
bbb.chat.clearBtn.alert.text =
|
||||
@ -340,7 +340,7 @@ bbb.chat.maximizeRestoreBtn.accessibilityName = Maximizar la ventana del chat
|
||||
bbb.chat.closeBtn.accessibilityName = Cerrar a ventana del chat
|
||||
bbb.chat.chatTabs.accessibleNotice = Nuevos mensajes en esta pestaña.
|
||||
bbb.chat.chatMessage.systemMessage = Sistema
|
||||
bbb.chat.chatMessage.stringRespresentation =
|
||||
bbb.chat.chatMessage.stringRespresentation = De {0} {1} a {2}
|
||||
bbb.chat.chatMessage.tooLong = El mensaje demasiado largo por {0} carácter(es)
|
||||
bbb.publishVideo.changeCameraBtn.labelText = Cambiar la configuración de la camara
|
||||
bbb.publishVideo.changeCameraBtn.toolTip = Abrir la ventana de configuración de la cámara
|
||||
@ -372,74 +372,74 @@ bbb.video.publish.titleBar = Ventana de iniciación de la cámara web
|
||||
bbb.video.streamClose.toolTip = Terminar transmisión para: {0}
|
||||
bbb.video.message.browserhttp =
|
||||
bbb.screensharePublish.title = Compartir Pantalla: Previsualización del Presentador
|
||||
bbb.screensharePublish.pause.tooltip =
|
||||
bbb.screensharePublish.pause.tooltip = Pausar pantalla compartida
|
||||
bbb.screensharePublish.pause.label = Pausa
|
||||
bbb.screensharePublish.restart.tooltip =
|
||||
bbb.screensharePublish.restart.label =
|
||||
bbb.screensharePublish.restart.tooltip = Reanudar pantalla compartida
|
||||
bbb.screensharePublish.restart.label = Reaundar
|
||||
bbb.screensharePublish.maximizeRestoreBtn.toolTip = No puedes maximizar esta ventana.
|
||||
bbb.screensharePublish.closeBtn.toolTip = Dejar de compartir y cerrar
|
||||
bbb.screensharePublish.closeBtn.accessibilityName =
|
||||
bbb.screensharePublish.closeBtn.accessibilityName = Parar compartir y cerrar ventana de publicación de pantalla compartida
|
||||
bbb.screensharePublish.minimizeBtn.toolTip = Minimizar
|
||||
bbb.screensharePublish.minimizeBtn.accessibilityName =
|
||||
bbb.screensharePublish.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screensharePublish.commonHelpText.text =
|
||||
bbb.screensharePublish.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido.
|
||||
bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido.
|
||||
bbb.screensharePublish.commonHelpText.text = Los siguientes pasos abajo le guiarán sobre como compartir la pantalla (requiere Java).
|
||||
bbb.screensharePublish.helpButton.toolTip = Ayuda
|
||||
bbb.screensharePublish.helpButton.accessibilityName =
|
||||
bbb.screensharePublish.helpText.PCIE1 =
|
||||
bbb.screensharePublish.helpText.PCIE2 =
|
||||
bbb.screensharePublish.helpButton.accessibilityName = Ayuda (Abrir tutorial en una nueva ventana)
|
||||
bbb.screensharePublish.helpText.PCIE1 = 1. Seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.PCIE2 = 2. Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.PCIE3 =
|
||||
bbb.screensharePublish.helpText.PCFirefox1 =
|
||||
bbb.screensharePublish.helpText.PCFirefox2 =
|
||||
bbb.screensharePublish.helpText.PCFirefox1 = 1. Click 'OK' para comenzar
|
||||
bbb.screensharePublish.helpText.PCFirefox2 = 2. Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.PCFirefox3 =
|
||||
bbb.screensharePublish.helpText.PCChrome1 =
|
||||
bbb.screensharePublish.helpText.PCChrome2 =
|
||||
bbb.screensharePublish.helpText.PCChrome3 =
|
||||
bbb.screensharePublish.helpText.MacSafari1 =
|
||||
bbb.screensharePublish.helpText.MacSafari2 =
|
||||
bbb.screensharePublish.helpText.MacSafari3 =
|
||||
bbb.screensharePublish.helpText.MacSafari4 =
|
||||
bbb.screensharePublish.helpText.MacFirefox1 =
|
||||
bbb.screensharePublish.helpText.MacFirefox2 =
|
||||
bbb.screensharePublish.helpText.MacFirefox3 =
|
||||
bbb.screensharePublish.helpText.MacFirefox4 =
|
||||
bbb.screensharePublish.helpText.MacChrome1 =
|
||||
bbb.screensharePublish.helpText.MacChrome2 =
|
||||
bbb.screensharePublish.helpText.MacChrome3 =
|
||||
bbb.screensharePublish.helpText.MacChrome4 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox1 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox2 =
|
||||
bbb.screensharePublish.helpText.PCChrome1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.PCChrome2 = 2. Haga click para abrir
|
||||
bbb.screensharePublish.helpText.PCChrome3 = 3. Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.MacSafari1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.MacSafari2 = 2. Selecciona 'Mostrar en Finder'
|
||||
bbb.screensharePublish.helpText.MacSafari3 = 3. Haga click en botón derecho y seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.MacSafari4 = 4. Seleccione 'Abrir' (si se le solicita)
|
||||
bbb.screensharePublish.helpText.MacFirefox1 = 1. Escoge 'Guardar archivo' (Si pregunta)
|
||||
bbb.screensharePublish.helpText.MacFirefox2 = 2. Selecciona 'Mostrar en Finder'
|
||||
bbb.screensharePublish.helpText.MacFirefox3 = 3. Haga click en botón derecho y seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.MacFirefox4 = 4. Seleccione 'Abrir' (si se le solicita)
|
||||
bbb.screensharePublish.helpText.MacChrome1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.MacChrome2 = 2. Selecciona 'Mostrar en Finder'
|
||||
bbb.screensharePublish.helpText.MacChrome3 = 3. Haga click en botón derecho y seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.MacChrome4 = 4. Seleccione 'Abrir' (si se le solicita)
|
||||
bbb.screensharePublish.helpText.LinuxFirefox1 = 1. Click 'OK' para comenzar
|
||||
bbb.screensharePublish.helpText.LinuxFirefox2 = Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.LinuxFirefox3 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome1 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome2 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome3 =
|
||||
bbb.screensharePublish.shareTypeLabel.text =
|
||||
bbb.screensharePublish.shareType.fullScreen =
|
||||
bbb.screensharePublish.shareType.region =
|
||||
bbb.screensharePublish.pauseMessage.label =
|
||||
bbb.screensharePublish.startFailed.label =
|
||||
bbb.screensharePublish.restartFailed.label =
|
||||
bbb.screensharePublish.jwsCrashed.label =
|
||||
bbb.screensharePublish.commonErrorMessage.label =
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one =
|
||||
bbb.screensharePublish.helpText.LinuxChrome1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.LinuxChrome2 = 2. Haga click para abrir
|
||||
bbb.screensharePublish.helpText.LinuxChrome3 = 3. Aceptar el certificado
|
||||
bbb.screensharePublish.shareTypeLabel.text = Compartir:
|
||||
bbb.screensharePublish.shareType.fullScreen = Pantalla completa
|
||||
bbb.screensharePublish.shareType.region = Región
|
||||
bbb.screensharePublish.pauseMessage.label = Pantalla compartida actualmente pausada.
|
||||
bbb.screensharePublish.startFailed.label = No detectó comienzo de pantalla compartida.
|
||||
bbb.screensharePublish.restartFailed.label = No detectó reinicio de pantalla compartida.
|
||||
bbb.screensharePublish.jwsCrashed.label = La aplicación pantalla compartida cerró inesperadamente.
|
||||
bbb.screensharePublish.commonErrorMessage.label = Seleccione 'Cancelar' y trate nuevamente.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one = Compartir pantalla no esta disponible para usar.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.two =
|
||||
bbb.screensharePublish.cancelButton.label = Cancelar
|
||||
bbb.screensharePublish.startButton.label = Iniciar
|
||||
bbb.screensharePublish.stopButton.label =
|
||||
bbb.screensharePublish.stopButton.toolTip =
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label =
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label =
|
||||
bbb.screensharePublish.stopButton.label = Detener
|
||||
bbb.screensharePublish.stopButton.toolTip = Detener compartir tu pantalla
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label = Esta usando una versión reciente de Chrome pero no esta instalado la extensión de pantalla compartida.
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = Después de instalar la extensión de pantalla compartida, por favor hacer click abajo en 'Reintentar'
|
||||
bbb.screensharePublish.WebRTCExtensionFailFallback.label =
|
||||
bbb.screensharePublish.WebRTCPrivateBrowsingWarning.label =
|
||||
bbb.screensharePublish.WebRTCExtensionInstallButton.label =
|
||||
bbb.screensharePublish.WebRTCUseJavaButton.label =
|
||||
bbb.screensharePublish.WebRTCExtensionInstallButton.label = Click aquí para instalar
|
||||
bbb.screensharePublish.WebRTCUseJavaButton.label = Usar Java pantalla compartida
|
||||
bbb.screensharePublish.WebRTCVideoLoading.label =
|
||||
bbb.screensharePublish.sharingMessage=
|
||||
bbb.screenshareView.title = Compartir escritorio
|
||||
bbb.screenshareView.fitToWindow = Ajustarse a la pantalla
|
||||
bbb.screenshareView.actualSize =
|
||||
bbb.screenshareView.minimizeBtn.accessibilityName =
|
||||
bbb.screenshareView.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screenshareView.closeBtn.accessibilityName =
|
||||
bbb.screenshareView.actualSize = Mostrar tamaño actual
|
||||
bbb.screenshareView.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido
|
||||
bbb.screenshareView.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido
|
||||
bbb.screenshareView.closeBtn.accessibilityName = Cerrar la ventana de Escritorio Compartido
|
||||
bbb.toolbar.phone.toolTip.start = Habilitar el audio (Micrófono o solo escuchar)
|
||||
bbb.toolbar.phone.toolTip.stop = Dejar de compartir micrófono
|
||||
bbb.toolbar.phone.toolTip.mute = Dejar de escuchar la conferencia
|
||||
@ -447,7 +447,7 @@ bbb.toolbar.phone.toolTip.unmute = Empezar a escuchar la conferencia
|
||||
bbb.toolbar.phone.toolTip.nomic = No se ha detectado micrófono
|
||||
bbb.toolbar.deskshare.toolTip.start = Compartir escritorio
|
||||
bbb.toolbar.deskshare.toolTip.stop = Dejar de compartir escritorio
|
||||
bbb.toolbar.sharednotes.toolTip =
|
||||
bbb.toolbar.sharednotes.toolTip = Abrir notas compartidas
|
||||
bbb.toolbar.video.toolTip.start = Compartir su cámara Web
|
||||
bbb.toolbar.video.toolTip.stop = Dejar de compartir su cámara Web
|
||||
bbb.layout.addButton.label = Agregar
|
||||
@ -463,14 +463,14 @@ bbb.layout.combo.prompt = Aplicar diseño
|
||||
bbb.layout.combo.custom = *Diseño personalizado
|
||||
bbb.layout.combo.customName = Diseño personalizado
|
||||
bbb.layout.combo.remote = Remoto
|
||||
bbb.layout.window.name =
|
||||
bbb.layout.window.name = Nombre de Diseño
|
||||
bbb.layout.window.close.tooltip = Cerrar
|
||||
bbb.layout.window.close.accessibilityName =
|
||||
bbb.layout.save.complete = Los diseños fueron guardados exitosamente
|
||||
bbb.layout.save.ioerror =
|
||||
bbb.layout.load.complete = Los diseños fueron cargados
|
||||
bbb.layout.load.failed = Error al cargar diseños
|
||||
bbb.layout.sync =
|
||||
bbb.layout.sync = Tu diseño ha sido enviado a todos los participantes
|
||||
bbb.layout.name.defaultlayout = Alineación de ventanas por defecto
|
||||
bbb.layout.name.closedcaption = Subtitulos
|
||||
bbb.layout.name.videochat = Chat de Video
|
||||
@ -479,11 +479,11 @@ bbb.layout.name.presentfocus = Presentación
|
||||
bbb.layout.name.presentandusers =
|
||||
bbb.layout.name.lectureassistant = Asistente de conferencia
|
||||
bbb.layout.name.lecture = Conferencia
|
||||
bbb.layout.name.sharednotes =
|
||||
bbb.layout.name.sharednotes = Notas compartidas
|
||||
bbb.layout.addCurrentToFileWindow.title =
|
||||
bbb.layout.addCurrentToFileWindow.text =
|
||||
bbb.layout.denyAddToFile.toolTip =
|
||||
bbb.layout.confirmAddToFile.toolTip =
|
||||
bbb.layout.confirmAddToFile.toolTip = Confirmar aceptar el diseño actual
|
||||
bbb.highlighter.toolbar.pencil = Lápiz
|
||||
bbb.highlighter.toolbar.pencil.accessibilityName = Cambiar el cursor a lápiz
|
||||
bbb.highlighter.toolbar.ellipse = Círculo
|
||||
@ -509,13 +509,13 @@ bbb.logout.connectionfailed = La conexión al servidor ha terminado
|
||||
bbb.logout.rejected = La conexión al servidor ha sido rechazada
|
||||
bbb.logout.invalidapp = La aplicación red5 no existe
|
||||
bbb.logout.unknown = Su cliente ha perdido conexión con el servidor
|
||||
bbb.logout.guestkickedout =
|
||||
bbb.logout.guestkickedout = El moderador no permitió ingreses a esta reunión
|
||||
bbb.logout.usercommand = Usted ha salido de la conferencia
|
||||
bbb.logour.breakoutRoomClose =
|
||||
bbb.logout.ejectedFromMeeting =
|
||||
bbb.logour.breakoutRoomClose = La ventana de su navegador se cerrará
|
||||
bbb.logout.ejectedFromMeeting = Usted a sido expulsado de la reunión.
|
||||
bbb.logout.refresh.message = Si esta desconexión no estaba planificada, pulse el botón para reconectar.
|
||||
bbb.logout.refresh.label = Reconectar
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.hint = Como podemos hacer BigBlueButton Mejor?
|
||||
bbb.logout.feedback.label =
|
||||
bbb.settings.title =
|
||||
bbb.settings.ok = Correcto
|
||||
@ -523,7 +523,7 @@ bbb.settings.cancel = Cancelar
|
||||
bbb.settings.btn.toolTip =
|
||||
bbb.logout.confirm.title = Confirmar Cerrar Sesión
|
||||
bbb.logout.confirm.message = ¿Esta seguro que desea cerrar sesión?
|
||||
bbb.logout.confirm.endMeeting =
|
||||
bbb.logout.confirm.endMeeting = Si y finalizar la reunión
|
||||
bbb.logout.confirm.yes = Si
|
||||
bbb.logout.confirm.no = No
|
||||
bbb.endSession.confirm.title =
|
||||
@ -544,16 +544,16 @@ bbb.sharedNotes.quickLink.label =
|
||||
bbb.sharedNotes.createNoteWindow.label =
|
||||
bbb.sharedNotes.createNoteWindow.close.tooltip = Cerrar
|
||||
bbb.sharedNotes.createNoteWindow.close.accessibilityName =
|
||||
bbb.sharedNotes.typing.single =
|
||||
bbb.sharedNotes.typing.double =
|
||||
bbb.sharedNotes.typing.multiple =
|
||||
bbb.sharedNotes.typing.single = {0} esta escribiendo...
|
||||
bbb.sharedNotes.typing.double = {0} y {1} están escribiendo...
|
||||
bbb.sharedNotes.typing.multiple = Varias personas están escribiendo...
|
||||
bbb.sharedNotes.save.toolTip =
|
||||
bbb.sharedNotes.save.complete =
|
||||
bbb.sharedNotes.save.ioerror =
|
||||
bbb.sharedNotes.save.htmlLabel =
|
||||
bbb.sharedNotes.save.txtLabel =
|
||||
bbb.sharedNotes.save.txtLabel = Texto plano (.txt)
|
||||
bbb.sharedNotes.new.label =
|
||||
bbb.sharedNotes.new.toolTip =
|
||||
bbb.sharedNotes.new.toolTip = Crear nota adicional
|
||||
bbb.sharedNotes.limit.label =
|
||||
bbb.sharedNotes.clear.label =
|
||||
bbb.sharedNotes.undo.toolTip =
|
||||
@ -578,20 +578,20 @@ bbb.settings.flash.label = Error de versión de Flash
|
||||
bbb.settings.flash.text = Usted tiene Flash {0} instalado, pero necesita por lo menos la versión {1} para ejecutar BigBlueButton adecuadamente. Haga clic en el botón de abajo para instalar la última versión de Adobe Flash.
|
||||
bbb.settings.flash.command = Instalar la versión más reciente de Java
|
||||
bbb.settings.isight.label = Error en cámara iSight
|
||||
bbb.settings.isight.text =
|
||||
bbb.settings.isight.text = Si presenta problemas con su cámara iSight, puede deberse a que está ejecutando OS X 10.6.5, El cual es conocido por presentar problemas con Flash en la captura de vídeo desde la cámara iSight.\n Para corregir esto, haga clic en el enlace de abajo para instalar la versión más reciente de Flash Player, o actualizar tu Mac a la versión más reciente
|
||||
bbb.settings.isight.command = Instalar Flash 10.2 RC2
|
||||
bbb.settings.warning.label = Advertencia
|
||||
bbb.settings.warning.close = Alerta
|
||||
bbb.settings.noissues = Ninguna edicion excepcional se ha detectado
|
||||
bbb.settings.instructions = Acepte el mensaje de Flash que le pide permisos de cámara. Si usted puede verse y oírse, su navegador se ha configurado correctamente. Otros problemas potenciales se muestran a continuación. Haga clic en cada uno para encontrar una posible solución.
|
||||
bbb.bwmonitor.title =
|
||||
bbb.bwmonitor.upload =
|
||||
bbb.bwmonitor.upload = Subir
|
||||
bbb.bwmonitor.upload.short =
|
||||
bbb.bwmonitor.download =
|
||||
bbb.bwmonitor.download.short =
|
||||
bbb.bwmonitor.total =
|
||||
bbb.bwmonitor.current =
|
||||
bbb.bwmonitor.available =
|
||||
bbb.bwmonitor.download.short = Abajo
|
||||
bbb.bwmonitor.total = Total
|
||||
bbb.bwmonitor.current = Actual
|
||||
bbb.bwmonitor.available = Disponible
|
||||
bbb.bwmonitor.latency =
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle = Triángulo
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = Cambiar Cursor de Pizarra a Triángulo
|
||||
@ -602,22 +602,22 @@ ltbcustom.bbb.highlighter.toolbar.text.accessibilityName = Cambiar Cursos de piz
|
||||
ltbcustom.bbb.highlighter.texttoolbar.textColorPicker = Color de texto
|
||||
ltbcustom.bbb.highlighter.texttoolbar.textSizeMenu = Támaño de fuente
|
||||
bbb.caption.window.title = Subtitulos
|
||||
bbb.caption.quickLink.label =
|
||||
bbb.caption.window.titleBar =
|
||||
bbb.caption.window.minimizeBtn.accessibilityName =
|
||||
bbb.caption.window.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.caption.quickLink.label = Ventana de subtítulos
|
||||
bbb.caption.window.titleBar = Barra de título de la ventana de subtítulos
|
||||
bbb.caption.window.minimizeBtn.accessibilityName = Minimiza la ventana de subtítulos
|
||||
bbb.caption.window.maximizeRestoreBtn.accessibilityName = Maximiza la ventana de subtítulos
|
||||
bbb.caption.transcript.noowner = Ninguno
|
||||
bbb.caption.transcript.youowner = Usted
|
||||
bbb.caption.transcript.pastewarning.title =
|
||||
bbb.caption.transcript.pastewarning.text =
|
||||
bbb.caption.transcript.inputArea.toolTip =
|
||||
bbb.caption.transcript.outputArea.toolTip =
|
||||
bbb.caption.transcript.pastewarning.title = Advertencia de pegado de subtítulos
|
||||
bbb.caption.transcript.pastewarning.text = El texto a pegar no puede exceder de {0} caracteres. Usted pegó {1} caracteres.
|
||||
bbb.caption.transcript.inputArea.toolTip = Área interna de subtítulos
|
||||
bbb.caption.transcript.outputArea.toolTip = Área externa de subtítulos
|
||||
bbb.caption.option.label = Opciones
|
||||
bbb.caption.option.language = Idioma:
|
||||
bbb.caption.option.language.tooltip = Seleccionar idioma de subtitulos
|
||||
bbb.caption.option.language.accessibilityName =
|
||||
bbb.caption.option.language.accessibilityName = Seleccione lenguaje de traducción. Use las teclas de dirección para navegar.
|
||||
bbb.caption.option.takeowner = Apropiarse
|
||||
bbb.caption.option.takeowner.tooltip =
|
||||
bbb.caption.option.takeowner.tooltip = Usar lenguaje seleccionado
|
||||
bbb.caption.option.fontfamily = Tipo de letra:
|
||||
bbb.caption.option.fontfamily.tooltip = Tipo de letra
|
||||
bbb.caption.option.fontsize = Tamaño de letra:
|
||||
@ -643,16 +643,16 @@ bbb.accessibility.chat.initialDescription = Por favor usar las teclas direcciona
|
||||
bbb.accessibility.notes.notesview.input = Entradas de las notas
|
||||
|
||||
bbb.shortcuthelp.title = Teclas de acceso directo
|
||||
bbb.shortcuthelp.titleBar =
|
||||
bbb.shortcuthelp.titleBar = Teclas de acceso directo de la ventana de la barra de título
|
||||
bbb.shortcuthelp.minimizeBtn.accessibilityName = Minimizar la ventana de accesos rápidos
|
||||
bbb.shortcuthelp.maximizeRestoreBtn.accessibilityName = Mazimizar la ventana de accesos rápidos
|
||||
bbb.shortcuthelp.closeBtn.accessibilityName = Cerrar la ventana de accesos rápidos
|
||||
bbb.shortcuthelp.dropdown.accessibilityName =
|
||||
bbb.shortcuthelp.dropdown.accessibilityName = Atajo para Categorias
|
||||
bbb.shortcuthelp.dropdown.general = Accesos rápidos globales
|
||||
bbb.shortcuthelp.dropdown.presentation = Accesos rápidos a la presentación
|
||||
bbb.shortcuthelp.dropdown.chat = Acceso rápido al chat
|
||||
bbb.shortcuthelp.dropdown.users = Acceso rápido a los usuarios
|
||||
bbb.shortcuthelp.dropdown.caption =
|
||||
bbb.shortcuthelp.dropdown.caption = Atajos de subtítulos
|
||||
bbb.shortcuthelp.browserWarning.text =
|
||||
bbb.shortcuthelp.headers.shortcut = Acceso Rápido
|
||||
bbb.shortcuthelp.headers.function = Función
|
||||
@ -682,7 +682,7 @@ bbb.shortcutkey.focus.presentation.function = Mover enfoque a la ventana de pres
|
||||
bbb.shortcutkey.focus.chat = 52
|
||||
bbb.shortcutkey.focus.chat.function = Mover enfoque a la venta de chat
|
||||
bbb.shortcutkey.focus.caption = 53
|
||||
bbb.shortcutkey.focus.caption.function =
|
||||
bbb.shortcutkey.focus.caption.function = Mover ventana para observar subtítulos
|
||||
|
||||
bbb.shortcutkey.share.desktop = 68
|
||||
bbb.shortcutkey.share.desktop.function = Abrir la ventana de compartir escritorio
|
||||
@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Ajustar diapositivas en la página
|
||||
bbb.shortcutkey.users.makePresenter = 89
|
||||
bbb.shortcutkey.users.makePresenter.function = Hacer presentador a la persona seleccionada
|
||||
bbb.shortcutkey.users.kick = 69
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.kick.function = Expulsar persona seleccionada de la reunión
|
||||
bbb.shortcutkey.users.mute = 83
|
||||
bbb.shortcutkey.users.mute.function = Activar o Desactivar sonido de la persona seleccionada
|
||||
bbb.shortcutkey.users.muteall = 65
|
||||
@ -720,18 +720,18 @@ bbb.shortcutkey.users.muteall.function = Activar o Desactivar sonido a todos los
|
||||
bbb.shortcutkey.users.muteAllButPres = 65
|
||||
bbb.shortcutkey.users.muteAllButPres.function = Silenciar a todos excepto al presentador
|
||||
bbb.shortcutkey.users.breakoutRooms = 75
|
||||
bbb.shortcutkey.users.breakoutRooms.function =
|
||||
bbb.shortcutkey.users.breakoutRooms.function = Ventana de salas de reunion
|
||||
bbb.shortcutkey.users.focusBreakoutRooms = 82
|
||||
bbb.shortcutkey.users.focusBreakoutRooms.function =
|
||||
bbb.shortcutkey.users.focusBreakoutRooms.function = Observar lista de sala de reunion
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom = 76
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom.function =
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom.function = Escuchar sala de reunión seleccionada
|
||||
bbb.shortcutkey.users.joinBreakoutRoom = 79
|
||||
bbb.shortcutkey.users.joinBreakoutRoom.function =
|
||||
bbb.shortcutkey.users.joinBreakoutRoom.function = Unirse a la sala de reunión seleccionada
|
||||
|
||||
bbb.shortcutkey.chat.focusTabs = 89
|
||||
bbb.shortcutkey.chat.focusTabs.function = Enfocar a las pestañas del chat
|
||||
bbb.shortcutkey.chat.focusBox = 82
|
||||
bbb.shortcutkey.chat.focusBox.function =
|
||||
bbb.shortcutkey.chat.focusBox.function = Observar la lista de mensajes del chat
|
||||
bbb.shortcutkey.chat.changeColour = 67
|
||||
bbb.shortcutkey.chat.changeColour.function = Enfocar en el seleccionador de color de la fuente
|
||||
bbb.shortcutkey.chat.sendMessage = 83
|
||||
@ -757,13 +757,13 @@ bbb.shortcutkey.chat.chatbox.debug = 71
|
||||
bbb.shortcutkey.chat.chatbox.debug.function = Tecla de acceso rápido para depurar temporalmente
|
||||
|
||||
bbb.shortcutkey.caption.takeOwnership = 79
|
||||
bbb.shortcutkey.caption.takeOwnership.function =
|
||||
bbb.shortcutkey.caption.takeOwnership.function = Usar lenguaje seleccionado
|
||||
|
||||
bbb.polling.startButton.tooltip = Iniciar una encuesta
|
||||
bbb.polling.startButton.label = Iniciar encuesta
|
||||
bbb.polling.publishButton.label = Publicar
|
||||
bbb.polling.closeButton.label = Cerrar
|
||||
bbb.polling.customPollOption.label =
|
||||
bbb.polling.customPollOption.label = Encuesta personalizada...
|
||||
bbb.polling.pollModal.title = Resultados de la encuesta en tiempo real
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Agregar opciones para la encuesta
|
||||
@ -803,7 +803,7 @@ bbb.users.settings.lockAll = Bloquear a todos
|
||||
bbb.users.settings.lockAllExcept = Bloquear todos menos presentador
|
||||
bbb.users.settings.lockSettings = Bloquear espectadores ...
|
||||
bbb.users.settings.breakoutRooms = Sesión de pequeños gupos...
|
||||
bbb.users.settings.sendBreakoutRoomsInvitations =
|
||||
bbb.users.settings.sendBreakoutRoomsInvitations = Enviar invitaciones a salas de reuniones
|
||||
bbb.users.settings.unlockAll = Desbloquear a todos los espectadores
|
||||
bbb.users.settings.roomIsLocked = Bloqueado por defecto
|
||||
bbb.users.settings.roomIsMuted = Silenciado por defecto
|
||||
@ -827,31 +827,31 @@ bbb.lockSettings.locked=Bloqueado
|
||||
bbb.lockSettings.lockOnJoin=Unirse
|
||||
|
||||
bbb.users.breakout.breakoutRooms = Sesión de pequeños gupos
|
||||
bbb.users.breakout.updateBreakoutRooms =
|
||||
bbb.users.breakout.updateBreakoutRooms = Actualizar sala de reunión
|
||||
bbb.users.breakout.timerForRoom.toolTip =
|
||||
bbb.users.breakout.timer.toolTip =
|
||||
bbb.users.breakout.timer.toolTip = Tiempo restante para las salas de reunión
|
||||
bbb.users.breakout.calculatingRemainingTime = Calculando tiempo restante ....
|
||||
bbb.users.breakout.closing = Cerrando
|
||||
bbb.users.breakout.closewarning.text =
|
||||
bbb.users.breakout.rooms = Sesiones
|
||||
bbb.users.breakout.roomsCombo.accessibilityName =
|
||||
bbb.users.breakout.roomsCombo.accessibilityName = Número de salas para crear
|
||||
bbb.users.breakout.room = Sesión
|
||||
bbb.users.breakout.timeLimit = Límite de tiempo
|
||||
bbb.users.breakout.durationStepper.accessibilityName =
|
||||
bbb.users.breakout.durationStepper.accessibilityName = Tiempo límite en minutos
|
||||
bbb.users.breakout.minutes = Minutos
|
||||
bbb.users.breakout.record = Grabar
|
||||
bbb.users.breakout.recordCheckbox.accessibilityName =
|
||||
bbb.users.breakout.recordCheckbox.accessibilityName = Grabar sala de reunion
|
||||
bbb.users.breakout.notAssigned = No asignado
|
||||
bbb.users.breakout.dragAndDropToolTip = Consejo: Puedes arrastarr y soltar usuarios entre los cuartos
|
||||
bbb.users.breakout.start = Iniciar
|
||||
bbb.users.breakout.invite =
|
||||
bbb.users.breakout.invite = Invitar
|
||||
bbb.users.breakout.close = Cerrar
|
||||
bbb.users.breakout.closeAllRooms = Cerrar todas las sesiones de pequeños grupos
|
||||
bbb.users.breakout.insufficientUsers =
|
||||
bbb.users.breakout.confirm =
|
||||
bbb.users.breakout.invited =
|
||||
bbb.users.breakout.insufficientUsers = Usuarios insuficientes. Se requiere al menos un usuario en una sala de reuniones.
|
||||
bbb.users.breakout.confirm = Unirse a una sala de reuniones
|
||||
bbb.users.breakout.invited = Has sido invitado a reunirte 1Sala de Reunión1
|
||||
bbb.users.breakout.accept =
|
||||
bbb.users.breakout.joinSession =
|
||||
bbb.users.breakout.joinSession = Unirse a la sesión
|
||||
bbb.users.breakout.joinSession.accessibilityName =
|
||||
bbb.users.breakout.joinSession.close.tooltip = Cerrar
|
||||
bbb.users.breakout.joinSession.close.accessibilityName =
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Conectando con el servidor
|
||||
bbb.mainshell.statusProgress.loading = Cargando
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Lo sentimos, no es posible conectar con el servidor.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (compilación {0})
|
||||
bbb.mainshell.logBtn.toolTip = Abrir ventana de histórico
|
||||
bbb.mainshell.meetingNotFound = Reunión no encontrada
|
||||
bbb.mainshell.invalidAuthToken = Token de Autentificación No Válido
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Notificaciones de configuración
|
||||
bbb.clientstatus.notification = Notificaciones sin leer
|
||||
bbb.clientstatus.close = Cerrar
|
||||
bbb.clientstatus.tunneling.title = Cortafuegos
|
||||
bbb.clientstatus.tunneling.message = Un cortafuegos está evitando que el cliente se conecte directamente al servidor remoto por el puerto 1935. Se recomienda utilizar una red menos restringida para obtener una conexión más estable
|
||||
bbb.clientstatus.tunneling.message = Un cortafuegos está impidiendo que tu cliente se conecte directamente al servidor remoto. Te recomendamos conectarte a una red menos restrictiva para conseguir una conexión más estable.
|
||||
bbb.clientstatus.browser.title = Versión del navegador
|
||||
bbb.clientstatus.browser.message = El navegador ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
|
||||
bbb.clientstatus.flash.title = Reproductor Flash
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publicar
|
||||
bbb.polling.closeButton.label = Cerrar
|
||||
bbb.polling.customPollOption.label = Encuesta a Medida...
|
||||
bbb.polling.pollModal.title = Resultados en vivo
|
||||
bbb.polling.pollModal.hint = Deja esta ventana abierta para permitir que los estudiantes puedan contestar a la encuesta. Pulsar el botón Publicar o Cerrar finalizará la encuesta.
|
||||
bbb.polling.pollModal.hint = Deja esta ventana abierta para permitir a otros contestar a la encuesta. Seleccionar Publicar o Cerrar finalizará la encuesta.
|
||||
bbb.polling.customChoices.title = Opciones de la encuesta
|
||||
bbb.polling.respondersLabel.novotes = Esperando respuestas
|
||||
bbb.polling.respondersLabel.text = {0} Usuarios han respondido
|
||||
@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Bloqueo de moderador
|
||||
bbb.lockSettings.privateChat = Chat privado
|
||||
bbb.lockSettings.publicChat = Chat público
|
||||
bbb.lockSettings.webcam = Cámara
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Ocultar las webcam de otros asistentes
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Ver las cámaras de los otros participantes
|
||||
bbb.lockSettings.microphone = Micrófono
|
||||
bbb.lockSettings.layout = Diseño
|
||||
bbb.lockSettings.title=Bloquear audiencia
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Conectando al servidor
|
||||
bbb.mainshell.statusProgress.loading = Cargando
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Lo sentimos, no se puede conectar al servidor.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (versión {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Abrir la ventana de Registro (Log)
|
||||
bbb.mainshell.meetingNotFound = Sesión no encontrada
|
||||
bbb.mainshell.invalidAuthToken = Token de autenticación inválido
|
||||
@ -70,7 +70,7 @@ bbb.micPermissions.message.browserhttp =
|
||||
bbb.micPermissions.firefox.title = Permisos de micrófono en Firefox
|
||||
bbb.micPermissions.firefox.message =
|
||||
bbb.micPermissions.chrome.title = Permisos de micrófono en Chrome
|
||||
bbb.micPermissions.chrome.message =
|
||||
bbb.micPermissions.chrome.message = Haz click para dar permiso a Chrome de usar tu micrófono.
|
||||
bbb.micWarning.title = Alerta de audio
|
||||
bbb.micWarning.joinBtn.label = Unirse de todas formas
|
||||
bbb.micWarning.testAgain.label = Probar de nuevo
|
||||
@ -123,33 +123,33 @@ bbb.mainToolbar.recordBtn.notification.message2 = Debe hacer click en el botón
|
||||
bbb.mainToolbar.recordingLabel.recording = (Grabación)
|
||||
bbb.mainToolbar.recordingLabel.notRecording = No grabando
|
||||
bbb.waitWindow.waitMessage.message =
|
||||
bbb.waitWindow.waitMessage.title =
|
||||
bbb.waitWindow.waitMessage.title = Esperando
|
||||
bbb.guests.title =
|
||||
bbb.guests.message.singular =
|
||||
bbb.guests.message.plural =
|
||||
bbb.guests.message.singular = {0} participantes desean unirse a esta reunión
|
||||
bbb.guests.message.plural = {0} participantes desean ingresar a esta reunión
|
||||
bbb.guests.allowBtn.toolTip =
|
||||
bbb.guests.allowEveryoneBtn.text =
|
||||
bbb.guests.denyBtn.toolTip =
|
||||
bbb.guests.denyEveryoneBtn.text =
|
||||
bbb.guests.denyBtn.toolTip = Negar
|
||||
bbb.guests.denyEveryoneBtn.text = Negar a todos
|
||||
bbb.guests.rememberAction.text =
|
||||
bbb.guests.alwaysAccept =
|
||||
bbb.guests.alwaysDeny =
|
||||
bbb.guests.askModerator =
|
||||
bbb.guests.Management =
|
||||
bbb.guests.alwaysDeny = Siempre negar
|
||||
bbb.guests.askModerator = Preguntar al moderador
|
||||
bbb.guests.Management = Gestión de invitados
|
||||
bbb.clientstatus.title = Notificaciones de configuración
|
||||
bbb.clientstatus.notification = Notificaciones sin leer
|
||||
bbb.clientstatus.close = Cerrar
|
||||
bbb.clientstatus.tunneling.title = Contrafuegos
|
||||
bbb.clientstatus.tunneling.message = Un cortafuegos está evitando que el cliente se conecte directamente al servidor remoto por el puerto 1935. Se recomienda utilizar una red menos restringida para obtener una conexión más estable
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Versión de navegador
|
||||
bbb.clientstatus.browser.message = El navegador ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
|
||||
bbb.clientstatus.flash.title = Reproductor Flash
|
||||
bbb.clientstatus.flash.message = El reproductor Flash ({0}) no se encuentra actualizado. Se recomienda actualizarlo a la última versión.
|
||||
bbb.clientstatus.webrtc.title = Audio
|
||||
bbb.clientstatus.webrtc.strongStatus =
|
||||
bbb.clientstatus.webrtc.almostStrongStatus =
|
||||
bbb.clientstatus.webrtc.almostWeakStatus =
|
||||
bbb.clientstatus.webrtc.weakStatus =
|
||||
bbb.clientstatus.webrtc.strongStatus = Tu conexión de audio WebRTC es genial
|
||||
bbb.clientstatus.webrtc.almostStrongStatus = Tu conexión de audio WebRTC es buena
|
||||
bbb.clientstatus.webrtc.almostWeakStatus = Tu conexión de audio WebRTC es mala
|
||||
bbb.clientstatus.webrtc.weakStatus = Quizas existe un problema con su conexión de audio WebRTC
|
||||
bbb.clientstatus.webrtc.message = Se recomienda utilizar Firefox o Chrome para obtener mejor calidad de audio.
|
||||
bbb.clientstatus.java.title =
|
||||
bbb.clientstatus.java.notdetected =
|
||||
@ -189,14 +189,14 @@ bbb.users.usersGrid.statusItemRenderer = Estado
|
||||
bbb.users.usersGrid.statusItemRenderer.changePresenter = Haga click para cambiar a presentador
|
||||
bbb.users.usersGrid.statusItemRenderer.presenter = Presentador
|
||||
bbb.users.usersGrid.statusItemRenderer.moderator = Moderador
|
||||
bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser =
|
||||
bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser = Solo voz
|
||||
bbb.users.usersGrid.statusItemRenderer.raiseHand =
|
||||
bbb.users.usersGrid.statusItemRenderer.applause = Aplauso
|
||||
bbb.users.usersGrid.statusItemRenderer.thumbsUp =
|
||||
bbb.users.usersGrid.statusItemRenderer.thumbsDown =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakLouder =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSofter =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakFaster =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSofter = Hablar más suave
|
||||
bbb.users.usersGrid.statusItemRenderer.speakFaster = Hablar rápido
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSlower =
|
||||
bbb.users.usersGrid.statusItemRenderer.away = Ausente
|
||||
bbb.users.usersGrid.statusItemRenderer.confused = Confundido
|
||||
@ -215,13 +215,13 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Activar audio a {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute = Desactivar audio a {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock = Bloquear {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Desbloquear {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser = Expulsar {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam = Compartiendo cámara Web
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff = Micrófono apagado
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = Micrófono encendido
|
||||
bbb.users.usersGrid.mediaItemRenderer.noAudio = No está en la Conferencia de Voz
|
||||
bbb.users.usersGrid.mediaItemRenderer.promoteUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.demoteUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.demoteUser = Degradar {0} al participante
|
||||
bbb.users.emojiStatus.clear = Limpiar
|
||||
bbb.users.emojiStatus.raiseHand = Levantar la mano
|
||||
bbb.users.emojiStatus.happy = Contento
|
||||
@ -232,13 +232,13 @@ bbb.users.emojiStatus.away = Ausente
|
||||
bbb.users.emojiStatus.thumbsUp = Señal de aprobación
|
||||
bbb.users.emojiStatus.thumbsDown = Señal de desaprobación
|
||||
bbb.users.emojiStatus.applause = Aplauso
|
||||
bbb.users.emojiStatus.agree =
|
||||
bbb.users.emojiStatus.disagree =
|
||||
bbb.users.emojiStatus.agree = Estoy de acuerdo
|
||||
bbb.users.emojiStatus.disagree = No estoy de acuerdo
|
||||
bbb.users.emojiStatus.none =
|
||||
bbb.users.emojiStatus.speakLouder =
|
||||
bbb.users.emojiStatus.speakLouder = Podrías hablar mas alto?
|
||||
bbb.users.emojiStatus.speakSofter =
|
||||
bbb.users.emojiStatus.speakFaster =
|
||||
bbb.users.emojiStatus.speakSlower =
|
||||
bbb.users.emojiStatus.speakSlower = Por favor, podrías hablar mas despacio?
|
||||
bbb.users.emojiStatus.beRightBack =
|
||||
bbb.presentation.title = Presentación
|
||||
bbb.presentation.titleWithPres = Presentación: {0}
|
||||
@ -258,7 +258,7 @@ bbb.presentation.uploaded = cargado.
|
||||
bbb.presentation.document.supported = El documento cargado es soportado. Iniciando la conversión...
|
||||
bbb.presentation.document.converted = La conversión del documento de Office fué exitosa.
|
||||
bbb.presentation.error.document.convert.failed = Intenta convertir el archivo a PDF y reintenta subirlo
|
||||
bbb.presentation.error.document.convert.invalid =
|
||||
bbb.presentation.error.document.convert.invalid = Por favor, convertir este documento primero en PDF.
|
||||
bbb.presentation.error.io = Error de comunicación: Por favor contacte al administrador.
|
||||
bbb.presentation.error.security = Error de seguridad: Por favor contacte al administrador.
|
||||
bbb.presentation.error.convert.notsupported = Error: El documento cargado no esta soportado. Por favor, carge un tipo de documento soportado.
|
||||
@ -291,13 +291,13 @@ bbb.fileupload.close.tooltip = Cerrar
|
||||
bbb.fileupload.close.accessibilityName =
|
||||
bbb.fileupload.genThumbText = Generando vistas en miniatura..
|
||||
bbb.fileupload.progBarLbl = Progreso:
|
||||
bbb.fileupload.fileFormatHint =
|
||||
bbb.fileupload.fileFormatHint = Puede cargar cualquier documento Office o Documento en Formato Portable (PDF). Para mejores resultados, recomendamos cargar un PDF.
|
||||
bbb.fileupload.letUserDownload =
|
||||
bbb.fileupload.letUserDownload.tooltip =
|
||||
bbb.filedownload.title =
|
||||
bbb.fileupload.letUserDownload.tooltip = Haz click aquí si desea que los otros usuarios descarguen su presentación
|
||||
bbb.filedownload.title = Descargar las presentaciones
|
||||
bbb.filedownload.close.tooltip = Cerrar
|
||||
bbb.filedownload.close.accessibilityName =
|
||||
bbb.filedownload.fileLbl =
|
||||
bbb.filedownload.fileLbl = Escoge archivo para descargar:
|
||||
bbb.filedownload.downloadBtn =
|
||||
bbb.filedownload.downloadBtn.toolTip =
|
||||
bbb.filedownload.thisFileIsDownloadable =
|
||||
@ -309,16 +309,16 @@ bbb.chat.sendBtn.toolTip = Enviar Mensaje
|
||||
bbb.chat.sendBtn.accessibilityName = Enviar mensaje del chat
|
||||
bbb.chat.saveBtn.toolTip =
|
||||
bbb.chat.saveBtn.accessibilityName =
|
||||
bbb.chat.saveBtn.label =
|
||||
bbb.chat.saveBtn.label = Guardar
|
||||
bbb.chat.save.complete =
|
||||
bbb.chat.save.ioerror =
|
||||
bbb.chat.save.filename =
|
||||
bbb.chat.copyBtn.toolTip =
|
||||
bbb.chat.save.filename = Chat público
|
||||
bbb.chat.copyBtn.toolTip = Copiar chat
|
||||
bbb.chat.copyBtn.accessibilityName =
|
||||
bbb.chat.copyBtn.label =
|
||||
bbb.chat.copyBtn.label = Copiar
|
||||
bbb.chat.copy.complete =
|
||||
bbb.chat.clearBtn.toolTip =
|
||||
bbb.chat.clearBtn.accessibilityName =
|
||||
bbb.chat.clearBtn.toolTip = Limpiar chat público
|
||||
bbb.chat.clearBtn.accessibilityName = Limpiar el historial público del chat
|
||||
bbb.chat.clearBtn.chatMessage =
|
||||
bbb.chat.clearBtn.alert.title =
|
||||
bbb.chat.clearBtn.alert.text =
|
||||
@ -340,7 +340,7 @@ bbb.chat.maximizeRestoreBtn.accessibilityName = Maximizar la ventana del chat
|
||||
bbb.chat.closeBtn.accessibilityName = Cerrar a ventana del chat
|
||||
bbb.chat.chatTabs.accessibleNotice = Nuevos mensajes en esta pestaña.
|
||||
bbb.chat.chatMessage.systemMessage = Sistema
|
||||
bbb.chat.chatMessage.stringRespresentation =
|
||||
bbb.chat.chatMessage.stringRespresentation = De {0} {1} a {2}
|
||||
bbb.chat.chatMessage.tooLong = El mensaje demasiado largo por {0} carácter(es)
|
||||
bbb.publishVideo.changeCameraBtn.labelText = Cambiar la configuración de la camara
|
||||
bbb.publishVideo.changeCameraBtn.toolTip = Abrir la ventana de configuración de la cámara
|
||||
@ -372,74 +372,74 @@ bbb.video.publish.titleBar = Ventana de iniciación de la cámara web
|
||||
bbb.video.streamClose.toolTip = Terminar transmisión para: {0}
|
||||
bbb.video.message.browserhttp =
|
||||
bbb.screensharePublish.title = Compartir Pantalla: Previsualización del Presentador
|
||||
bbb.screensharePublish.pause.tooltip =
|
||||
bbb.screensharePublish.pause.tooltip = Pausar pantalla compartida
|
||||
bbb.screensharePublish.pause.label = Pausa
|
||||
bbb.screensharePublish.restart.tooltip =
|
||||
bbb.screensharePublish.restart.label =
|
||||
bbb.screensharePublish.restart.tooltip = Reanudar pantalla compartida
|
||||
bbb.screensharePublish.restart.label = Reaundar
|
||||
bbb.screensharePublish.maximizeRestoreBtn.toolTip = No puedes maximizar esta ventana.
|
||||
bbb.screensharePublish.closeBtn.toolTip = Dejar de compartir y cerrar
|
||||
bbb.screensharePublish.closeBtn.accessibilityName =
|
||||
bbb.screensharePublish.closeBtn.accessibilityName = Parar compartir y cerrar ventana de publicación de pantalla compartida
|
||||
bbb.screensharePublish.minimizeBtn.toolTip = Minimizar
|
||||
bbb.screensharePublish.minimizeBtn.accessibilityName =
|
||||
bbb.screensharePublish.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screensharePublish.commonHelpText.text =
|
||||
bbb.screensharePublish.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido.
|
||||
bbb.screensharePublish.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido.
|
||||
bbb.screensharePublish.commonHelpText.text = Los siguientes pasos abajo le guiarán sobre como compartir la pantalla (requiere Java).
|
||||
bbb.screensharePublish.helpButton.toolTip = Ayuda
|
||||
bbb.screensharePublish.helpButton.accessibilityName =
|
||||
bbb.screensharePublish.helpText.PCIE1 =
|
||||
bbb.screensharePublish.helpText.PCIE2 =
|
||||
bbb.screensharePublish.helpButton.accessibilityName = Ayuda (Abrir tutorial en una nueva ventana)
|
||||
bbb.screensharePublish.helpText.PCIE1 = 1. Seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.PCIE2 = 2. Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.PCIE3 =
|
||||
bbb.screensharePublish.helpText.PCFirefox1 =
|
||||
bbb.screensharePublish.helpText.PCFirefox2 =
|
||||
bbb.screensharePublish.helpText.PCFirefox1 = 1. Click 'OK' para comenzar
|
||||
bbb.screensharePublish.helpText.PCFirefox2 = 2. Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.PCFirefox3 =
|
||||
bbb.screensharePublish.helpText.PCChrome1 =
|
||||
bbb.screensharePublish.helpText.PCChrome2 =
|
||||
bbb.screensharePublish.helpText.PCChrome3 =
|
||||
bbb.screensharePublish.helpText.MacSafari1 =
|
||||
bbb.screensharePublish.helpText.MacSafari2 =
|
||||
bbb.screensharePublish.helpText.MacSafari3 =
|
||||
bbb.screensharePublish.helpText.MacSafari4 =
|
||||
bbb.screensharePublish.helpText.MacFirefox1 =
|
||||
bbb.screensharePublish.helpText.MacFirefox2 =
|
||||
bbb.screensharePublish.helpText.MacFirefox3 =
|
||||
bbb.screensharePublish.helpText.MacFirefox4 =
|
||||
bbb.screensharePublish.helpText.MacChrome1 =
|
||||
bbb.screensharePublish.helpText.MacChrome2 =
|
||||
bbb.screensharePublish.helpText.MacChrome3 =
|
||||
bbb.screensharePublish.helpText.MacChrome4 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox1 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox2 =
|
||||
bbb.screensharePublish.helpText.PCChrome1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.PCChrome2 = 2. Haga click para abrir
|
||||
bbb.screensharePublish.helpText.PCChrome3 = 3. Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.MacSafari1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.MacSafari2 = 2. Selecciona 'Mostrar en Finder'
|
||||
bbb.screensharePublish.helpText.MacSafari3 = 3. Haga click en botón derecho y seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.MacSafari4 = 4. Seleccione 'Abrir' (si se le solicita)
|
||||
bbb.screensharePublish.helpText.MacFirefox1 = 1. Escoge 'Guardar archivo' (Si pregunta)
|
||||
bbb.screensharePublish.helpText.MacFirefox2 = 2. Selecciona 'Mostrar en Finder'
|
||||
bbb.screensharePublish.helpText.MacFirefox3 = 3. Haga click en botón derecho y seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.MacFirefox4 = 4. Seleccione 'Abrir' (si se le solicita)
|
||||
bbb.screensharePublish.helpText.MacChrome1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.MacChrome2 = 2. Selecciona 'Mostrar en Finder'
|
||||
bbb.screensharePublish.helpText.MacChrome3 = 3. Haga click en botón derecho y seleccione 'Abrir'
|
||||
bbb.screensharePublish.helpText.MacChrome4 = 4. Seleccione 'Abrir' (si se le solicita)
|
||||
bbb.screensharePublish.helpText.LinuxFirefox1 = 1. Click 'OK' para comenzar
|
||||
bbb.screensharePublish.helpText.LinuxFirefox2 = Aceptar el certificado
|
||||
bbb.screensharePublish.helpText.LinuxFirefox3 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome1 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome2 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome3 =
|
||||
bbb.screensharePublish.shareTypeLabel.text =
|
||||
bbb.screensharePublish.shareType.fullScreen =
|
||||
bbb.screensharePublish.shareType.region =
|
||||
bbb.screensharePublish.pauseMessage.label =
|
||||
bbb.screensharePublish.startFailed.label =
|
||||
bbb.screensharePublish.restartFailed.label =
|
||||
bbb.screensharePublish.jwsCrashed.label =
|
||||
bbb.screensharePublish.commonErrorMessage.label =
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one =
|
||||
bbb.screensharePublish.helpText.LinuxChrome1 = 1. Localiza 'screenshare.jnlp'
|
||||
bbb.screensharePublish.helpText.LinuxChrome2 = 2. Haga click para abrir
|
||||
bbb.screensharePublish.helpText.LinuxChrome3 = 3. Aceptar el certificado
|
||||
bbb.screensharePublish.shareTypeLabel.text = Compartir:
|
||||
bbb.screensharePublish.shareType.fullScreen = Pantalla completa
|
||||
bbb.screensharePublish.shareType.region = Región
|
||||
bbb.screensharePublish.pauseMessage.label = Pantalla compartida actualmente pausada.
|
||||
bbb.screensharePublish.startFailed.label = No detectó comienzo de pantalla compartida.
|
||||
bbb.screensharePublish.restartFailed.label = No detectó reinicio de pantalla compartida.
|
||||
bbb.screensharePublish.jwsCrashed.label = La aplicación pantalla compartida cerró inesperadamente.
|
||||
bbb.screensharePublish.commonErrorMessage.label = Seleccione 'Cancelar' y trate nuevamente.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one = Compartir pantalla no esta disponible para usar.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.two =
|
||||
bbb.screensharePublish.cancelButton.label = Cancelar
|
||||
bbb.screensharePublish.startButton.label = Iniciar
|
||||
bbb.screensharePublish.stopButton.label =
|
||||
bbb.screensharePublish.stopButton.toolTip =
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label =
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label =
|
||||
bbb.screensharePublish.stopButton.label = Detener
|
||||
bbb.screensharePublish.stopButton.toolTip = Detener compartir tu pantalla
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label = Esta usando una versión reciente de Chrome pero no esta instalado la extensión de pantalla compartida.
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = Después de instalar la extensión de pantalla compartida, por favor hacer click abajo en 'Reintentar'
|
||||
bbb.screensharePublish.WebRTCExtensionFailFallback.label =
|
||||
bbb.screensharePublish.WebRTCPrivateBrowsingWarning.label =
|
||||
bbb.screensharePublish.WebRTCExtensionInstallButton.label =
|
||||
bbb.screensharePublish.WebRTCUseJavaButton.label =
|
||||
bbb.screensharePublish.WebRTCExtensionInstallButton.label = Click aquí para instalar
|
||||
bbb.screensharePublish.WebRTCUseJavaButton.label = Usar Java pantalla compartida
|
||||
bbb.screensharePublish.WebRTCVideoLoading.label =
|
||||
bbb.screensharePublish.sharingMessage=
|
||||
bbb.screenshareView.title = Compartir escritorio
|
||||
bbb.screenshareView.fitToWindow = Ajustarse a la pantalla
|
||||
bbb.screenshareView.actualSize =
|
||||
bbb.screenshareView.minimizeBtn.accessibilityName =
|
||||
bbb.screenshareView.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screenshareView.closeBtn.accessibilityName =
|
||||
bbb.screenshareView.actualSize = Mostrar tamaño actual
|
||||
bbb.screenshareView.minimizeBtn.accessibilityName = Minimizar la ventana de Escritorio Compartido
|
||||
bbb.screenshareView.maximizeRestoreBtn.accessibilityName = Maximizar la ventana de Escritorio Compartido
|
||||
bbb.screenshareView.closeBtn.accessibilityName = Cerrar la ventana de Escritorio Compartido
|
||||
bbb.toolbar.phone.toolTip.start = Habilitar el audio (Micrófono o solo escuchar)
|
||||
bbb.toolbar.phone.toolTip.stop = Dejar de compartir micrófono
|
||||
bbb.toolbar.phone.toolTip.mute = Dejar de escuchar la conferencia
|
||||
@ -447,7 +447,7 @@ bbb.toolbar.phone.toolTip.unmute = Empezar a escuchar la conferencia
|
||||
bbb.toolbar.phone.toolTip.nomic = No se ha detectado micrófono
|
||||
bbb.toolbar.deskshare.toolTip.start = Compartir escritorio
|
||||
bbb.toolbar.deskshare.toolTip.stop = Dejar de compartir escritorio
|
||||
bbb.toolbar.sharednotes.toolTip =
|
||||
bbb.toolbar.sharednotes.toolTip = Abrir notas compartidas
|
||||
bbb.toolbar.video.toolTip.start = Compartir su cámara Web
|
||||
bbb.toolbar.video.toolTip.stop = Dejar de compartir su cámara Web
|
||||
bbb.layout.addButton.label = Agregar
|
||||
@ -463,14 +463,14 @@ bbb.layout.combo.prompt = Aplicar diseño
|
||||
bbb.layout.combo.custom = *Diseño personalizado
|
||||
bbb.layout.combo.customName = Diseño personalizado
|
||||
bbb.layout.combo.remote = Remoto
|
||||
bbb.layout.window.name =
|
||||
bbb.layout.window.name = Nombre de Diseño
|
||||
bbb.layout.window.close.tooltip = Cerrar
|
||||
bbb.layout.window.close.accessibilityName =
|
||||
bbb.layout.save.complete = Los diseños fueron guardados exitosamente
|
||||
bbb.layout.save.ioerror =
|
||||
bbb.layout.load.complete = Los diseños fueron cargados
|
||||
bbb.layout.load.failed = Error al cargar diseños
|
||||
bbb.layout.sync =
|
||||
bbb.layout.sync = Tu diseño ha sido enviado a todos los participantes
|
||||
bbb.layout.name.defaultlayout = Alineación de ventanas por defecto
|
||||
bbb.layout.name.closedcaption = Subtitulos
|
||||
bbb.layout.name.videochat = Chat de Video
|
||||
@ -479,11 +479,11 @@ bbb.layout.name.presentfocus = Presentación
|
||||
bbb.layout.name.presentandusers =
|
||||
bbb.layout.name.lectureassistant = Asistente de conferencia
|
||||
bbb.layout.name.lecture = Conferencia
|
||||
bbb.layout.name.sharednotes =
|
||||
bbb.layout.name.sharednotes = Notas compartidas
|
||||
bbb.layout.addCurrentToFileWindow.title =
|
||||
bbb.layout.addCurrentToFileWindow.text =
|
||||
bbb.layout.denyAddToFile.toolTip =
|
||||
bbb.layout.confirmAddToFile.toolTip =
|
||||
bbb.layout.confirmAddToFile.toolTip = Confirmar aceptar el diseño actual
|
||||
bbb.highlighter.toolbar.pencil = Lápiz
|
||||
bbb.highlighter.toolbar.pencil.accessibilityName = Cambiar el cursor a lápiz
|
||||
bbb.highlighter.toolbar.ellipse = Círculo
|
||||
@ -509,13 +509,13 @@ bbb.logout.connectionfailed = La conexión al servidor ha terminado
|
||||
bbb.logout.rejected = La conexión al servidor ha sido rechazada
|
||||
bbb.logout.invalidapp = La aplicación red5 no existe
|
||||
bbb.logout.unknown = Su cliente ha perdido conexión con el servidor
|
||||
bbb.logout.guestkickedout =
|
||||
bbb.logout.guestkickedout = El moderador no permitió ingreses a esta reunión
|
||||
bbb.logout.usercommand = Usted ha salido de la conferencia
|
||||
bbb.logour.breakoutRoomClose =
|
||||
bbb.logout.ejectedFromMeeting =
|
||||
bbb.logour.breakoutRoomClose = La ventana de su navegador se cerrará
|
||||
bbb.logout.ejectedFromMeeting = Usted a sido expulsado de la reunión.
|
||||
bbb.logout.refresh.message = Si esta desconexión no estaba planificada, pulse el botón para reconectar.
|
||||
bbb.logout.refresh.label = Reconectar
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.hint = Como podemos hacer BigBlueButton Mejor?
|
||||
bbb.logout.feedback.label =
|
||||
bbb.settings.title =
|
||||
bbb.settings.ok = Correcto
|
||||
@ -523,7 +523,7 @@ bbb.settings.cancel = Cancelar
|
||||
bbb.settings.btn.toolTip =
|
||||
bbb.logout.confirm.title = Confirmar Cerrar Sesión
|
||||
bbb.logout.confirm.message = ¿Esta seguro que desea cerrar sesión?
|
||||
bbb.logout.confirm.endMeeting =
|
||||
bbb.logout.confirm.endMeeting = Si y finalizar la reunión
|
||||
bbb.logout.confirm.yes = Si
|
||||
bbb.logout.confirm.no = No
|
||||
bbb.endSession.confirm.title =
|
||||
@ -544,16 +544,16 @@ bbb.sharedNotes.quickLink.label =
|
||||
bbb.sharedNotes.createNoteWindow.label =
|
||||
bbb.sharedNotes.createNoteWindow.close.tooltip = Cerrar
|
||||
bbb.sharedNotes.createNoteWindow.close.accessibilityName =
|
||||
bbb.sharedNotes.typing.single =
|
||||
bbb.sharedNotes.typing.double =
|
||||
bbb.sharedNotes.typing.multiple =
|
||||
bbb.sharedNotes.typing.single = {0} esta escribiendo...
|
||||
bbb.sharedNotes.typing.double = {0} y {1} están escribiendo...
|
||||
bbb.sharedNotes.typing.multiple = Varias personas están escribiendo...
|
||||
bbb.sharedNotes.save.toolTip =
|
||||
bbb.sharedNotes.save.complete =
|
||||
bbb.sharedNotes.save.ioerror =
|
||||
bbb.sharedNotes.save.htmlLabel =
|
||||
bbb.sharedNotes.save.txtLabel =
|
||||
bbb.sharedNotes.save.txtLabel = Texto plano (.txt)
|
||||
bbb.sharedNotes.new.label =
|
||||
bbb.sharedNotes.new.toolTip =
|
||||
bbb.sharedNotes.new.toolTip = Crear nota adicional
|
||||
bbb.sharedNotes.limit.label =
|
||||
bbb.sharedNotes.clear.label =
|
||||
bbb.sharedNotes.undo.toolTip =
|
||||
@ -578,20 +578,20 @@ bbb.settings.flash.label = Error de versión de Flash
|
||||
bbb.settings.flash.text = Usted tiene Flash {0} instalado, pero necesita por lo menos la versión {1} para ejecutar BigBlueButton adecuadamente. Haga clic en el botón de abajo para instalar la última versión de Adobe Flash.
|
||||
bbb.settings.flash.command = Instalar la versión más reciente de Java
|
||||
bbb.settings.isight.label = Error en cámara iSight
|
||||
bbb.settings.isight.text =
|
||||
bbb.settings.isight.text = Si presenta problemas con su cámara iSight, puede deberse a que está ejecutando OS X 10.6.5, El cual es conocido por presentar problemas con Flash en la captura de vídeo desde la cámara iSight.\n Para corregir esto, haga clic en el enlace de abajo para instalar la versión más reciente de Flash Player, o actualizar tu Mac a la versión más reciente
|
||||
bbb.settings.isight.command = Instalar Flash 10.2 RC2
|
||||
bbb.settings.warning.label = Advertencia
|
||||
bbb.settings.warning.close = Alerta
|
||||
bbb.settings.noissues = Ninguna edicion excepcional se ha detectado
|
||||
bbb.settings.instructions = Acepte el mensaje de Flash que le pide permisos de cámara. Si usted puede verse y oírse, su navegador se ha configurado correctamente. Otros problemas potenciales se muestran a continuación. Haga clic en cada uno para encontrar una posible solución.
|
||||
bbb.bwmonitor.title =
|
||||
bbb.bwmonitor.upload =
|
||||
bbb.bwmonitor.upload = Subir
|
||||
bbb.bwmonitor.upload.short =
|
||||
bbb.bwmonitor.download =
|
||||
bbb.bwmonitor.download.short =
|
||||
bbb.bwmonitor.total =
|
||||
bbb.bwmonitor.current =
|
||||
bbb.bwmonitor.available =
|
||||
bbb.bwmonitor.download.short = Abajo
|
||||
bbb.bwmonitor.total = Total
|
||||
bbb.bwmonitor.current = Actual
|
||||
bbb.bwmonitor.available = Disponible
|
||||
bbb.bwmonitor.latency =
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle = Triángulo
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName = Cambiar Cursor de Pizarra a Triángulo
|
||||
@ -602,22 +602,22 @@ ltbcustom.bbb.highlighter.toolbar.text.accessibilityName = Cambiar Cursos de piz
|
||||
ltbcustom.bbb.highlighter.texttoolbar.textColorPicker = Color de texto
|
||||
ltbcustom.bbb.highlighter.texttoolbar.textSizeMenu = Támaño de fuente
|
||||
bbb.caption.window.title = Subtitulos
|
||||
bbb.caption.quickLink.label =
|
||||
bbb.caption.window.titleBar =
|
||||
bbb.caption.window.minimizeBtn.accessibilityName =
|
||||
bbb.caption.window.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.caption.quickLink.label = Ventana de subtítulos
|
||||
bbb.caption.window.titleBar = Barra de título de la ventana de subtítulos
|
||||
bbb.caption.window.minimizeBtn.accessibilityName = Minimiza la ventana de subtítulos
|
||||
bbb.caption.window.maximizeRestoreBtn.accessibilityName = Maximiza la ventana de subtítulos
|
||||
bbb.caption.transcript.noowner = Ninguno
|
||||
bbb.caption.transcript.youowner = Usted
|
||||
bbb.caption.transcript.pastewarning.title =
|
||||
bbb.caption.transcript.pastewarning.text =
|
||||
bbb.caption.transcript.inputArea.toolTip =
|
||||
bbb.caption.transcript.outputArea.toolTip =
|
||||
bbb.caption.transcript.pastewarning.title = Advertencia de pegado de subtítulos
|
||||
bbb.caption.transcript.pastewarning.text = El texto a pegar no puede exceder de {0} caracteres. Usted pegó {1} caracteres.
|
||||
bbb.caption.transcript.inputArea.toolTip = Área interna de subtítulos
|
||||
bbb.caption.transcript.outputArea.toolTip = Área externa de subtítulos
|
||||
bbb.caption.option.label = Opciones
|
||||
bbb.caption.option.language = Idioma:
|
||||
bbb.caption.option.language.tooltip = Seleccionar idioma de subtitulos
|
||||
bbb.caption.option.language.accessibilityName =
|
||||
bbb.caption.option.language.accessibilityName = Seleccione lenguaje de traducción. Use las teclas de dirección para navegar.
|
||||
bbb.caption.option.takeowner = Apropiarse
|
||||
bbb.caption.option.takeowner.tooltip =
|
||||
bbb.caption.option.takeowner.tooltip = Usar lenguaje seleccionado
|
||||
bbb.caption.option.fontfamily = Tipo de letra:
|
||||
bbb.caption.option.fontfamily.tooltip = Tipo de letra
|
||||
bbb.caption.option.fontsize = Tamaño de letra:
|
||||
@ -643,16 +643,16 @@ bbb.accessibility.chat.initialDescription = Por favor usar las teclas direcciona
|
||||
bbb.accessibility.notes.notesview.input = Entradas de las notas
|
||||
|
||||
bbb.shortcuthelp.title = Teclas de acceso directo
|
||||
bbb.shortcuthelp.titleBar =
|
||||
bbb.shortcuthelp.titleBar = Teclas de acceso directo de la ventana de la barra de título
|
||||
bbb.shortcuthelp.minimizeBtn.accessibilityName = Minimizar la ventana de accesos rápidos
|
||||
bbb.shortcuthelp.maximizeRestoreBtn.accessibilityName = Mazimizar la ventana de accesos rápidos
|
||||
bbb.shortcuthelp.closeBtn.accessibilityName = Cerrar la ventana de accesos rápidos
|
||||
bbb.shortcuthelp.dropdown.accessibilityName =
|
||||
bbb.shortcuthelp.dropdown.accessibilityName = Atajo para Categorias
|
||||
bbb.shortcuthelp.dropdown.general = Accesos rápidos globales
|
||||
bbb.shortcuthelp.dropdown.presentation = Accesos rápidos a la presentación
|
||||
bbb.shortcuthelp.dropdown.chat = Acceso rápido al chat
|
||||
bbb.shortcuthelp.dropdown.users = Acceso rápido a los usuarios
|
||||
bbb.shortcuthelp.dropdown.caption =
|
||||
bbb.shortcuthelp.dropdown.caption = Atajos de subtítulos
|
||||
bbb.shortcuthelp.browserWarning.text =
|
||||
bbb.shortcuthelp.headers.shortcut = Acceso Rápido
|
||||
bbb.shortcuthelp.headers.function = Función
|
||||
@ -682,7 +682,7 @@ bbb.shortcutkey.focus.presentation.function = Mover enfoque a la ventana de pres
|
||||
bbb.shortcutkey.focus.chat = 52
|
||||
bbb.shortcutkey.focus.chat.function = Mover enfoque a la venta de chat
|
||||
bbb.shortcutkey.focus.caption = 53
|
||||
bbb.shortcutkey.focus.caption.function =
|
||||
bbb.shortcutkey.focus.caption.function = Mover ventana para observar subtítulos
|
||||
|
||||
bbb.shortcutkey.share.desktop = 68
|
||||
bbb.shortcutkey.share.desktop.function = Abrir la ventana de compartir escritorio
|
||||
@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Ajustar diapositivas en la página
|
||||
bbb.shortcutkey.users.makePresenter = 89
|
||||
bbb.shortcutkey.users.makePresenter.function = Hacer presentador a la persona seleccionada
|
||||
bbb.shortcutkey.users.kick = 69
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.kick.function = Expulsar persona seleccionada de la reunión
|
||||
bbb.shortcutkey.users.mute = 83
|
||||
bbb.shortcutkey.users.mute.function = Activar o Desactivar sonido de la persona seleccionada
|
||||
bbb.shortcutkey.users.muteall = 65
|
||||
@ -720,18 +720,18 @@ bbb.shortcutkey.users.muteall.function = Activar o Desactivar sonido a todos los
|
||||
bbb.shortcutkey.users.muteAllButPres = 65
|
||||
bbb.shortcutkey.users.muteAllButPres.function = Silenciar a todos excepto al presentador
|
||||
bbb.shortcutkey.users.breakoutRooms = 75
|
||||
bbb.shortcutkey.users.breakoutRooms.function =
|
||||
bbb.shortcutkey.users.breakoutRooms.function = Ventana de salas de reunion
|
||||
bbb.shortcutkey.users.focusBreakoutRooms = 82
|
||||
bbb.shortcutkey.users.focusBreakoutRooms.function =
|
||||
bbb.shortcutkey.users.focusBreakoutRooms.function = Observar lista de sala de reunion
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom = 76
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom.function =
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom.function = Escuchar sala de reunión seleccionada
|
||||
bbb.shortcutkey.users.joinBreakoutRoom = 79
|
||||
bbb.shortcutkey.users.joinBreakoutRoom.function =
|
||||
bbb.shortcutkey.users.joinBreakoutRoom.function = Unirse a la sala de reunión seleccionada
|
||||
|
||||
bbb.shortcutkey.chat.focusTabs = 89
|
||||
bbb.shortcutkey.chat.focusTabs.function = Enfocar a las pestañas del chat
|
||||
bbb.shortcutkey.chat.focusBox = 82
|
||||
bbb.shortcutkey.chat.focusBox.function =
|
||||
bbb.shortcutkey.chat.focusBox.function = Observar la lista de mensajes del chat
|
||||
bbb.shortcutkey.chat.changeColour = 67
|
||||
bbb.shortcutkey.chat.changeColour.function = Enfocar en el seleccionador de color de la fuente
|
||||
bbb.shortcutkey.chat.sendMessage = 83
|
||||
@ -757,13 +757,13 @@ bbb.shortcutkey.chat.chatbox.debug = 71
|
||||
bbb.shortcutkey.chat.chatbox.debug.function = Tecla de acceso rápido para depurar temporalmente
|
||||
|
||||
bbb.shortcutkey.caption.takeOwnership = 79
|
||||
bbb.shortcutkey.caption.takeOwnership.function =
|
||||
bbb.shortcutkey.caption.takeOwnership.function = Usar lenguaje seleccionado
|
||||
|
||||
bbb.polling.startButton.tooltip = Iniciar una encuesta
|
||||
bbb.polling.startButton.label = Iniciar encuesta
|
||||
bbb.polling.publishButton.label = Publicar
|
||||
bbb.polling.closeButton.label = Cerrar
|
||||
bbb.polling.customPollOption.label =
|
||||
bbb.polling.customPollOption.label = Encuesta personalizada...
|
||||
bbb.polling.pollModal.title = Resultados de la encuesta en tiempo real
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Agregar opciones para la encuesta
|
||||
@ -803,7 +803,7 @@ bbb.users.settings.lockAll = Bloquear a todos
|
||||
bbb.users.settings.lockAllExcept = Bloquear todos menos presentador
|
||||
bbb.users.settings.lockSettings = Bloquear espectadores ...
|
||||
bbb.users.settings.breakoutRooms = Sesión de pequeños gupos...
|
||||
bbb.users.settings.sendBreakoutRoomsInvitations =
|
||||
bbb.users.settings.sendBreakoutRoomsInvitations = Enviar invitaciones a salas de reuniones
|
||||
bbb.users.settings.unlockAll = Desbloquear a todos los espectadores
|
||||
bbb.users.settings.roomIsLocked = Bloqueado por defecto
|
||||
bbb.users.settings.roomIsMuted = Silenciado por defecto
|
||||
@ -827,31 +827,31 @@ bbb.lockSettings.locked=Bloqueado
|
||||
bbb.lockSettings.lockOnJoin=Unirse
|
||||
|
||||
bbb.users.breakout.breakoutRooms = Sesión de pequeños gupos
|
||||
bbb.users.breakout.updateBreakoutRooms =
|
||||
bbb.users.breakout.updateBreakoutRooms = Actualizar sala de reunión
|
||||
bbb.users.breakout.timerForRoom.toolTip =
|
||||
bbb.users.breakout.timer.toolTip =
|
||||
bbb.users.breakout.timer.toolTip = Tiempo restante para las salas de reunión
|
||||
bbb.users.breakout.calculatingRemainingTime = Calculando tiempo restante ....
|
||||
bbb.users.breakout.closing = Cerrando
|
||||
bbb.users.breakout.closewarning.text =
|
||||
bbb.users.breakout.rooms = Sesiones
|
||||
bbb.users.breakout.roomsCombo.accessibilityName =
|
||||
bbb.users.breakout.roomsCombo.accessibilityName = Número de salas para crear
|
||||
bbb.users.breakout.room = Sesión
|
||||
bbb.users.breakout.timeLimit = Límite de tiempo
|
||||
bbb.users.breakout.durationStepper.accessibilityName =
|
||||
bbb.users.breakout.durationStepper.accessibilityName = Tiempo límite en minutos
|
||||
bbb.users.breakout.minutes = Minutos
|
||||
bbb.users.breakout.record = Grabar
|
||||
bbb.users.breakout.recordCheckbox.accessibilityName =
|
||||
bbb.users.breakout.recordCheckbox.accessibilityName = Grabar sala de reunion
|
||||
bbb.users.breakout.notAssigned = No asignado
|
||||
bbb.users.breakout.dragAndDropToolTip = Consejo: Puedes arrastarr y soltar usuarios entre los cuartos
|
||||
bbb.users.breakout.start = Iniciar
|
||||
bbb.users.breakout.invite =
|
||||
bbb.users.breakout.invite = Invitar
|
||||
bbb.users.breakout.close = Cerrar
|
||||
bbb.users.breakout.closeAllRooms = Cerrar todas las sesiones de pequeños grupos
|
||||
bbb.users.breakout.insufficientUsers =
|
||||
bbb.users.breakout.confirm =
|
||||
bbb.users.breakout.invited =
|
||||
bbb.users.breakout.insufficientUsers = Usuarios insuficientes. Se requiere al menos un usuario en una sala de reuniones.
|
||||
bbb.users.breakout.confirm = Unirse a una sala de reuniones
|
||||
bbb.users.breakout.invited = Has sido invitado a reunirte 1Sala de Reunión1
|
||||
bbb.users.breakout.accept =
|
||||
bbb.users.breakout.joinSession =
|
||||
bbb.users.breakout.joinSession = Unirse a la sesión
|
||||
bbb.users.breakout.joinSession.accessibilityName =
|
||||
bbb.users.breakout.joinSession.close.tooltip = Cerrar
|
||||
bbb.users.breakout.joinSession.close.accessibilityName =
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Sätete teavitused
|
||||
bbb.clientstatus.notification = Lugemata teavitused
|
||||
bbb.clientstatus.close = Sulge
|
||||
bbb.clientstatus.tunneling.title = Tulemüür
|
||||
bbb.clientstatus.tunneling.message = Tulemüür piirab otseühenduste loomist välise serveri pordiga 1935.\nStabiilsema ühenduse saavutamisega serveriga soovitame sul kasutada vähem piiravat võrguühendust.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Brauseri versioon
|
||||
bbb.clientstatus.browser.message = Sinu brauseri versioon ({0}) on vana. Soovitame uuendada brauser viimasele versioonile.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Jakinarazpenen konfigurazioa
|
||||
bbb.clientstatus.notification = Irakurri gabeko jakinarazpenak
|
||||
bbb.clientstatus.close = Itxi
|
||||
bbb.clientstatus.tunneling.title = Suebaki
|
||||
bbb.clientstatus.tunneling.message = Suebaki batek saihesten du zure bezeroa eta zerbitzariaren arteko konexioa. Konexio hau zuzenean 1935 atakan da. Muga apaleko sare bat erabiltzea gomendatzen dugu konexio egonkorrago bat lortzeko.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Nabigatzailearen bertsioa
|
||||
bbb.clientstatus.browser.message = Zure nabigatzailea ({0}) ez da gaurkotu. Azken bertsioarekin eguneratzea gomendatzen dugu.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = در حال اتصال به سرور
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = متاسفانه، امکان اتصال به سرور وجود ندارد.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = باز کردن پنجره تنظیمات میکروفون
|
||||
bbb.mainshell.meetingNotFound = جلسه یافت نشد
|
||||
bbb.mainshell.invalidAuthToken = توکن احراز هویت نامعتبر
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = پیکربندی اطلاع اعلان ها
|
||||
bbb.clientstatus.notification = اعلان های خوانده نشده
|
||||
bbb.clientstatus.close = بستن
|
||||
bbb.clientstatus.tunneling.title = دیوار اتش
|
||||
bbb.clientstatus.tunneling.message = دیوار آتش، مانع اتصال مستقیم کاربر شما به سرور روی درگاه 1935 می شود. پیشنهاد می شود تا به به منظور اتصال پایدارتر، به یک شبکه با محدودیت کمتر متصل شوید
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = نسخه مرورگر
|
||||
bbb.clientstatus.browser.message = مرورگر شما ({0}) به روز نیست. پیشنهاد می شود به جدید ترین نسخه به روز رسانی کنید.
|
||||
bbb.clientstatus.flash.title = فلش پلیر
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Connexion au serveur
|
||||
bbb.mainshell.statusProgress.loading = chargement
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Désolé, impossible d'établir une connexion au serveur.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Ouvrir la fenêtre de log
|
||||
bbb.mainshell.meetingNotFound = Conférence non trouvée
|
||||
bbb.mainshell.invalidAuthToken = Jeton d'authentification invalide
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Notifications de configuration
|
||||
bbb.clientstatus.notification = Notifications non lus
|
||||
bbb.clientstatus.close = Fermer
|
||||
bbb.clientstatus.tunneling.title = Pare-feu
|
||||
bbb.clientstatus.tunneling.message = Un pare-feu empêche votre client de se connecter directement sur le port 1935 sur le serveur distant . Recommander se joindre à un réseau moins restrictif pour une connexion plus stable
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Version du navigateur
|
||||
bbb.clientstatus.browser.message = Votre navigateur ({0}) ne êtes pas mis à jour. Recommander la mise à jour à la dernière version.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publier
|
||||
bbb.polling.closeButton.label = Fermer
|
||||
bbb.polling.customPollOption.label = Votes personnalisés...
|
||||
bbb.polling.pollModal.title = Résultats de sondage en direct
|
||||
bbb.polling.pollModal.hint = Laissez cette fenêtre ouverte pour permettre aux étudiants de répondre au sondage. La sélection du bouton Publier ou Fermer met fin au sondage.
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Entrez les choix de vote
|
||||
bbb.polling.respondersLabel.novotes = En attente de réponses
|
||||
bbb.polling.respondersLabel.text = {0} utilisateurs ont répondu
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Connexion au serveur
|
||||
bbb.mainshell.statusProgress.loading = Chargement
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Désolé, impossible d'établir une connexion au serveur.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (version {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Ouvrir la fenêtre de log
|
||||
bbb.mainshell.meetingNotFound = Conférence introuvable
|
||||
bbb.mainshell.invalidAuthToken = Jeton d'authentification invalide
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuration des notifications
|
||||
bbb.clientstatus.notification = Notifications non lues
|
||||
bbb.clientstatus.close = Fermer
|
||||
bbb.clientstatus.tunneling.title = Pare-feu
|
||||
bbb.clientstatus.tunneling.message = Un pare-feu empêche votre client de se connecter directement au port 1935 du serveur distant. Il est recommandé de se connecter à un réseau moins restrictif pour obtenir une connexion plus stable.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Version du navigateur
|
||||
bbb.clientstatus.browser.message = Votre navigateur ({0}) n'est pas à jour. Il est recommandé d'installer la dernière version.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publier
|
||||
bbb.polling.closeButton.label = Fermer
|
||||
bbb.polling.customPollOption.label = Votes personnalisés...
|
||||
bbb.polling.pollModal.title = Les résultats du vote en direct
|
||||
bbb.polling.pollModal.hint = Laissez cette fenêtre ouverte pour permettre aux étudiants de répondre au vote. Sélectionner le bouton Publier ou Fermer va arrêter le vote.
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Entrer les choix du vote
|
||||
bbb.polling.respondersLabel.novotes = En attente des réponses
|
||||
bbb.polling.respondersLabel.text = {0} utilisateurs ont répondu
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = सर्वर से कनेक्ट हो रहा है
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = क्षमा करें, हम सर्वर से कनेक्ट नहीं कर सकते
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = लॉग विंडो खोलें
|
||||
bbb.mainshell.meetingNotFound = बैठक नहीं मिली
|
||||
bbb.mainshell.invalidAuthToken = अमान्य प्रमाणीकरण टोकन
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = विन्यास सूचनाएं
|
||||
bbb.clientstatus.notification = अपठित सूचनाएं
|
||||
bbb.clientstatus.close = बंद करे
|
||||
bbb.clientstatus.tunneling.title = फ़ायरवॉल
|
||||
bbb.clientstatus.tunneling.message = फ़ायरवॉल आपके क्लाइंट को पोर्ट 1935 पर सीधे रिमोट सर्वर से कनेक्ट करने से रोक रहा है। अधिक स्थिर कनेक्शन के लिए एक कम प्रतिबंधात्मक नेटवर्क में शामिल होने की सिफारिश करें
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = ब्राउज़र संस्करण
|
||||
bbb.clientstatus.browser.message = आपका ब्राउज़र ({0}) अप-टू-डेट नहीं है नवीनतम संस्करण को अपडेट करने की अनुशंसा
|
||||
bbb.clientstatus.flash.title = फ़्लैश प्लेयर
|
||||
|
871
bigbluebutton-client/locale/ht/bbbResources.properties
Normal file
871
bigbluebutton-client/locale/ht/bbbResources.properties
Normal file
@ -0,0 +1,871 @@
|
||||
bbb.mainshell.locale.version =
|
||||
bbb.mainshell.statusProgress.connecting =
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer =
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip =
|
||||
bbb.mainshell.meetingNotFound =
|
||||
bbb.mainshell.invalidAuthToken =
|
||||
bbb.mainshell.resetLayoutBtn.toolTip =
|
||||
bbb.mainshell.notification.tunnelling =
|
||||
bbb.mainshell.notification.webrtc =
|
||||
bbb.mainshell.fullscreenBtn.toolTip =
|
||||
bbb.mainshell.quote.sentence.1 =
|
||||
bbb.mainshell.quote.attribution.1 =
|
||||
bbb.mainshell.quote.sentence.2 =
|
||||
bbb.mainshell.quote.attribution.2 =
|
||||
bbb.mainshell.quote.sentence.3 =
|
||||
bbb.mainshell.quote.attribution.3 =
|
||||
bbb.mainshell.quote.sentence.4 =
|
||||
bbb.mainshell.quote.attribution.4 =
|
||||
bbb.mainshell.quote.sentence.5 =
|
||||
bbb.mainshell.quote.attribution.5 =
|
||||
bbb.oldlocalewindow.reminder1 =
|
||||
bbb.oldlocalewindow.reminder2 =
|
||||
bbb.oldlocalewindow.windowTitle =
|
||||
bbb.audioSelection.title =
|
||||
bbb.audioSelection.btnMicrophone.label =
|
||||
bbb.audioSelection.btnMicrophone.toolTip =
|
||||
bbb.audioSelection.btnListenOnly.label =
|
||||
bbb.audioSelection.btnListenOnly.toolTip =
|
||||
bbb.audioSelection.txtPhone.text =
|
||||
bbb.micSettings.title =
|
||||
bbb.micSettings.speakers.header =
|
||||
bbb.micSettings.microphone.header =
|
||||
bbb.micSettings.playSound =
|
||||
bbb.micSettings.playSound.toolTip =
|
||||
bbb.micSettings.hearFromHeadset =
|
||||
bbb.micSettings.speakIntoMic =
|
||||
bbb.micSettings.echoTestMicPrompt =
|
||||
bbb.micSettings.echoTestAudioYes =
|
||||
bbb.micSettings.echoTestAudioNo =
|
||||
bbb.micSettings.speakIntoMicTestLevel =
|
||||
bbb.micSettings.recommendHeadset =
|
||||
bbb.micSettings.changeMic =
|
||||
bbb.micSettings.changeMic.toolTip =
|
||||
bbb.micSettings.comboMicList.toolTip =
|
||||
bbb.micSettings.micRecordVolume.label =
|
||||
bbb.micSettings.micRecordVolume.toolTip =
|
||||
bbb.micSettings.nextButton =
|
||||
bbb.micSettings.nextButton.toolTip =
|
||||
bbb.micSettings.join =
|
||||
bbb.micSettings.join.toolTip =
|
||||
bbb.micSettings.cancel =
|
||||
bbb.micSettings.connectingtoecho =
|
||||
bbb.micSettings.connectingtoecho.error =
|
||||
bbb.micSettings.cancel.toolTip =
|
||||
bbb.micSettings.access.helpButton =
|
||||
bbb.micSettings.access.title =
|
||||
bbb.micSettings.webrtc.title =
|
||||
bbb.micSettings.webrtc.capableBrowser =
|
||||
bbb.micSettings.webrtc.capableBrowser.dontuseit =
|
||||
bbb.micSettings.webrtc.capableBrowser.dontuseit.toolTip =
|
||||
bbb.micSettings.webrtc.notCapableBrowser =
|
||||
bbb.micSettings.webrtc.connecting =
|
||||
bbb.micSettings.webrtc.waitingforice =
|
||||
bbb.micSettings.webrtc.transferring =
|
||||
bbb.micSettings.webrtc.endingecho =
|
||||
bbb.micSettings.webrtc.endedecho =
|
||||
bbb.micPermissions.message.browserhttp =
|
||||
bbb.micPermissions.firefox.title =
|
||||
bbb.micPermissions.firefox.message =
|
||||
bbb.micPermissions.chrome.title =
|
||||
bbb.micPermissions.chrome.message =
|
||||
bbb.micWarning.title =
|
||||
bbb.micWarning.joinBtn.label =
|
||||
bbb.micWarning.testAgain.label =
|
||||
bbb.micWarning.message =
|
||||
bbb.webrtcWarning.message =
|
||||
bbb.webrtcWarning.title =
|
||||
bbb.webrtcWarning.failedError.1001 =
|
||||
bbb.webrtcWarning.failedError.1002 =
|
||||
bbb.webrtcWarning.failedError.1003 =
|
||||
bbb.webrtcWarning.failedError.1004 =
|
||||
bbb.webrtcWarning.failedError.1005 =
|
||||
bbb.webrtcWarning.failedError.1006 =
|
||||
bbb.webrtcWarning.failedError.1007 =
|
||||
bbb.webrtcWarning.failedError.1008 =
|
||||
bbb.webrtcWarning.failedError.1009 =
|
||||
bbb.webrtcWarning.failedError.1010 =
|
||||
bbb.webrtcWarning.failedError.1011 =
|
||||
bbb.webrtcWarning.failedError.unknown =
|
||||
bbb.webrtcWarning.failedError.mediamissing =
|
||||
bbb.webrtcWarning.failedError.endedunexpectedly =
|
||||
bbb.webrtcWarning.connection.dropped =
|
||||
bbb.webrtcWarning.connection.reconnecting =
|
||||
bbb.webrtcWarning.connection.reestablished =
|
||||
bbb.inactivityWarning.title =
|
||||
bbb.inactivityWarning.message =
|
||||
bbb.shuttingDown.message =
|
||||
bbb.inactivityWarning.cancel =
|
||||
bbb.mainToolbar.helpBtn =
|
||||
bbb.mainToolbar.logoutBtn =
|
||||
bbb.mainToolbar.logoutBtn.toolTip =
|
||||
bbb.mainToolbar.idleLogoutBtn =
|
||||
bbb.mainToolbar.langSelector =
|
||||
bbb.mainToolbar.settingsBtn =
|
||||
bbb.mainToolbar.settingsBtn.toolTip =
|
||||
bbb.mainToolbar.shortcutBtn =
|
||||
bbb.mainToolbar.shortcutBtn.toolTip =
|
||||
bbb.mainToolbar.recordBtn.toolTip.start =
|
||||
bbb.mainToolbar.recordBtn.toolTip.stop =
|
||||
bbb.mainToolbar.recordBtn.toolTip.recording =
|
||||
bbb.mainToolbar.recordBtn.toolTip.notRecording =
|
||||
bbb.mainToolbar.recordBtn.toolTip.onlyModerators =
|
||||
bbb.mainToolbar.recordBtn.toolTip.wontInterrupt =
|
||||
bbb.mainToolbar.recordBtn.toolTip.wontRecord =
|
||||
bbb.mainToolbar.recordBtn.confirm.title =
|
||||
bbb.mainToolbar.recordBtn.confirm.message.start =
|
||||
bbb.mainToolbar.recordBtn.confirm.message.stop =
|
||||
bbb.mainToolbar.recordBtn.notification.title =
|
||||
bbb.mainToolbar.recordBtn.notification.message1 =
|
||||
bbb.mainToolbar.recordBtn.notification.message2 =
|
||||
bbb.mainToolbar.recordingLabel.recording =
|
||||
bbb.mainToolbar.recordingLabel.notRecording =
|
||||
bbb.waitWindow.waitMessage.message =
|
||||
bbb.waitWindow.waitMessage.title =
|
||||
bbb.guests.title =
|
||||
bbb.guests.message.singular =
|
||||
bbb.guests.message.plural =
|
||||
bbb.guests.allowBtn.toolTip =
|
||||
bbb.guests.allowEveryoneBtn.text =
|
||||
bbb.guests.denyBtn.toolTip =
|
||||
bbb.guests.denyEveryoneBtn.text =
|
||||
bbb.guests.rememberAction.text =
|
||||
bbb.guests.alwaysAccept =
|
||||
bbb.guests.alwaysDeny =
|
||||
bbb.guests.askModerator =
|
||||
bbb.guests.Management =
|
||||
bbb.clientstatus.title =
|
||||
bbb.clientstatus.notification =
|
||||
bbb.clientstatus.close =
|
||||
bbb.clientstatus.tunneling.title =
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title =
|
||||
bbb.clientstatus.browser.message =
|
||||
bbb.clientstatus.flash.title =
|
||||
bbb.clientstatus.flash.message =
|
||||
bbb.clientstatus.webrtc.title =
|
||||
bbb.clientstatus.webrtc.strongStatus =
|
||||
bbb.clientstatus.webrtc.almostStrongStatus =
|
||||
bbb.clientstatus.webrtc.almostWeakStatus =
|
||||
bbb.clientstatus.webrtc.weakStatus =
|
||||
bbb.clientstatus.webrtc.message =
|
||||
bbb.clientstatus.java.title =
|
||||
bbb.clientstatus.java.notdetected =
|
||||
bbb.clientstatus.java.notinstalled =
|
||||
bbb.clientstatus.java.oldversion =
|
||||
bbb.window.minimizeBtn.toolTip =
|
||||
bbb.window.maximizeRestoreBtn.toolTip =
|
||||
bbb.window.closeBtn.toolTip =
|
||||
bbb.videoDock.titleBar =
|
||||
bbb.presentation.titleBar =
|
||||
bbb.chat.titleBar =
|
||||
bbb.users.title =
|
||||
bbb.users.titleBar =
|
||||
bbb.users.quickLink.label =
|
||||
bbb.users.minimizeBtn.accessibilityName =
|
||||
bbb.users.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.users.settings.buttonTooltip =
|
||||
bbb.users.settings.audioSettings =
|
||||
bbb.users.settings.webcamSettings =
|
||||
bbb.users.settings.muteAll =
|
||||
bbb.users.settings.muteAllExcept =
|
||||
bbb.users.settings.unmuteAll =
|
||||
bbb.users.settings.clearAllStatus =
|
||||
bbb.users.emojiStatusBtn.toolTip =
|
||||
bbb.users.roomMuted.text =
|
||||
bbb.users.roomLocked.text =
|
||||
bbb.users.pushToTalk.toolTip =
|
||||
bbb.users.pushToMute.toolTip =
|
||||
bbb.users.muteMeBtnTxt.talk =
|
||||
bbb.users.muteMeBtnTxt.mute =
|
||||
bbb.users.muteMeBtnTxt.muted =
|
||||
bbb.users.usersGrid.contextmenu.exportusers =
|
||||
bbb.users.usersGrid.accessibilityName =
|
||||
bbb.users.usersGrid.nameItemRenderer =
|
||||
bbb.users.usersGrid.nameItemRenderer.youIdentifier =
|
||||
bbb.users.usersGrid.statusItemRenderer =
|
||||
bbb.users.usersGrid.statusItemRenderer.changePresenter =
|
||||
bbb.users.usersGrid.statusItemRenderer.presenter =
|
||||
bbb.users.usersGrid.statusItemRenderer.moderator =
|
||||
bbb.users.usersGrid.statusItemRenderer.voiceOnlyUser =
|
||||
bbb.users.usersGrid.statusItemRenderer.raiseHand =
|
||||
bbb.users.usersGrid.statusItemRenderer.applause =
|
||||
bbb.users.usersGrid.statusItemRenderer.thumbsUp =
|
||||
bbb.users.usersGrid.statusItemRenderer.thumbsDown =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakLouder =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSofter =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakFaster =
|
||||
bbb.users.usersGrid.statusItemRenderer.speakSlower =
|
||||
bbb.users.usersGrid.statusItemRenderer.away =
|
||||
bbb.users.usersGrid.statusItemRenderer.confused =
|
||||
bbb.users.usersGrid.statusItemRenderer.neutral =
|
||||
bbb.users.usersGrid.statusItemRenderer.happy =
|
||||
bbb.users.usersGrid.statusItemRenderer.sad =
|
||||
bbb.users.usersGrid.statusItemRenderer.clearStatus =
|
||||
bbb.users.usersGrid.statusItemRenderer.viewer =
|
||||
bbb.users.usersGrid.statusItemRenderer.streamIcon.toolTip =
|
||||
bbb.users.usersGrid.statusItemRenderer.presIcon.toolTip =
|
||||
bbb.users.usersGrid.mediaItemRenderer =
|
||||
bbb.users.usersGrid.mediaItemRenderer.talking =
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam =
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcamBtn =
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToTalk =
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute =
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock =
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam =
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff =
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn =
|
||||
bbb.users.usersGrid.mediaItemRenderer.noAudio =
|
||||
bbb.users.usersGrid.mediaItemRenderer.promoteUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.demoteUser =
|
||||
bbb.users.emojiStatus.clear =
|
||||
bbb.users.emojiStatus.raiseHand =
|
||||
bbb.users.emojiStatus.happy =
|
||||
bbb.users.emojiStatus.neutral =
|
||||
bbb.users.emojiStatus.sad =
|
||||
bbb.users.emojiStatus.confused =
|
||||
bbb.users.emojiStatus.away =
|
||||
bbb.users.emojiStatus.thumbsUp =
|
||||
bbb.users.emojiStatus.thumbsDown =
|
||||
bbb.users.emojiStatus.applause =
|
||||
bbb.users.emojiStatus.agree =
|
||||
bbb.users.emojiStatus.disagree =
|
||||
bbb.users.emojiStatus.none =
|
||||
bbb.users.emojiStatus.speakLouder =
|
||||
bbb.users.emojiStatus.speakSofter =
|
||||
bbb.users.emojiStatus.speakFaster =
|
||||
bbb.users.emojiStatus.speakSlower =
|
||||
bbb.users.emojiStatus.beRightBack =
|
||||
bbb.presentation.title =
|
||||
bbb.presentation.titleWithPres =
|
||||
bbb.presentation.quickLink.label =
|
||||
bbb.presentation.fitToWidth.toolTip =
|
||||
bbb.presentation.fitToPage.toolTip =
|
||||
bbb.presentation.uploadPresBtn.toolTip =
|
||||
bbb.presentation.downloadPresBtn.toolTip =
|
||||
bbb.presentation.poll.response =
|
||||
bbb.presentation.backBtn.toolTip =
|
||||
bbb.presentation.btnSlideNum.accessibilityName =
|
||||
bbb.presentation.btnSlideNum.toolTip =
|
||||
bbb.presentation.forwardBtn.toolTip =
|
||||
bbb.presentation.maxUploadFileExceededAlert =
|
||||
bbb.presentation.uploadcomplete =
|
||||
bbb.presentation.uploaded =
|
||||
bbb.presentation.document.supported =
|
||||
bbb.presentation.document.converted =
|
||||
bbb.presentation.error.document.convert.failed =
|
||||
bbb.presentation.error.document.convert.invalid =
|
||||
bbb.presentation.error.io =
|
||||
bbb.presentation.error.security =
|
||||
bbb.presentation.error.convert.notsupported =
|
||||
bbb.presentation.error.convert.nbpage =
|
||||
bbb.presentation.error.convert.maxnbpagereach =
|
||||
bbb.presentation.converted =
|
||||
bbb.presentation.slider =
|
||||
bbb.presentation.slideloader.starttext =
|
||||
bbb.presentation.slideloader.endtext =
|
||||
bbb.presentation.uploadwindow.presentationfile =
|
||||
bbb.presentation.uploadwindow.pdf =
|
||||
bbb.presentation.uploadwindow.word =
|
||||
bbb.presentation.uploadwindow.excel =
|
||||
bbb.presentation.uploadwindow.powerpoint =
|
||||
bbb.presentation.uploadwindow.image =
|
||||
bbb.presentation.minimizeBtn.accessibilityName =
|
||||
bbb.presentation.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.presentation.closeBtn.accessibilityName =
|
||||
bbb.fileupload.title =
|
||||
bbb.fileupload.lblFileName.defaultText =
|
||||
bbb.fileupload.selectBtn.label =
|
||||
bbb.fileupload.selectBtn.toolTip =
|
||||
bbb.fileupload.uploadBtn =
|
||||
bbb.fileupload.uploadBtn.toolTip =
|
||||
bbb.fileupload.deleteBtn.toolTip =
|
||||
bbb.fileupload.showBtn =
|
||||
bbb.fileupload.retry =
|
||||
bbb.fileupload.showBtn.toolTip =
|
||||
bbb.fileupload.close.tooltip =
|
||||
bbb.fileupload.close.accessibilityName =
|
||||
bbb.fileupload.genThumbText =
|
||||
bbb.fileupload.progBarLbl =
|
||||
bbb.fileupload.fileFormatHint =
|
||||
bbb.fileupload.letUserDownload =
|
||||
bbb.fileupload.letUserDownload.tooltip =
|
||||
bbb.filedownload.title =
|
||||
bbb.filedownload.close.tooltip =
|
||||
bbb.filedownload.close.accessibilityName =
|
||||
bbb.filedownload.fileLbl =
|
||||
bbb.filedownload.downloadBtn =
|
||||
bbb.filedownload.downloadBtn.toolTip =
|
||||
bbb.filedownload.thisFileIsDownloadable =
|
||||
bbb.chat.title =
|
||||
bbb.chat.quickLink.label =
|
||||
bbb.chat.cmpColorPicker.toolTip =
|
||||
bbb.chat.input.accessibilityName =
|
||||
bbb.chat.sendBtn.toolTip =
|
||||
bbb.chat.sendBtn.accessibilityName =
|
||||
bbb.chat.saveBtn.toolTip =
|
||||
bbb.chat.saveBtn.accessibilityName =
|
||||
bbb.chat.saveBtn.label =
|
||||
bbb.chat.save.complete =
|
||||
bbb.chat.save.ioerror =
|
||||
bbb.chat.save.filename =
|
||||
bbb.chat.copyBtn.toolTip =
|
||||
bbb.chat.copyBtn.accessibilityName =
|
||||
bbb.chat.copyBtn.label =
|
||||
bbb.chat.copy.complete =
|
||||
bbb.chat.clearBtn.toolTip =
|
||||
bbb.chat.clearBtn.accessibilityName =
|
||||
bbb.chat.clearBtn.chatMessage =
|
||||
bbb.chat.clearBtn.alert.title =
|
||||
bbb.chat.clearBtn.alert.text =
|
||||
bbb.chat.contextmenu.copyalltext =
|
||||
bbb.chat.publicChatUsername =
|
||||
bbb.chat.optionsTabName =
|
||||
bbb.chat.privateChatSelect =
|
||||
bbb.chat.private.userLeft =
|
||||
bbb.chat.private.userJoined =
|
||||
bbb.chat.private.closeMessage =
|
||||
bbb.chat.usersList.toolTip =
|
||||
bbb.chat.usersList.accessibilityName =
|
||||
bbb.chat.chatOptions =
|
||||
bbb.chat.fontSize =
|
||||
bbb.chat.cmbFontSize.toolTip =
|
||||
bbb.chat.messageList =
|
||||
bbb.chat.minimizeBtn.accessibilityName =
|
||||
bbb.chat.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.chat.closeBtn.accessibilityName =
|
||||
bbb.chat.chatTabs.accessibleNotice =
|
||||
bbb.chat.chatMessage.systemMessage =
|
||||
bbb.chat.chatMessage.stringRespresentation =
|
||||
bbb.chat.chatMessage.tooLong =
|
||||
bbb.publishVideo.changeCameraBtn.labelText =
|
||||
bbb.publishVideo.changeCameraBtn.toolTip =
|
||||
bbb.publishVideo.cmbResolution.tooltip =
|
||||
bbb.publishVideo.startPublishBtn.labelText =
|
||||
bbb.publishVideo.startPublishBtn.toolTip =
|
||||
bbb.publishVideo.startPublishBtn.errorName =
|
||||
bbb.webcamPermissions.chrome.title =
|
||||
bbb.webcamPermissions.chrome.message =
|
||||
bbb.videodock.title =
|
||||
bbb.videodock.quickLink.label =
|
||||
bbb.video.minimizeBtn.accessibilityName =
|
||||
bbb.video.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.video.controls.muteButton.toolTip =
|
||||
bbb.video.controls.switchPresenter.toolTip =
|
||||
bbb.video.controls.ejectUserBtn.toolTip =
|
||||
bbb.video.controls.privateChatBtn.toolTip =
|
||||
bbb.video.publish.hint.noCamera =
|
||||
bbb.video.publish.hint.cantOpenCamera =
|
||||
bbb.video.publish.hint.waitingApproval =
|
||||
bbb.video.publish.hint.videoPreview =
|
||||
bbb.video.publish.hint.openingCamera =
|
||||
bbb.video.publish.hint.cameraDenied =
|
||||
bbb.video.publish.hint.cameraIsBeingUsed =
|
||||
bbb.video.publish.hint.publishing =
|
||||
bbb.video.publish.closeBtn.accessName =
|
||||
bbb.video.publish.closeBtn.label =
|
||||
bbb.video.publish.titleBar =
|
||||
bbb.video.streamClose.toolTip =
|
||||
bbb.video.message.browserhttp =
|
||||
bbb.screensharePublish.title =
|
||||
bbb.screensharePublish.pause.tooltip =
|
||||
bbb.screensharePublish.pause.label =
|
||||
bbb.screensharePublish.restart.tooltip =
|
||||
bbb.screensharePublish.restart.label =
|
||||
bbb.screensharePublish.maximizeRestoreBtn.toolTip =
|
||||
bbb.screensharePublish.closeBtn.toolTip =
|
||||
bbb.screensharePublish.closeBtn.accessibilityName =
|
||||
bbb.screensharePublish.minimizeBtn.toolTip =
|
||||
bbb.screensharePublish.minimizeBtn.accessibilityName =
|
||||
bbb.screensharePublish.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screensharePublish.commonHelpText.text =
|
||||
bbb.screensharePublish.helpButton.toolTip =
|
||||
bbb.screensharePublish.helpButton.accessibilityName =
|
||||
bbb.screensharePublish.helpText.PCIE1 =
|
||||
bbb.screensharePublish.helpText.PCIE2 =
|
||||
bbb.screensharePublish.helpText.PCIE3 =
|
||||
bbb.screensharePublish.helpText.PCFirefox1 =
|
||||
bbb.screensharePublish.helpText.PCFirefox2 =
|
||||
bbb.screensharePublish.helpText.PCFirefox3 =
|
||||
bbb.screensharePublish.helpText.PCChrome1 =
|
||||
bbb.screensharePublish.helpText.PCChrome2 =
|
||||
bbb.screensharePublish.helpText.PCChrome3 =
|
||||
bbb.screensharePublish.helpText.MacSafari1 =
|
||||
bbb.screensharePublish.helpText.MacSafari2 =
|
||||
bbb.screensharePublish.helpText.MacSafari3 =
|
||||
bbb.screensharePublish.helpText.MacSafari4 =
|
||||
bbb.screensharePublish.helpText.MacFirefox1 =
|
||||
bbb.screensharePublish.helpText.MacFirefox2 =
|
||||
bbb.screensharePublish.helpText.MacFirefox3 =
|
||||
bbb.screensharePublish.helpText.MacFirefox4 =
|
||||
bbb.screensharePublish.helpText.MacChrome1 =
|
||||
bbb.screensharePublish.helpText.MacChrome2 =
|
||||
bbb.screensharePublish.helpText.MacChrome3 =
|
||||
bbb.screensharePublish.helpText.MacChrome4 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox1 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox2 =
|
||||
bbb.screensharePublish.helpText.LinuxFirefox3 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome1 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome2 =
|
||||
bbb.screensharePublish.helpText.LinuxChrome3 =
|
||||
bbb.screensharePublish.shareTypeLabel.text =
|
||||
bbb.screensharePublish.shareType.fullScreen =
|
||||
bbb.screensharePublish.shareType.region =
|
||||
bbb.screensharePublish.pauseMessage.label =
|
||||
bbb.screensharePublish.startFailed.label =
|
||||
bbb.screensharePublish.restartFailed.label =
|
||||
bbb.screensharePublish.jwsCrashed.label =
|
||||
bbb.screensharePublish.commonErrorMessage.label =
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one =
|
||||
bbb.screensharePublish.tunnelingErrorMessage.two =
|
||||
bbb.screensharePublish.cancelButton.label =
|
||||
bbb.screensharePublish.startButton.label =
|
||||
bbb.screensharePublish.stopButton.label =
|
||||
bbb.screensharePublish.stopButton.toolTip =
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label =
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label =
|
||||
bbb.screensharePublish.WebRTCExtensionFailFallback.label =
|
||||
bbb.screensharePublish.WebRTCPrivateBrowsingWarning.label =
|
||||
bbb.screensharePublish.WebRTCExtensionInstallButton.label =
|
||||
bbb.screensharePublish.WebRTCUseJavaButton.label =
|
||||
bbb.screensharePublish.WebRTCVideoLoading.label =
|
||||
bbb.screensharePublish.sharingMessage=
|
||||
bbb.screenshareView.title =
|
||||
bbb.screenshareView.fitToWindow =
|
||||
bbb.screenshareView.actualSize =
|
||||
bbb.screenshareView.minimizeBtn.accessibilityName =
|
||||
bbb.screenshareView.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.screenshareView.closeBtn.accessibilityName =
|
||||
bbb.toolbar.phone.toolTip.start =
|
||||
bbb.toolbar.phone.toolTip.stop =
|
||||
bbb.toolbar.phone.toolTip.mute =
|
||||
bbb.toolbar.phone.toolTip.unmute =
|
||||
bbb.toolbar.phone.toolTip.nomic =
|
||||
bbb.toolbar.deskshare.toolTip.start =
|
||||
bbb.toolbar.deskshare.toolTip.stop =
|
||||
bbb.toolbar.sharednotes.toolTip =
|
||||
bbb.toolbar.video.toolTip.start =
|
||||
bbb.toolbar.video.toolTip.stop =
|
||||
bbb.layout.addButton.label =
|
||||
bbb.layout.addButton.toolTip =
|
||||
bbb.layout.overwriteLayoutName.title =
|
||||
bbb.layout.overwriteLayoutName.text =
|
||||
bbb.layout.broadcastButton.toolTip =
|
||||
bbb.layout.combo.toolTip =
|
||||
bbb.layout.loadButton.toolTip =
|
||||
bbb.layout.saveButton.toolTip =
|
||||
bbb.layout.lockButton.toolTip =
|
||||
bbb.layout.combo.prompt =
|
||||
bbb.layout.combo.custom =
|
||||
bbb.layout.combo.customName =
|
||||
bbb.layout.combo.remote =
|
||||
bbb.layout.window.name =
|
||||
bbb.layout.window.close.tooltip =
|
||||
bbb.layout.window.close.accessibilityName =
|
||||
bbb.layout.save.complete =
|
||||
bbb.layout.save.ioerror =
|
||||
bbb.layout.load.complete =
|
||||
bbb.layout.load.failed =
|
||||
bbb.layout.sync =
|
||||
bbb.layout.name.defaultlayout =
|
||||
bbb.layout.name.closedcaption =
|
||||
bbb.layout.name.videochat =
|
||||
bbb.layout.name.webcamsfocus =
|
||||
bbb.layout.name.presentfocus =
|
||||
bbb.layout.name.presentandusers =
|
||||
bbb.layout.name.lectureassistant =
|
||||
bbb.layout.name.lecture =
|
||||
bbb.layout.name.sharednotes =
|
||||
bbb.layout.addCurrentToFileWindow.title =
|
||||
bbb.layout.addCurrentToFileWindow.text =
|
||||
bbb.layout.denyAddToFile.toolTip =
|
||||
bbb.layout.confirmAddToFile.toolTip =
|
||||
bbb.highlighter.toolbar.pencil =
|
||||
bbb.highlighter.toolbar.pencil.accessibilityName =
|
||||
bbb.highlighter.toolbar.ellipse =
|
||||
bbb.highlighter.toolbar.ellipse.accessibilityName =
|
||||
bbb.highlighter.toolbar.rectangle =
|
||||
bbb.highlighter.toolbar.rectangle.accessibilityName =
|
||||
bbb.highlighter.toolbar.panzoom =
|
||||
bbb.highlighter.toolbar.panzoom.accessibilityName =
|
||||
bbb.highlighter.toolbar.clear =
|
||||
bbb.highlighter.toolbar.clear.accessibilityName =
|
||||
bbb.highlighter.toolbar.undo =
|
||||
bbb.highlighter.toolbar.undo.accessibilityName =
|
||||
bbb.highlighter.toolbar.color =
|
||||
bbb.highlighter.toolbar.color.accessibilityName =
|
||||
bbb.highlighter.toolbar.thickness =
|
||||
bbb.highlighter.toolbar.thickness.accessibilityName =
|
||||
bbb.highlighter.toolbar.multiuser =
|
||||
bbb.logout.button.label =
|
||||
bbb.logout.appshutdown =
|
||||
bbb.logout.asyncerror =
|
||||
bbb.logout.connectionclosed =
|
||||
bbb.logout.connectionfailed =
|
||||
bbb.logout.rejected =
|
||||
bbb.logout.invalidapp =
|
||||
bbb.logout.unknown =
|
||||
bbb.logout.guestkickedout =
|
||||
bbb.logout.usercommand =
|
||||
bbb.logour.breakoutRoomClose =
|
||||
bbb.logout.ejectedFromMeeting =
|
||||
bbb.logout.refresh.message =
|
||||
bbb.logout.refresh.label =
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.label =
|
||||
bbb.settings.title =
|
||||
bbb.settings.ok =
|
||||
bbb.settings.cancel =
|
||||
bbb.settings.btn.toolTip =
|
||||
bbb.logout.confirm.title =
|
||||
bbb.logout.confirm.message =
|
||||
bbb.logout.confirm.endMeeting =
|
||||
bbb.logout.confirm.yes =
|
||||
bbb.logout.confirm.no =
|
||||
bbb.endSession.confirm.title =
|
||||
bbb.endSession.confirm.message =
|
||||
bbb.connection.failure=
|
||||
bbb.connection.reconnecting=
|
||||
bbb.connection.reestablished=
|
||||
bbb.connection.bigbluebutton=
|
||||
bbb.connection.sip=
|
||||
bbb.connection.video=
|
||||
bbb.connection.deskshare=
|
||||
bbb.notes.title =
|
||||
bbb.notes.cmpColorPicker.toolTip =
|
||||
bbb.notes.saveBtn =
|
||||
bbb.notes.saveBtn.toolTip =
|
||||
bbb.sharedNotes.title =
|
||||
bbb.sharedNotes.quickLink.label =
|
||||
bbb.sharedNotes.createNoteWindow.label =
|
||||
bbb.sharedNotes.createNoteWindow.close.tooltip =
|
||||
bbb.sharedNotes.createNoteWindow.close.accessibilityName =
|
||||
bbb.sharedNotes.typing.single =
|
||||
bbb.sharedNotes.typing.double =
|
||||
bbb.sharedNotes.typing.multiple =
|
||||
bbb.sharedNotes.save.toolTip =
|
||||
bbb.sharedNotes.save.complete =
|
||||
bbb.sharedNotes.save.ioerror =
|
||||
bbb.sharedNotes.save.htmlLabel =
|
||||
bbb.sharedNotes.save.txtLabel =
|
||||
bbb.sharedNotes.new.label =
|
||||
bbb.sharedNotes.new.toolTip =
|
||||
bbb.sharedNotes.limit.label =
|
||||
bbb.sharedNotes.clear.label =
|
||||
bbb.sharedNotes.undo.toolTip =
|
||||
bbb.sharedNotes.redo.toolTip =
|
||||
bbb.sharedNotes.toolbar.toolTip =
|
||||
bbb.sharedNotes.settings.toolTip =
|
||||
bbb.sharedNotes.clearWarning.title =
|
||||
bbb.sharedNotes.clearWarning.message =
|
||||
bbb.sharedNotes.additionalNotes.closeWarning.title =
|
||||
bbb.sharedNotes.additionalNotes.closeWarning.message =
|
||||
bbb.sharedNotes.messageLengthWarning.title =
|
||||
bbb.sharedNotes.messageLengthWarning.text =
|
||||
bbb.sharedNotes.remaining.tooltip =
|
||||
bbb.sharedNotes.full.tooltip =
|
||||
bbb.settings.deskshare.instructions =
|
||||
bbb.settings.deskshare.start =
|
||||
bbb.settings.voice.volume =
|
||||
bbb.settings.java.label =
|
||||
bbb.settings.java.text =
|
||||
bbb.settings.java.command =
|
||||
bbb.settings.flash.label =
|
||||
bbb.settings.flash.text =
|
||||
bbb.settings.flash.command =
|
||||
bbb.settings.isight.label =
|
||||
bbb.settings.isight.text =
|
||||
bbb.settings.isight.command =
|
||||
bbb.settings.warning.label =
|
||||
bbb.settings.warning.close =
|
||||
bbb.settings.noissues =
|
||||
bbb.settings.instructions =
|
||||
bbb.bwmonitor.title =
|
||||
bbb.bwmonitor.upload =
|
||||
bbb.bwmonitor.upload.short =
|
||||
bbb.bwmonitor.download =
|
||||
bbb.bwmonitor.download.short =
|
||||
bbb.bwmonitor.total =
|
||||
bbb.bwmonitor.current =
|
||||
bbb.bwmonitor.available =
|
||||
bbb.bwmonitor.latency =
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle =
|
||||
ltbcustom.bbb.highlighter.toolbar.triangle.accessibilityName =
|
||||
ltbcustom.bbb.highlighter.toolbar.line =
|
||||
ltbcustom.bbb.highlighter.toolbar.line.accessibilityName =
|
||||
ltbcustom.bbb.highlighter.toolbar.text =
|
||||
ltbcustom.bbb.highlighter.toolbar.text.accessibilityName =
|
||||
ltbcustom.bbb.highlighter.texttoolbar.textColorPicker =
|
||||
ltbcustom.bbb.highlighter.texttoolbar.textSizeMenu =
|
||||
bbb.caption.window.title =
|
||||
bbb.caption.quickLink.label =
|
||||
bbb.caption.window.titleBar =
|
||||
bbb.caption.window.minimizeBtn.accessibilityName =
|
||||
bbb.caption.window.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.caption.transcript.noowner =
|
||||
bbb.caption.transcript.youowner =
|
||||
bbb.caption.transcript.pastewarning.title =
|
||||
bbb.caption.transcript.pastewarning.text =
|
||||
bbb.caption.transcript.inputArea.toolTip =
|
||||
bbb.caption.transcript.outputArea.toolTip =
|
||||
bbb.caption.option.label =
|
||||
bbb.caption.option.language =
|
||||
bbb.caption.option.language.tooltip =
|
||||
bbb.caption.option.language.accessibilityName =
|
||||
bbb.caption.option.takeowner =
|
||||
bbb.caption.option.takeowner.tooltip =
|
||||
bbb.caption.option.fontfamily =
|
||||
bbb.caption.option.fontfamily.tooltip =
|
||||
bbb.caption.option.fontsize =
|
||||
bbb.caption.option.fontsize.tooltip =
|
||||
bbb.caption.option.backcolor =
|
||||
bbb.caption.option.backcolor.tooltip =
|
||||
bbb.caption.option.textcolor =
|
||||
bbb.caption.option.textcolor.tooltip =
|
||||
|
||||
|
||||
bbb.accessibility.clientReady =
|
||||
|
||||
bbb.accessibility.chat.chatBox.reachedFirst =
|
||||
bbb.accessibility.chat.chatBox.reachedLatest =
|
||||
bbb.accessibility.chat.chatBox.navigatedFirst =
|
||||
bbb.accessibility.chat.chatBox.navigatedLatest =
|
||||
bbb.accessibility.chat.chatBox.navigatedLatestRead =
|
||||
bbb.accessibility.chat.chatwindow.input =
|
||||
bbb.accessibility.chat.chatwindow.audibleChatNotification =
|
||||
bbb.accessibility.chat.chatwindow.publicChatOptions =
|
||||
bbb.accessibility.chat.initialDescription =
|
||||
|
||||
bbb.accessibility.notes.notesview.input =
|
||||
|
||||
bbb.shortcuthelp.title =
|
||||
bbb.shortcuthelp.titleBar =
|
||||
bbb.shortcuthelp.minimizeBtn.accessibilityName =
|
||||
bbb.shortcuthelp.maximizeRestoreBtn.accessibilityName =
|
||||
bbb.shortcuthelp.closeBtn.accessibilityName =
|
||||
bbb.shortcuthelp.dropdown.accessibilityName =
|
||||
bbb.shortcuthelp.dropdown.general =
|
||||
bbb.shortcuthelp.dropdown.presentation =
|
||||
bbb.shortcuthelp.dropdown.chat =
|
||||
bbb.shortcuthelp.dropdown.users =
|
||||
bbb.shortcuthelp.dropdown.caption =
|
||||
bbb.shortcuthelp.browserWarning.text =
|
||||
bbb.shortcuthelp.headers.shortcut =
|
||||
bbb.shortcuthelp.headers.function =
|
||||
|
||||
bbb.shortcutkey.general.minimize =
|
||||
bbb.shortcutkey.general.minimize.function =
|
||||
bbb.shortcutkey.general.maximize =
|
||||
bbb.shortcutkey.general.maximize.function =
|
||||
|
||||
bbb.shortcutkey.flash.exit =
|
||||
bbb.shortcutkey.flash.exit.function =
|
||||
bbb.shortcutkey.users.muteme =
|
||||
bbb.shortcutkey.users.muteme.function =
|
||||
bbb.shortcutkey.chat.chatinput =
|
||||
bbb.shortcutkey.chat.chatinput.function =
|
||||
bbb.shortcutkey.present.focusslide =
|
||||
bbb.shortcutkey.present.focusslide.function =
|
||||
bbb.shortcutkey.whiteboard.undo =
|
||||
bbb.shortcutkey.whiteboard.undo.function =
|
||||
|
||||
bbb.shortcutkey.focus.users =
|
||||
bbb.shortcutkey.focus.users.function =
|
||||
bbb.shortcutkey.focus.video =
|
||||
bbb.shortcutkey.focus.video.function =
|
||||
bbb.shortcutkey.focus.presentation =
|
||||
bbb.shortcutkey.focus.presentation.function =
|
||||
bbb.shortcutkey.focus.chat =
|
||||
bbb.shortcutkey.focus.chat.function =
|
||||
bbb.shortcutkey.focus.caption =
|
||||
bbb.shortcutkey.focus.caption.function =
|
||||
|
||||
bbb.shortcutkey.share.desktop =
|
||||
bbb.shortcutkey.share.desktop.function =
|
||||
bbb.shortcutkey.share.webcam =
|
||||
bbb.shortcutkey.share.webcam.function =
|
||||
|
||||
bbb.shortcutkey.shortcutWindow =
|
||||
bbb.shortcutkey.shortcutWindow.function =
|
||||
bbb.shortcutkey.logout =
|
||||
bbb.shortcutkey.logout.function =
|
||||
bbb.shortcutkey.raiseHand =
|
||||
bbb.shortcutkey.raiseHand.function =
|
||||
|
||||
bbb.shortcutkey.present.upload =
|
||||
bbb.shortcutkey.present.upload.function =
|
||||
bbb.shortcutkey.present.previous =
|
||||
bbb.shortcutkey.present.previous.function =
|
||||
bbb.shortcutkey.present.select =
|
||||
bbb.shortcutkey.present.select.function =
|
||||
bbb.shortcutkey.present.next =
|
||||
bbb.shortcutkey.present.next.function =
|
||||
bbb.shortcutkey.present.fitWidth =
|
||||
bbb.shortcutkey.present.fitWidth.function =
|
||||
bbb.shortcutkey.present.fitPage =
|
||||
bbb.shortcutkey.present.fitPage.function =
|
||||
|
||||
bbb.shortcutkey.users.makePresenter =
|
||||
bbb.shortcutkey.users.makePresenter.function =
|
||||
bbb.shortcutkey.users.kick =
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.mute =
|
||||
bbb.shortcutkey.users.mute.function =
|
||||
bbb.shortcutkey.users.muteall =
|
||||
bbb.shortcutkey.users.muteall.function =
|
||||
bbb.shortcutkey.users.muteAllButPres =
|
||||
bbb.shortcutkey.users.muteAllButPres.function =
|
||||
bbb.shortcutkey.users.breakoutRooms =
|
||||
bbb.shortcutkey.users.breakoutRooms.function =
|
||||
bbb.shortcutkey.users.focusBreakoutRooms =
|
||||
bbb.shortcutkey.users.focusBreakoutRooms.function =
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom =
|
||||
bbb.shortcutkey.users.listenToBreakoutRoom.function =
|
||||
bbb.shortcutkey.users.joinBreakoutRoom =
|
||||
bbb.shortcutkey.users.joinBreakoutRoom.function =
|
||||
|
||||
bbb.shortcutkey.chat.focusTabs =
|
||||
bbb.shortcutkey.chat.focusTabs.function =
|
||||
bbb.shortcutkey.chat.focusBox =
|
||||
bbb.shortcutkey.chat.focusBox.function =
|
||||
bbb.shortcutkey.chat.changeColour =
|
||||
bbb.shortcutkey.chat.changeColour.function =
|
||||
bbb.shortcutkey.chat.sendMessage =
|
||||
bbb.shortcutkey.chat.sendMessage.function =
|
||||
bbb.shortcutkey.chat.closePrivate =
|
||||
bbb.shortcutkey.chat.closePrivate.function =
|
||||
bbb.shortcutkey.chat.explanation =
|
||||
bbb.shortcutkey.chat.explanation.function =
|
||||
|
||||
bbb.shortcutkey.chat.chatbox.advance =
|
||||
bbb.shortcutkey.chat.chatbox.advance.function =
|
||||
bbb.shortcutkey.chat.chatbox.goback =
|
||||
bbb.shortcutkey.chat.chatbox.goback.function =
|
||||
bbb.shortcutkey.chat.chatbox.repeat =
|
||||
bbb.shortcutkey.chat.chatbox.repeat.function =
|
||||
bbb.shortcutkey.chat.chatbox.golatest =
|
||||
bbb.shortcutkey.chat.chatbox.golatest.function =
|
||||
bbb.shortcutkey.chat.chatbox.gofirst =
|
||||
bbb.shortcutkey.chat.chatbox.gofirst.function =
|
||||
bbb.shortcutkey.chat.chatbox.goread =
|
||||
bbb.shortcutkey.chat.chatbox.goread.function =
|
||||
bbb.shortcutkey.chat.chatbox.debug =
|
||||
bbb.shortcutkey.chat.chatbox.debug.function =
|
||||
|
||||
bbb.shortcutkey.caption.takeOwnership =
|
||||
bbb.shortcutkey.caption.takeOwnership.function =
|
||||
|
||||
bbb.polling.startButton.tooltip =
|
||||
bbb.polling.startButton.label =
|
||||
bbb.polling.publishButton.label =
|
||||
bbb.polling.closeButton.label =
|
||||
bbb.polling.customPollOption.label =
|
||||
bbb.polling.pollModal.title =
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title =
|
||||
bbb.polling.respondersLabel.novotes =
|
||||
bbb.polling.respondersLabel.text =
|
||||
bbb.polling.respondersLabel.finished =
|
||||
bbb.polling.answer.Yes =
|
||||
bbb.polling.answer.No =
|
||||
bbb.polling.answer.True =
|
||||
bbb.polling.answer.False =
|
||||
bbb.polling.answer.A =
|
||||
bbb.polling.answer.B =
|
||||
bbb.polling.answer.C =
|
||||
bbb.polling.answer.D =
|
||||
bbb.polling.answer.E =
|
||||
bbb.polling.answer.F =
|
||||
bbb.polling.answer.G =
|
||||
bbb.polling.results.accessible.header =
|
||||
bbb.polling.results.accessible.answer =
|
||||
|
||||
bbb.publishVideo.startPublishBtn.labelText =
|
||||
bbb.publishVideo.changeCameraBtn.labelText =
|
||||
|
||||
bbb.accessibility.alerts.madePresenter =
|
||||
bbb.accessibility.alerts.madeViewer =
|
||||
|
||||
bbb.shortcutkey.specialKeys.space =
|
||||
bbb.shortcutkey.specialKeys.left =
|
||||
bbb.shortcutkey.specialKeys.right =
|
||||
bbb.shortcutkey.specialKeys.up =
|
||||
bbb.shortcutkey.specialKeys.down =
|
||||
bbb.shortcutkey.specialKeys.plus =
|
||||
bbb.shortcutkey.specialKeys.minus =
|
||||
|
||||
bbb.toolbar.videodock.toolTip.closeAllVideos =
|
||||
bbb.users.settings.lockAll =
|
||||
bbb.users.settings.lockAllExcept =
|
||||
bbb.users.settings.lockSettings =
|
||||
bbb.users.settings.breakoutRooms =
|
||||
bbb.users.settings.sendBreakoutRoomsInvitations =
|
||||
bbb.users.settings.unlockAll =
|
||||
bbb.users.settings.roomIsLocked =
|
||||
bbb.users.settings.roomIsMuted =
|
||||
|
||||
bbb.lockSettings.save =
|
||||
bbb.lockSettings.save.tooltip =
|
||||
bbb.lockSettings.cancel =
|
||||
bbb.lockSettings.cancel.toolTip =
|
||||
|
||||
bbb.lockSettings.hint =
|
||||
bbb.lockSettings.moderatorLocking =
|
||||
bbb.lockSettings.privateChat =
|
||||
bbb.lockSettings.publicChat =
|
||||
bbb.lockSettings.webcam =
|
||||
bbb.lockSettings.webcamsOnlyForModerator =
|
||||
bbb.lockSettings.microphone =
|
||||
bbb.lockSettings.layout =
|
||||
bbb.lockSettings.title=
|
||||
bbb.lockSettings.feature=
|
||||
bbb.lockSettings.locked=
|
||||
bbb.lockSettings.lockOnJoin=
|
||||
|
||||
bbb.users.breakout.breakoutRooms =
|
||||
bbb.users.breakout.updateBreakoutRooms =
|
||||
bbb.users.breakout.timerForRoom.toolTip =
|
||||
bbb.users.breakout.timer.toolTip =
|
||||
bbb.users.breakout.calculatingRemainingTime =
|
||||
bbb.users.breakout.closing =
|
||||
bbb.users.breakout.closewarning.text =
|
||||
bbb.users.breakout.rooms =
|
||||
bbb.users.breakout.roomsCombo.accessibilityName =
|
||||
bbb.users.breakout.room =
|
||||
bbb.users.breakout.timeLimit =
|
||||
bbb.users.breakout.durationStepper.accessibilityName =
|
||||
bbb.users.breakout.minutes =
|
||||
bbb.users.breakout.record =
|
||||
bbb.users.breakout.recordCheckbox.accessibilityName =
|
||||
bbb.users.breakout.notAssigned =
|
||||
bbb.users.breakout.dragAndDropToolTip =
|
||||
bbb.users.breakout.start =
|
||||
bbb.users.breakout.invite =
|
||||
bbb.users.breakout.close =
|
||||
bbb.users.breakout.closeAllRooms =
|
||||
bbb.users.breakout.insufficientUsers =
|
||||
bbb.users.breakout.confirm =
|
||||
bbb.users.breakout.invited =
|
||||
bbb.users.breakout.accept =
|
||||
bbb.users.breakout.joinSession =
|
||||
bbb.users.breakout.joinSession.accessibilityName =
|
||||
bbb.users.breakout.joinSession.close.tooltip =
|
||||
bbb.users.breakout.joinSession.close.accessibilityName =
|
||||
bbb.users.breakout.youareinroom =
|
||||
bbb.users.roomsGrid.room =
|
||||
bbb.users.roomsGrid.users =
|
||||
bbb.users.roomsGrid.action =
|
||||
bbb.users.roomsGrid.transfer =
|
||||
bbb.users.roomsGrid.join =
|
||||
bbb.users.roomsGrid.noUsers =
|
||||
|
||||
bbb.langSelector.default=
|
||||
|
||||
bbb.alert.cancel =
|
||||
bbb.alert.ok =
|
||||
bbb.alert.no =
|
||||
bbb.alert.yes =
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Csatlakozás a szerverhez
|
||||
bbb.mainshell.statusProgress.loading = Töltés
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Sajnos nem sikerült csatlakozni a szerverhez.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Naplózási ablak megnyitása
|
||||
bbb.mainshell.meetingNotFound = Előadás nem található
|
||||
bbb.mainshell.invalidAuthToken = Érvénytelen hitelesítési token
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Értesítési beállítások
|
||||
bbb.clientstatus.notification = Olvasatlan értesítések
|
||||
bbb.clientstatus.close = Bezárás
|
||||
bbb.clientstatus.tunneling.title = Tűzfal
|
||||
bbb.clientstatus.tunneling.message = Jelenleg fűzfal akadályozza, hogy kliense közvetlenül az 1935-ös porton csatlakozzon a szerverhez. Javasoljuk, hogy stabilabb kapcsolat érdekében kevésbé korlátozott hálózatról csatlakozzon.
|
||||
bbb.clientstatus.tunneling.message = A tűzfal megakadályozza kliense közvetlenül kapcsolódását a távoli szerverhez. Hogy kapcsolata stabilabb legyen, csatlakozzon egy kevésbé szigorú hálózatból.
|
||||
bbb.clientstatus.browser.title = Böngészőjének verziója
|
||||
bbb.clientstatus.browser.message = Böngészője ({0}) nem naprakész. Javasoljuk, hogy frissítsen a legújabb verzióra.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Közzététel
|
||||
bbb.polling.closeButton.label = Bezárás
|
||||
bbb.polling.customPollOption.label = Egyéni szavazás...
|
||||
bbb.polling.pollModal.title = Szavazás jelenlegi állása
|
||||
bbb.polling.pollModal.hint = Hagyja nyitva ezt az ablakot, hogy a résztvevők leadhassák szavazatukat. A szavazás befejezéséhez válassza a Közzététel vagy a Bezárás gombot.
|
||||
bbb.polling.pollModal.hint = Hagyja nyitva ezt az ablakot, hogy a többiek leadhassák szavazatukat. A Közzététel vagy a Bezárás gombbal véget vet a szavazásnak.
|
||||
bbb.polling.customChoices.title = Adja meg a szavazási lehetőségeket
|
||||
bbb.polling.respondersLabel.novotes = Válaszokra várakozás
|
||||
bbb.polling.respondersLabel.text = {0} felhasználó válaszolt
|
||||
@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Moderátor zárolása
|
||||
bbb.lockSettings.privateChat = Privát üzenetek
|
||||
bbb.lockSettings.publicChat = Nyilvános üzenetek
|
||||
bbb.lockSettings.webcam = Webkamera
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Többiek webkamerájának elrejtése
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Többiek webkamerájának megtekintése
|
||||
bbb.lockSettings.microphone = Mikrofon
|
||||
bbb.lockSettings.layout = Elrendezés
|
||||
bbb.lockSettings.title=Résztvevők zárolása
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Sedang menghubungi server
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Maaf, tidak dapat terhubung ke server.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Buka Jendela Log
|
||||
bbb.mainshell.meetingNotFound = Pertemuan Tidak Ditemukan
|
||||
bbb.mainshell.invalidAuthToken = Token Otentikasi Tidak Valid
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurasi Notifikasi
|
||||
bbb.clientstatus.notification = Notifikasi Belum Dibaca
|
||||
bbb.clientstatus.close = Tutup
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Firewall menghalangi klien Anda terhubung secara langsung ke port 1935 pada server remote. Kami merekomendasikan untuk menggunakan jaringan komputer yang pengaturannya tidak terlalu ketat untuk koneksi yang lebih stabil
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Versi Peramban
|
||||
bbb.clientstatus.browser.message = Peramban Anda ({0}) tidak up-to-date. Kami merekomendasikan untuk memperbaharui ke versi terakhir.
|
||||
bbb.clientstatus.flash.title = Player Flash
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Connessione alla conferenza in corso...
|
||||
bbb.mainshell.statusProgress.loading = Caricamento in corso
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Errore di connessione.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Apri finestra di Log
|
||||
bbb.mainshell.meetingNotFound = Conferenza non trovata
|
||||
bbb.mainshell.invalidAuthToken = Codice di autenticazione non valido
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Configurazione notifiche
|
||||
bbb.clientstatus.notification = Notifiche non lette
|
||||
bbb.clientstatus.close = Chiudi
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Un firewall impedisce al vostro terminale di connettersi direttamente sulla porta 1935 del server remoto. Si consiglia di utilizzare una rete senza restrizioni, per una connessione più stabile.
|
||||
bbb.clientstatus.tunneling.message = Un firewall impedisce al client di connettersi direttamente al server remoto. Si consiglia utilizzare una rete meno restrittiva per una connessione più stabile
|
||||
bbb.clientstatus.browser.title = Versione del browser
|
||||
bbb.clientstatus.browser.message = Il tuo browser ({0}) non è aggiornato. Si raccomanda l'aggiornamento alla versione più recente.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Pubblica la valutazione
|
||||
bbb.polling.closeButton.label = Chiudi la valutazione
|
||||
bbb.polling.customPollOption.label = Impostazioni personalizzate della valutazione
|
||||
bbb.polling.pollModal.title = Risultati della valutazione in tempo reale
|
||||
bbb.polling.pollModal.hint = Lasciare questa finestra aperta per consentire ai partecipanti di rispondere al sondaggio. La selezione del pulsante Pubblica o Chiudi chiude il sondaggio.
|
||||
bbb.polling.pollModal.hint = Lascia questa finestra aperta per consentire ad altri di rispondere al sondaggio. Con il pulsante Pubblica o Chiudi si concluderà il sondaggio.
|
||||
bbb.polling.customChoices.title = Inserisci le valutazioni
|
||||
bbb.polling.respondersLabel.novotes = In attesa delle risposte
|
||||
bbb.polling.respondersLabel.text = {0} Risposte degli utenti
|
||||
@ -813,12 +813,12 @@ bbb.lockSettings.save.tooltip = Applica il blocco delle impostazioni.
|
||||
bbb.lockSettings.cancel = Cancella
|
||||
bbb.lockSettings.cancel.toolTip = Chiudi la finestra senza salvare
|
||||
|
||||
bbb.lockSettings.hint =
|
||||
bbb.lockSettings.hint = Queste opzioni ti consentono di limitare alcune funzioni disponibili ai partecipanti, ad esempio escludendo la possibilità di utilizzare la chat privata. (Queste restrizioni non si applicano ai moderatori)
|
||||
bbb.lockSettings.moderatorLocking = Moderatore bloccato
|
||||
bbb.lockSettings.privateChat = Chat privata
|
||||
bbb.lockSettings.publicChat = Chat pubblica
|
||||
bbb.lockSettings.webcam = Videocamera
|
||||
bbb.lockSettings.webcamsOnlyForModerator =
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Guarda le webcam degli altri partecipanti.
|
||||
bbb.lockSettings.microphone = Microfono
|
||||
bbb.lockSettings.layout = Layout
|
||||
bbb.lockSettings.title=Blocca le impostazioni dei partecipanti
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = サーバへの接続
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = サーバーに接続できません。
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = ログウィンドウを開く
|
||||
bbb.mainshell.meetingNotFound = 会議は見つかりません
|
||||
bbb.mainshell.invalidAuthToken = 無効な認証トークン
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = 通知設定
|
||||
bbb.clientstatus.notification = 未読の通知
|
||||
bbb.clientstatus.close = 閉じる
|
||||
bbb.clientstatus.tunneling.title = ファイヤーウォール
|
||||
bbb.clientstatus.tunneling.message = ファイヤーウォールがリモートサーバーへの貴方のポート1935への接続を除外した可能性があります。より安定したネットワークでの再接続を検討してください
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = ブラウザーバージョン
|
||||
bbb.clientstatus.browser.message = あなたのブラウザー ({0}) は旧版です。最新版へ更新してください
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = სერვერთან დაკავშირება
|
||||
bbb.mainshell.statusProgress.loading = დალოდება
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = უკაცრავად, ჩვენ ვერ ვუკავშირდებით სერვერს
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017<a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a>(build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = გახსენი Log ფანჯარა
|
||||
bbb.mainshell.meetingNotFound =
|
||||
bbb.mainshell.invalidAuthToken =
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = កំពុងភ្ជាប់ទៅម៉ាស៊ីនបម្រើ "Server"
|
||||
bbb.mainshell.statusProgress.loading = កំពុងដំណើរការ
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = សូមអភ័យទោស! យើងមិនអាចភ្ជាប់ទៅកាន់ម៉ាស៊ីនបម្រើបានទេ។
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a>(build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc. </u></a> (កំណែ {0})
|
||||
bbb.mainshell.logBtn.toolTip = បើកផ្ទាំងចូល
|
||||
bbb.mainshell.meetingNotFound = រកមិនឃើញការប្រជុំទេ
|
||||
bbb.mainshell.invalidAuthToken = Authentication Token មិនត្រឹមត្រូវ
|
||||
@ -66,7 +66,7 @@ bbb.micSettings.webrtc.waitingforice = កំពុងភ្ជាប់
|
||||
bbb.micSettings.webrtc.transferring = កំពុងបញ្ជូន
|
||||
bbb.micSettings.webrtc.endingecho = កំពុងភ្ជាប់សម្លេង
|
||||
bbb.micSettings.webrtc.endedecho = ការសាកល្បងអេកូបានបញ្ចប់។
|
||||
bbb.micPermissions.message.browserhttp =
|
||||
bbb.micPermissions.message.browserhttp = ម៉ាស៊ីនបម្រើនេះមិនត្រូវបានតំឡើងជាមួយ SSL ទេ។ ជាលទ្ធផល {0} បិទការចែករំលែកមីក្រូហ្វូនរបស់អ្នក។
|
||||
bbb.micPermissions.firefox.title = សិទ្ធិប្រើម៉ីក្រូហ្វូនក្នុង Firefox
|
||||
bbb.micPermissions.firefox.message = ចុច Allow ដើម្បីឲ្យ Firefox អាចប្រើម៉ីក្រូហ្វូនរបស់អ្នក
|
||||
bbb.micPermissions.chrome.title = សិទ្ធិប្រើម៉ីក្រូហ្វូនក្នុង Chrome
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = ដំណឹងអំពីការកំណត់
|
||||
bbb.clientstatus.notification = ដំណឹងដែលមិនទាន់បានអាន
|
||||
bbb.clientstatus.close = បិទ
|
||||
bbb.clientstatus.tunneling.title = របាំងរារាំង
|
||||
bbb.clientstatus.tunneling.message = របាំងរារាំងកំពុងទប់ស្កាត់ម៉ាស៊ីនមេមិនឲ្យភ្ជាប់ដោយផ្ទាល់តាម port 1935 ជាមួយម៉ាស៊ីនបម្រើពីចម្ងាយ។ សូមចូលរូមដោយប្រើបណ្តាញដែលមិនសូវមានកំហិតខ្លាំងដើម្បីការភ្ជាប់ថេរ។
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = ជំនាន់របស់កម្មវិធីរុករក
|
||||
bbb.clientstatus.browser.message = កម្មវិធីរុករករបស់អ្នក ({0}) មិនទាន់សម័យទេ. សូមធ្វើបច្ចុប្បន្នភាពទៅកាន់ជំនាន់ថ្មី។
|
||||
bbb.clientstatus.flash.title = កម្មវិធីបើក Flash
|
||||
@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = ឈប់បិទសម្
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute = បិទសម្លេង{0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock = ចាក់សោរ{0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = បើកសោរ{0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser = ដកចេញ {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam = កំពុងចែករំលែកវេបខេម
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff = មីក្រូហ្វូនបិទ
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = មីក្រូហ្វូនបើក
|
||||
@ -512,11 +512,11 @@ bbb.logout.unknown = ម៉ាស៊ីនភ្ញៀវរបស់អ្
|
||||
bbb.logout.guestkickedout = អ្នកសម្របសម្រួលមិនអនុញ្ញាតឲ្យអ្នកចូលរួមការប្រជុំនេះទេ
|
||||
bbb.logout.usercommand = អ្នកបានចេញពីសន្និសិទ
|
||||
bbb.logour.breakoutRoomClose = ផ្ទាំងនៃកម្មវិធីរុករករបស់អ្នកនឹងត្រូវបិទ
|
||||
bbb.logout.ejectedFromMeeting =
|
||||
bbb.logout.ejectedFromMeeting = អ្នកត្រូវបានដកចេញពីការប្រជុំ។
|
||||
bbb.logout.refresh.message = ប្រសិនបើអ្នកមិនបានរំពឹងការចាកចេញនេះទេ សូមចុចប៊ូតុងខាងក្រោមដើម្បីភ្ជាប់ម្តងទៀត។
|
||||
bbb.logout.refresh.label = ភ្ជាប់ម្តងទៀត
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.label =
|
||||
bbb.logout.feedback.hint = តើយើងអាចធ្វើឱ្យ BigBlueButton ប្រសើរជាងមុនយ៉ាងដូចម្តេច?
|
||||
bbb.logout.feedback.label = យើងចង់ដឹងពីបទពិសោធន៍របស់អ្នកជាមួយនឹង BigBlueButton (ស្រេចចិត្ត)
|
||||
bbb.settings.title = ការកំណត់
|
||||
bbb.settings.ok = ព្រម
|
||||
bbb.settings.cancel = បោះបង់
|
||||
@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = ដាក់ស្លាយឲ្យ
|
||||
bbb.shortcutkey.users.makePresenter = 89
|
||||
bbb.shortcutkey.users.makePresenter.function = ឲ្យអ្នកដែលបានជ្រើសធ្វើជាអ្នកធ្វើបទបង្ហាញ
|
||||
bbb.shortcutkey.users.kick = 69
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.kick.function = ដកអ្នកដែលត្រូវបានជ្រើសចេញពីការប្រជុំ
|
||||
bbb.shortcutkey.users.mute = 83
|
||||
bbb.shortcutkey.users.mute.function = បិទសម្លេង ឬមិនបិទសម្លេងអ្នកប្រើដែលបានជ្រើស
|
||||
bbb.shortcutkey.users.muteall = 65
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = ដាក់ប្រកាស
|
||||
bbb.polling.closeButton.label = បិទ
|
||||
bbb.polling.customPollOption.label = ការស្ទង់មតិតាមចិត្ត...
|
||||
bbb.polling.pollModal.title = លទ្ធផលស្ទង់មតិផ្ទាល់
|
||||
bbb.polling.pollModal.hint = ទុកឱ្យផ្ទាំងនេះបើកដូច្នេះ ដើម្បីឱ្យសិស្សឆ្លើយតបទៅនឹងការស្ទង់មតិ។ ចុចលើប៊ូតុង ដាក់ប្រកាស ឬ បិទ ដើម្បីបញ្ចប់ការបោះឆ្នោត។
|
||||
bbb.polling.pollModal.hint = ទុកផ្ទាំងនេះឲ្យនៅបើកដើម្បីឲ្យអ្នកដទៃឆ្លើយការស្ទង់មតិ។ ជ្រើសប៊ូតុង "ដាក់ប្រកាស" ឬ "បិទ" នឹងបញ្ចប់ការស្ទង់មតិ។
|
||||
bbb.polling.customChoices.title = បញ្ចូលជម្រើសសម្រាប់ស្ទង់មតិ
|
||||
bbb.polling.respondersLabel.novotes = រង់ចាំចម្លើយ
|
||||
bbb.polling.respondersLabel.text = {0} នាក់បានឆ្លើយ
|
||||
@ -813,12 +813,12 @@ bbb.lockSettings.save.tooltip = អនុវត្តការកំណត
|
||||
bbb.lockSettings.cancel = បោះបង់
|
||||
bbb.lockSettings.cancel.toolTip = បិទផ្ទាំងនេះដោយមិនរក្សាទុក
|
||||
|
||||
bbb.lockSettings.hint =
|
||||
bbb.lockSettings.hint = ជម្រើសទាំងនេះអនុញ្ញាតឱ្យអ្នកដាក់កម្រិតលើមុខងារមួយចំនួនដែលអ្នកមើលអាចប្រើបានដូចជាការដកលទ្ធភាពរបស់ពួកគេក្នុងការប្រើការជជែកឯកជន។ (ការដាក់កម្រិតទាំងនេះមិនអនុវត្តចំពោះអ្នកសម្របសម្រួលទេ)
|
||||
bbb.lockSettings.moderatorLocking = ការចាក់សោអ្នកសម្របសម្រួល
|
||||
bbb.lockSettings.privateChat = ជជែកឯកជន
|
||||
bbb.lockSettings.publicChat = ជជែកសាធារណៈ
|
||||
bbb.lockSettings.webcam = វេបខេម
|
||||
bbb.lockSettings.webcamsOnlyForModerator =
|
||||
bbb.lockSettings.webcamsOnlyForModerator = មើលវេបខែមរបស់អ្នកមើលដទៃទៀត
|
||||
bbb.lockSettings.microphone = មីក្រូហ្វូន
|
||||
bbb.lockSettings.layout = ប្លង់
|
||||
bbb.lockSettings.title=ចាក់សោអ្នកមើល
|
||||
@ -832,7 +832,7 @@ bbb.users.breakout.timerForRoom.toolTip = ពេលវេលានៅសល
|
||||
bbb.users.breakout.timer.toolTip = ពេលវេលានៅសល់សម្រាប់បន្ទប់បំបែក
|
||||
bbb.users.breakout.calculatingRemainingTime = កំពុងគណនាពេលវេលានៅសល់...
|
||||
bbb.users.breakout.closing = កំពុងបិទ
|
||||
bbb.users.breakout.closewarning.text =
|
||||
bbb.users.breakout.closewarning.text = បន្ទប់បំបែកនឹងត្រូវបានបិទក្នុងពេលបន្តិចទៀត។
|
||||
bbb.users.breakout.rooms = បន្ទប់
|
||||
bbb.users.breakout.roomsCombo.accessibilityName = ចំនួនបន្ទប់ត្រូវបង្កើត
|
||||
bbb.users.breakout.room = បន្ទប់
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Pievienojas serverim
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Atvainojiet, pieslēgties serverim neizdevās.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Atvērt logus
|
||||
bbb.mainshell.meetingNotFound = Tikšanās netika atrasta
|
||||
bbb.mainshell.invalidAuthToken = Nepareiza autorizācijas atslēga
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfigurācijas notifikācijas
|
||||
bbb.clientstatus.notification = Nelasītās notifikācijas
|
||||
bbb.clientstatus.close = Aizvērt
|
||||
bbb.clientstatus.tunneling.title = Ugunsmūris
|
||||
bbb.clientstatus.tunneling.message = Ugunsmūris neļauj jūsu klientam pievienoties izmantojot tiešo portu 1935. Iesakām nomainīt tīkla pieslēgumu, lai iegūtu stabilāku savienojumu.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Pārlūka versija
|
||||
bbb.clientstatus.browser.message = Tavs pārlūks ({0}) nav atjaunots. Iesakām atjaunot uz jaunāko versiju.
|
||||
bbb.clientstatus.flash.title = Flash atskaņotājs
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Конфигурациско известување
|
||||
bbb.clientstatus.notification = Непрочитани известувања
|
||||
bbb.clientstatus.close =
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Firewall спречува вашиот клиент директно да се поврзи на порта 1935 до далечинскиот сервер. Препорачано е приклучување на помала рестриктивна мрежа за постабилна конекција.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Верзија на пребарувач
|
||||
bbb.clientstatus.browser.message = Вашиот пребарувач ({0}) не е актуелен. Препорачано е ажурирање до најновата верзија.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Мэдэгдлүүдийн тохиргоо
|
||||
bbb.clientstatus.notification = Уншаагүй мэдэгдэл
|
||||
bbb.clientstatus.close =
|
||||
bbb.clientstatus.tunneling.title = Галт хана
|
||||
bbb.clientstatus.tunneling.message = Галт хана сервер лүү холбогдох 1935 портыг хааж байна. Галт ханы тохиргоог янзлах эсвэл өөр сүлжээнээс холбогдож үзэхийг санал болгож байна
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Вэб хөтөчийн хувилбар
|
||||
bbb.clientstatus.browser.message = Таны вэб хөтөч ({0}) шинэчлэгдээгүй байна. Сүүлийн хувилбарыг татахыг санал болгож байна.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Penyambungan kepada server
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Maaf, server tidak dapat disambungkan.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Buka Log Window
|
||||
bbb.mainshell.meetingNotFound = perkumpulan tidak ditemui
|
||||
bbb.mainshell.invalidAuthToken = Pengesahan Token Tidak sah
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuratie berichten
|
||||
bbb.clientstatus.notification = Ongelezen berichten
|
||||
bbb.clientstatus.close =
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Een firewall zorgt ervoor dat je client geen verbinding kan maken met de externe server op poort 1935. We adviseren een minder afgescherm netwerk voor een stabielere verbinding
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Internet browser versie
|
||||
bbb.clientstatus.browser.message = Je Internet browser ({0}) is niet up to date. We adviseren om hiervan de laatste versie te gebruiken.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Connexion al servidor
|
||||
bbb.mainshell.statusProgress.loading =
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = O planhèm, impossible d'establir una connexion al servidor.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (version {0})
|
||||
bbb.mainshell.copyrightLabel2 =
|
||||
bbb.mainshell.logBtn.toolTip = Dobrir la fenèstra de log
|
||||
bbb.mainshell.meetingNotFound = Conferéncia pas trobada
|
||||
bbb.mainshell.invalidAuthToken = Geton d'autentificacion invalid
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuracion de las notificacions
|
||||
bbb.clientstatus.notification = Notificacions pas legidas
|
||||
bbb.clientstatus.close = Tampar
|
||||
bbb.clientstatus.tunneling.title = Parafuòc
|
||||
bbb.clientstatus.tunneling.message = Un parafuòc empacha vòstre client de se connectar dirèctament al pòrt 1935 del servidor distant. Es recomandat de se connectar a una ret mens restrictiva per obténer una connexion mai establa.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Version del navigador
|
||||
bbb.clientstatus.browser.message = Vòstre navigador ({0}) es pas a jorn. Es recomandat d'installar la darrièra version.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Konfiguracja powiadomień
|
||||
bbb.clientstatus.notification = Powiadomienie o nieprzeczytaniu
|
||||
bbb.clientstatus.close = Zamknij
|
||||
bbb.clientstatus.tunneling.title = Zapora ogniowa
|
||||
bbb.clientstatus.tunneling.message = Firewall uniemożliwia połączenie klienta bezpośrednio do portu 1935 na serwerze. Zalecane jest użycie mniej restrykcyjnej sieci w celu uzyskania stabilniejszego połączenia
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Wersja przeglądarki
|
||||
bbb.clientstatus.browser.message = Twoja przeglądarka ({0}) jest nieaktualna. Zalecana jest aktualizacja do najnowszej wersji.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Conectando ao servidor
|
||||
bbb.mainshell.statusProgress.loading = Carregando
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Desculpe, não foi possível conectar ao servidor.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Abrir janela de log
|
||||
bbb.mainshell.meetingNotFound = Sala não encontrada
|
||||
bbb.mainshell.invalidAuthToken = Token de autenticação inválido
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Configuração de Notificações
|
||||
bbb.clientstatus.notification = Notificações não lidas
|
||||
bbb.clientstatus.close = Fechar
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Um firewall está impedindo que seu cliente se conecte diretamente na porta 1935 do servidor. Recomenda-se que seja utilizada uma rede menos restritiva para uma conexão mais estável
|
||||
bbb.clientstatus.tunneling.message = Um firewall está impedindo o seu cliente de se conectar diretamente ao servidor. Recomenda-se que seja utilizada uma rede menos restritiva para tornar a conexão mais estável.
|
||||
bbb.clientstatus.browser.title = Versão do navegador
|
||||
bbb.clientstatus.browser.message = Seu navegador ({0}) está desatualizado. Recomenda-se a atualização para a versão mais recente.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Publicar
|
||||
bbb.polling.closeButton.label = Cancelar
|
||||
bbb.polling.customPollOption.label = Enquete personalizada...
|
||||
bbb.polling.pollModal.title = Resultados da enquete em tempo real
|
||||
bbb.polling.pollModal.hint = Deixe esta janela aberta para permitir que os alunos respondam à enquete. Clicar no botão Publicar ou Fechar finalizará a enquete.
|
||||
bbb.polling.pollModal.hint = Deixe esta janela aberta para aguardar as respostas dos participantes. Depois de clicar em Publicar ou Fechar, a pesquisa termina.
|
||||
bbb.polling.customChoices.title = Entre com as opções da enquete
|
||||
bbb.polling.respondersLabel.novotes = Aguardando respostas
|
||||
bbb.polling.respondersLabel.text = {0} usuários responderam
|
||||
@ -813,12 +813,12 @@ bbb.lockSettings.save.tooltip = Aplicar configurações de restrição
|
||||
bbb.lockSettings.cancel = Cancelar
|
||||
bbb.lockSettings.cancel.toolTip = Fecha esta janela sem aplicar
|
||||
|
||||
bbb.lockSettings.hint =
|
||||
bbb.lockSettings.hint = Essas opções permitem restringir certas funções para os espectadores, por exemplo, o uso do bate-papo privado. (Estas restrições não se aplicam aos moderadores)
|
||||
bbb.lockSettings.moderatorLocking = Bloqueio de moderador
|
||||
bbb.lockSettings.privateChat = Chat privado
|
||||
bbb.lockSettings.publicChat = Chat público
|
||||
bbb.lockSettings.webcam = Câmera
|
||||
bbb.lockSettings.webcamsOnlyForModerator =
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Veja as webcams de outros participantes
|
||||
bbb.lockSettings.microphone = Microfone
|
||||
bbb.lockSettings.layout = Layout
|
||||
bbb.lockSettings.title=Restringir participantes
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Configurare notificări
|
||||
bbb.clientstatus.notification = Notificări necitite
|
||||
bbb.clientstatus.close = Închide
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Un firewall nu permite conexiunea direct pe portul 1935
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Versiunea browser-ului
|
||||
bbb.clientstatus.browser.message = Versiunea browser-ului ({0}) nu este actualizată. Se recomandă folosirea ultimei versiuni.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Подключение к серверу...
|
||||
bbb.mainshell.statusProgress.loading = Загрузка
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = К сожалению, мы не можем подключиться к серверу.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Открыть окно журнала
|
||||
bbb.mainshell.meetingNotFound = Конференция не найдена
|
||||
bbb.mainshell.invalidAuthToken = Неверный ключ аутентификации
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Уведомления о конфигурации
|
||||
bbb.clientstatus.notification = Непрочитанные уведомления
|
||||
bbb.clientstatus.close = Закрыть
|
||||
bbb.clientstatus.tunneling.title = Файервол
|
||||
bbb.clientstatus.tunneling.message = Файервол (брандмауэр) с Вашей стороны препятствует попыткам клиента присоединиться напрямую к порту 1935 удалённого сервера. Рекомендуем присоединиться к менее ограниченной сети для большей стабильности соединения
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Версия браузера
|
||||
bbb.clientstatus.browser.message = Ваш браузер ({0}) устарел. Рекомендуем обновить его до наиболее свежей стабильной версии.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Включить микроф
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute = Выключить микрофон {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock = Заблокировать {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Разблокировать {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser = Исключить {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam = Веб-камера включена
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff = Микрофон выключен
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = Микрофон включен
|
||||
@ -512,11 +512,11 @@ bbb.logout.unknown = Ваш клиент потерял соединение с
|
||||
bbb.logout.guestkickedout = Модератор не разрешил Вам подключение к этой конференции
|
||||
bbb.logout.usercommand = Вы вышли из конференции
|
||||
bbb.logour.breakoutRoomClose = Ваше окно браузера будет закрыто
|
||||
bbb.logout.ejectedFromMeeting =
|
||||
bbb.logout.ejectedFromMeeting = Вы были исключены из конференции.
|
||||
bbb.logout.refresh.message = Если этот выход был неожиданным нажмите на кнопку ниже, чтобы восстановить подключение.
|
||||
bbb.logout.refresh.label = Повторное подключение
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.label =
|
||||
bbb.logout.feedback.hint = Как мы можем сделать BigBlueButton лучше?
|
||||
bbb.logout.feedback.label = Мы с удовольствием узнаем о вашем опыте работы с BigBlueButton (необязательно)
|
||||
bbb.settings.title = Настройки
|
||||
bbb.settings.ok = OK
|
||||
bbb.settings.cancel = Отменить
|
||||
@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Подогнать слайды по
|
||||
bbb.shortcutkey.users.makePresenter = 89
|
||||
bbb.shortcutkey.users.makePresenter.function = Сделать выбранного пользователя ведущим
|
||||
bbb.shortcutkey.users.kick = 69
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.kick.function = Исключить выбранного пользователя из конференции
|
||||
bbb.shortcutkey.users.mute = 83
|
||||
bbb.shortcutkey.users.mute.function = Выкл./Вкл. мик. у выбранного участника
|
||||
bbb.shortcutkey.users.muteall = 65
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Опубликовать
|
||||
bbb.polling.closeButton.label = Закрыть
|
||||
bbb.polling.customPollOption.label = Собственное голосование
|
||||
bbb.polling.pollModal.title = Текущие результаты опроса
|
||||
bbb.polling.pollModal.hint = Оставьте это окно открытым, чтобы дать возможность участникам ответить на опрос. Нажатие на кнопку "Опубликовать" или "Закрыть" завершит опрос.
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Ввести варианты для опроса
|
||||
bbb.polling.respondersLabel.novotes = Ожидание ответа
|
||||
bbb.polling.respondersLabel.text = {0} Пользователей откликнулись
|
||||
@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Заблокировано модерато
|
||||
bbb.lockSettings.privateChat = Приватные сообщения
|
||||
bbb.lockSettings.publicChat = Публичный чат
|
||||
bbb.lockSettings.webcam = Веб-камера
|
||||
bbb.lockSettings.webcamsOnlyForModerator =
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Смотрите веб-камеры других участников
|
||||
bbb.lockSettings.microphone = Микрофон
|
||||
bbb.lockSettings.layout = Схема расположения окон
|
||||
bbb.lockSettings.title=Блокировать зрителей
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Njoftimet per konfigurimet
|
||||
bbb.clientstatus.notification = Njoftimet e palexuara
|
||||
bbb.clientstatus.close =
|
||||
bbb.clientstatus.tunneling.title =
|
||||
bbb.clientstatus.tunneling.message = Firewall pengon klientin tuaj qe te lidhet direkt ne porten 1935 te serverit remote. Rekomandohet qe te lidhet ne nje rrjet me pak strikt per nje lidhje me stabel.
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Versioni i browserit
|
||||
bbb.clientstatus.browser.message =
|
||||
bbb.clientstatus.flash.title =
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Obaveštenja o konfiguraciji
|
||||
bbb.clientstatus.notification = Nepročitana obaveštenja
|
||||
bbb.clientstatus.close = Zatvori
|
||||
bbb.clientstatus.tunneling.title = Firewall
|
||||
bbb.clientstatus.tunneling.message = Firewall sprečava da se korisnik direktno poveže sa 1935 sa udaljenim serverom. Preporučuje se priključivanje manje restriktivnoj mreži zbog stabilnije konekcije
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Verzija pretraživača
|
||||
bbb.clientstatus.browser.message = Vaš pretraživač ({0}) nije ažuriran. Preporučuje se ažuriranje na najnoviju verziju.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Sunucuya bağlanıyor
|
||||
bbb.mainshell.statusProgress.loading = Yükleniyor
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = Üzgünüz, sunucuya bağlanamıyoruz.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (sürüm {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (sürüm{0})
|
||||
bbb.mainshell.logBtn.toolTip = Sistem Kayıtlarını Aç
|
||||
bbb.mainshell.meetingNotFound = Görüşme Bulunamadı
|
||||
bbb.mainshell.invalidAuthToken = Kimlik Doğrulama Dizesi Hatalı
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Uyarı Ayarları
|
||||
bbb.clientstatus.notification = Okunmamış uyarılar
|
||||
bbb.clientstatus.close = Kapat
|
||||
bbb.clientstatus.tunneling.title = Güvenlik Duvarı
|
||||
bbb.clientstatus.tunneling.message = Güvenlik duvarı bilgisayarınızın doğrudan 1935 portu üzerinden sunucuya bağlanmasını engellemektedir.
|
||||
bbb.clientstatus.tunneling.message = Güvenlik duvarı bilgisayarınızın doğrudan sunucuya bağlanmasını engellemektedir. Sağlıklı bir bağlantı için kısıtlaması daha az olan farklı bir ağdan bağlanmanızı öneririz.
|
||||
bbb.clientstatus.browser.title = Tarayıcı Sürümü
|
||||
bbb.clientstatus.browser.message = Tarayıcınız ({0}) güncel değil. Son sürüme güncellemeniz önerilmektedir.
|
||||
bbb.clientstatus.flash.title = Flash Oynatıcı
|
||||
@ -421,10 +421,10 @@ bbb.screensharePublish.restartFailed.label = .ekran paylaşımının tekrar baş
|
||||
bbb.screensharePublish.jwsCrashed.label = Ekran paylaşım uygulaması beklenmedik bir şekilde kapandı.
|
||||
bbb.screensharePublish.commonErrorMessage.label = "İptal"i seçin ve tekrar deneyin.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.one = Ekran Paylaşımı çalıştırılamıyor.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.two = Kullanıcıyı yenilemeyi deneyin (tarayıcıdaki yenile butonuna tıklayın). Eğer yeniledikten sonra kullancıının sağ alt köşesinde hala '[Bağlantı Köprüleniyor]' ifadesini görüyorsanız, başka bir ağdan bağlanmayı deneyin.
|
||||
bbb.screensharePublish.tunnelingErrorMessage.two = Tarayıcınızı yenilemeyi (yenile butonuna tıklamayı) deneyin . Eğer yeniledikten sonra sağ alt köşede hala '[ Tunneling ]' ifadesini görüyorsanız, başka bir ağdan bağlanmayı deneyin.
|
||||
bbb.screensharePublish.cancelButton.label = Vazgeç
|
||||
bbb.screensharePublish.startButton.label = Başlat
|
||||
bbb.screensharePublish.stopButton.label = Durdur
|
||||
bbb.screensharePublish.stopButton.label = Kapat
|
||||
bbb.screensharePublish.stopButton.toolTip = Ekran paylaşımını durdur
|
||||
bbb.screensharePublish.WebRTCChromeExtensionMissing.label = Chrome'un son versiyonunu kullanıyorsunuz fakat ekran paylaşımı eklentisi yüklü değil.
|
||||
bbb.screensharePublish.WebRTCRetryExtensionInstallation.label = ekran paylaşım eklentisini yükledikten sonra, "Yeniden Dene" butonuna tıklayınız.
|
||||
@ -585,10 +585,10 @@ bbb.settings.warning.close = Bu Uyarıyı kapat
|
||||
bbb.settings.noissues = Çözümlenmemiş soruna rastlanmadı.
|
||||
bbb.settings.instructions = Flash'ın kamera kullanım izni isteğini onaylayın. Eğer kendinizi görebiliyor ve duyabiliyorsanız tarayıcınız düzgün bir şekilde ayarlanmıştır. Diğer potansiyel sorunlar aşağıda sıralanmıştır. Olası çözümleri bulabilmek için her birine tıklayın.
|
||||
bbb.bwmonitor.title = Ağ izleme
|
||||
bbb.bwmonitor.upload = Yükle
|
||||
bbb.bwmonitor.upload.short = Yukarı
|
||||
bbb.bwmonitor.download = İndir
|
||||
bbb.bwmonitor.download.short = Aşağı
|
||||
bbb.bwmonitor.upload = Yükleme
|
||||
bbb.bwmonitor.upload.short = Yükleme
|
||||
bbb.bwmonitor.download = İndirme
|
||||
bbb.bwmonitor.download.short = İndirme
|
||||
bbb.bwmonitor.total = Toplam
|
||||
bbb.bwmonitor.current = Mevcut
|
||||
bbb.bwmonitor.available = Müsait
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Yayımla
|
||||
bbb.polling.closeButton.label = Kapat
|
||||
bbb.polling.customPollOption.label = Özel Oylama
|
||||
bbb.polling.pollModal.title = Canlı Oylama Sonuçları
|
||||
bbb.polling.pollModal.hint = Öğrencilerin oylamaya katılabilmeleri için bu pencereyi açık bırakın. Yayınla ya da Kapat tıklarsanız oylama sonlanacaktır.
|
||||
bbb.polling.pollModal.hint = Diğer kullanıcıların oylama yapabilmeleri için bu pencereyi açık bırakıp. Yayınla ya da Kapat tuşlamanız halinde oylama son bulacaktır.
|
||||
bbb.polling.customChoices.title = Oylama Seçeneklerini Girin
|
||||
bbb.polling.respondersLabel.novotes = Cevaplar bekleniyor
|
||||
bbb.polling.respondersLabel.text = {0} Kullanıcı Cevapladı
|
||||
@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Moderatör kilidi
|
||||
bbb.lockSettings.privateChat = Özel Sohbet
|
||||
bbb.lockSettings.publicChat = Genel Sohbet
|
||||
bbb.lockSettings.webcam = Kamera
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Diğer izleyicilerin kameralarını gizle
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Diğer izleyicilerin kameralarını gör
|
||||
bbb.lockSettings.microphone = Mikrofon
|
||||
bbb.lockSettings.layout = Görünüm
|
||||
bbb.lockSettings.title=Izleyicileri Kilitle
|
||||
|
@ -2,7 +2,7 @@ bbb.mainshell.locale.version = 0.9.0
|
||||
bbb.mainshell.statusProgress.connecting = Під'єднуюсь до сервера
|
||||
bbb.mainshell.statusProgress.loading = Завантаження
|
||||
bbb.mainshell.statusProgress.cannotConnectServer = На жаль, ми не можемо з'єднатися з сервером.
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2017 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.copyrightLabel2 = (c) 2018 <a href='event:http://www.bigbluebutton.org/' target='_blank'><u>BigBlueButton Inc.</u></a> (build {0})
|
||||
bbb.mainshell.logBtn.toolTip = Відкрити вікно журналу
|
||||
bbb.mainshell.meetingNotFound = Конференція не знайдена
|
||||
bbb.mainshell.invalidAuthToken = Невірний ключ аутентифікації
|
||||
@ -140,7 +140,7 @@ bbb.clientstatus.title = Повідомлення про конфігураці
|
||||
bbb.clientstatus.notification = Непрочитані повідомлення
|
||||
bbb.clientstatus.close = Закрити
|
||||
bbb.clientstatus.tunneling.title = Файрвол
|
||||
bbb.clientstatus.tunneling.message = Файервол (брандмауер) з Вашого боку перешкоджає спробам клієнта приєднатися безпосередньо до порту 1935 віддаленого сервера. Рекомендуємо приєднатися до менш обмеженої мережі для більшої стабільності з'єднання
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Версія браузера
|
||||
bbb.clientstatus.browser.message = Ваш браузер ({0}) застарів. Рекомендуємо оновити його до найбільш свіжої стабільної версії.
|
||||
bbb.clientstatus.flash.title = Flash Player
|
||||
@ -215,7 +215,7 @@ bbb.users.usersGrid.mediaItemRenderer.pushToTalk = Увімкнути мікро
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToMute = Вимкнути мікрофон {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToLock = Заблокувати {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.pushToUnlock = Розблокувати {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser =
|
||||
bbb.users.usersGrid.mediaItemRenderer.kickUser = Виключити {0}
|
||||
bbb.users.usersGrid.mediaItemRenderer.webcam = Веб-камера увімкнена
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOff = Вимкнути мікрофон
|
||||
bbb.users.usersGrid.mediaItemRenderer.micOn = Увімкнути мікрофон
|
||||
@ -512,11 +512,11 @@ bbb.logout.unknown = Ваш клієнт втратив зв'язок з сер
|
||||
bbb.logout.guestkickedout = Модератор не дозволив вам приєднатись до зустрічі
|
||||
bbb.logout.usercommand = Ви вийшли із конференції
|
||||
bbb.logour.breakoutRoomClose = Вікно вашого браузеру буде закрите
|
||||
bbb.logout.ejectedFromMeeting =
|
||||
bbb.logout.ejectedFromMeeting = Ви були виключені з конференції.
|
||||
bbb.logout.refresh.message = Якщо цей вихід був несподіваним натисніть на кнопку нижче, щоб відновити підключення.
|
||||
bbb.logout.refresh.label = Повторне підключення
|
||||
bbb.logout.feedback.hint =
|
||||
bbb.logout.feedback.label =
|
||||
bbb.logout.feedback.hint = Як ми можемо зробити BigBlueButton краще?
|
||||
bbb.logout.feedback.label = Ми хотіли б почути про ваш досвід роботи з BigBlueButton (необов'язково)
|
||||
bbb.settings.title = Налаштування
|
||||
bbb.settings.ok = ОК
|
||||
bbb.settings.cancel = Відмінити
|
||||
@ -712,7 +712,7 @@ bbb.shortcutkey.present.fitPage.function = Підігнати слайди по
|
||||
bbb.shortcutkey.users.makePresenter = 89
|
||||
bbb.shortcutkey.users.makePresenter.function = Зробити вибраного учасника ведучим
|
||||
bbb.shortcutkey.users.kick = 69
|
||||
bbb.shortcutkey.users.kick.function =
|
||||
bbb.shortcutkey.users.kick.function = Виключити вибраного учасника з конференції
|
||||
bbb.shortcutkey.users.mute = 83
|
||||
bbb.shortcutkey.users.mute.function = Вимк./Увімк. мік. у вибраного учасника
|
||||
bbb.shortcutkey.users.muteall = 65
|
||||
@ -765,7 +765,7 @@ bbb.polling.publishButton.label = Публікувати
|
||||
bbb.polling.closeButton.label = Закрити
|
||||
bbb.polling.customPollOption.label = Власне опитування
|
||||
bbb.polling.pollModal.title = Поточні результати голосування
|
||||
bbb.polling.pollModal.hint = Залиште це вікно відкритим, щоб студенти могли відповісти на опитування. Вибравши кнопку "Опублікувати" або "Закрити", опитування буде завершене.
|
||||
bbb.polling.pollModal.hint =
|
||||
bbb.polling.customChoices.title = Ввести варіанти вибору
|
||||
bbb.polling.respondersLabel.novotes = Очікування відповіді
|
||||
bbb.polling.respondersLabel.text = {0} Користувачів відповіли
|
||||
@ -818,7 +818,7 @@ bbb.lockSettings.moderatorLocking = Заблоковано модераторо
|
||||
bbb.lockSettings.privateChat = Приватний чат
|
||||
bbb.lockSettings.publicChat = Публічний чат
|
||||
bbb.lockSettings.webcam = Веб-камера
|
||||
bbb.lockSettings.webcamsOnlyForModerator =
|
||||
bbb.lockSettings.webcamsOnlyForModerator = Переглядайте веб-камери інших учасників
|
||||
bbb.lockSettings.microphone = Мікрофон
|
||||
bbb.lockSettings.layout = Схема розташування вікон
|
||||
bbb.lockSettings.title=Блокувати глядачів
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = Các thông báo cấu hình
|
||||
bbb.clientstatus.notification = Các thông báo chưa đọc
|
||||
bbb.clientstatus.close = Đóng
|
||||
bbb.clientstatus.tunneling.title = Tường lửa
|
||||
bbb.clientstatus.tunneling.message = Tường lửa ngăn không cho người dùng kết nối trực tiếp vào cổng 1935 đến server. Khuyến cáo mở cổng sử dụng trên mạng để kết nối ổn định hơn
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = Phiên bản trình duyệt
|
||||
bbb.clientstatus.browser.message = Trình duyệt ({0}) của bạn không phải là mới nhất. Khuyến nghị nên cập nhật phiên bản mới nhất.
|
||||
bbb.clientstatus.flash.title = Máy trình chiếu Flash
|
||||
|
@ -140,7 +140,7 @@ bbb.clientstatus.title = 組態通知
|
||||
bbb.clientstatus.notification = 未讀取通知
|
||||
bbb.clientstatus.close = 關閉
|
||||
bbb.clientstatus.tunneling.title = 防火牆
|
||||
bbb.clientstatus.tunneling.message = A firewall is preventing your client from connecting directly on port 1935 to the remote server. Recommend joining a less restrictive network for a more stable connection
|
||||
bbb.clientstatus.tunneling.message =
|
||||
bbb.clientstatus.browser.title = 瀏覽器版本
|
||||
bbb.clientstatus.browser.message = 你的瀏覽器 ({0}) 未更新,建議更新到最新版本。
|
||||
bbb.clientstatus.flash.title = Flash 撥放器
|
||||
|
@ -5,6 +5,7 @@
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||
<style type="text/css" media="screen">
|
||||
html, body, #content { height:100%; width: 100%; }
|
||||
.hiddenContent { display: none; }
|
||||
body { margin:0; padding:0; overflow:hidden; }
|
||||
#altContent { /* style alt content */ }
|
||||
.visually-hidden {
|
||||
@ -175,12 +176,18 @@
|
||||
|
||||
if ((iOS || android) && !puffin) {
|
||||
redirectToHtml5();
|
||||
} else {
|
||||
showContent();
|
||||
}
|
||||
|
||||
if (document.getElementById('html5Section')) {
|
||||
document.getElementById('html5Section').style.display = 'inherit';
|
||||
}
|
||||
} else {
|
||||
showContent();
|
||||
}
|
||||
}).fail(function(data) {
|
||||
showContent();
|
||||
});
|
||||
|
||||
if (fillContent) fillContent();
|
||||
@ -189,6 +196,10 @@
|
||||
function redirectToHtml5 () {
|
||||
document.location.pathname = '/html5client/join';
|
||||
}
|
||||
|
||||
function showContent () {
|
||||
$('#content').removeClass('hiddenContent');
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
@ -201,7 +212,7 @@
|
||||
</div>
|
||||
<div id="accessibile-progress" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" class="visually-hidden">0 %</div>
|
||||
<button id="enterFlash" type="button" class="visually-hidden" onclick="startFlashFocus();">Set focus to client</button>
|
||||
<div id="content">
|
||||
<div id="content" class="hiddenContent">
|
||||
<div id="altFlash" style="width:50%; margin-left: auto; margin-right: auto; font-family: sans-serif; text-align: center;">
|
||||
<p style="font-weight: bold;">You need Adobe Flash installed and enabled in order to use this client.</p>
|
||||
<br/>
|
||||
|
@ -1,31 +1,31 @@
|
||||
var isFirefox = typeof window.InstallTrigger !== 'undefined';
|
||||
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
||||
var isChrome = !!window.chrome && !isOpera;
|
||||
var isSafari = navigator.userAgent.indexOf("Safari") >= 0 && !isChrome;
|
||||
var kurentoHandler = null;
|
||||
const isFirefox = typeof window.InstallTrigger !== 'undefined';
|
||||
const isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
||||
const isChrome = !!window.chrome && !isOpera;
|
||||
const isSafari = navigator.userAgent.indexOf('Safari') >= 0 && !isChrome;
|
||||
const kurentoHandler = null;
|
||||
|
||||
Kurento = function (
|
||||
tag,
|
||||
voiceBridge,
|
||||
conferenceUsername,
|
||||
internalMeetingId,
|
||||
onFail = null,
|
||||
chromeExtension = null
|
||||
) {
|
||||
|
||||
tag,
|
||||
voiceBridge,
|
||||
conferenceUsername,
|
||||
internalMeetingId,
|
||||
onFail = null,
|
||||
chromeExtension = null,
|
||||
) {
|
||||
this.ws = null;
|
||||
this.video;
|
||||
this.screen;
|
||||
this.webRtcPeer;
|
||||
this.extensionInstalled = false;
|
||||
this.screenConstraints = {};
|
||||
this.video = null;
|
||||
this.screen = null;
|
||||
this.webRtcPeer = null;
|
||||
this.mediaCallback = null;
|
||||
|
||||
this.voiceBridge = voiceBridge + '-SCREENSHARE';
|
||||
this.voiceBridge = `${voiceBridge}-SCREENSHARE`;
|
||||
this.internalMeetingId = internalMeetingId;
|
||||
|
||||
this.vid_width = window.screen.width;
|
||||
this.vid_height = window.screen.height;
|
||||
// Limiting max resolution to 1080p
|
||||
// In FireFox we force full screen share and in the case
|
||||
// of multiple screens the total area shared becomes too large
|
||||
this.vid_max_width = 1920;
|
||||
this.vid_max_height = 1080;
|
||||
|
||||
// TODO properly generate a uuid
|
||||
this.sessid = Math.random().toString();
|
||||
@ -35,9 +35,9 @@ Kurento = function (
|
||||
this.caller_id_name = conferenceUsername;
|
||||
this.caller_id_number = conferenceUsername;
|
||||
|
||||
this.kurentoPort = "bbb-webrtc-sfu";
|
||||
this.kurentoPort = 'bbb-webrtc-sfu';
|
||||
this.hostName = window.location.hostname;
|
||||
this.socketUrl = 'wss://' + this.hostName + '/' + this.kurentoPort;
|
||||
this.socketUrl = `wss://${this.hostName}/${this.kurentoPort}`;
|
||||
|
||||
this.iceServers = null;
|
||||
|
||||
@ -49,23 +49,23 @@ Kurento = function (
|
||||
if (onFail != null) {
|
||||
this.onFail = Kurento.normalizeCallback(onFail);
|
||||
} else {
|
||||
var _this = this;
|
||||
const _this = this;
|
||||
this.onFail = function () {
|
||||
_this.logError('Default error handler');
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
this.KurentoManager= function () {
|
||||
this.KurentoManager = function () {
|
||||
this.kurentoVideo = null;
|
||||
this.kurentoScreenshare = null;
|
||||
};
|
||||
|
||||
KurentoManager.prototype.exitScreenShare = function () {
|
||||
console.log(" [exitScreenShare] Exiting screensharing");
|
||||
if(typeof this.kurentoScreenshare !== 'undefined' && this.kurentoScreenshare) {
|
||||
if(this.kurentoScreenshare.ws !== null) {
|
||||
this.kurentoScreenshare.ws.onclose = function(){};
|
||||
console.log(' [exitScreenShare] Exiting screensharing');
|
||||
if (typeof this.kurentoScreenshare !== 'undefined' && this.kurentoScreenshare) {
|
||||
if (this.kurentoScreenshare.ws !== null) {
|
||||
this.kurentoScreenshare.ws.onclose = function () {};
|
||||
this.kurentoScreenshare.ws.close();
|
||||
}
|
||||
|
||||
@ -77,16 +77,16 @@ KurentoManager.prototype.exitScreenShare = function () {
|
||||
this.kurentoScreenshare = null;
|
||||
}
|
||||
|
||||
if(typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
if (typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
this.exitVideo();
|
||||
}
|
||||
};
|
||||
|
||||
KurentoManager.prototype.exitVideo = function () {
|
||||
console.log(" [exitScreenShare] Exiting screensharing viewing");
|
||||
if(typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
if(this.kurentoVideo.ws !== null) {
|
||||
this.kurentoVideo.ws.onclose = function(){};
|
||||
console.log(' [exitScreenShare] Exiting screensharing viewing');
|
||||
if (typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
if (this.kurentoVideo.ws !== null) {
|
||||
this.kurentoVideo.ws.onclose = function () {};
|
||||
this.kurentoVideo.ws.close();
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ KurentoManager.prototype.exitVideo = function () {
|
||||
|
||||
KurentoManager.prototype.shareScreen = function (tag) {
|
||||
this.exitScreenShare();
|
||||
var obj = Object.create(Kurento.prototype);
|
||||
const obj = Object.create(Kurento.prototype);
|
||||
Kurento.apply(obj, arguments);
|
||||
this.kurentoScreenshare = obj;
|
||||
this.kurentoScreenshare.setScreenShare(tag);
|
||||
@ -109,7 +109,7 @@ KurentoManager.prototype.shareScreen = function (tag) {
|
||||
|
||||
KurentoManager.prototype.joinWatchVideo = function (tag) {
|
||||
this.exitVideo();
|
||||
var obj = Object.create(Kurento.prototype);
|
||||
const obj = Object.create(Kurento.prototype);
|
||||
Kurento.apply(obj, arguments);
|
||||
this.kurentoVideo = obj;
|
||||
this.kurentoVideo.setWatchVideo(tag);
|
||||
@ -128,32 +128,29 @@ Kurento.prototype.create = function (tag) {
|
||||
};
|
||||
|
||||
Kurento.prototype.init = function () {
|
||||
var self = this;
|
||||
if("WebSocket" in window) {
|
||||
console.log("this browser supports websockets");
|
||||
const self = this;
|
||||
if ('WebSocket' in window) {
|
||||
console.log('this browser supports websockets');
|
||||
this.ws = new WebSocket(this.socketUrl);
|
||||
|
||||
this.ws.onmessage = this.onWSMessage.bind(this);
|
||||
this.ws.onclose = (close) => {
|
||||
kurentoManager.exitScreenShare();
|
||||
self.onFail("Websocket connection closed");
|
||||
self.onFail('Websocket connection closed');
|
||||
};
|
||||
this.ws.onerror = (error) => {
|
||||
kurentoManager.exitScreenShare();
|
||||
self.onFail("Websocket connection error");
|
||||
self.onFail('Websocket connection error');
|
||||
};
|
||||
this.ws.onopen = function () {
|
||||
self.mediaCallback();
|
||||
}.bind(self);
|
||||
}
|
||||
else
|
||||
console.log("this browser does not support websockets");
|
||||
};
|
||||
} else { console.log('this browser does not support websockets'); }
|
||||
};
|
||||
|
||||
Kurento.prototype.onWSMessage = function (message) {
|
||||
var parsedMessage = JSON.parse(message.data);
|
||||
const parsedMessage = JSON.parse(message.data);
|
||||
switch (parsedMessage.id) {
|
||||
|
||||
case 'presenterResponse':
|
||||
this.presenterResponse(parsedMessage);
|
||||
break;
|
||||
@ -176,141 +173,140 @@ Kurento.prototype.setRenderTag = function (tag) {
|
||||
};
|
||||
|
||||
Kurento.prototype.presenterResponse = function (message) {
|
||||
if (message.response != 'accepted') {
|
||||
var errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn('Call not accepted for the following reason: ' + JSON.stringify(errorMsg, null, 2));
|
||||
if (message.response !== 'accepted') {
|
||||
const errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn(`Call not accepted for the following reason: ${JSON.stringify(errorMsg, null, 2)}`);
|
||||
kurentoManager.exitScreenShare();
|
||||
this.onFail(errorMessage);
|
||||
} else {
|
||||
console.log("Presenter call was accepted with SDP => " + message.sdpAnswer);
|
||||
console.log(`Presenter call was accepted with SDP => ${message.sdpAnswer}`);
|
||||
this.webRtcPeer.processAnswer(message.sdpAnswer);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.viewerResponse = function (message) {
|
||||
if (message.response != 'accepted') {
|
||||
var errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn('Call not accepted for the following reason: ' + errorMsg);
|
||||
if (message.response !== 'accepted') {
|
||||
const errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn(`Call not accepted for the following reason: ${errorMsg}`);
|
||||
kurentoManager.exitScreenShare();
|
||||
this.onFail(errorMessage);
|
||||
} else {
|
||||
console.log("Viewer call was accepted with SDP => " + message.sdpAnswer);
|
||||
console.log(`Viewer call was accepted with SDP => ${message.sdpAnswer}`);
|
||||
this.webRtcPeer.processAnswer(message.sdpAnswer);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.serverResponse = function (message) {
|
||||
if (message.response != 'accepted') {
|
||||
var errorMsg = message.message ? message.message : 'Unknow error';
|
||||
console.warn('Call not accepted for the following reason: ' + errorMsg);
|
||||
if (message.response !== 'accepted') {
|
||||
const errorMsg = message.message ? message.message : 'Unknow error';
|
||||
console.warn(`Call not accepted for the following reason: ${errorMsg}`);
|
||||
kurentoManager.exitScreenShare();
|
||||
} else {
|
||||
this.webRtcPeer.processAnswer(message.sdpAnswer);
|
||||
}
|
||||
}
|
||||
|
||||
Kurento.prototype.makeShare = function() {
|
||||
var self = this;
|
||||
if (!this.webRtcPeer) {
|
||||
var options = {
|
||||
onicecandidate : self.onIceCandidate.bind(self)
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.makeShare = function () {
|
||||
const self = this;
|
||||
if (!self.webRtcPeer) {
|
||||
this.startScreenStreamFrom();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.onOfferPresenter = function (error, offerSdp) {
|
||||
let self = this;
|
||||
if(error) {
|
||||
console.log("Kurento.prototype.onOfferPresenter Error " + error);
|
||||
const self = this;
|
||||
if (error) {
|
||||
console.log(`Kurento.prototype.onOfferPresenter Error ${error}`);
|
||||
this.onFail(error);
|
||||
return;
|
||||
}
|
||||
|
||||
var message = {
|
||||
id : 'presenter',
|
||||
const message = {
|
||||
id: 'presenter',
|
||||
type: 'screenshare',
|
||||
role: 'presenter',
|
||||
internalMeetingId: self.internalMeetingId,
|
||||
voiceBridge: self.voiceBridge,
|
||||
callerName : self.caller_id_name,
|
||||
sdpOffer : offerSdp,
|
||||
vh: self.vid_height,
|
||||
vw: self.vid_width
|
||||
callerName: self.caller_id_name,
|
||||
sdpOffer: offerSdp,
|
||||
vh: self.vid_max_height,
|
||||
vw: self.vid_max_width,
|
||||
};
|
||||
console.log("onOfferPresenter sending to screenshare server => " + JSON.stringify(message, null, 2));
|
||||
console.log(`onOfferPresenter sending to screenshare server => ${JSON.stringify(message, null, 2)}`);
|
||||
this.sendMessage(message);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.startScreenStreamFrom = function () {
|
||||
var self = this;
|
||||
if (!!window.chrome) {
|
||||
const self = this;
|
||||
if (window.chrome) {
|
||||
if (!self.chromeExtension) {
|
||||
self.logError({
|
||||
status: 'failed',
|
||||
status: 'failed',
|
||||
message: 'Missing Chrome Extension key',
|
||||
});
|
||||
self.onFail();
|
||||
return;
|
||||
}
|
||||
}
|
||||
// TODO it would be nice to check those constraints
|
||||
if (typeof screenConstraints !== undefined) {
|
||||
self.screenConstraints = {};
|
||||
}
|
||||
self.screenConstraints.video = {};
|
||||
|
||||
console.log(self);
|
||||
var options = {
|
||||
const options = {
|
||||
localVideo: document.getElementById(this.renderTag),
|
||||
onicecandidate : self.onIceCandidate.bind(self),
|
||||
mediaConstraints : self.screenConstraints,
|
||||
sendSource : 'desktop'
|
||||
onicecandidate: self.onIceCandidate.bind(self),
|
||||
sendSource: 'desktop',
|
||||
};
|
||||
|
||||
console.log(" Peer options => " + JSON.stringify(options, null, 2));
|
||||
console.log(` Peer options => ${JSON.stringify(options, null, 2)}`);
|
||||
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, function(error) {
|
||||
if(error) {
|
||||
console.log("WebRtcPeerSendonly constructor error " + JSON.stringify(error, null, 2));
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, (error) => {
|
||||
if (error) {
|
||||
console.log(`WebRtcPeerSendonly constructor error ${JSON.stringify(error, null, 2)}`);
|
||||
self.onFail(error);
|
||||
return kurentoManager.exitScreenShare();
|
||||
}
|
||||
|
||||
self.webRtcPeer.generateOffer(self.onOfferPresenter.bind(self));
|
||||
console.log("Generated peer offer w/ options " + JSON.stringify(options));
|
||||
console.log(`Generated peer offer w/ options ${JSON.stringify(options)}`);
|
||||
|
||||
const localStream = self.webRtcPeer.peerConnection.getLocalStreams()[0];
|
||||
localStream.getVideoTracks()[0].onended = function () {
|
||||
return kurentoManager.exitScreenShare();
|
||||
};
|
||||
|
||||
localStream.getVideoTracks()[0].oninactive = function () {
|
||||
return kurentoManager.exitScreenShare();
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.onIceCandidate = function (candidate) {
|
||||
let self = this;
|
||||
console.log('Local candidate' + JSON.stringify(candidate));
|
||||
const self = this;
|
||||
console.log(`Local candidate${JSON.stringify(candidate)}`);
|
||||
|
||||
var message = {
|
||||
id : 'onIceCandidate',
|
||||
const message = {
|
||||
id: 'onIceCandidate',
|
||||
role: 'presenter',
|
||||
type: 'screenshare',
|
||||
voiceBridge: self.voiceBridge,
|
||||
candidate : candidate
|
||||
}
|
||||
candidate,
|
||||
};
|
||||
this.sendMessage(message);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.onViewerIceCandidate = function (candidate) {
|
||||
let self = this;
|
||||
console.log('Viewer local candidate' + JSON.stringify(candidate));
|
||||
const self = this;
|
||||
console.log(`Viewer local candidate${JSON.stringify(candidate)}`);
|
||||
|
||||
var message = {
|
||||
id : 'viewerIceCandidate',
|
||||
const message = {
|
||||
id: 'viewerIceCandidate',
|
||||
role: 'viewer',
|
||||
type: 'screenshare',
|
||||
voiceBridge: self.voiceBridge,
|
||||
candidate : candidate,
|
||||
callerName: self.caller_id_name
|
||||
}
|
||||
candidate,
|
||||
callerName: self.caller_id_name,
|
||||
};
|
||||
this.sendMessage(message);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.setWatchVideo = function (tag) {
|
||||
this.useVideo = true;
|
||||
@ -321,16 +317,15 @@ Kurento.prototype.setWatchVideo = function (tag) {
|
||||
};
|
||||
|
||||
Kurento.prototype.viewer = function () {
|
||||
var self = this;
|
||||
const self = this;
|
||||
if (!this.webRtcPeer) {
|
||||
|
||||
var options = {
|
||||
const options = {
|
||||
remoteVideo: document.getElementById(this.renderTag),
|
||||
onicecandidate : this.onViewerIceCandidate.bind(this)
|
||||
}
|
||||
onicecandidate: this.onViewerIceCandidate.bind(this),
|
||||
};
|
||||
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) {
|
||||
if(error) {
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function (error) {
|
||||
if (error) {
|
||||
return self.onFail(error);
|
||||
}
|
||||
|
||||
@ -340,27 +335,27 @@ Kurento.prototype.viewer = function () {
|
||||
};
|
||||
|
||||
Kurento.prototype.onOfferViewer = function (error, offerSdp) {
|
||||
let self = this;
|
||||
if(error) {
|
||||
console.log("Kurento.prototype.onOfferViewer Error " + error);
|
||||
const self = this;
|
||||
if (error) {
|
||||
console.log(`Kurento.prototype.onOfferViewer Error ${error}`);
|
||||
return this.onFail();
|
||||
}
|
||||
var message = {
|
||||
id : 'viewer',
|
||||
const message = {
|
||||
id: 'viewer',
|
||||
type: 'screenshare',
|
||||
role: 'viewer',
|
||||
internalMeetingId: self.internalMeetingId,
|
||||
voiceBridge: self.voiceBridge,
|
||||
callerName : self.caller_id_name,
|
||||
sdpOffer : offerSdp
|
||||
callerName: self.caller_id_name,
|
||||
sdpOffer: offerSdp,
|
||||
};
|
||||
|
||||
console.log("onOfferViewer sending to screenshare server => " + JSON.stringify(message, null, 2));
|
||||
console.log(`onOfferViewer sending to screenshare server => ${JSON.stringify(message, null, 2)}`);
|
||||
this.sendMessage(message);
|
||||
};
|
||||
|
||||
Kurento.prototype.stop = function() {
|
||||
//if (this.webRtcPeer) {
|
||||
Kurento.prototype.stop = function () {
|
||||
// if (this.webRtcPeer) {
|
||||
// var message = {
|
||||
// id : 'stop',
|
||||
// type : 'screenshare',
|
||||
@ -368,28 +363,28 @@ Kurento.prototype.stop = function() {
|
||||
// }
|
||||
// kurentoHandler.sendMessage(message);
|
||||
// kurentoHandler.disposeScreenShare();
|
||||
//}
|
||||
}
|
||||
// }
|
||||
};
|
||||
|
||||
Kurento.prototype.dispose = function() {
|
||||
Kurento.prototype.dispose = function () {
|
||||
if (this.webRtcPeer) {
|
||||
this.webRtcPeer.dispose();
|
||||
this.webRtcPeer = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.disposeScreenShare = function() {
|
||||
Kurento.prototype.disposeScreenShare = function () {
|
||||
if (this.webRtcPeer) {
|
||||
this.webRtcPeer.dispose();
|
||||
this.webRtcPeer = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.sendMessage = function(message) {
|
||||
var jsonMessage = JSON.stringify(message);
|
||||
console.log('Sending message: ' + jsonMessage);
|
||||
Kurento.prototype.sendMessage = function (message) {
|
||||
const jsonMessage = JSON.stringify(message);
|
||||
console.log(`Sending message: ${jsonMessage}`);
|
||||
this.ws.send(jsonMessage);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.logger = function (obj) {
|
||||
console.log(obj);
|
||||
@ -401,77 +396,68 @@ Kurento.prototype.logError = function (obj) {
|
||||
|
||||
|
||||
Kurento.normalizeCallback = function (callback) {
|
||||
if (typeof callback == 'function') {
|
||||
if (typeof callback === 'function') {
|
||||
return callback;
|
||||
} else {
|
||||
console.log(document.getElementById('BigBlueButton')[callback]);
|
||||
return function (args) {
|
||||
document.getElementById('BigBlueButton')[callback](args);
|
||||
};
|
||||
}
|
||||
console.log(document.getElementById('BigBlueButton')[callback]);
|
||||
return function (args) {
|
||||
document.getElementById('BigBlueButton')[callback](args);
|
||||
};
|
||||
};
|
||||
|
||||
/* Global methods */
|
||||
|
||||
// this function explains how to use above methods/objects
|
||||
window.getScreenConstraints = function(sendSource, callback) {
|
||||
let chromeMediaSourceId = sendSource;
|
||||
let screenConstraints = {video: {}};
|
||||
window.getScreenConstraints = function (sendSource, callback) {
|
||||
const screenConstraints = { video: {} };
|
||||
|
||||
// Limiting FPS to a range of 5-10 (5 ideal)
|
||||
screenConstraints.video.frameRate = {ideal: 5, max: 10};
|
||||
screenConstraints.video.frameRate = { ideal: 5, max: 10 };
|
||||
|
||||
// Limiting max resolution to screen size
|
||||
screenConstraints.video.height = {max: window.screen.height};
|
||||
screenConstraints.video.width = {max: window.screen.width};
|
||||
screenConstraints.video.height = { max: this.vid_max_height };
|
||||
screenConstraints.video.width = { max: this.vid_max_width };
|
||||
|
||||
if(isChrome) {
|
||||
getChromeScreenConstraints ((constraints) => {
|
||||
if (isChrome) {
|
||||
getChromeScreenConstraints((constraints) => {
|
||||
if (!constraints) {
|
||||
document.dispatchEvent(new Event("installChromeExtension"));
|
||||
document.dispatchEvent(new Event('installChromeExtension'));
|
||||
return;
|
||||
}
|
||||
|
||||
let sourceId = constraints.streamId;
|
||||
const sourceId = constraints.streamId;
|
||||
|
||||
kurentoManager.kurentoScreenshare.extensionInstalled = true;
|
||||
|
||||
// this statement sets gets 'sourceId" and sets "chromeMediaSourceId"
|
||||
screenConstraints.video.chromeMediaSource = { exact: [sendSource]};
|
||||
screenConstraints.video.chromeMediaSource = { exact: [sendSource] };
|
||||
screenConstraints.video.chromeMediaSourceId = sourceId;
|
||||
|
||||
console.log("getScreenConstraints for Chrome returns => ");
|
||||
console.log(screenConstraints);
|
||||
console.log('getScreenConstraints for Chrome returns => ', screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
|
||||
}, chromeExtension);
|
||||
}
|
||||
else if (isFirefox) {
|
||||
screenConstraints.video.mediaSource= "window";
|
||||
} else if (isFirefox) {
|
||||
screenConstraints.video.mediaSource = 'screen';
|
||||
|
||||
console.log("getScreenConstraints for Firefox returns => ");
|
||||
console.log(screenConstraints);
|
||||
console.log('getScreenConstraints for Firefox returns => ', screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
} else if (isSafari) {
|
||||
screenConstraints.video.mediaSource = 'screen';
|
||||
|
||||
console.log('getScreenConstraints for Safari returns => ', screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
}
|
||||
else if(isSafari) {
|
||||
screenConstraints.video.mediaSource= "screen";
|
||||
|
||||
console.log("getScreenConstraints for Safari returns => ");
|
||||
console.log(screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
window.kurentoInitialize = function () {
|
||||
if (window.kurentoManager == null || window.KurentoManager == undefined) {
|
||||
if (window.kurentoManager == null || window.KurentoManager === undefined) {
|
||||
window.kurentoManager = new KurentoManager();
|
||||
}
|
||||
};
|
||||
|
||||
window.kurentoShareScreen = function() {
|
||||
window.kurentoShareScreen = function () {
|
||||
window.kurentoInitialize();
|
||||
window.kurentoManager.shareScreen.apply(window.kurentoManager, arguments);
|
||||
};
|
||||
@ -490,18 +476,21 @@ window.kurentoWatchVideo = function () {
|
||||
window.kurentoExitVideo = function () {
|
||||
window.kurentoInitialize();
|
||||
window.kurentoManager.exitVideo();
|
||||
}
|
||||
};
|
||||
|
||||
window.getChromeScreenConstraints = function(callback, extensionId) {
|
||||
chrome.runtime.sendMessage(extensionId, {
|
||||
getStream: true,
|
||||
sources: [
|
||||
"window",
|
||||
"screen",
|
||||
"tab"
|
||||
]},
|
||||
function(response) {
|
||||
window.getChromeScreenConstraints = function (callback, extensionId) {
|
||||
chrome.runtime.sendMessage(
|
||||
extensionId, {
|
||||
getStream: true,
|
||||
sources: [
|
||||
'window',
|
||||
'screen',
|
||||
'tab',
|
||||
],
|
||||
},
|
||||
(response) => {
|
||||
console.log(response);
|
||||
callback(response);
|
||||
});
|
||||
};;
|
||||
},
|
||||
);
|
||||
};
|
||||
|
@ -1521,14 +1521,14 @@ if [ $CHECK ]; then
|
||||
echo " useWebrtcIfAvailable: $WEBRTC_ENABLED_CLIENT"
|
||||
|
||||
if grep -q ws-binding $FREESWITCH_EXTERNAL; then
|
||||
WEBRTC_SOCKET=$(sudo cat $FREESWITCH_EXTERNAL | sed -n '/ws-binding/{s/.*value="://;s/".*//;p}')
|
||||
WEBRTC_SOCKET=$(sudo cat $FREESWITCH_EXTERNAL | sed -n '/ws-binding/{s/.*value="//;s/".*//;p}')
|
||||
fi
|
||||
if grep -q wss-binding $FREESWITCH_EXTERNAL; then
|
||||
WEBRTC_SOCKET=$(sudo cat $FREESWITCH_EXTERNAL | sed -n '/wss-binding/{s/.*value="://;s/".*//;p}')
|
||||
WEBRTC_SOCKET=$(sudo cat $FREESWITCH_EXTERNAL | sed -n '/wss-binding/{s/.*value="//;s/".*//;p}')
|
||||
fi
|
||||
echo
|
||||
echo "$FREESWITCH_EXTERNAL (FreeSWITCH)"
|
||||
echo " websocket port: $WEBRTC_SOCKET"
|
||||
echo " websocket: $WEBRTC_SOCKET"
|
||||
WEBRTC_ENABLED=$(grep -i useWebrtcIfAvailable /var/www/bigbluebutton/client/conf/config.xml | cut -d '"' -f2)
|
||||
echo " WebRTC enabled: $WEBRTC_ENABLED"
|
||||
|
||||
|
@ -1,31 +1,31 @@
|
||||
var isFirefox = typeof window.InstallTrigger !== 'undefined';
|
||||
var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
||||
var isChrome = !!window.chrome && !isOpera;
|
||||
var isSafari = navigator.userAgent.indexOf("Safari") >= 0 && !isChrome;
|
||||
var kurentoHandler = null;
|
||||
const isFirefox = typeof window.InstallTrigger !== 'undefined';
|
||||
const isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
|
||||
const isChrome = !!window.chrome && !isOpera;
|
||||
const isSafari = navigator.userAgent.indexOf('Safari') >= 0 && !isChrome;
|
||||
const kurentoHandler = null;
|
||||
|
||||
Kurento = function (
|
||||
tag,
|
||||
voiceBridge,
|
||||
conferenceUsername,
|
||||
internalMeetingId,
|
||||
onFail = null,
|
||||
chromeExtension = null
|
||||
) {
|
||||
|
||||
tag,
|
||||
voiceBridge,
|
||||
conferenceUsername,
|
||||
internalMeetingId,
|
||||
onFail = null,
|
||||
chromeExtension = null,
|
||||
) {
|
||||
this.ws = null;
|
||||
this.video;
|
||||
this.screen;
|
||||
this.webRtcPeer;
|
||||
this.extensionInstalled = false;
|
||||
this.screenConstraints = {};
|
||||
this.video = null;
|
||||
this.screen = null;
|
||||
this.webRtcPeer = null;
|
||||
this.mediaCallback = null;
|
||||
|
||||
this.voiceBridge = voiceBridge + '-SCREENSHARE';
|
||||
this.voiceBridge = `${voiceBridge}-SCREENSHARE`;
|
||||
this.internalMeetingId = internalMeetingId;
|
||||
|
||||
this.vid_width = window.screen.width;
|
||||
this.vid_height = window.screen.height;
|
||||
// Limiting max resolution to 1080p
|
||||
// In FireFox we force full screen share and in the case
|
||||
// of multiple screens the total area shared becomes too large
|
||||
this.vid_max_width = 1920;
|
||||
this.vid_max_height = 1080;
|
||||
|
||||
// TODO properly generate a uuid
|
||||
this.sessid = Math.random().toString();
|
||||
@ -35,9 +35,9 @@ Kurento = function (
|
||||
this.caller_id_name = conferenceUsername;
|
||||
this.caller_id_number = conferenceUsername;
|
||||
|
||||
this.kurentoPort = "bbb-webrtc-sfu";
|
||||
this.kurentoPort = 'bbb-webrtc-sfu';
|
||||
this.hostName = window.location.hostname;
|
||||
this.socketUrl = 'wss://' + this.hostName + '/' + this.kurentoPort;
|
||||
this.socketUrl = `wss://${this.hostName}/${this.kurentoPort}`;
|
||||
|
||||
this.iceServers = null;
|
||||
|
||||
@ -49,23 +49,23 @@ Kurento = function (
|
||||
if (onFail != null) {
|
||||
this.onFail = Kurento.normalizeCallback(onFail);
|
||||
} else {
|
||||
var _this = this;
|
||||
const _this = this;
|
||||
this.onFail = function () {
|
||||
_this.logError('Default error handler');
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
this.KurentoManager= function () {
|
||||
this.KurentoManager = function () {
|
||||
this.kurentoVideo = null;
|
||||
this.kurentoScreenshare = null;
|
||||
};
|
||||
|
||||
KurentoManager.prototype.exitScreenShare = function () {
|
||||
console.log(" [exitScreenShare] Exiting screensharing");
|
||||
if(typeof this.kurentoScreenshare !== 'undefined' && this.kurentoScreenshare) {
|
||||
if(this.kurentoScreenshare.ws !== null) {
|
||||
this.kurentoScreenshare.ws.onclose = function(){};
|
||||
console.log(' [exitScreenShare] Exiting screensharing');
|
||||
if (typeof this.kurentoScreenshare !== 'undefined' && this.kurentoScreenshare) {
|
||||
if (this.kurentoScreenshare.ws !== null) {
|
||||
this.kurentoScreenshare.ws.onclose = function () {};
|
||||
this.kurentoScreenshare.ws.close();
|
||||
}
|
||||
|
||||
@ -77,16 +77,16 @@ KurentoManager.prototype.exitScreenShare = function () {
|
||||
this.kurentoScreenshare = null;
|
||||
}
|
||||
|
||||
if(typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
if (typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
this.exitVideo();
|
||||
}
|
||||
};
|
||||
|
||||
KurentoManager.prototype.exitVideo = function () {
|
||||
console.log(" [exitScreenShare] Exiting screensharing viewing");
|
||||
if(typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
if(this.kurentoVideo.ws !== null) {
|
||||
this.kurentoVideo.ws.onclose = function(){};
|
||||
console.log(' [exitScreenShare] Exiting screensharing viewing');
|
||||
if (typeof this.kurentoVideo !== 'undefined' && this.kurentoVideo) {
|
||||
if (this.kurentoVideo.ws !== null) {
|
||||
this.kurentoVideo.ws.onclose = function () {};
|
||||
this.kurentoVideo.ws.close();
|
||||
}
|
||||
|
||||
@ -101,7 +101,7 @@ KurentoManager.prototype.exitVideo = function () {
|
||||
|
||||
KurentoManager.prototype.shareScreen = function (tag) {
|
||||
this.exitScreenShare();
|
||||
var obj = Object.create(Kurento.prototype);
|
||||
const obj = Object.create(Kurento.prototype);
|
||||
Kurento.apply(obj, arguments);
|
||||
this.kurentoScreenshare = obj;
|
||||
this.kurentoScreenshare.setScreenShare(tag);
|
||||
@ -109,7 +109,7 @@ KurentoManager.prototype.shareScreen = function (tag) {
|
||||
|
||||
KurentoManager.prototype.joinWatchVideo = function (tag) {
|
||||
this.exitVideo();
|
||||
var obj = Object.create(Kurento.prototype);
|
||||
const obj = Object.create(Kurento.prototype);
|
||||
Kurento.apply(obj, arguments);
|
||||
this.kurentoVideo = obj;
|
||||
this.kurentoVideo.setWatchVideo(tag);
|
||||
@ -128,32 +128,29 @@ Kurento.prototype.create = function (tag) {
|
||||
};
|
||||
|
||||
Kurento.prototype.init = function () {
|
||||
var self = this;
|
||||
if("WebSocket" in window) {
|
||||
console.log("this browser supports websockets");
|
||||
const self = this;
|
||||
if ('WebSocket' in window) {
|
||||
console.log('this browser supports websockets');
|
||||
this.ws = new WebSocket(this.socketUrl);
|
||||
|
||||
this.ws.onmessage = this.onWSMessage.bind(this);
|
||||
this.ws.onclose = (close) => {
|
||||
kurentoManager.exitScreenShare();
|
||||
self.onFail("Websocket connection closed");
|
||||
self.onFail('Websocket connection closed');
|
||||
};
|
||||
this.ws.onerror = (error) => {
|
||||
kurentoManager.exitScreenShare();
|
||||
self.onFail("Websocket connection error");
|
||||
self.onFail('Websocket connection error');
|
||||
};
|
||||
this.ws.onopen = function () {
|
||||
self.mediaCallback();
|
||||
}.bind(self);
|
||||
}
|
||||
else
|
||||
console.log("this browser does not support websockets");
|
||||
};
|
||||
} else { console.log('this browser does not support websockets'); }
|
||||
};
|
||||
|
||||
Kurento.prototype.onWSMessage = function (message) {
|
||||
var parsedMessage = JSON.parse(message.data);
|
||||
const parsedMessage = JSON.parse(message.data);
|
||||
switch (parsedMessage.id) {
|
||||
|
||||
case 'presenterResponse':
|
||||
this.presenterResponse(parsedMessage);
|
||||
break;
|
||||
@ -176,141 +173,140 @@ Kurento.prototype.setRenderTag = function (tag) {
|
||||
};
|
||||
|
||||
Kurento.prototype.presenterResponse = function (message) {
|
||||
if (message.response != 'accepted') {
|
||||
var errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn('Call not accepted for the following reason: ' + JSON.stringify(errorMsg, null, 2));
|
||||
if (message.response !== 'accepted') {
|
||||
const errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn(`Call not accepted for the following reason: ${JSON.stringify(errorMsg, null, 2)}`);
|
||||
kurentoManager.exitScreenShare();
|
||||
this.onFail(errorMessage);
|
||||
} else {
|
||||
console.log("Presenter call was accepted with SDP => " + message.sdpAnswer);
|
||||
console.log(`Presenter call was accepted with SDP => ${message.sdpAnswer}`);
|
||||
this.webRtcPeer.processAnswer(message.sdpAnswer);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.viewerResponse = function (message) {
|
||||
if (message.response != 'accepted') {
|
||||
var errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn('Call not accepted for the following reason: ' + errorMsg);
|
||||
if (message.response !== 'accepted') {
|
||||
const errorMsg = message.message ? message.message : 'Unknown error';
|
||||
console.warn(`Call not accepted for the following reason: ${errorMsg}`);
|
||||
kurentoManager.exitScreenShare();
|
||||
this.onFail(errorMessage);
|
||||
} else {
|
||||
console.log("Viewer call was accepted with SDP => " + message.sdpAnswer);
|
||||
console.log(`Viewer call was accepted with SDP => ${message.sdpAnswer}`);
|
||||
this.webRtcPeer.processAnswer(message.sdpAnswer);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.serverResponse = function (message) {
|
||||
if (message.response != 'accepted') {
|
||||
var errorMsg = message.message ? message.message : 'Unknow error';
|
||||
console.warn('Call not accepted for the following reason: ' + errorMsg);
|
||||
if (message.response !== 'accepted') {
|
||||
const errorMsg = message.message ? message.message : 'Unknow error';
|
||||
console.warn(`Call not accepted for the following reason: ${errorMsg}`);
|
||||
kurentoManager.exitScreenShare();
|
||||
} else {
|
||||
this.webRtcPeer.processAnswer(message.sdpAnswer);
|
||||
}
|
||||
}
|
||||
|
||||
Kurento.prototype.makeShare = function() {
|
||||
var self = this;
|
||||
if (!this.webRtcPeer) {
|
||||
var options = {
|
||||
onicecandidate : self.onIceCandidate.bind(self)
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.makeShare = function () {
|
||||
const self = this;
|
||||
if (!self.webRtcPeer) {
|
||||
this.startScreenStreamFrom();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.onOfferPresenter = function (error, offerSdp) {
|
||||
let self = this;
|
||||
if(error) {
|
||||
console.log("Kurento.prototype.onOfferPresenter Error " + error);
|
||||
const self = this;
|
||||
if (error) {
|
||||
console.log(`Kurento.prototype.onOfferPresenter Error ${error}`);
|
||||
this.onFail(error);
|
||||
return;
|
||||
}
|
||||
|
||||
var message = {
|
||||
id : 'presenter',
|
||||
const message = {
|
||||
id: 'presenter',
|
||||
type: 'screenshare',
|
||||
role: 'presenter',
|
||||
internalMeetingId: self.internalMeetingId,
|
||||
voiceBridge: self.voiceBridge,
|
||||
callerName : self.caller_id_name,
|
||||
sdpOffer : offerSdp,
|
||||
vh: self.vid_height,
|
||||
vw: self.vid_width
|
||||
callerName: self.caller_id_name,
|
||||
sdpOffer: offerSdp,
|
||||
vh: self.vid_max_height,
|
||||
vw: self.vid_max_width,
|
||||
};
|
||||
console.log("onOfferPresenter sending to screenshare server => " + JSON.stringify(message, null, 2));
|
||||
console.log(`onOfferPresenter sending to screenshare server => ${JSON.stringify(message, null, 2)}`);
|
||||
this.sendMessage(message);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.startScreenStreamFrom = function () {
|
||||
var self = this;
|
||||
if (!!window.chrome) {
|
||||
const self = this;
|
||||
if (window.chrome) {
|
||||
if (!self.chromeExtension) {
|
||||
self.logError({
|
||||
status: 'failed',
|
||||
status: 'failed',
|
||||
message: 'Missing Chrome Extension key',
|
||||
});
|
||||
self.onFail();
|
||||
return;
|
||||
}
|
||||
}
|
||||
// TODO it would be nice to check those constraints
|
||||
if (typeof screenConstraints !== undefined) {
|
||||
self.screenConstraints = {};
|
||||
}
|
||||
self.screenConstraints.video = {};
|
||||
|
||||
console.log(self);
|
||||
var options = {
|
||||
const options = {
|
||||
localVideo: document.getElementById(this.renderTag),
|
||||
onicecandidate : self.onIceCandidate.bind(self),
|
||||
mediaConstraints : self.screenConstraints,
|
||||
sendSource : 'desktop'
|
||||
onicecandidate: self.onIceCandidate.bind(self),
|
||||
sendSource: 'desktop',
|
||||
};
|
||||
|
||||
console.log(" Peer options => " + JSON.stringify(options, null, 2));
|
||||
console.log(` Peer options => ${JSON.stringify(options, null, 2)}`);
|
||||
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, function(error) {
|
||||
if(error) {
|
||||
console.log("WebRtcPeerSendonly constructor error " + JSON.stringify(error, null, 2));
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(options, (error) => {
|
||||
if (error) {
|
||||
console.log(`WebRtcPeerSendonly constructor error ${JSON.stringify(error, null, 2)}`);
|
||||
self.onFail(error);
|
||||
return kurentoManager.exitScreenShare();
|
||||
}
|
||||
|
||||
self.webRtcPeer.generateOffer(self.onOfferPresenter.bind(self));
|
||||
console.log("Generated peer offer w/ options " + JSON.stringify(options));
|
||||
console.log(`Generated peer offer w/ options ${JSON.stringify(options)}`);
|
||||
|
||||
const localStream = self.webRtcPeer.peerConnection.getLocalStreams()[0];
|
||||
localStream.getVideoTracks()[0].onended = function () {
|
||||
return kurentoManager.exitScreenShare();
|
||||
};
|
||||
|
||||
localStream.getVideoTracks()[0].oninactive = function () {
|
||||
return kurentoManager.exitScreenShare();
|
||||
};
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.onIceCandidate = function (candidate) {
|
||||
let self = this;
|
||||
console.log('Local candidate' + JSON.stringify(candidate));
|
||||
const self = this;
|
||||
console.log(`Local candidate${JSON.stringify(candidate)}`);
|
||||
|
||||
var message = {
|
||||
id : 'onIceCandidate',
|
||||
const message = {
|
||||
id: 'onIceCandidate',
|
||||
role: 'presenter',
|
||||
type: 'screenshare',
|
||||
voiceBridge: self.voiceBridge,
|
||||
candidate : candidate
|
||||
}
|
||||
candidate,
|
||||
};
|
||||
this.sendMessage(message);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.onViewerIceCandidate = function (candidate) {
|
||||
let self = this;
|
||||
console.log('Viewer local candidate' + JSON.stringify(candidate));
|
||||
const self = this;
|
||||
console.log(`Viewer local candidate${JSON.stringify(candidate)}`);
|
||||
|
||||
var message = {
|
||||
id : 'viewerIceCandidate',
|
||||
const message = {
|
||||
id: 'viewerIceCandidate',
|
||||
role: 'viewer',
|
||||
type: 'screenshare',
|
||||
voiceBridge: self.voiceBridge,
|
||||
candidate : candidate,
|
||||
callerName: self.caller_id_name
|
||||
}
|
||||
candidate,
|
||||
callerName: self.caller_id_name,
|
||||
};
|
||||
this.sendMessage(message);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.setWatchVideo = function (tag) {
|
||||
this.useVideo = true;
|
||||
@ -321,16 +317,15 @@ Kurento.prototype.setWatchVideo = function (tag) {
|
||||
};
|
||||
|
||||
Kurento.prototype.viewer = function () {
|
||||
var self = this;
|
||||
const self = this;
|
||||
if (!this.webRtcPeer) {
|
||||
|
||||
var options = {
|
||||
const options = {
|
||||
remoteVideo: document.getElementById(this.renderTag),
|
||||
onicecandidate : this.onViewerIceCandidate.bind(this)
|
||||
}
|
||||
onicecandidate: this.onViewerIceCandidate.bind(this),
|
||||
};
|
||||
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function(error) {
|
||||
if(error) {
|
||||
self.webRtcPeer = kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(options, function (error) {
|
||||
if (error) {
|
||||
return self.onFail(error);
|
||||
}
|
||||
|
||||
@ -340,27 +335,27 @@ Kurento.prototype.viewer = function () {
|
||||
};
|
||||
|
||||
Kurento.prototype.onOfferViewer = function (error, offerSdp) {
|
||||
let self = this;
|
||||
if(error) {
|
||||
console.log("Kurento.prototype.onOfferViewer Error " + error);
|
||||
const self = this;
|
||||
if (error) {
|
||||
console.log(`Kurento.prototype.onOfferViewer Error ${error}`);
|
||||
return this.onFail();
|
||||
}
|
||||
var message = {
|
||||
id : 'viewer',
|
||||
const message = {
|
||||
id: 'viewer',
|
||||
type: 'screenshare',
|
||||
role: 'viewer',
|
||||
internalMeetingId: self.internalMeetingId,
|
||||
voiceBridge: self.voiceBridge,
|
||||
callerName : self.caller_id_name,
|
||||
sdpOffer : offerSdp
|
||||
callerName: self.caller_id_name,
|
||||
sdpOffer: offerSdp,
|
||||
};
|
||||
|
||||
console.log("onOfferViewer sending to screenshare server => " + JSON.stringify(message, null, 2));
|
||||
console.log(`onOfferViewer sending to screenshare server => ${JSON.stringify(message, null, 2)}`);
|
||||
this.sendMessage(message);
|
||||
};
|
||||
|
||||
Kurento.prototype.stop = function() {
|
||||
//if (this.webRtcPeer) {
|
||||
Kurento.prototype.stop = function () {
|
||||
// if (this.webRtcPeer) {
|
||||
// var message = {
|
||||
// id : 'stop',
|
||||
// type : 'screenshare',
|
||||
@ -368,28 +363,28 @@ Kurento.prototype.stop = function() {
|
||||
// }
|
||||
// kurentoHandler.sendMessage(message);
|
||||
// kurentoHandler.disposeScreenShare();
|
||||
//}
|
||||
}
|
||||
// }
|
||||
};
|
||||
|
||||
Kurento.prototype.dispose = function() {
|
||||
Kurento.prototype.dispose = function () {
|
||||
if (this.webRtcPeer) {
|
||||
this.webRtcPeer.dispose();
|
||||
this.webRtcPeer = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.disposeScreenShare = function() {
|
||||
Kurento.prototype.disposeScreenShare = function () {
|
||||
if (this.webRtcPeer) {
|
||||
this.webRtcPeer.dispose();
|
||||
this.webRtcPeer = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.sendMessage = function(message) {
|
||||
var jsonMessage = JSON.stringify(message);
|
||||
console.log('Sending message: ' + jsonMessage);
|
||||
Kurento.prototype.sendMessage = function (message) {
|
||||
const jsonMessage = JSON.stringify(message);
|
||||
console.log(`Sending message: ${jsonMessage}`);
|
||||
this.ws.send(jsonMessage);
|
||||
}
|
||||
};
|
||||
|
||||
Kurento.prototype.logger = function (obj) {
|
||||
console.log(obj);
|
||||
@ -401,77 +396,68 @@ Kurento.prototype.logError = function (obj) {
|
||||
|
||||
|
||||
Kurento.normalizeCallback = function (callback) {
|
||||
if (typeof callback == 'function') {
|
||||
if (typeof callback === 'function') {
|
||||
return callback;
|
||||
} else {
|
||||
console.log(document.getElementById('BigBlueButton')[callback]);
|
||||
return function (args) {
|
||||
document.getElementById('BigBlueButton')[callback](args);
|
||||
};
|
||||
}
|
||||
console.log(document.getElementById('BigBlueButton')[callback]);
|
||||
return function (args) {
|
||||
document.getElementById('BigBlueButton')[callback](args);
|
||||
};
|
||||
};
|
||||
|
||||
/* Global methods */
|
||||
|
||||
// this function explains how to use above methods/objects
|
||||
window.getScreenConstraints = function(sendSource, callback) {
|
||||
let chromeMediaSourceId = sendSource;
|
||||
let screenConstraints = {video: {}};
|
||||
window.getScreenConstraints = function (sendSource, callback) {
|
||||
const screenConstraints = { video: {} };
|
||||
|
||||
// Limiting FPS to a range of 5-10 (5 ideal)
|
||||
screenConstraints.video.frameRate = {ideal: 5, max: 10};
|
||||
screenConstraints.video.frameRate = { ideal: 5, max: 10 };
|
||||
|
||||
// Limiting max resolution to screen size
|
||||
screenConstraints.video.height = {max: window.screen.height};
|
||||
screenConstraints.video.width = {max: window.screen.width};
|
||||
screenConstraints.video.height = { max: this.vid_max_height };
|
||||
screenConstraints.video.width = { max: this.vid_max_width };
|
||||
|
||||
if(isChrome) {
|
||||
getChromeScreenConstraints ((constraints) => {
|
||||
if (isChrome) {
|
||||
getChromeScreenConstraints((constraints) => {
|
||||
if (!constraints) {
|
||||
document.dispatchEvent(new Event("installChromeExtension"));
|
||||
document.dispatchEvent(new Event('installChromeExtension'));
|
||||
return;
|
||||
}
|
||||
|
||||
let sourceId = constraints.streamId;
|
||||
const sourceId = constraints.streamId;
|
||||
|
||||
kurentoManager.kurentoScreenshare.extensionInstalled = true;
|
||||
|
||||
// this statement sets gets 'sourceId" and sets "chromeMediaSourceId"
|
||||
screenConstraints.video.chromeMediaSource = { exact: [sendSource]};
|
||||
screenConstraints.video.chromeMediaSource = { exact: [sendSource] };
|
||||
screenConstraints.video.chromeMediaSourceId = sourceId;
|
||||
|
||||
console.log("getScreenConstraints for Chrome returns => ");
|
||||
console.log(screenConstraints);
|
||||
console.log('getScreenConstraints for Chrome returns => ', screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
|
||||
}, chromeExtension);
|
||||
}
|
||||
else if (isFirefox) {
|
||||
screenConstraints.video.mediaSource= "window";
|
||||
} else if (isFirefox) {
|
||||
screenConstraints.video.mediaSource = 'screen';
|
||||
|
||||
console.log("getScreenConstraints for Firefox returns => ");
|
||||
console.log(screenConstraints);
|
||||
console.log('getScreenConstraints for Firefox returns => ', screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
} else if (isSafari) {
|
||||
screenConstraints.video.mediaSource = 'screen';
|
||||
|
||||
console.log('getScreenConstraints for Safari returns => ', screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
}
|
||||
else if(isSafari) {
|
||||
screenConstraints.video.mediaSource= "screen";
|
||||
|
||||
console.log("getScreenConstraints for Safari returns => ");
|
||||
console.log(screenConstraints);
|
||||
// now invoking native getUserMedia API
|
||||
callback(null, screenConstraints);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
window.kurentoInitialize = function () {
|
||||
if (window.kurentoManager == null || window.KurentoManager == undefined) {
|
||||
if (window.kurentoManager == null || window.KurentoManager === undefined) {
|
||||
window.kurentoManager = new KurentoManager();
|
||||
}
|
||||
};
|
||||
|
||||
window.kurentoShareScreen = function() {
|
||||
window.kurentoShareScreen = function () {
|
||||
window.kurentoInitialize();
|
||||
window.kurentoManager.shareScreen.apply(window.kurentoManager, arguments);
|
||||
};
|
||||
@ -490,18 +476,21 @@ window.kurentoWatchVideo = function () {
|
||||
window.kurentoExitVideo = function () {
|
||||
window.kurentoInitialize();
|
||||
window.kurentoManager.exitVideo();
|
||||
}
|
||||
};
|
||||
|
||||
window.getChromeScreenConstraints = function(callback, extensionId) {
|
||||
chrome.runtime.sendMessage(extensionId, {
|
||||
getStream: true,
|
||||
sources: [
|
||||
"window",
|
||||
"screen",
|
||||
"tab"
|
||||
]},
|
||||
function(response) {
|
||||
window.getChromeScreenConstraints = function (callback, extensionId) {
|
||||
chrome.runtime.sendMessage(
|
||||
extensionId, {
|
||||
getStream: true,
|
||||
sources: [
|
||||
'window',
|
||||
'screen',
|
||||
'tab',
|
||||
],
|
||||
},
|
||||
(response) => {
|
||||
console.log(response);
|
||||
callback(response);
|
||||
});
|
||||
};;
|
||||
},
|
||||
);
|
||||
};
|
||||
|
@ -26,6 +26,10 @@ export default class Acl {
|
||||
meetingId,
|
||||
userId,
|
||||
authToken,
|
||||
validated: true,
|
||||
connectionStatus: 'online',
|
||||
// TODO: We cant check for approved until we move subscription login out of <Base />
|
||||
// approved: true,
|
||||
});
|
||||
|
||||
return !!User; // if he found a user means the meeting/user/token is valid
|
||||
@ -40,8 +44,10 @@ export default class Acl {
|
||||
return permissions.some(internalAcl => (this.fetchPermission(permission, internalAcl)));
|
||||
} else if (Match.test(permissions, Object)) {
|
||||
if (permission.indexOf('.') > -1) {
|
||||
return this.fetchPermission(permission.substring(permission.indexOf('.') + 1),
|
||||
permissions[permission.substring(0, permission.indexOf('.'))]);
|
||||
return this.fetchPermission(
|
||||
permission.substring(permission.indexOf('.') + 1),
|
||||
permissions[permission.substring(0, permission.indexOf('.'))],
|
||||
);
|
||||
}
|
||||
return permissions[permission];
|
||||
}
|
||||
@ -53,8 +59,7 @@ export default class Acl {
|
||||
return false;
|
||||
}
|
||||
|
||||
const meetingId = credentials.meetingId;
|
||||
const userId = credentials.requesterUserId;
|
||||
const { meetingId, requesterUserId: userId } = credentials;
|
||||
|
||||
const user = this.Users.findOne({
|
||||
meetingId,
|
||||
@ -64,7 +69,7 @@ export default class Acl {
|
||||
const containRole = Acl.containsRole(user);
|
||||
|
||||
if (containRole) {
|
||||
const roles = user.roles;
|
||||
const { roles } = user;
|
||||
let permissions = {};
|
||||
|
||||
roles.forEach((role) => {
|
||||
|
@ -1,7 +1,9 @@
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import mapToAcl from '/imports/startup/mapToAcl';
|
||||
import endMeeting from './methods/endMeeting';
|
||||
import toggleRecording from './methods/toggleRecording';
|
||||
|
||||
Meteor.methods(mapToAcl(['methods.endMeeting'], {
|
||||
Meteor.methods(mapToAcl(['methods.endMeeting', 'methods.toggleRecording'], {
|
||||
endMeeting,
|
||||
toggleRecording,
|
||||
}));
|
||||
|
@ -0,0 +1,44 @@
|
||||
import { check } from 'meteor/check';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import RedisPubSub from '/imports/startup/server/redis';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
|
||||
export default function toggleRecording(credentials) {
|
||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
||||
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
|
||||
const { meetingId, requesterUserId, requesterToken } = credentials;
|
||||
|
||||
check(meetingId, String);
|
||||
check(requesterUserId, String);
|
||||
check(requesterToken, String);
|
||||
|
||||
const EVENT_NAME = 'SetRecordingStatusCmdMsg';
|
||||
|
||||
let meetingRecorded;
|
||||
let allowedToRecord;
|
||||
|
||||
const meetingObject = Meetings.findOne({ meetingId });
|
||||
|
||||
if (meetingObject != null) {
|
||||
const {
|
||||
allowStartStopRecording,
|
||||
recording,
|
||||
record,
|
||||
} = meetingObject.recordProp;
|
||||
|
||||
meetingRecorded = recording;
|
||||
allowedToRecord = record && allowStartStopRecording;
|
||||
}
|
||||
|
||||
const payload = {
|
||||
recording: !meetingRecorded,
|
||||
setBy: requesterUserId,
|
||||
};
|
||||
|
||||
if (allowedToRecord) {
|
||||
Logger.info(`Setting the record parameter to ${!meetingRecorded} for ${meetingId} by ${requesterUserId}`);
|
||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
||||
}
|
||||
return null;
|
||||
}
|
@ -26,6 +26,14 @@ const addWelcomeChatMessage = (meetingId, userId) => {
|
||||
addChat(meetingId, message);
|
||||
};
|
||||
|
||||
const clearOtherSessions = (sessionUserId, current = false) => {
|
||||
const serverSessions = Meteor.server.sessions;
|
||||
Object.keys(serverSessions)
|
||||
.filter(i => serverSessions[i].userId === sessionUserId)
|
||||
.filter(i => i !== current)
|
||||
.forEach(i => serverSessions[i].close());
|
||||
};
|
||||
|
||||
export default function handleValidateAuthToken({ body }, meetingId) {
|
||||
const { userId, valid, waitForApproval } = body;
|
||||
|
||||
@ -45,12 +53,10 @@ export default function handleValidateAuthToken({ body }, meetingId) {
|
||||
|
||||
// Publish user join message
|
||||
if (valid && !waitForApproval) {
|
||||
Logger.info('User=', JSON.stringify(User));
|
||||
userJoin(meetingId, userId, User.authToken);
|
||||
}
|
||||
|
||||
// User already flagged so we skip
|
||||
if (User.validated === valid) return;
|
||||
|
||||
const modifier = {
|
||||
$set: {
|
||||
validated: valid,
|
||||
@ -67,6 +73,10 @@ export default function handleValidateAuthToken({ body }, meetingId) {
|
||||
if (valid) {
|
||||
clearUserSystemMessages(meetingId, userId);
|
||||
addWelcomeChatMessage(meetingId, userId);
|
||||
|
||||
const sessionUserId = `${meetingId}-${userId}`;
|
||||
const currentConnectionId = User.connectionId ? User.connectionId : false;
|
||||
clearOtherSessions(sessionUserId, currentConnectionId);
|
||||
}
|
||||
|
||||
return Logger.info(`Validated auth token as ${valid} user=${userId} meeting=${meetingId}`);
|
||||
|
@ -1,19 +1,17 @@
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import mapToAcl from '/imports/startup/mapToAcl';
|
||||
import userLogout from './methods/userLogout';
|
||||
import validateAuthToken from './methods/validateAuthToken';
|
||||
import setEmojiStatus from './methods/setEmojiStatus';
|
||||
import assignPresenter from './methods/assignPresenter';
|
||||
import changeRole from './methods/changeRole';
|
||||
import removeUser from './methods/removeUser';
|
||||
|
||||
Meteor.methods(mapToAcl(['methods.userLogout', 'methods.setEmojiStatus', 'methods.assignPresenter', 'methods.changeRole',
|
||||
Meteor.methods(mapToAcl(['methods.setEmojiStatus', 'methods.assignPresenter', 'methods.changeRole',
|
||||
'methods.removeUser'], {
|
||||
userLogout,
|
||||
setEmojiStatus,
|
||||
assignPresenter,
|
||||
changeRole,
|
||||
removeUser,
|
||||
}));
|
||||
setEmojiStatus,
|
||||
assignPresenter,
|
||||
changeRole,
|
||||
removeUser,
|
||||
}));
|
||||
|
||||
Meteor.methods({ validateAuthToken, });
|
||||
Meteor.methods({ validateAuthToken });
|
||||
|
@ -8,6 +8,8 @@ export default function userJoin(meetingId, userId, authToken) {
|
||||
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
|
||||
const EVENT_NAME = 'UserJoinMeetingReqMsg';
|
||||
|
||||
Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}' pt1`);
|
||||
|
||||
check(meetingId, String);
|
||||
check(userId, String);
|
||||
check(authToken, String);
|
||||
@ -17,7 +19,7 @@ export default function userJoin(meetingId, userId, authToken) {
|
||||
authToken,
|
||||
};
|
||||
|
||||
Logger.info(`User '${userId}' is joining meeting '${meetingId}'`);
|
||||
Logger.info(`User='${userId}' is joining meeting='${meetingId}' authToken='${authToken}' pt2`);
|
||||
|
||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, userId, payload);
|
||||
}
|
||||
|
@ -4,9 +4,7 @@ import RedisPubSub from '/imports/startup/server/redis';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Users from '/imports/api/users';
|
||||
|
||||
const OFFLINE_CONNECTION_STATUS = 'offline';
|
||||
|
||||
export default function userLeaving(credentials, userId) {
|
||||
export default function userLeaving(credentials, userId, connectionId) {
|
||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
||||
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
|
||||
const EVENT_NAME = 'UserLeaveReqMsg';
|
||||
@ -23,30 +21,14 @@ export default function userLeaving(credentials, userId) {
|
||||
};
|
||||
|
||||
const User = Users.findOne(selector);
|
||||
|
||||
if (!User) {
|
||||
throw new Meteor.Error('user-not-found', `Could not find ${userId} in ${meetingId}: cannot complete userLeaving`);
|
||||
}
|
||||
|
||||
if (User.connectionStatus === OFFLINE_CONNECTION_STATUS) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (User.validated) {
|
||||
const modifier = {
|
||||
$set: {
|
||||
validated: null,
|
||||
},
|
||||
};
|
||||
|
||||
const cb = (err) => {
|
||||
if (err) {
|
||||
return Logger.error(`Invalidating user: ${err}`);
|
||||
}
|
||||
|
||||
return Logger.info(`Invalidate user=${userId} meeting=${meetingId}`);
|
||||
};
|
||||
|
||||
Users.update(selector, modifier, cb);
|
||||
// If the current user connection is not the same that triggered the leave we skip
|
||||
if (User.connectionId !== connectionId) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const payload = {
|
||||
@ -54,7 +36,7 @@ export default function userLeaving(credentials, userId) {
|
||||
sessionId: meetingId,
|
||||
};
|
||||
|
||||
Logger.verbose(`User '${requesterUserId}' left meeting '${meetingId}'`);
|
||||
Logger.info(`User '${userId}' is leaving meeting '${meetingId}'`);
|
||||
|
||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
|
||||
import userLeaving from './userLeaving';
|
||||
|
||||
export default function userLogout(credentials) {
|
||||
const { requesterUserId } = credentials;
|
||||
|
||||
try {
|
||||
userLeaving(credentials, requesterUserId);
|
||||
} catch (e) {
|
||||
Logger.error(`Exception while executing userLeaving: ${e}`);
|
||||
}
|
||||
}
|
@ -4,9 +4,7 @@ import RedisPubSub from '/imports/startup/server/redis';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Users from '/imports/api/users';
|
||||
import createDummyUser from '../modifiers/createDummyUser';
|
||||
import setConnectionStatus from '../modifiers/setConnectionStatus';
|
||||
|
||||
const ONLINE_CONNECTION_STATUS = 'online';
|
||||
import setConnectionId from '../modifiers/setConnectionId';
|
||||
|
||||
export default function validateAuthToken(credentials) {
|
||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
||||
@ -19,6 +17,9 @@ export default function validateAuthToken(credentials) {
|
||||
check(requesterUserId, String);
|
||||
check(requesterToken, String);
|
||||
|
||||
const sessionId = `${meetingId}-${requesterUserId}`;
|
||||
this.setUserId(sessionId);
|
||||
|
||||
const User = Users.findOne({
|
||||
meetingId,
|
||||
userId: requesterUserId,
|
||||
@ -26,18 +27,16 @@ export default function validateAuthToken(credentials) {
|
||||
|
||||
if (!User) {
|
||||
createDummyUser(meetingId, requesterUserId, requesterToken);
|
||||
} else if (User.validated) {
|
||||
setConnectionStatus(meetingId, requesterUserId, ONLINE_CONNECTION_STATUS);
|
||||
}
|
||||
|
||||
setConnectionId(meetingId, requesterUserId, this.connection.id);
|
||||
|
||||
const payload = {
|
||||
userId: requesterUserId,
|
||||
authToken: requesterToken,
|
||||
};
|
||||
|
||||
Logger.info(`User '${
|
||||
requesterUserId
|
||||
}' is trying to validate auth token for meeting '${meetingId}'`);
|
||||
Logger.info(`User '${requesterUserId}' is trying to validate auth token for meeting '${meetingId}'`);
|
||||
|
||||
return RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
||||
}
|
||||
|
@ -5,6 +5,13 @@ import removeVoiceUser from '/imports/api/voice-users/server/modifiers/removeVoi
|
||||
|
||||
const CLIENT_TYPE_HTML = 'HTML5';
|
||||
|
||||
const clearAllSessions = (sessionUserId) => {
|
||||
const serverSessions = Meteor.server.sessions;
|
||||
Object.keys(serverSessions)
|
||||
.filter(i => serverSessions[i].userId === sessionUserId)
|
||||
.forEach(i => serverSessions[i].close());
|
||||
};
|
||||
|
||||
export default function removeUser(meetingId, userId) {
|
||||
check(meetingId, String);
|
||||
check(userId, String);
|
||||
@ -35,6 +42,9 @@ export default function removeUser(meetingId, userId) {
|
||||
return Logger.error(`Removing user from collection: ${err}`);
|
||||
}
|
||||
|
||||
const sessionUserId = `${meetingId}-${userId}`;
|
||||
clearAllSessions(sessionUserId);
|
||||
|
||||
return Logger.info(`Removed ${CLIENT_TYPE_HTML} user id=${userId} meeting=${meetingId}`);
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,33 @@
|
||||
import { check } from 'meteor/check';
|
||||
import Users from '/imports/api/users';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
|
||||
export default function setConnectionId(meetingId, userId, connectionId) {
|
||||
check(meetingId, String);
|
||||
check(userId, String);
|
||||
check(connectionId, String);
|
||||
|
||||
const selector = {
|
||||
meetingId,
|
||||
userId,
|
||||
};
|
||||
|
||||
const modifier = {
|
||||
$set: {
|
||||
connectionId,
|
||||
},
|
||||
};
|
||||
|
||||
const cb = (err, numChanged) => {
|
||||
if (err) {
|
||||
Logger.error(`Updating connectionId user=${userId}: ${err}`);
|
||||
return;
|
||||
}
|
||||
|
||||
if (numChanged) {
|
||||
Logger.info(`Updated connectionId user=${userId} connectionId=${connectionId} meeting=${meetingId}`);
|
||||
}
|
||||
};
|
||||
|
||||
return Users.update(selector, modifier, cb);
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
import _ from 'lodash';
|
||||
import Users from '/imports/api/users';
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import { check } from 'meteor/check';
|
||||
@ -6,9 +7,20 @@ import mapToAcl from '/imports/startup/mapToAcl';
|
||||
|
||||
import userLeaving from './methods/userLeaving';
|
||||
|
||||
Meteor.publish('current-user', (credentials) => {
|
||||
Meteor.publish('current-user', function currentUserPub(credentials) {
|
||||
const { meetingId, requesterUserId, requesterToken } = credentials;
|
||||
|
||||
const connectionId = this.connection.id;
|
||||
const onCloseConnection = Meteor.bindEnvironment(() => {
|
||||
try {
|
||||
userLeaving(credentials, requesterUserId, connectionId);
|
||||
} catch (e) {
|
||||
Logger.error(`Exception while executing userLeaving: ${e}`);
|
||||
}
|
||||
});
|
||||
|
||||
this._session.socket.on('close', _.debounce(onCloseConnection, 100));
|
||||
|
||||
check(meetingId, String);
|
||||
check(requesterUserId, String);
|
||||
check(requesterToken, String);
|
||||
@ -39,14 +51,6 @@ function users(credentials) {
|
||||
check(requesterUserId, String);
|
||||
check(requesterToken, String);
|
||||
|
||||
this.onStop(() => {
|
||||
try {
|
||||
userLeaving(credentials, requesterUserId);
|
||||
} catch (e) {
|
||||
Logger.error(`Exception while executing userLeaving: ${e}`);
|
||||
}
|
||||
});
|
||||
|
||||
const selector = {
|
||||
meetingId,
|
||||
};
|
||||
|
@ -15,12 +15,10 @@ export default function handleVoiceUpdate({ body }, meetingId) {
|
||||
|
||||
const { intId, voiceUserId } = voiceUser;
|
||||
|
||||
const isDialInUser = (voiceUserId) => {
|
||||
return voiceUserId && (voiceUserId[0] == 'v');
|
||||
}
|
||||
const isDialInUser = userId => userId && (userId[0] === 'v');
|
||||
|
||||
// if the user is dial-in, leaving voice also means leaving userlist
|
||||
if(isDialInUser(voiceUserId)) removeUser(meetingId, intId);
|
||||
if (isDialInUser(voiceUserId)) removeUser(meetingId, intId);
|
||||
|
||||
return removeVoiceUser(meetingId, voiceUser);
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ export default function listenOnlyToggle(credentials, isJoining = true) {
|
||||
name: VoiceUser.callerName,
|
||||
};
|
||||
|
||||
Logger.verbose(`VoiceUser '${requesterUserId}' ${isJoining
|
||||
Logger.info(`VoiceUser '${requesterUserId}' ${isJoining
|
||||
? 'joined' : 'left'} global audio from meeting '${meetingId}'`);
|
||||
|
||||
return RedisPubSub.publishVoiceMessage(CHANNEL, EVENT_NAME, Meeting.voiceProp.voiceConf, payload);
|
||||
|
@ -37,7 +37,7 @@ export default function addVoiceUser(meetingId, voiceUser) {
|
||||
return Logger.error(`Add voice user=${intId}: ${err}`);
|
||||
}
|
||||
|
||||
return Logger.verbose(`Add voice user=${intId} meeting=${meetingId}`);
|
||||
return Logger.info(`Add voice user=${intId} meeting=${meetingId}`);
|
||||
};
|
||||
|
||||
return VoiceUsers.upsert(selector, modifier, cb);
|
||||
|
@ -31,7 +31,7 @@ export default function removeVoiceUser(meetingId, voiceUser) {
|
||||
return Logger.error(`Remove voiceUser=${intId}: ${err}`);
|
||||
}
|
||||
|
||||
return Logger.verbose(`Remove voiceUser=${intId} meeting=${meetingId}`);
|
||||
return Logger.info(`Remove voiceUser=${intId} meeting=${meetingId}`);
|
||||
};
|
||||
|
||||
return VoiceUsers.update(selector, modifier, cb);
|
||||
|
@ -11,7 +11,7 @@ export default function updateVoiceUser(meetingId, voiceUser) {
|
||||
talking: Match.Maybe(Boolean),
|
||||
muted: Match.Maybe(Boolean),
|
||||
voiceConf: String,
|
||||
joined: Match.Maybe(Boolean)
|
||||
joined: Match.Maybe(Boolean),
|
||||
});
|
||||
|
||||
const { intId } = voiceUser;
|
||||
@ -33,7 +33,7 @@ export default function updateVoiceUser(meetingId, voiceUser) {
|
||||
return Logger.error(`Update voiceUser=${intId}: ${err}`);
|
||||
}
|
||||
|
||||
return Logger.verbose(`Update voiceUser=${intId} meeting=${meetingId}`);
|
||||
return Logger.info(`Update voiceUser=${intId} meeting=${meetingId}`);
|
||||
};
|
||||
|
||||
return VoiceUsers.update(selector, modifier, cb);
|
||||
|
@ -28,7 +28,7 @@ export function joinRouteHandler(nextState, replace, callback) {
|
||||
});
|
||||
}
|
||||
|
||||
export function logoutRouteHandler(nextState, replace) {
|
||||
export function logoutRouteHandler() {
|
||||
Auth.logout()
|
||||
.then((logoutURL = window.location.origin) => {
|
||||
const protocolPattern = /^((http|https):\/\/)/;
|
||||
@ -72,12 +72,6 @@ function _addReconnectObservable() {
|
||||
}
|
||||
|
||||
export function authenticatedRouteHandler(nextState, replace, callback) {
|
||||
const credentialsSnapshot = {
|
||||
meetingId: Auth.meetingID,
|
||||
requesterUserId: Auth.userID,
|
||||
requesterToken: Auth.token,
|
||||
};
|
||||
|
||||
if (Auth.loggedIn) {
|
||||
callback();
|
||||
}
|
||||
@ -88,15 +82,6 @@ export function authenticatedRouteHandler(nextState, replace, callback) {
|
||||
.then(callback)
|
||||
.catch((reason) => {
|
||||
log('error', reason);
|
||||
|
||||
// make sure users who did not connect are not added to the meeting
|
||||
// do **not** use the custom call - it relies on expired data
|
||||
Meteor.call('userLogout', credentialsSnapshot, (error) => {
|
||||
if (error) {
|
||||
throw new Error(error);
|
||||
}
|
||||
});
|
||||
|
||||
replace({ pathname: `/error/${reason.error}` });
|
||||
callback();
|
||||
});
|
||||
|
@ -100,13 +100,16 @@ const SUBSCRIPTIONS_NAME = [
|
||||
const BaseContainer = withRouter(withTracker(({ params, router }) => {
|
||||
if (params.errorCode) return params;
|
||||
|
||||
if (!Auth.loggedIn) {
|
||||
return router.push('/logout');
|
||||
const { locale } = Settings.application;
|
||||
const { credentials, loggedIn } = Auth;
|
||||
|
||||
if (!loggedIn) {
|
||||
return {
|
||||
locale,
|
||||
subscriptionsReady: false,
|
||||
};
|
||||
}
|
||||
|
||||
const { credentials } = Auth;
|
||||
|
||||
|
||||
const subscriptionErrorHandler = {
|
||||
onError: (error) => {
|
||||
console.error(error);
|
||||
@ -117,9 +120,8 @@ const BaseContainer = withRouter(withTracker(({ params, router }) => {
|
||||
const subscriptionsHandlers = SUBSCRIPTIONS_NAME.map(name =>
|
||||
Meteor.subscribe(name, credentials, subscriptionErrorHandler));
|
||||
|
||||
|
||||
return {
|
||||
locale: Settings.application.locale,
|
||||
locale,
|
||||
subscriptionsReady: subscriptionsHandlers.every(handler => handler.ready()),
|
||||
};
|
||||
})(Base));
|
||||
|
@ -12,6 +12,10 @@ const browserHistory = useRouterHistory(createHistory)({
|
||||
basename: Meteor.settings.public.app.basename,
|
||||
});
|
||||
|
||||
const disconnect = () => {
|
||||
Meteor.disconnect();
|
||||
};
|
||||
|
||||
const renderRoutes = () => (
|
||||
<Router history={browserHistory} >
|
||||
<Route path="/logout" onEnter={logoutRouteHandler} />
|
||||
@ -33,8 +37,19 @@ const renderRoutes = () => (
|
||||
/>
|
||||
<Redirect from="users/chat" to="/users/chat/public" />
|
||||
</Route>
|
||||
<Route name="meeting-ended" path="/ended/:endedCode" component={Base} onLeave={logoutRouteHandler} />
|
||||
<Route name="error" path="/error/:errorCode" component={Base} />
|
||||
<Route
|
||||
name="meeting-ended"
|
||||
path="/ended/:endedCode"
|
||||
component={Base}
|
||||
onEnter={disconnect}
|
||||
onLeave={logoutRouteHandler}
|
||||
/>
|
||||
<Route
|
||||
name="error"
|
||||
path="/error/:errorCode"
|
||||
component={Base}
|
||||
onEnter={disconnect}
|
||||
/>
|
||||
<Redirect from="*" to="/error/404" />
|
||||
</Router>
|
||||
);
|
||||
|
@ -18,46 +18,17 @@ Logger.configure({
|
||||
|
||||
Meteor.startup(() => {
|
||||
const LOG_CONFIG = Meteor.settings.private.log || {};
|
||||
let { filename } = LOG_CONFIG;
|
||||
const { level } = LOG_CONFIG;
|
||||
|
||||
// console logging
|
||||
if (Meteor.isDevelopment) {
|
||||
Logger.add(Winston.transports.Console, {
|
||||
prettyPrint: false,
|
||||
humanReadableUnhandledException: true,
|
||||
colorize: true,
|
||||
handleExceptions: true,
|
||||
level,
|
||||
});
|
||||
}
|
||||
Logger.add(Winston.transports.Console, {
|
||||
prettyPrint: false,
|
||||
humanReadableUnhandledException: true,
|
||||
colorize: true,
|
||||
handleExceptions: true,
|
||||
level,
|
||||
});
|
||||
|
||||
// file logging
|
||||
if (filename) {
|
||||
// no file rotation
|
||||
if (Meteor.isDevelopment) {
|
||||
const path = Npm.require('path');
|
||||
filename = path.join(process.env.PWD, filename);
|
||||
|
||||
Logger.add(Winston.transports.File, {
|
||||
filename,
|
||||
prettyPrint: true,
|
||||
level,
|
||||
prepend: true,
|
||||
});
|
||||
}
|
||||
|
||||
// daily file rotation
|
||||
if (Meteor.isProduction) {
|
||||
Winston.transports.DailyRotateFile = Npm.require('winston-daily-rotate-file');
|
||||
Logger.add(Winston.transports.DailyRotateFile, {
|
||||
filename,
|
||||
datePattern: '.yyyy-MM-dd',
|
||||
prepend: false,
|
||||
level,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
export default Logger;
|
||||
|
@ -70,7 +70,7 @@ class MettingMessageQueue {
|
||||
};
|
||||
|
||||
try {
|
||||
this.debug(`${eventName} emitted`);
|
||||
this.debug(`${JSON.stringify(data.parsedMessage.core)} emitted`);
|
||||
|
||||
if (isAsync) {
|
||||
callNext();
|
||||
|
@ -46,6 +46,14 @@ const intlMessages = defineMessages({
|
||||
id: 'app.actionsBar.actionsDropdown.stopDesktopShareDesc',
|
||||
description: 'adds context to stop desktop share option',
|
||||
},
|
||||
startRecording: {
|
||||
id: 'app.actionsBar.actionsDropdown.startRecording',
|
||||
description: 'start recording option',
|
||||
},
|
||||
stopRecording: {
|
||||
id: 'app.actionsBar.actionsDropdown.stopRecording',
|
||||
description: 'stop recording option',
|
||||
},
|
||||
});
|
||||
|
||||
class ActionsDropdown extends Component {
|
||||
@ -57,6 +65,7 @@ class ActionsDropdown extends Component {
|
||||
componentWillMount() {
|
||||
this.presentationItemId = _.uniqueId('action-item-');
|
||||
this.videoItemId = _.uniqueId('action-item-');
|
||||
this.recordId = _.uniqueId('action-item-');
|
||||
}
|
||||
|
||||
componentWillUpdate(nextProps) {
|
||||
@ -67,50 +76,69 @@ class ActionsDropdown extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
handlePresentationClick() {
|
||||
this.props.mountModal(<PresentationUploaderContainer />);
|
||||
}
|
||||
|
||||
getAvailableActions() {
|
||||
const {
|
||||
intl,
|
||||
handleShareScreen,
|
||||
handleUnshareScreen,
|
||||
isVideoBroadcasting,
|
||||
isUserPresenter,
|
||||
isUserModerator,
|
||||
allowStartStopRecording,
|
||||
isRecording,
|
||||
record,
|
||||
toggleRecording,
|
||||
} = this.props;
|
||||
|
||||
return _.compact([
|
||||
(<DropdownListItem
|
||||
icon="presentation"
|
||||
label={intl.formatMessage(intlMessages.presentationLabel)}
|
||||
description={intl.formatMessage(intlMessages.presentationDesc)}
|
||||
key={this.presentationItemId}
|
||||
onClick={this.handlePresentationClick}
|
||||
/>),
|
||||
(Meteor.settings.public.kurento.enableScreensharing ?
|
||||
(isUserPresenter ?
|
||||
<DropdownListItem
|
||||
icon="presentation"
|
||||
label={intl.formatMessage(intlMessages.presentationLabel)}
|
||||
description={intl.formatMessage(intlMessages.presentationDesc)}
|
||||
key={this.presentationItemId}
|
||||
onClick={this.handlePresentationClick}
|
||||
/>
|
||||
: null),
|
||||
(Meteor.settings.public.kurento.enableScreensharing && isUserPresenter ?
|
||||
<DropdownListItem
|
||||
icon="desktop"
|
||||
label={intl.formatMessage(isVideoBroadcasting ? intlMessages.stopDesktopShareLabel : intlMessages.desktopShareLabel)}
|
||||
description={intl.formatMessage(isVideoBroadcasting ? intlMessages.stopDesktopShareDesc : intlMessages.desktopShareDesc)}
|
||||
label={intl.formatMessage(isVideoBroadcasting ?
|
||||
intlMessages.stopDesktopShareLabel : intlMessages.desktopShareLabel)}
|
||||
description={intl.formatMessage(isVideoBroadcasting ?
|
||||
intlMessages.stopDesktopShareDesc : intlMessages.desktopShareDesc)}
|
||||
key={this.videoItemId}
|
||||
onClick={isVideoBroadcasting ? handleUnshareScreen : handleShareScreen }
|
||||
onClick={isVideoBroadcasting ? handleUnshareScreen : handleShareScreen}
|
||||
/>
|
||||
: null),
|
||||
: null),
|
||||
(record && isUserModerator && allowStartStopRecording ?
|
||||
<DropdownListItem
|
||||
icon="record"
|
||||
label={intl.formatMessage(isRecording ?
|
||||
intlMessages.stopRecording : intlMessages.startRecording)}
|
||||
description={intl.formatMessage(isRecording ?
|
||||
intlMessages.stopRecording : intlMessages.startRecording)}
|
||||
key={this.recordId}
|
||||
onClick={toggleRecording}
|
||||
/>
|
||||
: null),
|
||||
]);
|
||||
}
|
||||
|
||||
handlePresentationClick() {
|
||||
this.props.mountModal(<PresentationUploaderContainer />);
|
||||
}
|
||||
|
||||
render() {
|
||||
const {
|
||||
intl,
|
||||
isUserPresenter,
|
||||
handleShareScreen,
|
||||
handleUnshareScreen,
|
||||
isVideoBroadcasting,
|
||||
isUserModerator,
|
||||
} = this.props;
|
||||
|
||||
const availableActions = this.getAvailableActions();
|
||||
|
||||
if (!isUserPresenter) return null;
|
||||
if ((!isUserPresenter && !isUserModerator) || availableActions.length === 0) return null;
|
||||
|
||||
return (
|
||||
<Dropdown ref={(ref) => { this._dropdown = ref; }} >
|
||||
|
@ -18,8 +18,17 @@ class ActionsBar extends React.PureComponent {
|
||||
emojiList,
|
||||
emojiSelected,
|
||||
handleEmojiChange,
|
||||
isUserModerator,
|
||||
recordSettingsList,
|
||||
toggleRecording,
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
allowStartStopRecording,
|
||||
recording: isRecording,
|
||||
record,
|
||||
} = recordSettingsList;
|
||||
|
||||
const actionBarClasses = {};
|
||||
actionBarClasses[styles.centerWithActions] = isUserPresenter;
|
||||
actionBarClasses[styles.center] = true;
|
||||
@ -32,6 +41,11 @@ class ActionsBar extends React.PureComponent {
|
||||
handleShareScreen,
|
||||
handleUnshareScreen,
|
||||
isVideoBroadcasting,
|
||||
isUserModerator,
|
||||
allowStartStopRecording,
|
||||
isRecording,
|
||||
record,
|
||||
toggleRecording,
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
@ -9,6 +9,7 @@ const ActionsBarContainer = props => <ActionsBar {...props} />;
|
||||
|
||||
export default withTracker(() => ({
|
||||
isUserPresenter: Service.isUserPresenter(),
|
||||
isUserModerator: Service.isUserModerator(),
|
||||
emojiList: Service.getEmojiList(),
|
||||
emojiSelected: Service.getEmoji(),
|
||||
handleEmojiChange: Service.setEmoji,
|
||||
@ -17,5 +18,6 @@ export default withTracker(() => ({
|
||||
handleShareScreen: () => shareScreen(),
|
||||
handleUnshareScreen: () => unshareScreen(),
|
||||
isVideoBroadcasting: isVideoBroadcasting(),
|
||||
|
||||
recordSettingsList: Service.recordSettingsList(),
|
||||
toggleRecording: Service.toggleRecording,
|
||||
}))(ActionsBarContainer);
|
||||
|
@ -2,10 +2,14 @@ import Auth from '/imports/ui/services/auth';
|
||||
import Users from '/imports/api/users';
|
||||
import { makeCall } from '/imports/ui/services/api';
|
||||
import { EMOJI_STATUSES } from '/imports/utils/statuses';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
|
||||
export default {
|
||||
isUserPresenter: () => Users.findOne({ userId: Auth.userID }).presenter,
|
||||
getEmoji: () => Users.findOne({ userId: Auth.userID }).emoji,
|
||||
setEmoji: status => makeCall('setEmojiStatus', Auth.userID, status),
|
||||
getEmojiList: () => EMOJI_STATUSES,
|
||||
isUserModerator: () => Users.findOne({ userId: Auth.userID }).moderator,
|
||||
recordSettingsList: () => Meetings.findOne({ meetingId: Auth.meetingID }).recordProp,
|
||||
toggleRecording: () => makeCall('toggleRecording'),
|
||||
};
|
||||
|
@ -122,12 +122,12 @@ class App extends Component {
|
||||
});
|
||||
|
||||
return (
|
||||
<nav
|
||||
<div
|
||||
className={cx(styles.userList, userListStyle)}
|
||||
aria-label={intl.formatMessage(intlMessages.userListLabel)}
|
||||
>
|
||||
{userList}
|
||||
</nav>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -184,13 +184,13 @@ class App extends Component {
|
||||
<main className={styles.main}>
|
||||
<NotificationsBarContainer />
|
||||
<section className={styles.wrapper}>
|
||||
{this.renderUserList()}
|
||||
{this.renderChat()}
|
||||
<div className={styles.content}>
|
||||
{this.renderNavBar()}
|
||||
{this.renderMedia()}
|
||||
{this.renderActionsBar()}
|
||||
</div>
|
||||
{this.renderUserList()}
|
||||
{this.renderChat()}
|
||||
{this.renderSidebar()}
|
||||
</section>
|
||||
<ModalContainer />
|
||||
|
@ -73,19 +73,12 @@ export default withRouter(injectIntl(withModalMounter(withTracker(({ router, int
|
||||
baseControls.updateLoadingState(intl.formatMessage(intlMessages.waitingApprovalMessage));
|
||||
}
|
||||
|
||||
// Displayed error messages according to the mode (removed, end meeting)
|
||||
const sendToError = (code, message) => {
|
||||
Auth.clearCredentials()
|
||||
.then(() => {
|
||||
router.push(`/error/${code}`);
|
||||
baseControls.updateErrorState(message);
|
||||
});
|
||||
};
|
||||
|
||||
// Check if user is removed out of the session
|
||||
Users.find({ userId: Auth.userID }).observeChanges({
|
||||
changed(id, fields) {
|
||||
if (fields.ejected) {
|
||||
const hasNewConnection = 'connectionId' in fields && (fields.connectionId !== Meteor.connection._lastSessionId);
|
||||
|
||||
if (fields.ejected || hasNewConnection) {
|
||||
router.push(`/ended/${403}`);
|
||||
}
|
||||
},
|
||||
|
@ -54,6 +54,7 @@ $bars-padding: $lg-padding-x - .45rem; // -.45 so user-list and chat title is al
|
||||
.content {
|
||||
@extend %full-page;
|
||||
|
||||
order: 3;
|
||||
padding: 0 .25%;
|
||||
|
||||
&:before,
|
||||
@ -99,6 +100,8 @@ $bars-padding: $lg-padding-x - .45rem; // -.45 so user-list and chat title is al
|
||||
z-index: 2;
|
||||
overflow: visible;
|
||||
|
||||
order: 1;
|
||||
|
||||
@include mq($small-only) {
|
||||
padding-top: $navbar-height;
|
||||
}
|
||||
@ -120,6 +123,8 @@ $bars-padding: $lg-padding-x - .45rem; // -.45 so user-list and chat title is al
|
||||
.chat {
|
||||
@extend %full-page;
|
||||
|
||||
order: 2;
|
||||
|
||||
@include mq($small-only) {
|
||||
z-index: 3;
|
||||
padding-top: $navbar-height;
|
||||
|
@ -117,13 +117,13 @@ export default class Button extends BaseButton {
|
||||
circle,
|
||||
hideLabel,
|
||||
label,
|
||||
'aria-label' : ariaLabel
|
||||
'aria-label': ariaLabel,
|
||||
} = this.props;
|
||||
|
||||
const renderFuncName = circle ? 'renderCircle' : 'renderDefault';
|
||||
|
||||
if (hideLabel) {
|
||||
const tooltipLabel = label ? label : ariaLabel;
|
||||
const tooltipLabel = label || ariaLabel;
|
||||
|
||||
return (
|
||||
<Tooltip
|
||||
|
27
bigbluebutton-html5/imports/ui/components/dropdown/list/component.jsx
Normal file → Executable file
27
bigbluebutton-html5/imports/ui/components/dropdown/list/component.jsx
Normal file → Executable file
@ -22,6 +22,12 @@ const propTypes = {
|
||||
}
|
||||
return true;
|
||||
}).isRequired,
|
||||
|
||||
horizontal: PropTypes.bool,
|
||||
};
|
||||
|
||||
const defaultProps = {
|
||||
horizontal: false,
|
||||
};
|
||||
|
||||
export default class DropdownList extends Component {
|
||||
@ -59,8 +65,17 @@ export default class DropdownList extends Component {
|
||||
handleItemKeyDown(event, callback) {
|
||||
const { getDropdownMenuParent } = this.props;
|
||||
let nextFocusedIndex = this.state.focusedIndex;
|
||||
const isHorizontal = this.props.horizontal;
|
||||
const navigationKeys = {
|
||||
previous: KEY_CODES[`ARROW_${isHorizontal ? 'LEFT' : 'UP'}`],
|
||||
next: KEY_CODES[`ARROW_${isHorizontal ? 'RIGHT' : 'DOWN'}`],
|
||||
click: isHorizontal ? [KEY_CODES.ENTER] : [KEY_CODES.ENTER, KEY_CODES.ARROW_RIGHT],
|
||||
close: [KEY_CODES.ESCAPE,
|
||||
KEY_CODES.TAB,
|
||||
KEY_CODES[`ARROW_${isHorizontal ? 'DOWN' : 'LEFT'}`]],
|
||||
};
|
||||
|
||||
if (KEY_CODES.ARROW_UP === event.which) {
|
||||
if (navigationKeys.previous === event.which) {
|
||||
event.stopPropagation();
|
||||
|
||||
nextFocusedIndex -= 1;
|
||||
@ -72,7 +87,7 @@ export default class DropdownList extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
if ([KEY_CODES.ARROW_DOWN].includes(event.keyCode)) {
|
||||
if ([navigationKeys.next].includes(event.keyCode)) {
|
||||
event.stopPropagation();
|
||||
|
||||
nextFocusedIndex += 1;
|
||||
@ -82,12 +97,12 @@ export default class DropdownList extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
if ([KEY_CODES.ENTER, KEY_CODES.ARROW_RIGHT].includes(event.keyCode)) {
|
||||
if (navigationKeys.click.includes(event.keyCode)) {
|
||||
event.stopPropagation();
|
||||
document.activeElement.firstChild.click();
|
||||
}
|
||||
|
||||
if ([KEY_CODES.ESCAPE, KEY_CODES.TAB, KEY_CODES.ARROW_LEFT].includes(event.keyCode)) {
|
||||
if (navigationKeys.close.includes(event.keyCode)) {
|
||||
const { dropdownHide } = this.props;
|
||||
|
||||
event.stopPropagation();
|
||||
@ -151,10 +166,11 @@ export default class DropdownList extends Component {
|
||||
});
|
||||
});
|
||||
|
||||
const listDirection = this.props.horizontal ? styles.horizontalList : styles.verticalList;
|
||||
return (
|
||||
<ul
|
||||
style={style}
|
||||
className={cx(styles.list, className)}
|
||||
className={cx(listDirection, className)}
|
||||
role="menu"
|
||||
ref={(menu) => {
|
||||
this._menu = menu;
|
||||
@ -168,3 +184,4 @@ export default class DropdownList extends Component {
|
||||
}
|
||||
|
||||
DropdownList.propTypes = propTypes;
|
||||
DropdownList.defaultProps = defaultProps;
|
||||
|
18
bigbluebutton-html5/imports/ui/components/dropdown/list/styles.scss
Normal file → Executable file
18
bigbluebutton-html5/imports/ui/components/dropdown/list/styles.scss
Normal file → Executable file
@ -3,7 +3,7 @@
|
||||
$item-bg-focus: $color-blue-lightest;
|
||||
$item-border-focus: $color-blue-lighter;
|
||||
|
||||
.list {
|
||||
%list {
|
||||
list-style: none;
|
||||
font-size: $font-size-base;
|
||||
margin: 0;
|
||||
@ -12,7 +12,6 @@ $item-border-focus: $color-blue-lighter;
|
||||
color: $color-gray-dark;
|
||||
padding: ($line-height-computed / 2);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
@include mq($small-only) {
|
||||
font-size: $font-size-large * 1.1;
|
||||
@ -20,6 +19,20 @@ $item-border-focus: $color-blue-lighter;
|
||||
}
|
||||
}
|
||||
|
||||
.verticalList {
|
||||
@extend %list;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.horizontalList {
|
||||
@extend %list;
|
||||
padding: 0;
|
||||
flex-direction: row;
|
||||
@include mq($small-only) {
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
.title {
|
||||
@extend %text-elipsis;
|
||||
color: $color-gray;
|
||||
@ -42,7 +55,6 @@ $item-border-focus: $color-blue-lighter;
|
||||
display: flex;
|
||||
flex: 1 1 100%;
|
||||
padding: ($line-height-computed / 3) 0;
|
||||
padding-left: ($line-height-computed / 3);
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
|
@ -44,6 +44,10 @@ const intlMessages = defineMessages({
|
||||
id: 'app.leaveConfirmation.endMeetingLabel',
|
||||
description: 'End meeting button label',
|
||||
},
|
||||
endMeetingAriaLabel: {
|
||||
id: 'app.leaveConfirmation.endMeetingAriaLabel',
|
||||
description: 'End meeting button aria label',
|
||||
},
|
||||
endMeetingDesc: {
|
||||
id: 'app.leaveConfirmation.endMeetingDesc',
|
||||
description: 'adds context to end meeting option',
|
||||
|
@ -3,6 +3,8 @@ import { withTracker } from 'meteor/react-meteor-data';
|
||||
import Settings from '/imports/ui/services/settings';
|
||||
import Meetings from '/imports/api/meetings/';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import { notify } from '/imports/ui/services/notification';
|
||||
import Media from './component';
|
||||
import MediaService from './service';
|
||||
import PresentationAreaContainer from '../presentation/container';
|
||||
@ -16,6 +18,17 @@ const defaultProps = {
|
||||
defaultContent: <DefaultContent />,
|
||||
};
|
||||
|
||||
const intlMessages = defineMessages({
|
||||
screenshareStarted: {
|
||||
id: 'app.media.screenshare.start',
|
||||
description: 'toast to show when a screenshare has started',
|
||||
},
|
||||
screenshareEnded: {
|
||||
id: 'app.media.screenshare.end',
|
||||
description: 'toast to show when a screenshare has ended',
|
||||
},
|
||||
});
|
||||
|
||||
class MediaContainer extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
@ -30,6 +43,19 @@ class MediaContainer extends Component {
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
const {
|
||||
isScreensharing,
|
||||
intl,
|
||||
} = this.props;
|
||||
|
||||
if (isScreensharing !== nextProps.isScreensharing) {
|
||||
if (nextProps.isScreensharing) {
|
||||
notify(intl.formatMessage(intlMessages.screenshareStarted), 'info', 'desktop');
|
||||
} else {
|
||||
notify(intl.formatMessage(intlMessages.screenshareEnded), 'info', 'desktop');
|
||||
}
|
||||
}
|
||||
|
||||
if (nextProps.current_presentation !== this.props.current_presentation) {
|
||||
if (nextProps.current_presentation) {
|
||||
this.setState({ content: this.props.content });
|
||||
@ -53,8 +79,8 @@ class MediaContainer extends Component {
|
||||
MediaContainer.defaultProps = defaultProps;
|
||||
|
||||
export default withTracker(() => {
|
||||
const videoSettings = Settings.video;
|
||||
const viewVideoProvider = videoSettings.viewParticipantsWebcams;
|
||||
const { dataSaving } = Settings;
|
||||
const { viewParticipantsWebcams, viewScreenshare } = dataSaving;
|
||||
|
||||
const data = {};
|
||||
data.currentPresentation = MediaService.getPresentationInfo();
|
||||
@ -68,13 +94,15 @@ export default withTracker(() => {
|
||||
data.content = <PresentationAreaContainer />;
|
||||
}
|
||||
|
||||
if (MediaService.shouldShowScreenshare()) {
|
||||
if (MediaService.shouldShowScreenshare() && (viewScreenshare || MediaService.isUserPresenter())) {
|
||||
data.content = <ScreenshareContainer />;
|
||||
}
|
||||
|
||||
if (MediaService.shouldShowOverlay() && viewVideoProvider && !webcamOnlyModerator) {
|
||||
if (MediaService.shouldShowOverlay() && viewParticipantsWebcams && !webcamOnlyModerator) {
|
||||
data.overlay = <VideoProviderContainer />;
|
||||
}
|
||||
|
||||
data.isScreensharing = MediaService.isVideoBroadcasting();
|
||||
|
||||
return data;
|
||||
})(MediaContainer);
|
||||
})(injectIntl(MediaContainer));
|
||||
|
@ -1,5 +1,7 @@
|
||||
import Presentations from '/imports/api/presentations';
|
||||
import { isVideoBroadcasting } from '/imports/ui/components/screenshare/service';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
import Users from '/imports/api/users';
|
||||
|
||||
const getPresentationInfo = () => {
|
||||
const currentPresentation = Presentations.findOne({
|
||||
@ -12,6 +14,8 @@ const getPresentationInfo = () => {
|
||||
};
|
||||
};
|
||||
|
||||
const isUserPresenter = () => Users.findOne({ userId: Auth.userID }).presenter;
|
||||
|
||||
function shouldShowWhiteboard() {
|
||||
return true;
|
||||
}
|
||||
@ -29,4 +33,6 @@ export default {
|
||||
shouldShowWhiteboard,
|
||||
shouldShowScreenshare,
|
||||
shouldShowOverlay,
|
||||
isUserPresenter,
|
||||
isVideoBroadcasting,
|
||||
};
|
||||
|
@ -20,6 +20,8 @@ const defaultProps = {
|
||||
|
||||
export default class ModalBase extends Component {
|
||||
render() {
|
||||
if (!this.props.isOpen) return null;
|
||||
|
||||
return (
|
||||
<ReactModal {...this.props}>
|
||||
{this.props.children}
|
||||
|
@ -2,10 +2,6 @@ import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import _ from 'lodash';
|
||||
import cx from 'classnames';
|
||||
import { styles } from './styles.scss';
|
||||
import Button from '../button/component';
|
||||
import RecordingIndicator from './recording-indicator/component';
|
||||
import SettingsDropdownContainer from './settings-dropdown/container';
|
||||
import Icon from '/imports/ui/components/icon/component';
|
||||
import BreakoutJoinConfirmation from '/imports/ui/components/breakout-join-confirmation/component';
|
||||
import Dropdown from '/imports/ui/components/dropdown/component';
|
||||
@ -15,22 +11,42 @@ import DropdownList from '/imports/ui/components/dropdown/list/component';
|
||||
import DropdownListItem from '/imports/ui/components/dropdown/list/item/component';
|
||||
import { withModalMounter } from '/imports/ui/components/modal/service';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import { styles } from './styles.scss';
|
||||
import Button from '../button/component';
|
||||
import RecordingIndicator from './recording-indicator/component';
|
||||
import SettingsDropdownContainer from './settings-dropdown/container';
|
||||
|
||||
const intlMessages = defineMessages({
|
||||
toggleUserListLabel: {
|
||||
id: 'app.navBar.userListToggleBtnLabel',
|
||||
description: 'Toggle button label',
|
||||
},
|
||||
toggleUserListAria: {
|
||||
id: 'app.navBar.toggleUserList.ariaLabel',
|
||||
description: 'description of the lists inside the userlist',
|
||||
},
|
||||
newMessages: {
|
||||
id: 'app.navBar.toggleUserList.newMessages',
|
||||
description: 'label for toggleUserList btn when showing red notification',
|
||||
},
|
||||
recordingSession: {
|
||||
id: 'app.navBar.recording',
|
||||
description: 'label for when the session is being recorded',
|
||||
},
|
||||
recordingIndicatorOn: {
|
||||
id: 'app.navBar.recording.on',
|
||||
description: 'label for indicator when the session is being recorded',
|
||||
},
|
||||
recordingIndicatorOff: {
|
||||
id: 'app.navBar.recording.off',
|
||||
description: 'label for indicator when the session is not being recorded',
|
||||
},
|
||||
});
|
||||
|
||||
const propTypes = {
|
||||
presentationTitle: PropTypes.string.isRequired,
|
||||
hasUnreadMessages: PropTypes.bool.isRequired,
|
||||
beingRecorded: PropTypes.bool.isRequired,
|
||||
beingRecorded: PropTypes.object.isRequired,
|
||||
};
|
||||
|
||||
const defaultProps = {
|
||||
@ -161,6 +177,8 @@ class NavBar extends Component {
|
||||
render() {
|
||||
const { hasUnreadMessages, beingRecorded, isExpanded, intl } = this.props;
|
||||
|
||||
const recordingMessage = beingRecorded.recording ? 'recordingIndicatorOn' : 'recordingIndicatorOff';
|
||||
|
||||
const toggleBtnClasses = {};
|
||||
toggleBtnClasses[styles.btn] = true;
|
||||
toggleBtnClasses[styles.btnWithNotificationDot] = hasUnreadMessages;
|
||||
@ -175,7 +193,8 @@ class NavBar extends Component {
|
||||
circle
|
||||
hideLabel
|
||||
label={intl.formatMessage(intlMessages.toggleUserListLabel)}
|
||||
icon={'user'}
|
||||
aria-label={intl.formatMessage(intlMessages.toggleUserListAria)}
|
||||
icon="user"
|
||||
className={cx(toggleBtnClasses)}
|
||||
aria-expanded={isExpanded}
|
||||
aria-describedby="newMessage"
|
||||
@ -185,9 +204,15 @@ class NavBar extends Component {
|
||||
aria-label={hasUnreadMessages ? intl.formatMessage(intlMessages.newMessages) : null}
|
||||
/>
|
||||
</div>
|
||||
<div className={styles.center} role="banner">
|
||||
<div className={styles.center}>
|
||||
{this.renderPresentationTitle()}
|
||||
<RecordingIndicator beingRecorded={beingRecorded} />
|
||||
{beingRecorded.record ?
|
||||
<span className={styles.presentationTitleSeparator}>|</span>
|
||||
: null}
|
||||
<RecordingIndicator
|
||||
{...beingRecorded}
|
||||
title={intl.formatMessage(intlMessages[recordingMessage])}
|
||||
/>
|
||||
</div>
|
||||
<div className={styles.right}>
|
||||
<SettingsDropdownContainer />
|
||||
|
@ -29,7 +29,7 @@ export default withRouter(withTracker(({ location, router }) => {
|
||||
|
||||
if (meetingObject != null) {
|
||||
meetingTitle = meetingObject.meetingProp.name;
|
||||
meetingRecorded = meetingObject.recordProp.recording;
|
||||
meetingRecorded = meetingObject.recordProp;
|
||||
}
|
||||
|
||||
const checkUnreadMessages = () => {
|
||||
|
@ -1,9 +1,17 @@
|
||||
import React from 'react';
|
||||
import { styles } from './styles';
|
||||
|
||||
const RecordingIndicator = ({ beingRecorded }) => {
|
||||
if (!beingRecorded) return null;
|
||||
return <div className={styles.indicator} />;
|
||||
const RecordingIndicator = ({
|
||||
record, title, recording,
|
||||
}) => {
|
||||
if (!record) return null;
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className={recording ? styles.recordIndicator : styles.notRecording} />
|
||||
<span className={recording ? styles.recordingLabel : styles.notRecordingLabel}>{title}</span>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
export default RecordingIndicator;
|
||||
|
@ -1,22 +1,12 @@
|
||||
@import "../../../stylesheets/variables/_all";
|
||||
|
||||
.indicator {
|
||||
%baseIndicator {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: $font-size-base;
|
||||
height: $font-size-base;
|
||||
border-radius: 50%;
|
||||
border: 1px solid $color-white;
|
||||
margin-left: $line-height-computed;
|
||||
|
||||
&:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
left: calc( -1px - #{($line-height-computed / 2)});
|
||||
width: 1px;
|
||||
height: 100%;
|
||||
background-color: $color-white;
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
@ -31,3 +21,37 @@
|
||||
background-color: $color-danger;
|
||||
}
|
||||
}
|
||||
|
||||
%baseIndicatorLabel {
|
||||
font-weight: 200;
|
||||
font-size: $font-size-base;
|
||||
margin: 0 0 0 0.5rem;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.recordIndicator {
|
||||
@extend %baseIndicator;
|
||||
}
|
||||
|
||||
.notRecording {
|
||||
@extend %baseIndicator;
|
||||
border: 1px solid $color-gray;
|
||||
|
||||
&:after {
|
||||
background-color: $color-gray;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.recordingLabel {
|
||||
@extend %baseIndicatorLabel;
|
||||
color: $color-white;
|
||||
}
|
||||
|
||||
.notRecordingLabel {
|
||||
@extend %baseIndicatorLabel;
|
||||
color: $color-gray;
|
||||
}
|
||||
|
@ -39,6 +39,12 @@
|
||||
}
|
||||
}
|
||||
|
||||
.presentationTitleSeparator {
|
||||
color: $color-gray;
|
||||
font-size: $font-size-base;
|
||||
margin: 0 1rem;
|
||||
}
|
||||
|
||||
.btnWithNotificationDot {
|
||||
position: relative;
|
||||
|
||||
|
@ -13,7 +13,6 @@ const intlMessages = defineMessages({
|
||||
});
|
||||
|
||||
class PollingComponent extends Component {
|
||||
|
||||
getStyles() {
|
||||
const number = this.props.poll.answers.length + 1;
|
||||
const buttonStyle =
|
||||
@ -32,7 +31,7 @@ class PollingComponent extends Component {
|
||||
const { intl } = this.props;
|
||||
|
||||
return (
|
||||
<div className={styles.pollingContainer}>
|
||||
<div className={styles.pollingContainer} role="alert">
|
||||
<div className={styles.pollingTitle}>
|
||||
<p>
|
||||
{intl.formatMessage(intlMessages.pollingTitleLabel)}
|
||||
@ -65,8 +64,7 @@ class PollingComponent extends Component {
|
||||
>
|
||||
{`Select this option to vote for ${pollAnswer.key}`}
|
||||
</div>
|
||||
</div>),
|
||||
)}
|
||||
</div>))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -81,11 +79,9 @@ PollingComponent.propTypes = {
|
||||
handleVote: PropTypes.func.isRequired,
|
||||
poll: PropTypes.shape({
|
||||
pollId: PropTypes.string.isRequired,
|
||||
answers: PropTypes.arrayOf(
|
||||
PropTypes.shape({
|
||||
id: PropTypes.number.isRequired,
|
||||
key: PropTypes.string.isRequired,
|
||||
}).isRequired,
|
||||
).isRequired,
|
||||
answers: PropTypes.arrayOf(PropTypes.shape({
|
||||
id: PropTypes.number.isRequired,
|
||||
key: PropTypes.string.isRequired,
|
||||
}).isRequired).isRequired,
|
||||
}).isRequired,
|
||||
};
|
||||
|
@ -193,7 +193,7 @@ class PresentationToolbar extends Component {
|
||||
aria-relevant="all"
|
||||
value={currentSlideNum}
|
||||
onChange={actions.skipToSlideHandler}
|
||||
className={styles.skipSlide}
|
||||
className={styles.skipSlideSelect}
|
||||
>
|
||||
{this.renderSkipSlideOpts(numberOfSlides)}
|
||||
</select>
|
||||
@ -208,6 +208,7 @@ class PresentationToolbar extends Component {
|
||||
onClick={actions.nextSlideHandler}
|
||||
label={intl.formatMessage(intlMessages.nextSlideLabel)}
|
||||
hideLabel
|
||||
className={styles.skipSlide}
|
||||
/>
|
||||
|
||||
{/* Fit to width button
|
||||
|
@ -33,7 +33,7 @@ $controls-background: #F0F2F6 !default;
|
||||
background-color: $controls-background;
|
||||
color: $controls-color;
|
||||
border-top: 0;
|
||||
border-right: $color-gray-light 2px solid;
|
||||
border-right: $color-gray-light $border-size solid;
|
||||
border-bottom: 0;
|
||||
border-left: 0;
|
||||
border-radius: 0;
|
||||
@ -58,12 +58,14 @@ $controls-background: #F0F2F6 !default;
|
||||
border-right: 0 !important;
|
||||
}
|
||||
|
||||
.skipSlide,
|
||||
.prevSlide {
|
||||
border-radius: 5px 0 0 5px;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.skipSlide {
|
||||
.skipSlideSelect {
|
||||
padding: 0 0.8%;
|
||||
border-left: $border-size solid $color-gray-light !important;
|
||||
}
|
||||
|
||||
.zoomSlider {
|
||||
|
8
bigbluebutton-html5/imports/ui/components/screenshare/component.jsx
Normal file → Executable file
8
bigbluebutton-html5/imports/ui/components/screenshare/component.jsx
Normal file → Executable file
@ -4,6 +4,14 @@ export default class ScreenshareComponent extends React.Component {
|
||||
componentDidMount() {
|
||||
this.props.presenterScreenshareHasStarted();
|
||||
}
|
||||
componentWillReceiveProps(nextProps) {
|
||||
if (this.props.isPresenter && !nextProps.isPresenter) {
|
||||
this.props.unshareScreen();
|
||||
}
|
||||
}
|
||||
componentWillUnmount() {
|
||||
this.props.presenterScreenshareHasEnded();
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
|
26
bigbluebutton-html5/imports/ui/components/screenshare/container.jsx
Normal file → Executable file
26
bigbluebutton-html5/imports/ui/components/screenshare/container.jsx
Normal file → Executable file
@ -1,14 +1,13 @@
|
||||
import React from 'react';
|
||||
import { withTracker } from 'meteor/react-meteor-data';
|
||||
import { isVideoBroadcasting, presenterScreenshareHasEnded,
|
||||
import Users from '/imports/api/users/';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
import mapUser from '/imports/ui/services/user/mapUser';
|
||||
import { isVideoBroadcasting, presenterScreenshareHasEnded, unshareScreen,
|
||||
presenterScreenshareHasStarted } from './service';
|
||||
import ScreenshareComponent from './component';
|
||||
|
||||
class ScreenshareContainer extends React.Component {
|
||||
componentWillUnmount() {
|
||||
this.props.presenterScreenshareHasEnded();
|
||||
}
|
||||
|
||||
render() {
|
||||
if (this.props.isVideoBroadcasting()) {
|
||||
return <ScreenshareComponent {...this.props} />;
|
||||
@ -18,9 +17,14 @@ class ScreenshareContainer extends React.Component {
|
||||
}
|
||||
}
|
||||
|
||||
export default withTracker(() => ({
|
||||
isVideoBroadcasting,
|
||||
presenterScreenshareHasStarted,
|
||||
presenterScreenshareHasEnded,
|
||||
}))(ScreenshareContainer);
|
||||
|
||||
export default withTracker(() => {
|
||||
const user = Users.findOne({ userId: Auth.userID });
|
||||
const MappedUser = mapUser(user);
|
||||
return {
|
||||
isPresenter: MappedUser.isPresenter,
|
||||
unshareScreen,
|
||||
isVideoBroadcasting,
|
||||
presenterScreenshareHasStarted,
|
||||
presenterScreenshareHasEnded,
|
||||
};
|
||||
})(ScreenshareContainer);
|
||||
|
@ -3,7 +3,7 @@ import Modal from '/imports/ui/components/modal/fullscreen/component';
|
||||
import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
|
||||
import { defineMessages, injectIntl, intlShape } from 'react-intl';
|
||||
import ClosedCaptions from '/imports/ui/components/settings/submenus/closed-captions/component';
|
||||
import DataSaving from '/imports/ui/components/settings/submenus/dataSaving/component';
|
||||
import DataSaving from '/imports/ui/components/settings/submenus/data-saving/component';
|
||||
import Application from '/imports/ui/components/settings/submenus/application/container';
|
||||
import _ from 'lodash';
|
||||
import PropTypes from 'prop-types';
|
||||
@ -54,14 +54,14 @@ const intlMessages = defineMessages({
|
||||
description: 'Settings modal save button label',
|
||||
},
|
||||
dataSavingLabel: {
|
||||
id: 'app.settings.dataSaving.label',
|
||||
id: 'app.settings.dataSavingTab.label',
|
||||
description: 'label for data savings tab',
|
||||
},
|
||||
});
|
||||
|
||||
const propTypes = {
|
||||
intl: intlShape.isRequired,
|
||||
video: PropTypes.object.isRequired,
|
||||
dataSaving: PropTypes.object.isRequired,
|
||||
application: PropTypes.object.isRequired,
|
||||
cc: PropTypes.object.isRequired,
|
||||
participants: PropTypes.object.isRequired,
|
||||
@ -79,18 +79,18 @@ class Settings extends Component {
|
||||
super(props);
|
||||
|
||||
const {
|
||||
video, participants, cc, application,
|
||||
dataSaving, participants, cc, application,
|
||||
} = props;
|
||||
|
||||
this.state = {
|
||||
current: {
|
||||
video: _.clone(video),
|
||||
dataSaving: _.clone(dataSaving),
|
||||
application: _.clone(application),
|
||||
cc: _.clone(cc),
|
||||
participants: _.clone(participants),
|
||||
},
|
||||
saved: {
|
||||
video: _.clone(video),
|
||||
dataSaving: _.clone(dataSaving),
|
||||
application: _.clone(application),
|
||||
cc: _.clone(cc),
|
||||
participants: _.clone(participants),
|
||||
@ -158,7 +158,7 @@ class Settings extends Component {
|
||||
aria-labelledby="dataSavingTab"
|
||||
selectedClassName={styles.selected}
|
||||
>
|
||||
<Icon iconName="more" className={styles.icon} />
|
||||
<Icon iconName="network" className={styles.icon} />
|
||||
<span id="dataSaving">{intl.formatMessage(intlMessages.dataSavingLabel)}</span>
|
||||
</Tab>
|
||||
{/* { isModerator ? */}
|
||||
@ -190,7 +190,7 @@ class Settings extends Component {
|
||||
</TabPanel>
|
||||
<TabPanel className={styles.tabPanel}>
|
||||
<DataSaving
|
||||
settings={this.state.current.video}
|
||||
settings={this.state.current.dataSaving}
|
||||
handleUpdateSettings={this.handleUpdateSettings}
|
||||
/>
|
||||
</TabPanel>
|
||||
@ -217,7 +217,6 @@ class Settings extends Component {
|
||||
title={intl.formatMessage(intlMessages.SettingsLabel)}
|
||||
confirm={{
|
||||
callback: () => {
|
||||
this.props.mountModal(null);
|
||||
if (location.pathname.includes('/users')) {
|
||||
router.push('/');
|
||||
}
|
||||
@ -227,9 +226,7 @@ class Settings extends Component {
|
||||
description: intl.formatMessage(intlMessages.SaveLabelDesc),
|
||||
}}
|
||||
dismiss={{
|
||||
callback: () => {
|
||||
Settings.setHtmlFontSize(this.state.saved.application.fontSize);
|
||||
},
|
||||
callback: () => Settings.setHtmlFontSize(this.state.saved.application.fontSize),
|
||||
label: intl.formatMessage(intlMessages.CancelLabel),
|
||||
description: intl.formatMessage(intlMessages.CancelLabelDesc),
|
||||
}}
|
||||
|
@ -17,7 +17,7 @@ const SettingsContainer = props => (
|
||||
|
||||
export default withRouter(withTracker(() => ({
|
||||
audio: SettingsService.audio,
|
||||
video: SettingsService.video,
|
||||
dataSaving: SettingsService.dataSaving,
|
||||
application: SettingsService.application,
|
||||
cc: SettingsService.cc,
|
||||
participants: SettingsService.participants,
|
||||
|
@ -67,6 +67,8 @@ class ApplicationMenu extends BaseMenu {
|
||||
this.state = {
|
||||
settingsName: 'application',
|
||||
settings: props.settings,
|
||||
isLargestFontSize: false,
|
||||
isSmallestFontSize: false,
|
||||
};
|
||||
}
|
||||
|
||||
@ -95,6 +97,8 @@ class ApplicationMenu extends BaseMenu {
|
||||
const canIncreaseFontSize = availableFontSizes.indexOf(currentFontSize) < MAX_FONTSIZE;
|
||||
const fs = canIncreaseFontSize ? availableFontSizes.indexOf(currentFontSize) + 1 : MAX_FONTSIZE;
|
||||
this.changeFontSize(availableFontSizes[fs]);
|
||||
if (fs === MAX_FONTSIZE) this.setState({ isLargestFontSize: true });
|
||||
this.setState({ isSmallestFontSize: false });
|
||||
}
|
||||
|
||||
handleDecreaseFontSize() {
|
||||
@ -103,6 +107,8 @@ class ApplicationMenu extends BaseMenu {
|
||||
const canDecreaseFontSize = availableFontSizes.indexOf(currentFontSize) > MIN_FONTSIZE;
|
||||
const fs = canDecreaseFontSize ? availableFontSizes.indexOf(currentFontSize) - 1 : MIN_FONTSIZE;
|
||||
this.changeFontSize(availableFontSizes[fs]);
|
||||
if (fs === MIN_FONTSIZE) this.setState({ isSmallestFontSize: true });
|
||||
this.setState({ isLargestFontSize: false });
|
||||
}
|
||||
|
||||
handleSelectChange(fieldname, options, e) {
|
||||
@ -121,6 +127,7 @@ class ApplicationMenu extends BaseMenu {
|
||||
|
||||
render() {
|
||||
const { availableLocales, intl } = this.props;
|
||||
const { isLargestFontSize, isSmallestFontSize } = this.state;
|
||||
|
||||
return (
|
||||
<div className={styles.tabContent}>
|
||||
@ -144,7 +151,6 @@ class ApplicationMenu extends BaseMenu {
|
||||
icons={false}
|
||||
defaultChecked={this.state.settings.chatAudioNotifications}
|
||||
onChange={() => this.handleToggle('chatAudioNotifications')}
|
||||
ariaLabelledBy="audioNotify"
|
||||
ariaLabel={intl.formatMessage(intlMessages.audioNotifyLabel)}
|
||||
/>
|
||||
</div>
|
||||
@ -152,7 +158,7 @@ class ApplicationMenu extends BaseMenu {
|
||||
</div>
|
||||
|
||||
<div className={styles.row}>
|
||||
<div className={styles.col}>
|
||||
<div className={styles.col} aria-hidden="true">
|
||||
<div className={styles.formElement}>
|
||||
<label className={styles.label}>
|
||||
{intl.formatMessage(intlMessages.pushNotifyLabel)}
|
||||
@ -165,14 +171,13 @@ class ApplicationMenu extends BaseMenu {
|
||||
icons={false}
|
||||
defaultChecked={this.state.settings.chatPushNotifications}
|
||||
onChange={() => this.handleToggle('chatPushNotifications')}
|
||||
ariaLabelledBy="pushNotify"
|
||||
ariaLabel={intl.formatMessage(intlMessages.pushNotifyLabel)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className={styles.row}>
|
||||
<div className={styles.col}>
|
||||
<div className={styles.col} aria-hidden="true">
|
||||
<div className={styles.formElement}>
|
||||
<label className={styles.label}>
|
||||
{intl.formatMessage(intlMessages.languageLabel)}
|
||||
@ -232,6 +237,7 @@ class ApplicationMenu extends BaseMenu {
|
||||
circle
|
||||
hideLabel
|
||||
label={intl.formatMessage(intlMessages.increaseFontBtnLabel)}
|
||||
disabled={isLargestFontSize}
|
||||
/>
|
||||
</div>
|
||||
<div className={styles.col}>
|
||||
@ -242,6 +248,7 @@ class ApplicationMenu extends BaseMenu {
|
||||
circle
|
||||
hideLabel
|
||||
label={intl.formatMessage(intlMessages.decreaseFontBtnLabel)}
|
||||
disabled={isSmallestFontSize}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -137,7 +137,7 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
</div>
|
||||
<div className={styles.form}>
|
||||
<div className={styles.row}>
|
||||
<div className={styles.col}>
|
||||
<div className={styles.col} aria-hidden="true">
|
||||
<div className={styles.formElement}>
|
||||
<label className={styles.label}>
|
||||
{intl.formatMessage(intlMessages.closedCaptionsLabel)}
|
||||
@ -150,7 +150,7 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
icons={false}
|
||||
defaultChecked={this.state.settings.enabled}
|
||||
onChange={() => this.handleToggle('enabled')}
|
||||
ariaLabelledBy={'closedCaptions'}
|
||||
ariaLabelledBy="closedCaptions"
|
||||
ariaLabel={intl.formatMessage(intlMessages.closedCaptionsLabel)}
|
||||
/>
|
||||
</div>
|
||||
@ -172,7 +172,7 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
<Checkbox
|
||||
onChange={() => this.handleToggle('takeOwnership')}
|
||||
checked={this.state.settings.takeOwnership}
|
||||
ariaLabelledBy={'takeOwnership'}
|
||||
ariaLabelledBy="takeOwnership"
|
||||
ariaLabel={intl.formatMessage(intlMessages.takeOwnershipLabel)}
|
||||
/>
|
||||
</div>
|
||||
@ -206,8 +206,7 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
{this.props.locales ? this.props.locales.map((locale, index) =>
|
||||
(<option key={index} value={index}>
|
||||
{locale}
|
||||
</option>),
|
||||
) : null }
|
||||
</option>)) : null }
|
||||
</select>
|
||||
</label>
|
||||
</div>
|
||||
@ -238,8 +237,7 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
FONT_FAMILIES.map((family, index) =>
|
||||
(<option key={index} value={index}>
|
||||
{family}
|
||||
</option>),
|
||||
)
|
||||
</option>))
|
||||
}
|
||||
</select>
|
||||
</label>
|
||||
@ -271,8 +269,7 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
FONT_SIZES.map((size, index) =>
|
||||
(<option key={index} value={index}>
|
||||
{size}
|
||||
</option>),
|
||||
)
|
||||
</option>))
|
||||
}
|
||||
</select>
|
||||
</label>
|
||||
@ -314,8 +311,8 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
onChange={this.handleColorChange.bind(this, 'backgroundColor')}
|
||||
color={this.state.settings.backgroundColor}
|
||||
colors={COLORS}
|
||||
width={'140px'}
|
||||
triangle={'top-right'}
|
||||
width="140px"
|
||||
triangle="top-right"
|
||||
/>
|
||||
</div>
|
||||
: null }
|
||||
@ -356,8 +353,8 @@ class ClosedCaptionsMenu extends BaseMenu {
|
||||
onChange={this.handleColorChange.bind(this, 'fontColor')}
|
||||
color={this.state.settings.fontColor}
|
||||
colors={COLORS}
|
||||
width={'140px'}
|
||||
triangle={'top-right'}
|
||||
width="140px"
|
||||
triangle="top-right"
|
||||
/>
|
||||
</div>
|
||||
: null }
|
||||
|
@ -7,19 +7,19 @@ import { styles } from '../styles';
|
||||
|
||||
const intlMessages = defineMessages({
|
||||
dataSavingLabel: {
|
||||
id: 'app.settings.dataSaving.label',
|
||||
id: 'app.settings.dataSavingTab.label',
|
||||
description: 'label for data savings tab',
|
||||
},
|
||||
webcamLabel: {
|
||||
id: 'app.settings.dataSaving.webcam',
|
||||
id: 'app.settings.dataSavingTab.webcam',
|
||||
description: 'webcam toggle',
|
||||
},
|
||||
screenShareLabel: {
|
||||
id: 'app.settings.dataSaving.screenShare',
|
||||
id: 'app.settings.dataSavingTab.screenShare',
|
||||
description: 'screenshare toggle',
|
||||
},
|
||||
dataSavingDesc: {
|
||||
id: 'app.settings.dataSaving.description',
|
||||
id: 'app.settings.dataSavingTab.description',
|
||||
description: 'description of data savings tab',
|
||||
},
|
||||
});
|
||||
@ -29,13 +29,15 @@ class DataSaving extends BaseMenu {
|
||||
super(props);
|
||||
|
||||
this.state = {
|
||||
settingsName: 'video',
|
||||
settingsName: 'dataSaving',
|
||||
settings: props.settings,
|
||||
};
|
||||
}
|
||||
render() {
|
||||
const { intl } = this.props;
|
||||
|
||||
const { viewParticipantsWebcams, viewScreenshare } = this.state.settings;
|
||||
|
||||
return (
|
||||
<div className={styles.tabContent}>
|
||||
<div className={styles.header}>
|
||||
@ -55,7 +57,7 @@ class DataSaving extends BaseMenu {
|
||||
<div className={cx(styles.formElement, styles.pullContentRight)}>
|
||||
<Toggle
|
||||
icons={false}
|
||||
defaultChecked={!this.state.settings.viewParticipantsWebcams}
|
||||
defaultChecked={!viewParticipantsWebcams}
|
||||
onChange={() => this.handleToggle('viewParticipantsWebcams')}
|
||||
ariaLabelledBy="webcamToggle"
|
||||
ariaLabel={intl.formatMessage(intlMessages.webcamLabel)}
|
||||
@ -75,10 +77,10 @@ class DataSaving extends BaseMenu {
|
||||
<div className={cx(styles.formElement, styles.pullContentRight)}>
|
||||
<Toggle
|
||||
icons={false}
|
||||
defaultChecked={false}
|
||||
onChange={() => this.handleToggle('')}
|
||||
defaultChecked={!viewScreenshare}
|
||||
onChange={() => this.handleToggle('viewScreenshare')}
|
||||
ariaLabelledBy="screenShare"
|
||||
ariaLabel="screenShare"
|
||||
ariaLabel={intl.formatMessage(intlMessages.screenShareLabel)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
@ -1,17 +1,30 @@
|
||||
import React from 'react';
|
||||
import Toggle from 'react-toggle';
|
||||
import classNames from 'classnames';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
|
||||
export default class Switch extends Toggle {
|
||||
const intlMessages = defineMessages({
|
||||
on: {
|
||||
id: 'app.switch.onLabel',
|
||||
description: 'label for toggle switch on state',
|
||||
},
|
||||
off: {
|
||||
id: 'app.switch.offLabel',
|
||||
description: 'label for toggle switch off state',
|
||||
},
|
||||
});
|
||||
|
||||
class Switch extends Toggle {
|
||||
render() {
|
||||
const {
|
||||
intl,
|
||||
className,
|
||||
icons: _icons,
|
||||
ariaLabelledBy,
|
||||
ariaDescribedBy,
|
||||
ariaLabel,
|
||||
ariaDesc,
|
||||
...inputProps,
|
||||
...inputProps
|
||||
} = this.props;
|
||||
|
||||
const classes = classNames('react-toggle', {
|
||||
@ -21,34 +34,38 @@ export default class Switch extends Toggle {
|
||||
}, className);
|
||||
|
||||
return (
|
||||
<div className={classes}
|
||||
<div
|
||||
className={classes}
|
||||
onClick={this.handleClick}
|
||||
onTouchStart={this.handleTouchStart}
|
||||
onTouchMove={this.handleTouchMove}
|
||||
onTouchEnd={this.handleTouchEnd}>
|
||||
<div className='react-toggle-track'>
|
||||
<div className='react-toggle-track-check'>
|
||||
ON
|
||||
onTouchEnd={this.handleTouchEnd}
|
||||
>
|
||||
<div className="react-toggle-track" aria-hidden="true">
|
||||
<div className="react-toggle-track-check">
|
||||
{intl.formatMessage(intlMessages.on)}
|
||||
</div>
|
||||
<div className='react-toggle-track-x'>
|
||||
OFF
|
||||
<div className="react-toggle-track-x">
|
||||
{intl.formatMessage(intlMessages.off)}
|
||||
</div>
|
||||
</div>
|
||||
<div className='react-toggle-thumb' />
|
||||
<div className="react-toggle-thumb" />
|
||||
|
||||
<input
|
||||
{...inputProps}
|
||||
ref={ref => { this.input = ref; }}
|
||||
ref={(ref) => { this.input = ref; }}
|
||||
onFocus={this.handleFocus}
|
||||
onBlur={this.handleBlur}
|
||||
className='react-toggle-screenreader-only'
|
||||
type='checkbox'
|
||||
tabIndex='0'
|
||||
aria-labelledby={ariaLabelledBy}
|
||||
aria-describedby={ariaDescribedBy}/>
|
||||
<div id={ariaLabelledBy} hidden>{ariaLabel}</div>
|
||||
<div id={ariaDescribedBy} hidden>{ariaDesc}</div>
|
||||
className="react-toggle-screenreader-only"
|
||||
type="checkbox"
|
||||
tabIndex="0"
|
||||
aria-label={ariaLabel}
|
||||
aria-describedby={ariaDescribedBy}
|
||||
/>
|
||||
<div id={ariaDescribedBy} hidden>{ariaDesc}</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
export default injectIntl(Switch);
|
||||
|
@ -24,7 +24,7 @@ const defaultIcons = {
|
||||
};
|
||||
|
||||
const Toast = ({ icon, type, message }) => (
|
||||
<div className={styles[type]}>
|
||||
<div className={styles[type]} role="alert">
|
||||
<div className={styles.icon}><Icon iconName={icon || defaultIcons[type]} /></div>
|
||||
<div className={styles.message}>
|
||||
<span>{message}</span>
|
||||
|
@ -25,7 +25,7 @@ class Tooltip extends Component {
|
||||
this.onShow = this.onShow.bind(this);
|
||||
this.onHide = this.onHide.bind(this);
|
||||
this.handleEscapeHide = this.handleEscapeHide.bind(this);
|
||||
this.delay = [250, 100];
|
||||
this.delay = [150, 50];
|
||||
this.dynamicTitle = true;
|
||||
}
|
||||
|
||||
@ -40,6 +40,7 @@ class Tooltip extends Component {
|
||||
delay: this.delay,
|
||||
onShow: this.onShow,
|
||||
onHide: this.onHide,
|
||||
touchHold: true,
|
||||
};
|
||||
|
||||
this.tooltip = Tippy(`#${this.tippySelectorId}`, options);
|
||||
|
@ -39,6 +39,7 @@ const UserAvatar = ({
|
||||
className,
|
||||
}) => (
|
||||
<div
|
||||
aria-hidden="true"
|
||||
data-test="userAvatar"
|
||||
className={cx(styles.avatar, {
|
||||
[styles.moderator]: moderator,
|
||||
|
@ -40,6 +40,7 @@ class UserContent extends Component {
|
||||
<div
|
||||
data-test="userListContent"
|
||||
className={styles.content}
|
||||
role="complementary"
|
||||
>
|
||||
<UserMessages
|
||||
isPublicChat={this.props.isPublicChat}
|
||||
|
@ -132,9 +132,9 @@ class UserMessages extends Component {
|
||||
<div className={styles.messages}>
|
||||
{
|
||||
!compact ?
|
||||
<div className={styles.smallTitle} role="banner">
|
||||
<h2 className={styles.smallTitle}>
|
||||
{intl.formatMessage(intlMessages.messagesTitle)}
|
||||
</div> : <hr className={styles.separator} />
|
||||
</h2> : <hr className={styles.separator} />
|
||||
}
|
||||
<div
|
||||
role="tabpanel"
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user