Merge branch 'v2.0.x-release' of https://github.com/bigbluebutton/bigbluebutton into video-dock-refactor

This commit is contained in:
Lucas Fialho Zawacki 2018-03-20 17:22:11 +00:00
commit 65a2fb592f
136 changed files with 3663 additions and 1421 deletions

View File

@ -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

View File

@ -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 = مشغل الفلاش

View File

@ -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č

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 = Ναι

View File

@ -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 =

View File

@ -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

View File

@ -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 =

View File

@ -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

View File

@ -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

View File

@ -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 = فلش پلیر

View File

@ -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

View File

@ -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

View File

@ -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 = फ़्लैश प्लेयर

View 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 =

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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 =

View File

@ -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 = បន្ទប់

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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=Блокировать зрителей

View File

@ -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 =

View File

@ -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

View File

@ -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ı
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

View File

@ -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=Блокувати глядачів

View File

@ -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

View File

@ -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 撥放器

View File

@ -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/>

View File

@ -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);
});
};;
},
);
};

View File

@ -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"

View File

@ -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);
});
};;
},
);
};

View File

@ -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) => {

View File

@ -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,
}));

View File

@ -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;
}

View File

@ -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}`);

View File

@ -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 });

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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}`);
}
}

View File

@ -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);
}

View File

@ -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}`);
};

View File

@ -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);
}

View File

@ -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,
};

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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();
});

View File

@ -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));

View File

@ -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>
);

View File

@ -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;

View File

@ -70,7 +70,7 @@ class MettingMessageQueue {
};
try {
this.debug(`${eventName} emitted`);
this.debug(`${JSON.stringify(data.parsedMessage.core)} emitted`);
if (isAsync) {
callNext();

View File

@ -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; }} >

View File

@ -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>

View File

@ -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);

View File

@ -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'),
};

View File

@ -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 />

View File

@ -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}`);
}
},

View File

@ -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;

View File

@ -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

View 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;

View 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;

View File

@ -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',

View File

@ -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));

View File

@ -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,
};

View File

@ -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}

View File

@ -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 />

View File

@ -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 = () => {

View File

@ -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;

View File

@ -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;
}

View File

@ -39,6 +39,12 @@
}
}
.presentationTitleSeparator {
color: $color-gray;
font-size: $font-size-base;
margin: 0 1rem;
}
.btnWithNotificationDot {
position: relative;

View File

@ -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,
};

View File

@ -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

View File

@ -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 {

View 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 (

View 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);

View File

@ -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),
}}

View File

@ -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,

View File

@ -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>

View File

@ -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 }

View File

@ -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>

View File

@ -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);

View File

@ -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>

View File

@ -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);

View File

@ -39,6 +39,7 @@ const UserAvatar = ({
className,
}) => (
<div
aria-hidden="true"
data-test="userAvatar"
className={cx(styles.avatar, {
[styles.moderator]: moderator,

View File

@ -40,6 +40,7 @@ class UserContent extends Component {
<div
data-test="userListContent"
className={styles.content}
role="complementary"
>
<UserMessages
isPublicChat={this.props.isPublicChat}

View File

@ -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