Merge branch 'dev-24-0125' of github.com:ramonlsouza/bigbluebutton into merge-jan-27
This commit is contained in:
commit
46cb753c44
@ -91,24 +91,6 @@ object ScreenshareModel {
|
||||
def getHasAudio(status: ScreenshareModel): Boolean = {
|
||||
status.hasAudio
|
||||
}
|
||||
|
||||
def stop(outGW: OutMsgRouter, liveMeeting: LiveMeeting): Unit = {
|
||||
if (isBroadcastingRTMP(liveMeeting.screenshareModel)) {
|
||||
this.resetDesktopSharingParams(liveMeeting.screenshareModel)
|
||||
|
||||
val event = MsgBuilder.buildStopScreenshareRtmpBroadcastEvtMsg(
|
||||
liveMeeting.props.meetingProp.intId,
|
||||
getVoiceConf(liveMeeting.screenshareModel),
|
||||
getScreenshareConf(liveMeeting.screenshareModel),
|
||||
getRTMPBroadcastingUrl(liveMeeting.screenshareModel),
|
||||
getScreenshareVideoWidth(liveMeeting.screenshareModel),
|
||||
getScreenshareVideoHeight(liveMeeting.screenshareModel),
|
||||
getTimestamp(liveMeeting.screenshareModel)
|
||||
)
|
||||
outGW.send(event)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ScreenshareModel {
|
||||
|
@ -246,12 +246,15 @@ class WhiteboardModel extends SystemConfiguration {
|
||||
|
||||
def getWhiteboardAccess(wbId: String): Array[String] = getWhiteboard(wbId).multiUser
|
||||
|
||||
def isNonEjectionGracePeriodOver(wbId: String, userId: String): Boolean = {
|
||||
val wb = getWhiteboard(wbId)
|
||||
val lastChange = System.currentTimeMillis() - wb.changedModeOn
|
||||
!(wb.oldMultiUser.contains(userId) && lastChange < 5000)
|
||||
}
|
||||
|
||||
def hasWhiteboardAccess(wbId: String, userId: String): Boolean = {
|
||||
val wb = getWhiteboard(wbId)
|
||||
wb.multiUser.contains(userId) || {
|
||||
val lastChange = System.currentTimeMillis() - wb.changedModeOn
|
||||
wb.oldMultiUser.contains(userId) && lastChange < 5000
|
||||
}
|
||||
wb.multiUser.contains(userId)
|
||||
}
|
||||
|
||||
def getChangedModeOn(wbId: String): Long = getWhiteboard(wbId).changedModeOn
|
||||
|
@ -1,9 +1,10 @@
|
||||
package org.bigbluebutton.core.apps.externalvideo
|
||||
|
||||
import org.bigbluebutton.common2.msgs._
|
||||
import org.bigbluebutton.core.apps.{ ExternalVideoModel, PermissionCheck, RightsManagementTrait, ScreenshareModel }
|
||||
import org.bigbluebutton.core.apps.{ ExternalVideoModel, PermissionCheck, RightsManagementTrait }
|
||||
import org.bigbluebutton.core.bus.MessageBus
|
||||
import org.bigbluebutton.core.running.LiveMeeting
|
||||
import org.bigbluebutton.core.apps.screenshare.ScreenshareApp2x.{ requestBroadcastStop }
|
||||
|
||||
trait StartExternalVideoPubMsgHdlr extends RightsManagementTrait {
|
||||
this: ExternalVideoApp2x =>
|
||||
@ -29,8 +30,9 @@ trait StartExternalVideoPubMsgHdlr extends RightsManagementTrait {
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
} else {
|
||||
|
||||
//Stop ScreenShare if it's running
|
||||
ScreenshareModel.stop(bus.outGW, liveMeeting)
|
||||
// Request a screen broadcast stop (goes to SFU, comes back through
|
||||
// ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsg)
|
||||
requestBroadcastStop(bus.outGW, liveMeeting)
|
||||
|
||||
ExternalVideoModel.setURL(liveMeeting.externalVideoModel, msg.body.externalVideoUrl)
|
||||
broadcastEvent(msg)
|
||||
|
@ -2,13 +2,48 @@ package org.bigbluebutton.core.apps.screenshare
|
||||
|
||||
import akka.actor.ActorContext
|
||||
import akka.event.Logging
|
||||
import org.bigbluebutton.core.apps.ScreenshareModel
|
||||
import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
|
||||
import org.bigbluebutton.core2.message.senders.MsgBuilder
|
||||
|
||||
|
||||
object ScreenshareApp2x {
|
||||
def requestBroadcastStop(outGW: OutMsgRouter, liveMeeting: LiveMeeting): Unit = {
|
||||
if (ScreenshareModel.isBroadcastingRTMP(liveMeeting.screenshareModel)) {
|
||||
val event = MsgBuilder.buildScreenBroadcastStopSysMsg(
|
||||
liveMeeting.props.meetingProp.intId,
|
||||
ScreenshareModel.getRTMPBroadcastingUrl(liveMeeting.screenshareModel),
|
||||
)
|
||||
|
||||
outGW.send(event)
|
||||
}
|
||||
}
|
||||
|
||||
def broadcastStopped(outGW: OutMsgRouter, liveMeeting: LiveMeeting): Unit = {
|
||||
if (ScreenshareModel.isBroadcastingRTMP(liveMeeting.screenshareModel)) {
|
||||
ScreenshareModel.resetDesktopSharingParams(liveMeeting.screenshareModel)
|
||||
|
||||
val event = MsgBuilder.buildStopScreenshareRtmpBroadcastEvtMsg(
|
||||
liveMeeting.props.meetingProp.intId,
|
||||
ScreenshareModel.getVoiceConf(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getScreenshareConf(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getRTMPBroadcastingUrl(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getScreenshareVideoWidth(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getScreenshareVideoHeight(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getTimestamp(liveMeeting.screenshareModel)
|
||||
)
|
||||
outGW.send(event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class ScreenshareApp2x(implicit val context: ActorContext)
|
||||
extends ScreenshareStartedVoiceConfEvtMsgHdlr
|
||||
with ScreenshareStoppedVoiceConfEvtMsgHdlr
|
||||
with GetScreenshareStatusReqMsgHdlr
|
||||
with ScreenshareRtmpBroadcastStartedVoiceConfEvtMsgHdlr
|
||||
with ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsgHdlr {
|
||||
with ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsgHdlr
|
||||
with SyncGetScreenshareInfoRespMsgHdlr {
|
||||
|
||||
val log = Logging(context.system, getClass)
|
||||
|
||||
|
@ -5,32 +5,16 @@ import org.bigbluebutton.core.apps.ScreenshareModel
|
||||
import org.bigbluebutton.core.bus.MessageBus
|
||||
import org.bigbluebutton.core.running.LiveMeeting
|
||||
import org.bigbluebutton.core2.message.senders.MsgBuilder
|
||||
import org.bigbluebutton.core.apps.screenshare.ScreenshareApp2x.{ broadcastStopped }
|
||||
|
||||
trait ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsgHdlr {
|
||||
this: ScreenshareApp2x =>
|
||||
|
||||
def handle(msg: ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsg, liveMeeting: LiveMeeting, bus: MessageBus): Unit = {
|
||||
|
||||
log.info("handleScreenshareRTMPBroadcastStoppedRequest: isBroadcastingRTMP=" +
|
||||
ScreenshareModel.isBroadcastingRTMP(liveMeeting.screenshareModel) + " URL:" +
|
||||
ScreenshareModel.getRTMPBroadcastingUrl(liveMeeting.screenshareModel))
|
||||
|
||||
// only valid if currently broadcasting
|
||||
if (ScreenshareModel.isBroadcastingRTMP(liveMeeting.screenshareModel)) {
|
||||
log.info("STOP broadcast ALLOWED when isBroadcastingRTMP=true")
|
||||
ScreenshareModel.broadcastingRTMPStopped(liveMeeting.screenshareModel)
|
||||
|
||||
// notify viewers that RTMP broadcast stopped
|
||||
val msgEvent = MsgBuilder.buildStopScreenshareRtmpBroadcastEvtMsg(
|
||||
liveMeeting.props.meetingProp.intId,
|
||||
msg.body.voiceConf, msg.body.screenshareConf, msg.body.stream,
|
||||
msg.body.vidWidth, msg.body.vidHeight, msg.body.timestamp
|
||||
)
|
||||
|
||||
bus.outGW.send(msgEvent)
|
||||
} else {
|
||||
log.info("STOP broadcast NOT ALLOWED when isBroadcastingRTMP=false")
|
||||
}
|
||||
broadcastStopped(bus.outGW, liveMeeting)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
package org.bigbluebutton.core.apps.screenshare
|
||||
|
||||
import org.bigbluebutton.common2.msgs._
|
||||
import org.bigbluebutton.core.apps.ScreenshareModel
|
||||
import org.bigbluebutton.core.bus.MessageBus
|
||||
import org.bigbluebutton.core.running.LiveMeeting
|
||||
|
||||
trait SyncGetScreenshareInfoRespMsgHdlr {
|
||||
this: ScreenshareApp2x =>
|
||||
|
||||
def handleSyncGetScreenshareInfoRespMsg(liveMeeting: LiveMeeting, bus: MessageBus): Unit = {
|
||||
val routing = Routing.addMsgToHtml5InstanceIdRouting(
|
||||
liveMeeting.props.meetingProp.intId,
|
||||
liveMeeting.props.systemProps.html5InstanceId.toString
|
||||
)
|
||||
val envelope = BbbCoreEnvelope(SyncGetScreenshareInfoRespMsg.NAME, routing)
|
||||
val header = BbbClientMsgHeader(
|
||||
SyncGetScreenshareInfoRespMsg.NAME,
|
||||
liveMeeting.props.meetingProp.intId,
|
||||
"nodeJSapp"
|
||||
)
|
||||
val body = SyncGetScreenshareInfoRespMsgBody(
|
||||
ScreenshareModel.isBroadcastingRTMP(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getVoiceConf(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getScreenshareConf(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getRTMPBroadcastingUrl(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getScreenshareVideoWidth(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getScreenshareVideoHeight(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getTimestamp(liveMeeting.screenshareModel),
|
||||
ScreenshareModel.getHasAudio(liveMeeting.screenshareModel)
|
||||
)
|
||||
val event = SyncGetScreenshareInfoRespMsg(header, body)
|
||||
val msgEvent = BbbCommonEnvCoreMsg(envelope, event)
|
||||
|
||||
bus.outGW.send(msgEvent)
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ import org.bigbluebutton.core.models.{ PresentationPod, UserState, Users2x }
|
||||
import org.bigbluebutton.core.running.{ LiveMeeting, OutMsgRouter }
|
||||
import org.bigbluebutton.core.apps.{ PermissionCheck, RightsManagementTrait }
|
||||
import org.bigbluebutton.core.domain.MeetingState2x
|
||||
import org.bigbluebutton.core.apps.screenshare.ScreenshareApp2x.{ requestBroadcastStop }
|
||||
|
||||
trait AssignPresenterReqMsgHdlr extends RightsManagementTrait {
|
||||
this: UsersApp =>
|
||||
@ -72,6 +73,9 @@ object AssignPresenterActionHandler extends RightsManagementTrait {
|
||||
if (oldPres.intId != newPresenterId) {
|
||||
// Stop external video if it's running
|
||||
ExternalVideoModel.stop(outGW, liveMeeting)
|
||||
// Request a screen broadcast stop (goes to SFU, comes back through
|
||||
// ScreenshareRtmpBroadcastStoppedVoiceConfEvtMsg)
|
||||
requestBroadcastStop(outGW, liveMeeting)
|
||||
|
||||
Users2x.makeNotPresenter(liveMeeting.users2x, oldPres.intId)
|
||||
broadcastOldPresenterChange(oldPres)
|
||||
|
@ -22,9 +22,11 @@ trait ClearWhiteboardPubMsgHdlr extends RightsManagementTrait {
|
||||
}
|
||||
|
||||
if (filterWhiteboardMessage(msg.body.whiteboardId, msg.header.userId, liveMeeting) && permissionFailed(PermissionCheck.GUEST_LEVEL, PermissionCheck.PRESENTER_LEVEL, liveMeeting.users2x, msg.header.userId)) {
|
||||
val meetingId = liveMeeting.props.meetingProp.intId
|
||||
val reason = "No permission to clear the whiteboard."
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
if (isNonEjectionGracePeriodOver(msg.body.whiteboardId, msg.header.userId, liveMeeting)) {
|
||||
val meetingId = liveMeeting.props.meetingProp.intId
|
||||
val reason = "No permission to clear the whiteboard."
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
}
|
||||
} else {
|
||||
for {
|
||||
fullClear <- clearWhiteboard(msg.body.whiteboardId, msg.header.userId, liveMeeting)
|
||||
|
@ -21,10 +21,12 @@ trait ModifyWhiteboardAccessPubMsgHdlr extends RightsManagementTrait {
|
||||
bus.outGW.send(msgEvent)
|
||||
}
|
||||
|
||||
if (permissionFailed(PermissionCheck.GUEST_LEVEL, PermissionCheck.PRESENTER_LEVEL, liveMeeting.users2x, msg.header.userId)) {
|
||||
val meetingId = liveMeeting.props.meetingProp.intId
|
||||
val reason = "No permission to modify access to the whiteboard."
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
if (filterWhiteboardMessage(msg.body.whiteboardId, msg.header.userId, liveMeeting) && permissionFailed(PermissionCheck.GUEST_LEVEL, PermissionCheck.PRESENTER_LEVEL, liveMeeting.users2x, msg.header.userId)) {
|
||||
if (isNonEjectionGracePeriodOver(msg.body.whiteboardId, msg.header.userId, liveMeeting)) {
|
||||
val meetingId = liveMeeting.props.meetingProp.intId
|
||||
val reason = "No permission to modify access to the whiteboard."
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
}
|
||||
} else {
|
||||
modifyWhiteboardAccess(msg.body.whiteboardId, msg.body.multiUser, liveMeeting)
|
||||
broadcastEvent(msg)
|
||||
|
@ -22,9 +22,11 @@ trait UndoWhiteboardPubMsgHdlr extends RightsManagementTrait {
|
||||
}
|
||||
|
||||
if (filterWhiteboardMessage(msg.body.whiteboardId, msg.header.userId, liveMeeting) && permissionFailed(PermissionCheck.GUEST_LEVEL, PermissionCheck.PRESENTER_LEVEL, liveMeeting.users2x, msg.header.userId)) {
|
||||
val meetingId = liveMeeting.props.meetingProp.intId
|
||||
val reason = "No permission to undo an annotation."
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
if (isNonEjectionGracePeriodOver(msg.body.whiteboardId, msg.header.userId, liveMeeting)) {
|
||||
val meetingId = liveMeeting.props.meetingProp.intId
|
||||
val reason = "No permission to undo an annotation."
|
||||
PermissionCheck.ejectUserForFailedPermission(meetingId, msg.header.userId, reason, bus.outGW, liveMeeting)
|
||||
}
|
||||
} else {
|
||||
for {
|
||||
lastAnnotation <- undoWhiteboard(msg.body.whiteboardId, msg.header.userId, liveMeeting)
|
||||
|
@ -78,4 +78,8 @@ class WhiteboardApp2x(implicit val context: ActorContext)
|
||||
// mode was changed. (ralam nov 22, 2017)
|
||||
!liveMeeting.wbModel.hasWhiteboardAccess(whiteboardId, userId)
|
||||
}
|
||||
|
||||
def isNonEjectionGracePeriodOver(wbId: String, userId: String, liveMeeting: LiveMeeting): Boolean = {
|
||||
liveMeeting.wbModel.isNonEjectionGracePeriodOver(wbId, userId)
|
||||
}
|
||||
}
|
||||
|
@ -705,7 +705,8 @@ class MeetingActor(
|
||||
// sync all lock settings
|
||||
handleSyncGetLockSettingsMsg(state, liveMeeting, msgBus)
|
||||
|
||||
// TODO send all screen sharing info
|
||||
// send all screen sharing info
|
||||
screenshareApp2x.handleSyncGetScreenshareInfoRespMsg(liveMeeting, msgBus)
|
||||
}
|
||||
|
||||
def handleGetAllMeetingsReqMsg(msg: GetAllMeetingsReqMsg): Unit = {
|
||||
|
@ -22,10 +22,12 @@ trait EjectUserFromVoiceCmdMsgHdlr extends RightsManagementTrait {
|
||||
for {
|
||||
u <- VoiceUsers.findWithIntId(liveMeeting.voiceUsers, msg.body.userId)
|
||||
} yield {
|
||||
log.info("Ejecting user from voice. meetingId=" + props.meetingProp.intId + " userId=" + u.intId)
|
||||
VoiceUsers.ban(liveMeeting.voiceUsers, u)
|
||||
log.info("Ejecting user from voice. meetingId=" + props.meetingProp.intId + " userId=" + u.intId + " ban=" + msg.body.banUser)
|
||||
val event = MsgBuilder.buildEjectUserFromVoiceConfSysMsg(props.meetingProp.intId, props.voiceProp.voiceConf, u.voiceUserId)
|
||||
outGW.send(event)
|
||||
if (msg.body.banUser) {
|
||||
VoiceUsers.ban(liveMeeting.voiceUsers, u)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -613,4 +613,17 @@ object MsgBuilder {
|
||||
|
||||
BbbCommonEnvCoreMsg(envelope, event)
|
||||
}
|
||||
|
||||
def buildScreenBroadcastStopSysMsg(
|
||||
meetingId: String,
|
||||
streamId: String
|
||||
): BbbCommonEnvCoreMsg = {
|
||||
val routing = collection.immutable.HashMap("sender" -> "bbb-apps-akka")
|
||||
val envelope = BbbCoreEnvelope(ScreenBroadcastStopSysMsg.NAME, routing)
|
||||
val body = ScreenBroadcastStopSysMsgBody(meetingId, streamId)
|
||||
val header = BbbCoreBaseHeader(ScreenBroadcastStopSysMsg.NAME)
|
||||
val event = ScreenBroadcastStopSysMsg(header, body)
|
||||
|
||||
BbbCommonEnvCoreMsg(envelope, event)
|
||||
}
|
||||
}
|
||||
|
@ -42,6 +42,8 @@ trait AppsTestFixtures {
|
||||
val allowModsToUnmuteUsers = false
|
||||
val allowModsToEjectCameras = false
|
||||
val authenticatedGuest = false
|
||||
val meetingLayout = ""
|
||||
val virtualBackgroundsEnabled = false
|
||||
|
||||
val red5DeskShareIPTestFixture = "127.0.0.1"
|
||||
val red5DeskShareAppTestFixtures = "red5App"
|
||||
@ -61,7 +63,8 @@ trait AppsTestFixtures {
|
||||
modOnlyMessage = modOnlyMessage)
|
||||
val voiceProp = VoiceProp(telVoice = voiceConfId, voiceConf = voiceConfId, dialNumber = dialNumber, muteOnStart = muteOnStart)
|
||||
val usersProp = UsersProp(maxUsers = maxUsers, webcamsOnlyForModerator = webcamsOnlyForModerator,
|
||||
guestPolicy = guestPolicy, allowModsToUnmuteUsers = allowModsToUnmuteUsers, allowModsToEjectCameras = allowModsToEjectCameras, authenticatedGuest = authenticatedGuest)
|
||||
guestPolicy = guestPolicy, allowModsToUnmuteUsers = allowModsToUnmuteUsers, allowModsToEjectCameras = allowModsToEjectCameras,
|
||||
authenticatedGuest = authenticatedGuest, meetingLayout = meetingLayout, virtualBackgroundsEnabled = virtualBackgroundsEnabled)
|
||||
val metadataProp = new MetadataProp(metadata)
|
||||
|
||||
val defaultProps = DefaultProps(meetingProp, breakoutProps, durationProps, password, recordProp, welcomeProp, voiceProp,
|
||||
|
@ -28,7 +28,16 @@ case class WelcomeProp(welcomeMsgTemplate: String, welcomeMsg: String, modOnlyMe
|
||||
|
||||
case class VoiceProp(telVoice: String, voiceConf: String, dialNumber: String, muteOnStart: Boolean)
|
||||
|
||||
case class UsersProp(maxUsers: Int, webcamsOnlyForModerator: Boolean, guestPolicy: String, meetingLayout: String, allowModsToUnmuteUsers: Boolean, allowModsToEjectCameras: Boolean, authenticatedGuest: Boolean)
|
||||
case class UsersProp(
|
||||
maxUsers: Int,
|
||||
webcamsOnlyForModerator: Boolean,
|
||||
guestPolicy: String,
|
||||
meetingLayout: String,
|
||||
allowModsToUnmuteUsers: Boolean,
|
||||
allowModsToEjectCameras: Boolean,
|
||||
authenticatedGuest: Boolean,
|
||||
virtualBackgroundsDisabled: Boolean
|
||||
)
|
||||
|
||||
case class MetadataProp(metadata: collection.immutable.Map[String, String])
|
||||
|
||||
|
@ -39,6 +39,25 @@ case class ScreenshareRtmpBroadcastStartedEvtMsgBody(voiceConf: String, screensh
|
||||
stream: String, vidWidth: Int, vidHeight: Int,
|
||||
timestamp: String, hasAudio: Boolean)
|
||||
|
||||
/**
|
||||
* Sync screenshare state with bbb-html5
|
||||
*/
|
||||
object SyncGetScreenshareInfoRespMsg { val NAME = "SyncGetScreenshareInfoRespMsg" }
|
||||
case class SyncGetScreenshareInfoRespMsg(
|
||||
header: BbbClientMsgHeader,
|
||||
body: SyncGetScreenshareInfoRespMsgBody
|
||||
) extends BbbCoreMsg
|
||||
case class SyncGetScreenshareInfoRespMsgBody(
|
||||
isBroadcasting: Boolean,
|
||||
voiceConf: String,
|
||||
screenshareConf: String,
|
||||
stream: String,
|
||||
vidWidth: Int,
|
||||
vidHeight: Int,
|
||||
timestamp: String,
|
||||
hasAudio: Boolean
|
||||
)
|
||||
|
||||
/**
|
||||
* Send by FS that RTMP stream has stopped.
|
||||
*/
|
||||
@ -166,6 +185,20 @@ case class GetScreenSubscribePermissionRespMsgBody(
|
||||
sfuSessionId: String,
|
||||
allowed: Boolean
|
||||
)
|
||||
|
||||
/**
|
||||
* Sent to bbb-webrtc-sfu to tear down screen stream #streamId
|
||||
*/
|
||||
object ScreenBroadcastStopSysMsg { val NAME = "ScreenBroadcastStopSysMsg" }
|
||||
case class ScreenBroadcastStopSysMsg(
|
||||
header: BbbCoreBaseHeader,
|
||||
body: ScreenBroadcastStopSysMsgBody
|
||||
) extends BbbCoreMsg
|
||||
case class ScreenBroadcastStopSysMsgBody(
|
||||
meetingId: String,
|
||||
streamId: String
|
||||
)
|
||||
|
||||
/**
|
||||
* Sent to FS to eject all users from the voice conference.
|
||||
*/
|
||||
@ -184,7 +217,7 @@ case class EjectUserFromVoiceCmdMsg(
|
||||
header: BbbClientMsgHeader,
|
||||
body: EjectUserFromVoiceCmdMsgBody
|
||||
) extends StandardMsg
|
||||
case class EjectUserFromVoiceCmdMsgBody(userId: String, ejectedBy: String)
|
||||
case class EjectUserFromVoiceCmdMsgBody(userId: String, ejectedBy: String, banUser: Boolean)
|
||||
|
||||
/**
|
||||
* Sent by client to mute all users except presenters in the voice conference.
|
||||
|
@ -46,6 +46,7 @@ public class ApiParams {
|
||||
public static final String MUTE_ON_START = "muteOnStart";
|
||||
public static final String MEETING_KEEP_EVENTS = "meetingKeepEvents";
|
||||
public static final String ALLOW_MODS_TO_UNMUTE_USERS = "allowModsToUnmuteUsers";
|
||||
public static final String ALLOW_REQUESTS_WITHOUT_SESSION = "allowRequestsWithoutSession";
|
||||
public static final String ALLOW_MODS_TO_EJECT_CAMERAS = "allowModsToEjectCameras";
|
||||
public static final String NAME = "name";
|
||||
public static final String PARENT_MEETING_ID = "parentMeetingID";
|
||||
@ -58,6 +59,7 @@ public class ApiParams {
|
||||
public static final String WEB_VOICE = "webVoice";
|
||||
public static final String LEARNING_DASHBOARD_ENABLED = "learningDashboardEnabled";
|
||||
public static final String LEARNING_DASHBOARD_CLEANUP_DELAY_IN_MINUTES = "learningDashboardCleanupDelayInMinutes";
|
||||
public static final String VIRTUAL_BACKGROUNDS_DISABLED = "virtualBackgroundsDisabled";
|
||||
public static final String WEBCAMS_ONLY_FOR_MODERATOR = "webcamsOnlyForModerator";
|
||||
public static final String WELCOME = "welcome";
|
||||
public static final String HTML5_INSTANCE_ID = "html5InstanceId";
|
||||
|
@ -164,6 +164,17 @@ public class MeetingService implements MessageListener {
|
||||
return sessions.get(token);
|
||||
}
|
||||
|
||||
public Boolean getAllowRequestsWithoutSession(String token) {
|
||||
UserSession us = getUserSessionWithAuthToken(token);
|
||||
if (us == null) {
|
||||
return false;
|
||||
} else {
|
||||
Meeting meeting = getMeeting(us.meetingID);
|
||||
if (meeting == null || meeting.isForciblyEnded()) return false;
|
||||
return meeting.getAllowRequestsWithoutSession();
|
||||
}
|
||||
}
|
||||
|
||||
public UserSession removeUserSessionWithAuthToken(String token) {
|
||||
UserSession user = sessions.remove(token);
|
||||
if (user != null) {
|
||||
@ -404,7 +415,7 @@ public class MeetingService implements MessageListener {
|
||||
m.getUserActivitySignResponseDelayInMinutes(), m.getEndWhenNoModerator(), m.getEndWhenNoModeratorDelayInMinutes(),
|
||||
m.getMuteOnStart(), m.getAllowModsToUnmuteUsers(), m.getAllowModsToEjectCameras(), m.getMeetingKeepEvents(),
|
||||
m.breakoutRoomsParams,
|
||||
m.lockSettingsParams, m.getHtml5InstanceId(), m.getGroups());
|
||||
m.lockSettingsParams, m.getHtml5InstanceId(), m.getGroups(), m.getVirtualBackgroundsDisabled());
|
||||
}
|
||||
|
||||
private String formatPrettyDate(Long timestamp) {
|
||||
@ -739,6 +750,41 @@ public class MeetingService implements MessageListener {
|
||||
}
|
||||
}
|
||||
|
||||
public Map<String, String> getUserCustomData(
|
||||
Meeting meeting,
|
||||
String externUserID,
|
||||
Map<String, String> params) {
|
||||
Map<String, String> resp = paramsProcessorUtil.getUserCustomData(params);
|
||||
|
||||
// If is breakout room, merge with user's parent meeting userdata
|
||||
if (meeting.isBreakout()) {
|
||||
String parentMeetingId = meeting.getParentMeetingId();
|
||||
Meeting parentMeeting = getMeeting(parentMeetingId);
|
||||
|
||||
if (parentMeeting != null) {
|
||||
// Get parent meeting user's internal id from it's breakout external id
|
||||
// parentUserInternalId-breakoutRoomNumber
|
||||
String parentUserId = externUserID.split("-")[0];
|
||||
User parentUser = parentMeeting.getUserById(parentUserId);
|
||||
|
||||
if (parentUser != null) {
|
||||
// Custom data is stored indexed by user's external id
|
||||
Map<String, Object> customData = parentMeeting.getUserCustomData(parentUser.getExternalUserId());
|
||||
|
||||
if (customData != null) {
|
||||
for (String key : customData.keySet()) {
|
||||
if (!resp.containsKey(key)) {
|
||||
resp.put(key, String.valueOf(customData.get(key)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resp;
|
||||
}
|
||||
|
||||
private void meetingStarted(MeetingStarted message) {
|
||||
Meeting m = getMeeting(message.meetingId);
|
||||
if (m != null) {
|
||||
|
@ -77,7 +77,7 @@ public class ParamsProcessorUtil {
|
||||
private int defaultNumDigitsForTelVoice;
|
||||
private String defaultHTML5ClientUrl;
|
||||
private String defaultGuestWaitURL;
|
||||
private Boolean allowRequestsWithoutSession;
|
||||
private Boolean allowRequestsWithoutSession = false;
|
||||
private Boolean useDefaultAvatar = false;
|
||||
private String defaultAvatarURL;
|
||||
private String defaultGuestPolicy;
|
||||
@ -509,6 +509,14 @@ public class ParamsProcessorUtil {
|
||||
learningDashboardAccessToken = RandomStringUtils.randomAlphanumeric(12).toLowerCase();
|
||||
}
|
||||
|
||||
|
||||
// Check if VirtualBackgrounds is disabled
|
||||
boolean virtualBackgroundsDisabled = false;
|
||||
if (!StringUtils.isEmpty(params.get(ApiParams.VIRTUAL_BACKGROUNDS_DISABLED))) {
|
||||
virtualBackgroundsDisabled = Boolean.valueOf(params.get(ApiParams.VIRTUAL_BACKGROUNDS_DISABLED));
|
||||
}
|
||||
|
||||
|
||||
boolean webcamsOnlyForMod = webcamsOnlyForModerator;
|
||||
if (!StringUtils.isEmpty(params.get(ApiParams.WEBCAMS_ONLY_FOR_MODERATOR))) {
|
||||
try {
|
||||
@ -603,6 +611,7 @@ public class ParamsProcessorUtil {
|
||||
.withWelcomeMessage(welcomeMessage).isBreakout(isBreakout)
|
||||
.withGuestPolicy(guestPolicy)
|
||||
.withAuthenticatedGuest(authenticatedGuest)
|
||||
.withAllowRequestsWithoutSession(allowRequestsWithoutSession)
|
||||
.withMeetingLayout(meetingLayout)
|
||||
.withBreakoutRoomsParams(breakoutParams)
|
||||
.withLockSettingsParams(lockSettingsParams)
|
||||
@ -612,6 +621,7 @@ public class ParamsProcessorUtil {
|
||||
.withLearningDashboardCleanupDelayInMinutes(learningDashboardCleanupMins)
|
||||
.withLearningDashboardAccessToken(learningDashboardAccessToken)
|
||||
.withGroups(groups)
|
||||
.withVirtualBackgroundsDisabled(virtualBackgroundsDisabled)
|
||||
.build();
|
||||
|
||||
if (!StringUtils.isEmpty(params.get(ApiParams.MODERATOR_ONLY_MESSAGE))) {
|
||||
@ -676,6 +686,10 @@ public class ParamsProcessorUtil {
|
||||
}
|
||||
meeting.setAllowModsToUnmuteUsers(allowModsToUnmuteUsers);
|
||||
|
||||
if (!StringUtils.isEmpty(params.get(ApiParams.ALLOW_REQUESTS_WITHOUT_SESSION))) {
|
||||
meeting.setAllowRequestsWithoutSession(Boolean.parseBoolean(params.get(ApiParams.ALLOW_REQUESTS_WITHOUT_SESSION)));
|
||||
}
|
||||
|
||||
Boolean allowModsToEjectCameras = defaultAllowModsToEjectCameras;
|
||||
if (!StringUtils.isEmpty(params.get(ApiParams.ALLOW_MODS_TO_EJECT_CAMERAS))) {
|
||||
allowModsToEjectCameras = Boolean.parseBoolean(params.get(ApiParams.ALLOW_MODS_TO_EJECT_CAMERAS));
|
||||
|
@ -54,6 +54,7 @@ public class Meeting {
|
||||
private Boolean learningDashboardEnabled;
|
||||
private int learningDashboardCleanupDelayInMinutes;
|
||||
private String learningDashboardAccessToken;
|
||||
private Boolean virtualBackgroundsDisabled;
|
||||
private String welcomeMsgTemplate;
|
||||
private String welcomeMsg;
|
||||
private String modOnlyMessage = "";
|
||||
@ -88,6 +89,7 @@ public class Meeting {
|
||||
private String customCopyright = "";
|
||||
private Boolean muteOnStart = false;
|
||||
private Boolean allowModsToUnmuteUsers = false;
|
||||
private Boolean allowRequestsWithoutSession = false;
|
||||
private Boolean allowModsToEjectCameras = false;
|
||||
private Boolean meetingKeepEvents;
|
||||
|
||||
@ -115,6 +117,7 @@ public class Meeting {
|
||||
viewerPass = builder.viewerPass;
|
||||
moderatorPass = builder.moderatorPass;
|
||||
learningDashboardEnabled = builder.learningDashboardEnabled;
|
||||
virtualBackgroundsDisabled = builder.virtualBackgroundsDisabled;
|
||||
learningDashboardCleanupDelayInMinutes = builder.learningDashboardCleanupDelayInMinutes;
|
||||
learningDashboardAccessToken = builder.learningDashboardAccessToken;
|
||||
maxUsers = builder.maxUsers;
|
||||
@ -139,6 +142,7 @@ public class Meeting {
|
||||
guestPolicy = builder.guestPolicy;
|
||||
authenticatedGuest = builder.authenticatedGuest;
|
||||
meetingLayout = builder.meetingLayout;
|
||||
allowRequestsWithoutSession = builder.allowRequestsWithoutSession;
|
||||
breakoutRoomsParams = builder.breakoutRoomsParams;
|
||||
lockSettingsParams = builder.lockSettingsParams;
|
||||
allowDuplicateExtUserid = builder.allowDuplicateExtUserid;
|
||||
@ -342,6 +346,10 @@ public class Meeting {
|
||||
return learningDashboardAccessToken;
|
||||
}
|
||||
|
||||
public Boolean getVirtualBackgroundsDisabled() {
|
||||
return virtualBackgroundsDisabled;
|
||||
}
|
||||
|
||||
public String getWelcomeMessageTemplate() {
|
||||
return welcomeMsgTemplate;
|
||||
}
|
||||
@ -527,6 +535,14 @@ public class Meeting {
|
||||
return allowModsToUnmuteUsers;
|
||||
}
|
||||
|
||||
public void setAllowRequestsWithoutSession(Boolean value) {
|
||||
allowRequestsWithoutSession = value;
|
||||
}
|
||||
|
||||
public Boolean getAllowRequestsWithoutSession() {
|
||||
return allowRequestsWithoutSession;
|
||||
}
|
||||
|
||||
public void setAllowModsToEjectCameras(Boolean value) {
|
||||
allowModsToEjectCameras = value;
|
||||
}
|
||||
@ -748,6 +764,7 @@ public class Meeting {
|
||||
private Boolean learningDashboardEnabled;
|
||||
private int learningDashboardCleanupDelayInMinutes;
|
||||
private String learningDashboardAccessToken;
|
||||
private Boolean virtualBackgroundsDisabled;
|
||||
private int duration;
|
||||
private String webVoice;
|
||||
private String telVoice;
|
||||
@ -764,6 +781,7 @@ public class Meeting {
|
||||
private boolean isBreakout;
|
||||
private String guestPolicy;
|
||||
private Boolean authenticatedGuest;
|
||||
private Boolean allowRequestsWithoutSession;
|
||||
private String meetingLayout;
|
||||
private BreakoutRoomsParams breakoutRoomsParams;
|
||||
private LockSettingsParams lockSettingsParams;
|
||||
@ -854,6 +872,11 @@ public class Meeting {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withVirtualBackgroundsDisabled(Boolean d) {
|
||||
this.virtualBackgroundsDisabled = d;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withWelcomeMessage(String w) {
|
||||
welcomeMsg = w;
|
||||
return this;
|
||||
@ -909,6 +932,11 @@ public class Meeting {
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withAllowRequestsWithoutSession(Boolean value) {
|
||||
allowRequestsWithoutSession = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder withMeetingLayout(String layout) {
|
||||
meetingLayout = layout;
|
||||
return this;
|
||||
|
@ -37,7 +37,8 @@ public interface IBbbWebApiGWApp {
|
||||
BreakoutRoomsParams breakoutParams,
|
||||
LockSettingsParams lockSettingsParams,
|
||||
Integer html5InstanceId,
|
||||
ArrayList<Group> groups);
|
||||
ArrayList<Group> groups,
|
||||
Boolean virtualBackgroundsDisabled);
|
||||
|
||||
void registerUser(String meetingID, String internalUserId, String fullname, String role,
|
||||
String externUserID, String authToken, String avatarURL,
|
||||
|
@ -146,7 +146,8 @@ class BbbWebApiGWApp(
|
||||
breakoutParams: BreakoutRoomsParams,
|
||||
lockSettingsParams: LockSettingsParams,
|
||||
html5InstanceId: java.lang.Integer,
|
||||
groups: java.util.ArrayList[Group]): Unit = {
|
||||
groups: java.util.ArrayList[Group],
|
||||
virtualBackgroundsDisabled: java.lang.Boolean): Unit = {
|
||||
|
||||
val meetingProp = MeetingProp(name = meetingName, extId = extMeetingId, intId = meetingId,
|
||||
isBreakout = isBreakout.booleanValue(), learningDashboardEnabled = learningDashboardEnabled.booleanValue())
|
||||
@ -182,7 +183,7 @@ class BbbWebApiGWApp(
|
||||
val usersProp = UsersProp(maxUsers = maxUsers.intValue(), webcamsOnlyForModerator = webcamsOnlyForModerator.booleanValue(),
|
||||
guestPolicy = guestPolicy, meetingLayout = meetingLayout, allowModsToUnmuteUsers = allowModsToUnmuteUsers.booleanValue(),
|
||||
allowModsToEjectCameras = allowModsToEjectCameras.booleanValue(),
|
||||
authenticatedGuest = authenticatedGuest.booleanValue())
|
||||
authenticatedGuest = authenticatedGuest.booleanValue(), virtualBackgroundsDisabled = virtualBackgroundsDisabled.booleanValue())
|
||||
val metadataProp = MetadataProp(mapAsScalaMap(metadata).toMap)
|
||||
val screenshareProps = ScreenshareProps(
|
||||
screenshareConf = voiceBridge + screenshareConfSuffix,
|
||||
|
17050
bbb-learning-dashboard/package-lock.json
generated
17050
bbb-learning-dashboard/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1 +1 @@
|
||||
git clone --branch v2.6.4 --depth 1 https://github.com/bigbluebutton/bbb-webrtc-sfu bbb-webrtc-sfu
|
||||
git clone --branch v2.6.5 --depth 1 https://github.com/bigbluebutton/bbb-webrtc-sfu bbb-webrtc-sfu
|
||||
|
@ -106,19 +106,30 @@ with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
||||
<script src="compatibility/tflite-simd.js?v=VERSION" language="javascript"></script>
|
||||
<script src="compatibility/tflite.js?v=VERSION" language="javascript"></script>
|
||||
<!-- fonts -->
|
||||
<link rel="preload" href="fonts/BbbIcons/bbb-icons.woff?j1ntjp" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Light.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Regular.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Semibold.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Bold.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-LightItalic.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Italic.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-SemiboldItalic.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-BoldItalic.woff" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/BbbIcons/bbb-icons.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Light.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Regular.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Semibold.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Bold.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-LightItalic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-Italic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-SemiboldItalic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
<link rel="preload" href="fonts/SourceSansPro/SourceSansPro-BoldItalic.woff?v=VERSION" as="font" crossorigin="anonymous"/>
|
||||
|
||||
<style>
|
||||
@font-face {
|
||||
font-family: 'bbb-icons';
|
||||
src: url('fonts/BbbIcons/bbb-icons.woff?v=VERSION') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
</style>
|
||||
<!-- fonts -->
|
||||
</head>
|
||||
<body style="background-color: #06172A">
|
||||
<div id="app" role="document"></div>
|
||||
<div id="aria-polite-alert" aria-live="polite" aria-atomic="false" class="sr-only"></div>
|
||||
<div id="app" role="document">
|
||||
</div>
|
||||
<span id="destination"></span>
|
||||
<audio id="remote-media" autoplay>
|
||||
</audio>
|
||||
|
@ -1,10 +1,3 @@
|
||||
@font-face {
|
||||
font-family: 'bbb-icons';
|
||||
src: url('/fonts/BbbIcons/bbb-icons.woff?j1ntjp') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
[class^="icon-bbb-"], [class*=" icon-bbb-"] {
|
||||
/* use !important to prevent issues with browser extensions that change fonts */
|
||||
font-family: 'bbb-icons' !important;
|
||||
|
@ -17,6 +17,7 @@ export default function upsertValidationState(meetingId, userId, validationStatu
|
||||
};
|
||||
|
||||
try {
|
||||
AuthTokenValidation.remove({ meetingId, userId, connectionId: { $ne: connectionId } });
|
||||
const { numberAffected } = AuthTokenValidation.upsert(selector, modifier);
|
||||
|
||||
if (numberAffected) {
|
||||
|
@ -2,6 +2,7 @@ import { Match, check } from 'meteor/check';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import { GroupChatMsg } from '/imports/api/group-chat-msg';
|
||||
import { BREAK_LINE } from '/imports/utils/lineEndings';
|
||||
import changeHasMessages from '/imports/api/users/server/modifiers/changeHasMessages';
|
||||
|
||||
export function parseMessage(message) {
|
||||
let parsedMessage = message || '';
|
||||
@ -44,6 +45,7 @@ export default function addGroupChatMsg(meetingId, chatId, msg) {
|
||||
const insertedId = GroupChatMsg.insert(msgDocument);
|
||||
|
||||
if (insertedId) {
|
||||
changeHasMessages(true, sender.id, meetingId);
|
||||
Logger.info(`Added group-chat-msg msgId=${msg.id} chatId=${chatId} meetingId=${meetingId}`);
|
||||
}
|
||||
} catch (err) {
|
||||
|
@ -64,6 +64,7 @@ export default function addMeeting(meeting) {
|
||||
allowModsToUnmuteUsers: Boolean,
|
||||
allowModsToEjectCameras: Boolean,
|
||||
meetingLayout: String,
|
||||
virtualBackgroundsDisabled: Boolean,
|
||||
},
|
||||
durationProps: {
|
||||
createdTime: Number,
|
||||
|
@ -1,6 +1,8 @@
|
||||
import RedisPubSub from '/imports/startup/server/redis';
|
||||
import handleScreenshareStarted from './handlers/screenshareStarted';
|
||||
import handleScreenshareStopped from './handlers/screenshareStopped';
|
||||
import handleScreenshareSync from './handlers/screenshareSync';
|
||||
|
||||
RedisPubSub.on('ScreenshareRtmpBroadcastStartedEvtMsg', handleScreenshareStarted);
|
||||
RedisPubSub.on('ScreenshareRtmpBroadcastStoppedEvtMsg', handleScreenshareStopped);
|
||||
RedisPubSub.on('SyncGetScreenshareInfoRespMsg', handleScreenshareSync);
|
||||
|
@ -0,0 +1,19 @@
|
||||
import { check } from 'meteor/check';
|
||||
import addScreenshare from '../modifiers/addScreenshare';
|
||||
import clearScreenshare from '../modifiers/clearScreenshare';
|
||||
|
||||
export default function handleScreenshareSync({ body }, meetingId) {
|
||||
check(meetingId, String);
|
||||
check(body, Object);
|
||||
|
||||
const { isBroadcasting, screenshareConf } = body;
|
||||
|
||||
check(screenshareConf, String);
|
||||
check(isBroadcasting, Boolean);
|
||||
|
||||
if (!isBroadcasting) {
|
||||
return clearScreenshare(meetingId, screenshareConf);
|
||||
}
|
||||
|
||||
return addScreenshare(meetingId, body);
|
||||
}
|
@ -2,7 +2,6 @@ import { Meteor } from 'meteor/meteor';
|
||||
import UserSettings from '/imports/api/users-settings';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import AuthTokenValidation, { ValidationStates } from '/imports/api/auth-token-validation';
|
||||
import User from '/imports/api/users';
|
||||
|
||||
function userSettings() {
|
||||
const tokenValidation = AuthTokenValidation.findOne({ connectionId: this.connection.id });
|
||||
@ -14,34 +13,6 @@ function userSettings() {
|
||||
|
||||
const { meetingId, userId } = tokenValidation;
|
||||
|
||||
const currentUser = User.findOne({ userId, meetingId });
|
||||
|
||||
if (currentUser && currentUser?.breakoutProps?.isBreakoutUser) {
|
||||
const { parentId } = currentUser.breakoutProps;
|
||||
|
||||
const [externalId] = currentUser.extId.split('-');
|
||||
|
||||
const mainRoomUserSettings = UserSettings.find({ meetingId: parentId, userId: externalId });
|
||||
|
||||
mainRoomUserSettings.map(({ setting, value }) => ({
|
||||
meetingId,
|
||||
setting,
|
||||
userId,
|
||||
value,
|
||||
})).forEach((doc) => {
|
||||
const selector = {
|
||||
meetingId,
|
||||
setting: doc.setting,
|
||||
};
|
||||
|
||||
UserSettings.upsert(selector, doc);
|
||||
});
|
||||
|
||||
Logger.debug('Publishing UserSettings', { meetingId, userId });
|
||||
|
||||
return UserSettings.find({ meetingId, userId });
|
||||
}
|
||||
|
||||
Logger.debug('Publishing UserSettings', { meetingId, userId });
|
||||
|
||||
return UserSettings.find({ meetingId, userId });
|
||||
|
@ -0,0 +1,25 @@
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import Users from '/imports/api/users';
|
||||
|
||||
export default function changeHasMessages(hasMessages, userId, meetingId) {
|
||||
const selector = {
|
||||
meetingId,
|
||||
userId,
|
||||
};
|
||||
|
||||
const modifier = {
|
||||
$set: {
|
||||
hasMessages,
|
||||
},
|
||||
};
|
||||
|
||||
try {
|
||||
const numberAffected = Users.update(selector, modifier);
|
||||
|
||||
if (numberAffected) {
|
||||
Logger.info(`Changed hasMessages=${hasMessages} id=${userId} meeting=${meetingId}`);
|
||||
}
|
||||
} catch (err) {
|
||||
Logger.error(`Change hasMessages error: ${err}`);
|
||||
}
|
||||
}
|
@ -5,6 +5,8 @@ import Logger from '/imports/startup/server/logger';
|
||||
import setloggedOutStatus from '/imports/api/users-persistent-data/server/modifiers/setloggedOutStatus';
|
||||
import clearUserInfoForRequester from '/imports/api/users-infos/server/modifiers/clearUserInfoForRequester';
|
||||
import ClientConnections from '/imports/startup/server/ClientConnections';
|
||||
import UsersPersistentData from '/imports/api/users-persistent-data';
|
||||
import VoiceUsers from '/imports/api/voice-users/';
|
||||
|
||||
const clearAllSessions = (sessionUserId) => {
|
||||
const serverSessions = Meteor.server.sessions;
|
||||
@ -35,7 +37,14 @@ export default function removeUser(meetingId, userId) {
|
||||
|
||||
clearUserInfoForRequester(meetingId, userId);
|
||||
|
||||
const currentUser = Users.findOne({ userId, meetingId });
|
||||
const hasMessages = currentUser?.hasMessages;
|
||||
|
||||
if (!hasMessages) {
|
||||
UsersPersistentData.remove(selector);
|
||||
}
|
||||
Users.remove(selector);
|
||||
VoiceUsers.remove({ intId: userId, meetingId });
|
||||
}
|
||||
|
||||
if (!process.env.BBB_HTML5_ROLE || process.env.BBB_HTML5_ROLE === 'frontend') {
|
||||
|
@ -4,7 +4,7 @@ import RedisPubSub from '/imports/startup/server/redis';
|
||||
import { extractCredentials } from '/imports/api/common/server/helpers';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
|
||||
export default function ejectUserFromVoice(userId) {
|
||||
export default function ejectUserFromVoice(userId, banUser) {
|
||||
try {
|
||||
const REDIS_CONFIG = Meteor.settings.private.redis;
|
||||
const CHANNEL = REDIS_CONFIG.channels.toAkkaApps;
|
||||
@ -15,10 +15,12 @@ export default function ejectUserFromVoice(userId) {
|
||||
check(meetingId, String);
|
||||
check(requesterUserId, String);
|
||||
check(userId, String);
|
||||
check(banUser, Boolean);
|
||||
|
||||
const payload = {
|
||||
userId,
|
||||
ejectedBy: requesterUserId,
|
||||
banUser,
|
||||
};
|
||||
|
||||
RedisPubSub.publishUserMessage(CHANNEL, EVENT_NAME, meetingId, requesterUserId, payload);
|
||||
|
@ -16,6 +16,7 @@ const propTypes = {
|
||||
};
|
||||
|
||||
const DEFAULT_LANGUAGE = Meteor.settings.public.app.defaultSettings.application.fallbackLocale;
|
||||
const CLIENT_VERSION = Meteor.settings.public.app.html5ClientBuild;
|
||||
|
||||
const RTL_LANGUAGES = ['ar', 'dv', 'fa', 'he'];
|
||||
const LARGE_FONT_LANGUAGES = ['te', 'km'];
|
||||
@ -73,7 +74,7 @@ class IntlStartup extends Component {
|
||||
})
|
||||
.then(({ normalizedLocale, regionDefaultLocale }) => {
|
||||
const fetchFallbackMessages = new Promise((resolve, reject) => {
|
||||
fetch(`${localesPath}/${DEFAULT_LANGUAGE}.json`)
|
||||
fetch(`${localesPath}/${DEFAULT_LANGUAGE}.json?v=${CLIENT_VERSION}`)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return reject();
|
||||
@ -86,7 +87,7 @@ class IntlStartup extends Component {
|
||||
if (!regionDefaultLocale) {
|
||||
return resolve(false);
|
||||
}
|
||||
fetch(`${localesPath}/${regionDefaultLocale}.json`)
|
||||
fetch(`${localesPath}/${regionDefaultLocale}.json?v=${CLIENT_VERSION}`)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return resolve(false);
|
||||
@ -104,7 +105,7 @@ class IntlStartup extends Component {
|
||||
if (!normalizedLocale || normalizedLocale === DEFAULT_LANGUAGE || normalizedLocale === regionDefaultLocale) {
|
||||
return resolve(false);
|
||||
}
|
||||
fetch(`${localesPath}/${normalizedLocale}.json`)
|
||||
fetch(`${localesPath}/${normalizedLocale}.json?v=${CLIENT_VERSION}`)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return resolve(false);
|
||||
|
@ -272,6 +272,7 @@ class ActionsDropdown extends PureComponent {
|
||||
open={isDropdownOpen}
|
||||
hideLabel
|
||||
aria-label={intl.formatMessage(intlMessages.actionsLabel)}
|
||||
data-test="actionsButton"
|
||||
label={intl.formatMessage(intlMessages.actionsLabel)}
|
||||
icon="plus"
|
||||
color="primary"
|
||||
|
@ -1,7 +1,6 @@
|
||||
import styled from 'styled-components';
|
||||
import { barsPadding } from '/imports/ui/stylesheets/styled-components/general';
|
||||
import { FlexColumn } from '/imports/ui/stylesheets/styled-components/placeholders';
|
||||
import { colorBackground } from '/imports/ui/stylesheets/styled-components/palette';
|
||||
|
||||
const CaptionsWrapper = styled.div`
|
||||
height: auto;
|
||||
@ -17,9 +16,7 @@ const ActionsBar = styled.section`
|
||||
order: 3;
|
||||
`;
|
||||
|
||||
const Layout = styled(FlexColumn)`
|
||||
background-color: ${colorBackground};
|
||||
`;
|
||||
const Layout = styled(FlexColumn)``;
|
||||
|
||||
export default {
|
||||
CaptionsWrapper,
|
||||
|
@ -42,7 +42,9 @@ class AuthenticatedHandler extends Component {
|
||||
AuthenticatedHandler.addReconnectObservable();
|
||||
|
||||
const setReason = (reason) => {
|
||||
logger.error({
|
||||
const log = reason.error === 403 ? 'warn' : 'error';
|
||||
|
||||
logger[log]({
|
||||
logCode: 'authenticatedhandlercomponent_setreason',
|
||||
extraInfo: { reason },
|
||||
}, 'Encountered error while trying to authenticate');
|
||||
|
@ -285,7 +285,7 @@ class BreakoutRoom extends PureComponent {
|
||||
status: AudioManager.BREAKOUT_AUDIO_TRANSFER_STATES.RETURNING,
|
||||
});
|
||||
this.returnBackToMeeeting(breakoutId);
|
||||
return logger.debug({
|
||||
return logger.info({
|
||||
logCode: 'breakoutroom_return_main_audio',
|
||||
extraInfo: { logType: 'user_action' },
|
||||
}, 'Returning to main audio (breakout room audio closed)');
|
||||
@ -296,7 +296,7 @@ class BreakoutRoom extends PureComponent {
|
||||
status: AudioManager.BREAKOUT_AUDIO_TRANSFER_STATES.CONNECTED,
|
||||
});
|
||||
this.transferUserToBreakoutRoom(breakoutId);
|
||||
return logger.debug({
|
||||
return logger.info({
|
||||
logCode: 'breakoutroom_join_audio_from_main_room',
|
||||
extraInfo: { logType: 'user_action' },
|
||||
}, 'joining breakout room audio (main room audio closed)');
|
||||
@ -320,7 +320,7 @@ class BreakoutRoom extends PureComponent {
|
||||
// leave main room's audio,
|
||||
// and stops video and screenshare when joining a breakout room
|
||||
exitAudio();
|
||||
logger.debug({
|
||||
logger.info({
|
||||
logCode: 'breakoutroom_join',
|
||||
extraInfo: { logType: 'user_action' },
|
||||
}, 'joining breakout room closed audio in the main room');
|
||||
|
@ -3,6 +3,7 @@ import PropTypes from 'prop-types';
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import _ from 'lodash';
|
||||
import injectNotify from '/imports/ui/components/toast/inject-notify/component';
|
||||
import AudioService from '/imports/ui/components/audio/service';
|
||||
import ChatPushAlert from './push-alert/component';
|
||||
import Service from '../service';
|
||||
@ -45,6 +46,14 @@ const intlMessages = defineMessages({
|
||||
id: 'app.chat.clearPublicChatMessage',
|
||||
description: 'message of when clear the public chat',
|
||||
},
|
||||
publicChatMsg: {
|
||||
id: 'app.toast.chat.public',
|
||||
description: 'public chat toast message title',
|
||||
},
|
||||
privateChatMsg: {
|
||||
id: 'app.toast.chat.private',
|
||||
description: 'private chat toast message title',
|
||||
},
|
||||
});
|
||||
|
||||
const ALERT_INTERVAL = 5000; // 5 seconds
|
||||
@ -59,6 +68,8 @@ const ChatAlert = (props) => {
|
||||
unreadMessagesByChat,
|
||||
intl,
|
||||
layoutContextDispatch,
|
||||
chatsTracker,
|
||||
notify,
|
||||
} = props;
|
||||
|
||||
const [unreadMessagesCount, setUnreadMessagesCount] = useState(0);
|
||||
@ -94,6 +105,35 @@ const ChatAlert = (props) => {
|
||||
}
|
||||
}, [pushAlertEnabled]);
|
||||
|
||||
useEffect(() => {
|
||||
const keys = Object.keys(chatsTracker);
|
||||
keys.forEach((key) => {
|
||||
if (chatsTracker[key]?.shouldNotify) {
|
||||
if (audioAlertEnabled) {
|
||||
AudioService.playAlertSound(`${Meteor.settings.public.app.cdn
|
||||
+ Meteor.settings.public.app.basename
|
||||
+ Meteor.settings.public.app.instanceId}`
|
||||
+ '/resources/sounds/notify.mp3');
|
||||
}
|
||||
if (pushAlertEnabled) {
|
||||
notify(
|
||||
key === 'MAIN-PUBLIC-GROUP-CHAT'
|
||||
? intl.formatMessage(intlMessages.publicChatMsg)
|
||||
: intl.formatMessage(intlMessages.privateChatMsg),
|
||||
'info',
|
||||
'chat',
|
||||
{ autoClose: 3000 },
|
||||
<div>
|
||||
<div style={{ fontWeight: 700 }}>{chatsTracker[key].lastSender}</div>
|
||||
<div>{chatsTracker[key].content}</div>
|
||||
</div>,
|
||||
true,
|
||||
);
|
||||
}
|
||||
}
|
||||
});
|
||||
}, [chatsTracker]);
|
||||
|
||||
useEffect(() => {
|
||||
if (pushAlertEnabled) {
|
||||
const alertsObject = unreadMessagesByChat;
|
||||
@ -198,4 +238,4 @@ const ChatAlert = (props) => {
|
||||
ChatAlert.propTypes = propTypes;
|
||||
ChatAlert.defaultProps = defaultProps;
|
||||
|
||||
export default injectIntl(ChatAlert);
|
||||
export default injectNotify(injectIntl(ChatAlert));
|
||||
|
@ -1,5 +1,7 @@
|
||||
import React, { useContext } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import logger from '/imports/startup/client/logger';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
import ChatAlert from './component';
|
||||
import { layoutSelect, layoutSelectInput, layoutDispatch } from '../../layout/context';
|
||||
import { PANELS } from '../../layout/enums';
|
||||
@ -16,6 +18,15 @@ const propTypes = {
|
||||
pushAlertEnabled: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
// custom hook for getting previous value
|
||||
function usePrevious(value) {
|
||||
const ref = React.useRef();
|
||||
React.useEffect(() => {
|
||||
ref.current = value;
|
||||
});
|
||||
return ref.current;
|
||||
}
|
||||
|
||||
const ChatAlertContainer = (props) => {
|
||||
const idChatOpen = layoutSelect((i) => i.idChatOpen);
|
||||
const sidebarContent = layoutSelectInput((i) => i.sidebarContent);
|
||||
@ -54,9 +65,46 @@ const ChatAlertContainer = (props) => {
|
||||
})
|
||||
: null;
|
||||
|
||||
const chatsTracker = {};
|
||||
|
||||
if (usingChatContext.chats) {
|
||||
const chatsActive = Object.entries(usingChatContext.chats);
|
||||
chatsActive.forEach((c) => {
|
||||
try {
|
||||
if (c[0] === idChat || (c[0] === 'MAIN-PUBLIC-GROUP-CHAT' && idChat === 'public')) {
|
||||
chatsTracker[c[0]] = {};
|
||||
chatsTracker[c[0]].lastSender = users[Auth.meetingID][c[1]?.lastSender]?.name;
|
||||
if (c[1]?.posJoinMessages || c[1]?.messageGroups) {
|
||||
const m = Object.entries(c[1]?.posJoinMessages || c[1]?.messageGroups);
|
||||
chatsTracker[c[0]].count = m?.length;
|
||||
if (m[m.length - 1]) {
|
||||
chatsTracker[c[0]].content = m[m.length - 1][1]?.message;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
logger.error({
|
||||
logCode: 'chat_alert_component_error',
|
||||
}, 'Error : ', e.error);
|
||||
}
|
||||
});
|
||||
|
||||
const prevTracker = usePrevious(chatsTracker);
|
||||
|
||||
if (prevTracker) {
|
||||
const keys = Object.keys(prevTracker);
|
||||
keys.forEach((key) => {
|
||||
if (chatsTracker[key]?.count > prevTracker[key]?.count) {
|
||||
chatsTracker[key].shouldNotify = true;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<ChatAlert
|
||||
{...props}
|
||||
chatsTracker={chatsTracker}
|
||||
layoutContextDispatch={layoutContextDispatch}
|
||||
unreadMessagesCountByChat={unreadMessagesCountByChat}
|
||||
unreadMessagesByChat={unreadMessagesByChat}
|
||||
|
@ -101,7 +101,7 @@ class TypingIndicator extends PureComponent {
|
||||
info={!error}
|
||||
spacer={!!typingElement}
|
||||
>
|
||||
<Styled.TypingIndicator>{error || typingElement}</Styled.TypingIndicator>
|
||||
<Styled.TypingIndicator data-test="typingIndicator">{error || typingElement}</Styled.TypingIndicator>
|
||||
</Styled.TypingIndicatorWrapper>
|
||||
);
|
||||
}
|
||||
|
@ -54,12 +54,22 @@ const intlMessages = defineMessages({
|
||||
});
|
||||
|
||||
class TimeWindowChatItem extends PureComponent {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
forcedUpdateCount: 0,
|
||||
};
|
||||
}
|
||||
|
||||
componentDidUpdate(prevProps, prevState) {
|
||||
const { height, forceCacheUpdate, systemMessage, index } = this.props;
|
||||
const elementHeight = this.itemRef ? this.itemRef.clientHeight : null;
|
||||
|
||||
if (systemMessage && elementHeight && height !== 'auto' && elementHeight !== height) {
|
||||
if (systemMessage && elementHeight && height !== 'auto' && elementHeight !== height && this.state.forcedUpdateCount < 10) {
|
||||
// forceCacheUpdate() internally calls forceUpdate(), so we need a stop flag
|
||||
// and cannot rely on shouldComponentUpdate() and other comparisons.
|
||||
forceCacheUpdate(index);
|
||||
this.setState(({ forcedUpdateCount }) => ({ forcedUpdateCount: forcedUpdateCount + 1 }));
|
||||
}
|
||||
|
||||
ChatLogger.debug('TimeWindowChatItem::componentDidUpdate::props', { ...this.props }, { ...prevProps });
|
||||
|
@ -1,5 +1,6 @@
|
||||
import React, { Component } from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import logger from '/imports/startup/client/logger';
|
||||
|
||||
const propTypes = {
|
||||
children: PropTypes.element.isRequired,
|
||||
@ -17,6 +18,10 @@ class ErrorBoundary extends Component {
|
||||
error,
|
||||
errorInfo,
|
||||
});
|
||||
logger.error({
|
||||
logCode: 'Error_Boundary_wrapper',
|
||||
extraInfo: { error, errorInfo },
|
||||
}, 'generic error boundary logger');
|
||||
}
|
||||
|
||||
render() {
|
||||
@ -29,7 +34,7 @@ class ErrorBoundary extends Component {
|
||||
|
||||
ErrorBoundary.propTypes = propTypes;
|
||||
|
||||
export const withErrorBoundary = (WrappedComponent, FallbackComponent) => props => (
|
||||
export const withErrorBoundary = (WrappedComponent, FallbackComponent) => (props) => (
|
||||
<ErrorBoundary Fallback={FallbackComponent}>
|
||||
<WrappedComponent {...props} />
|
||||
</ErrorBoundary>
|
||||
|
@ -56,9 +56,10 @@ const defaultProps = {
|
||||
class ErrorScreen extends PureComponent {
|
||||
componentDidMount() {
|
||||
const { code } = this.props;
|
||||
const log = code === 403 ? 'warn' : 'error';
|
||||
AudioManager.exitAudio();
|
||||
Meteor.disconnect();
|
||||
logger.error({ logCode: 'startup_client_usercouldnotlogin_error' }, `User could not log in HTML5, hit ${code}`);
|
||||
logger[log]({ logCode: 'startup_client_usercouldnotlogin_error' }, `User could not log in HTML5, hit ${code}`);
|
||||
}
|
||||
|
||||
render() {
|
||||
|
@ -249,7 +249,7 @@ const CustomLayout = (props) => {
|
||||
);
|
||||
}
|
||||
|
||||
cameraDockBounds.top = navBarHeight + bannerAreaHeight();
|
||||
cameraDockBounds.top = navBarHeight;
|
||||
cameraDockBounds.left = mediaAreaBounds.left;
|
||||
cameraDockBounds.right = isRTL ? sidebarSize : null;
|
||||
cameraDockBounds.minWidth = mediaAreaBounds.width;
|
||||
|
@ -58,9 +58,9 @@ const LayoutEngine = ({ layoutType }) => {
|
||||
if (!isOpen) {
|
||||
cameraDockBounds.width = mediaAreaBounds.width;
|
||||
cameraDockBounds.maxWidth = mediaAreaBounds.width;
|
||||
cameraDockBounds.height = mediaAreaBounds.height;
|
||||
cameraDockBounds.height = mediaAreaBounds.height - bannerAreaHeight();
|
||||
cameraDockBounds.maxHeight = mediaAreaBounds.height;
|
||||
cameraDockBounds.top = DEFAULT_VALUES.navBarHeight;
|
||||
cameraDockBounds.top = DEFAULT_VALUES.navBarHeight + bannerAreaHeight();
|
||||
cameraDockBounds.left = !isRTL ? mediaAreaBounds.left : 0;
|
||||
cameraDockBounds.right = isRTL ? sidebarSize : null;
|
||||
}
|
||||
|
@ -3,7 +3,11 @@ import _ from 'lodash';
|
||||
import { layoutDispatch, layoutSelect, layoutSelectInput } from '/imports/ui/components/layout/context';
|
||||
import DEFAULT_VALUES from '/imports/ui/components/layout/defaultValues';
|
||||
import { INITIAL_INPUT_STATE } from '/imports/ui/components/layout/initState';
|
||||
import { ACTIONS, PANELS } from '/imports/ui/components/layout/enums';
|
||||
import {
|
||||
ACTIONS,
|
||||
PANELS,
|
||||
CAMERADOCK_POSITION,
|
||||
} from '/imports/ui/components/layout/enums';
|
||||
|
||||
const windowWidth = () => window.document.documentElement.clientWidth;
|
||||
const windowHeight = () => window.document.documentElement.clientHeight;
|
||||
@ -206,14 +210,14 @@ const PresentationFocusLayout = (props) => {
|
||||
(windowHeight() - cameraDockMinHeight),
|
||||
);
|
||||
}
|
||||
cameraDockBounds.top = windowHeight() - cameraDockHeight + this.bannerAreaHeight();
|
||||
cameraDockBounds.top = windowHeight() - cameraDockHeight;
|
||||
cameraDockBounds.left = !isRTL ? sidebarNavWidth : 0;
|
||||
cameraDockBounds.right = isRTL ? sidebarNavWidth : 0;
|
||||
cameraDockBounds.minWidth = sidebarContentWidth;
|
||||
cameraDockBounds.width = sidebarContentWidth;
|
||||
cameraDockBounds.maxWidth = sidebarContentWidth;
|
||||
cameraDockBounds.minHeight = cameraDockMinHeight;
|
||||
cameraDockBounds.height = cameraDockHeight - this.bannerAreaHeight();
|
||||
cameraDockBounds.height = cameraDockHeight;
|
||||
cameraDockBounds.maxHeight = windowHeight() - sidebarContentHeight;
|
||||
cameraDockBounds.zIndex = 1;
|
||||
}
|
||||
@ -390,6 +394,7 @@ const PresentationFocusLayout = (props) => {
|
||||
type: ACTIONS.SET_CAMERA_DOCK_OUTPUT,
|
||||
value: {
|
||||
display: cameraDockInput.numCameras > 0,
|
||||
position: CAMERADOCK_POSITION.SIDEBAR_CONTENT_BOTTOM,
|
||||
minWidth: cameraDockBounds.minWidth,
|
||||
width: cameraDockBounds.width,
|
||||
maxWidth: cameraDockBounds.maxWidth,
|
||||
|
@ -190,17 +190,20 @@ const VideoFocusLayout = (props) => {
|
||||
|
||||
const cameraDockBounds = {};
|
||||
|
||||
const mobileCameraHeight = mediaAreaBounds.height * 0.7 - bannerAreaHeight();
|
||||
const cameraHeight = mediaAreaBounds.height - bannerAreaHeight();
|
||||
|
||||
if (isMobile) {
|
||||
cameraDockBounds.minHeight = mediaAreaBounds.height * 0.7;
|
||||
cameraDockBounds.height = mediaAreaBounds.height * 0.7;
|
||||
cameraDockBounds.maxHeight = mediaAreaBounds.height * 0.7;
|
||||
cameraDockBounds.minHeight = mobileCameraHeight;
|
||||
cameraDockBounds.height = mobileCameraHeight;
|
||||
cameraDockBounds.maxHeight = mobileCameraHeight;
|
||||
} else {
|
||||
cameraDockBounds.minHeight = mediaAreaBounds.height;
|
||||
cameraDockBounds.height = mediaAreaBounds.height;
|
||||
cameraDockBounds.maxHeight = mediaAreaBounds.height;
|
||||
cameraDockBounds.minHeight = cameraHeight;
|
||||
cameraDockBounds.height = cameraHeight;
|
||||
cameraDockBounds.maxHeight = cameraHeight;
|
||||
}
|
||||
|
||||
cameraDockBounds.top = navBarHeight;
|
||||
cameraDockBounds.top = navBarHeight + bannerAreaHeight();
|
||||
cameraDockBounds.left = !isRTL ? mediaAreaBounds.left : null;
|
||||
cameraDockBounds.right = isRTL ? sidebarSize : null;
|
||||
cameraDockBounds.minWidth = mediaAreaBounds.width;
|
||||
@ -238,12 +241,17 @@ const VideoFocusLayout = (props) => {
|
||||
mediaBounds.top = mediaAreaBounds.top + cameraDockBounds.height;
|
||||
mediaBounds.width = mediaAreaBounds.width;
|
||||
} else if (cameraDockInput.numCameras > 0) {
|
||||
mediaBounds.height = windowHeight() - sidebarContentHeight - this.bannerAreaHeight();
|
||||
mediaBounds.height = windowHeight() - sidebarContentHeight - bannerAreaHeight();
|
||||
mediaBounds.left = !isRTL ? sidebarNavWidth : 0;
|
||||
mediaBounds.right = isRTL ? sidebarNavWidth : 0;
|
||||
mediaBounds.top = sidebarContentHeight + this.bannerAreaHeight();
|
||||
mediaBounds.top = sidebarContentHeight + bannerAreaHeight();
|
||||
mediaBounds.width = sidebarContentWidth;
|
||||
mediaBounds.zIndex = 1;
|
||||
} else if (!input.presentation.isOpen) {
|
||||
mediaBounds.width = 0;
|
||||
mediaBounds.height = 0;
|
||||
mediaBounds.top = 0;
|
||||
mediaBounds.left = 0;
|
||||
} else {
|
||||
mediaBounds.height = mediaAreaBounds.height;
|
||||
mediaBounds.width = mediaAreaBounds.width;
|
||||
|
@ -71,6 +71,7 @@ const FALLBACK = 'fallback';
|
||||
const READY = 'ready';
|
||||
const supportedBrowsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'Microsoft Edge', 'Yandex Browser'];
|
||||
const DEFAULT_LANGUAGE = Meteor.settings.public.app.defaultSettings.application.fallbackLocale;
|
||||
const CLIENT_VERSION = Meteor.settings.public.app.html5ClientBuild;
|
||||
|
||||
export default class Legacy extends Component {
|
||||
constructor(props) {
|
||||
@ -93,7 +94,7 @@ export default class Legacy extends Component {
|
||||
return response.json();
|
||||
})
|
||||
.then(({ normalizedLocale, regionDefaultLocale }) => {
|
||||
fetch(`${localesPath}/${DEFAULT_LANGUAGE}.json`)
|
||||
fetch(`${localesPath}/${DEFAULT_LANGUAGE}.json?v=${CLIENT_VERSION}`)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return Promise.reject();
|
||||
@ -102,7 +103,7 @@ export default class Legacy extends Component {
|
||||
})
|
||||
.then((messages) => {
|
||||
if (regionDefaultLocale !== '') {
|
||||
fetch(`${localesPath}/${regionDefaultLocale}.json`)
|
||||
fetch(`${localesPath}/${regionDefaultLocale}.json?v=${CLIENT_VERSION}`)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return Promise.resolve();
|
||||
@ -116,7 +117,7 @@ export default class Legacy extends Component {
|
||||
}
|
||||
|
||||
if (normalizedLocale && normalizedLocale !== DEFAULT_LANGUAGE && normalizedLocale !== regionDefaultLocale) {
|
||||
fetch(`${localesPath}/${normalizedLocale}.json`)
|
||||
fetch(`${localesPath}/${normalizedLocale}.json?v=${CLIENT_VERSION}`)
|
||||
.then((response) => {
|
||||
if (!response.ok) {
|
||||
return Promise.reject();
|
||||
|
@ -12,7 +12,7 @@ import SettingsDropdownContainer from './settings-dropdown/container';
|
||||
import browserInfo from '/imports/utils/browserInfo';
|
||||
import deviceInfo from '/imports/utils/deviceInfo';
|
||||
import _ from "lodash";
|
||||
import {alertScreenReader} from '/imports/utils/dom-utils';
|
||||
import { politeSRAlert } from '/imports/utils/dom-utils';
|
||||
import { PANELS, ACTIONS } from '../layout/enums';
|
||||
|
||||
const intlMessages = defineMessages({
|
||||
@ -32,6 +32,10 @@ const intlMessages = defineMessages({
|
||||
id: 'app.navBar.toggleUserList.newMsgAria',
|
||||
description: 'label for new message screen reader alert',
|
||||
},
|
||||
defaultBreakoutName: {
|
||||
id: 'app.createBreakoutRoom.room',
|
||||
description: 'default breakout room name',
|
||||
},
|
||||
});
|
||||
|
||||
const propTypes = {
|
||||
@ -60,8 +64,24 @@ class NavBar extends Component {
|
||||
componentDidMount() {
|
||||
const {
|
||||
shortcuts: TOGGLE_USERLIST_AK,
|
||||
intl,
|
||||
breakoutNum,
|
||||
breakoutName,
|
||||
meetingName,
|
||||
} = this.props;
|
||||
|
||||
if (breakoutNum && breakoutNum > 0) {
|
||||
const defaultBreakoutName = intl.formatMessage(intlMessages.defaultBreakoutName, {
|
||||
0: breakoutNum,
|
||||
});
|
||||
|
||||
if (breakoutName === defaultBreakoutName) {
|
||||
document.title = `${breakoutNum} - ${meetingName}`;
|
||||
} else {
|
||||
document.title = `${breakoutName} - ${meetingName}`;
|
||||
}
|
||||
}
|
||||
|
||||
const { isFirefox } = browserInfo;
|
||||
const { isMacos } = deviceInfo;
|
||||
|
||||
@ -157,7 +177,7 @@ class NavBar extends Component {
|
||||
|
||||
activeChats.map((c, i) => {
|
||||
if (c?.unreadCounter > 0 && c?.unreadCounter !== acs[i]?.unreadCounter) {
|
||||
alertScreenReader(`${intl.formatMessage(intlMessages.newMsgAria, { 0: c.name })}`)
|
||||
politeSRAlert(`${intl.formatMessage(intlMessages.newMsgAria, { 0: c.name })}`)
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -2,6 +2,7 @@ import React, { useContext } from 'react';
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import { withTracker } from 'meteor/react-meteor-data';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
import Breakouts from '/imports/api/breakouts';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
import getFromUserSettings from '/imports/ui/services/users-settings';
|
||||
import userListService from '/imports/ui/components/user-list/service';
|
||||
@ -83,27 +84,35 @@ const NavBarContainer = ({ children, ...props }) => {
|
||||
export default withTracker(() => {
|
||||
const CLIENT_TITLE = getFromUserSettings('bbb_client_title', PUBLIC_CONFIG.app.clientTitle);
|
||||
|
||||
let meetingTitle;
|
||||
let meetingTitle, breakoutNum, breakoutName, meetingName;
|
||||
const meetingId = Auth.meetingID;
|
||||
const meetingObject = Meetings.findOne({
|
||||
meetingId,
|
||||
}, { fields: { 'meetingProp.name': 1, 'breakoutProps.sequence': 1 } });
|
||||
}, { fields: { 'meetingProp.name': 1, 'breakoutProps.sequence': 1, meetingId: 1 } });
|
||||
|
||||
if (meetingObject != null) {
|
||||
meetingTitle = meetingObject.meetingProp.name;
|
||||
let titleString = `${CLIENT_TITLE} - ${meetingTitle}`;
|
||||
document.title = titleString;
|
||||
|
||||
if (meetingObject.breakoutProps) {
|
||||
const breakoutNum = meetingObject.breakoutProps.sequence;
|
||||
breakoutNum = meetingObject.breakoutProps.sequence;
|
||||
if (breakoutNum > 0) {
|
||||
titleString = `${breakoutNum} - ${titleString}`;
|
||||
const breakoutObject = Breakouts.findOne({
|
||||
breakoutId: meetingObject.meetingId,
|
||||
}, { fields: { shortName: 1 } });
|
||||
breakoutName = breakoutObject.shortName;
|
||||
meetingName = meetingTitle.replace(`(${breakoutName})`, '').trim();
|
||||
}
|
||||
}
|
||||
document.title = titleString;
|
||||
}
|
||||
|
||||
return {
|
||||
currentUserId: Auth.userID,
|
||||
meetingId,
|
||||
presentationTitle: meetingTitle,
|
||||
breakoutNum,
|
||||
breakoutName,
|
||||
meetingName,
|
||||
};
|
||||
})(NavBarContainer);
|
@ -200,7 +200,7 @@ const FILE_DRAG_AND_DROP_ENABLED = POLL_SETTINGS.allowDragAndDropFile;
|
||||
|
||||
const validateInput = (i) => {
|
||||
let _input = i;
|
||||
if (/^\s/.test(_input)) _input = '';
|
||||
while (/^\s/.test(_input)) _input = _input.substring(1);
|
||||
return _input;
|
||||
};
|
||||
|
||||
@ -285,9 +285,18 @@ class Poll extends Component {
|
||||
const { pollTypes } = this.props;
|
||||
const list = [...optList];
|
||||
const validatedVal = validateInput(e.target.value).replace(/\s{2,}/g, ' ');
|
||||
const charsRemovedCount = e.target.value.length - validatedVal.length;
|
||||
const clearError = validatedVal.length > 0 && type !== pollTypes.Response;
|
||||
const input = e.target;
|
||||
const caretStart = e.target.selectionStart;
|
||||
const caretEnd = e.target.selectionEnd;
|
||||
list[index] = { val: validatedVal };
|
||||
this.setState({ optList: list, error: clearError ? null : error });
|
||||
this.setState({ optList: list, error: clearError ? null : error },
|
||||
() => {
|
||||
input.focus();
|
||||
input.selectionStart = caretStart - charsRemovedCount;
|
||||
input.selectionEnd = caretEnd - charsRemovedCount;
|
||||
});
|
||||
}
|
||||
|
||||
toggleIsMultipleResponse() {
|
||||
|
@ -5,6 +5,7 @@ import WhiteboardToolbarContainer from '/imports/ui/components/whiteboard/whiteb
|
||||
import { HUNDRED_PERCENT, MAX_PERCENT } from '/imports/utils/slideCalcUtils';
|
||||
import { defineMessages, injectIntl } from 'react-intl';
|
||||
import { toast } from 'react-toastify';
|
||||
import { politeSRAlert } from '/imports/utils/dom-utils';
|
||||
import PresentationToolbarContainer from './presentation-toolbar/container';
|
||||
import PresentationPlaceholder from './presentation-placeholder/component';
|
||||
import CursorWrapperContainer from './cursor/cursor-wrapper-container/container';
|
||||
@ -20,7 +21,7 @@ import Icon from '/imports/ui/components/icon/component';
|
||||
import PollingContainer from '/imports/ui/components/polling/container';
|
||||
import { ACTIONS, LAYOUT_TYPE } from '../layout/enums';
|
||||
import DEFAULT_VALUES from '../layout/defaultValues';
|
||||
import { colorBackground } from '/imports/ui/stylesheets/styled-components/palette';
|
||||
import { colorContentBackground } from '/imports/ui/stylesheets/styled-components/palette';
|
||||
import browserInfo from '/imports/utils/browserInfo';
|
||||
|
||||
const intlMessages = defineMessages({
|
||||
@ -44,6 +45,10 @@ const intlMessages = defineMessages({
|
||||
id: 'app.presentation.endSlideContent',
|
||||
description: 'Indicate the slide content end',
|
||||
},
|
||||
slideContentChanged: {
|
||||
id: 'app.presentation.changedSlideContent',
|
||||
description: 'Indicate the slide content has changed',
|
||||
},
|
||||
noSlideContent: {
|
||||
id: 'app.presentation.emptySlideContent',
|
||||
description: 'No content available for slide',
|
||||
@ -111,7 +116,8 @@ class Presentation extends PureComponent {
|
||||
|
||||
componentDidMount() {
|
||||
this.getInitialPresentationSizes();
|
||||
this.refPresentationContainer.addEventListener(FULLSCREEN_CHANGE_EVENT, this.onFullscreenChange);
|
||||
this.refPresentationContainer
|
||||
.addEventListener(FULLSCREEN_CHANGE_EVENT, this.onFullscreenChange);
|
||||
window.addEventListener('resize', this.onResize, false);
|
||||
|
||||
const {
|
||||
@ -147,6 +153,7 @@ class Presentation extends PureComponent {
|
||||
userIsPresenter,
|
||||
presentationBounds,
|
||||
numCameras,
|
||||
intl,
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
@ -158,6 +165,14 @@ class Presentation extends PureComponent {
|
||||
this.onResize();
|
||||
}
|
||||
|
||||
if (
|
||||
currentSlide?.num != null &&
|
||||
prevProps?.currentSlide?.num != null &&
|
||||
currentSlide?.num !== prevProps.currentSlide?.num
|
||||
) {
|
||||
politeSRAlert(intl.formatMessage(intlMessages.slideContentChanged, { 0: currentSlide.num }));
|
||||
}
|
||||
|
||||
if (prevProps?.slidePosition && slidePosition) {
|
||||
const { width: prevWidth, height: prevHeight } = prevProps.slidePosition;
|
||||
const { width: currWidth, height: currHeight } = slidePosition;
|
||||
@ -224,7 +239,8 @@ class Presentation extends PureComponent {
|
||||
const { fullscreenContext, layoutContextDispatch } = this.props;
|
||||
|
||||
window.removeEventListener('resize', this.onResize, false);
|
||||
this.refPresentationContainer.removeEventListener(FULLSCREEN_CHANGE_EVENT, this.onFullscreenChange);
|
||||
this.refPresentationContainer
|
||||
.removeEventListener(FULLSCREEN_CHANGE_EVENT, this.onFullscreenChange);
|
||||
|
||||
if (fullscreenContext) {
|
||||
layoutContextDispatch({
|
||||
@ -860,7 +876,9 @@ class Presentation extends PureComponent {
|
||||
width: presentationBounds.width,
|
||||
height: presentationBounds.height,
|
||||
zIndex: fullscreenContext ? presentationBounds.zIndex : undefined,
|
||||
backgroundColor: colorBackground,
|
||||
background: layoutType === LAYOUT_TYPE.VIDEO_FOCUS && numCameras > 0 && !fullscreenContext
|
||||
? colorContentBackground
|
||||
: null,
|
||||
}}
|
||||
>
|
||||
{isFullscreen && <PollingContainer />}
|
||||
|
@ -19,6 +19,9 @@ const { isMobile } = deviceInfo;
|
||||
|
||||
const propTypes = {
|
||||
intl: PropTypes.object.isRequired,
|
||||
fileUploadConstraintsHint: PropTypes.bool.isRequired,
|
||||
fileSizeMax: PropTypes.number.isRequired,
|
||||
filePagesMax: PropTypes.number.isRequired,
|
||||
handleSave: PropTypes.func.isRequired,
|
||||
dispatchTogglePresentationDownloadable: PropTypes.func.isRequired,
|
||||
fileValidMimeTypes: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||
@ -87,6 +90,10 @@ const intlMessages = defineMessages({
|
||||
id: 'app.presentationUploder.fileToUpload',
|
||||
description: 'message used in the file selected for upload',
|
||||
},
|
||||
extraHint: {
|
||||
id: 'app.presentationUploder.extraHint',
|
||||
description: 'message used to indicate upload file max sizes',
|
||||
},
|
||||
rejectedError: {
|
||||
id: 'app.presentationUploder.rejectedError',
|
||||
description: 'some files rejected, please check the file mime types',
|
||||
@ -629,6 +636,25 @@ class PresentationUploader extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
renderExtraHint() {
|
||||
const {
|
||||
intl,
|
||||
fileSizeMax,
|
||||
filePagesMax,
|
||||
} = this.props;
|
||||
|
||||
const options = {
|
||||
0: fileSizeMax/1000000,
|
||||
1: filePagesMax,
|
||||
};
|
||||
|
||||
return (
|
||||
<Styled.ExtraHint>
|
||||
{intl.formatMessage(intlMessages.extraHint, options)}
|
||||
</Styled.ExtraHint>
|
||||
);
|
||||
}
|
||||
|
||||
renderPresentationList() {
|
||||
const { presentations } = this.state;
|
||||
const { intl } = this.props;
|
||||
@ -986,7 +1012,10 @@ class PresentationUploader extends Component {
|
||||
|
||||
render() {
|
||||
const {
|
||||
isOpen, isPresenter, intl,
|
||||
isOpen,
|
||||
isPresenter,
|
||||
intl,
|
||||
fileUploadConstraintsHint,
|
||||
} = this.props;
|
||||
if (!isPresenter) return null;
|
||||
const { presentations, disableActions } = this.state;
|
||||
@ -1023,6 +1052,7 @@ class PresentationUploader extends Component {
|
||||
|
||||
<Styled.ModalHint>
|
||||
{`${intl.formatMessage(intlMessages.message)}`}
|
||||
{fileUploadConstraintsHint ? this.renderExtraHint() : null}
|
||||
</Styled.ModalHint>
|
||||
{this.renderPresentationList()}
|
||||
{isMobile ? this.renderPicDropzone() : null}
|
||||
|
@ -33,6 +33,9 @@ export default withTracker(() => {
|
||||
|
||||
return {
|
||||
presentations: currentPresentations,
|
||||
fileUploadConstraintsHint: PRESENTATION_CONFIG.fileUploadConstraintsHint,
|
||||
fileSizeMax: PRESENTATION_CONFIG.mirroredFromBBBCore.uploadSizeMax,
|
||||
filePagesMax: PRESENTATION_CONFIG.mirroredFromBBBCore.uploadPagesMax,
|
||||
fileValidMimeTypes: PRESENTATION_CONFIG.uploadValidMimeTypes,
|
||||
allowDownloadable: PRESENTATION_CONFIG.allowDownloadable,
|
||||
handleSave: (presentations) => Service.persistPresentationChanges(
|
||||
|
@ -580,6 +580,11 @@ const DownloadButton = styled(Button)`
|
||||
`}
|
||||
`;
|
||||
|
||||
const ExtraHint = styled.div`
|
||||
margin-top: 1rem;
|
||||
font-weight: bold;
|
||||
`;
|
||||
|
||||
export default {
|
||||
UploadRow,
|
||||
FileLine,
|
||||
@ -618,4 +623,5 @@ export default {
|
||||
PresentationItem,
|
||||
TableItemActions,
|
||||
DownloadButton,
|
||||
ExtraHint,
|
||||
};
|
||||
|
@ -73,6 +73,7 @@ class ScreenshareComponent extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
this.state = {
|
||||
restoreOnUnmount: true,
|
||||
loaded: false,
|
||||
autoplayBlocked: false,
|
||||
isStreamHealthy: false,
|
||||
@ -114,7 +115,10 @@ class ScreenshareComponent extends React.Component {
|
||||
|
||||
notify(intl.formatMessage(intlMessages.screenshareStarted), 'info', 'desktop');
|
||||
|
||||
if (getSwapLayout()) toggleSwapLayout(layoutContextDispatch);
|
||||
if (getSwapLayout()) {
|
||||
toggleSwapLayout(layoutContextDispatch)
|
||||
this.setState({ restoreOnUnmount: false });
|
||||
};
|
||||
|
||||
if (hidePresentation) {
|
||||
layoutContextDispatch({
|
||||
@ -135,8 +139,13 @@ class ScreenshareComponent extends React.Component {
|
||||
|
||||
componentWillUnmount() {
|
||||
const {
|
||||
intl, fullscreenContext, layoutContextDispatch, hidePresentation,
|
||||
intl,
|
||||
fullscreenContext,
|
||||
layoutContextDispatch,
|
||||
hidePresentation,
|
||||
toggleSwapLayout,
|
||||
} = this.props;
|
||||
const { restoreOnUnmount } = this.state;
|
||||
screenshareHasEnded();
|
||||
window.removeEventListener('screensharePlayFailed', this.handlePlayElementFailed);
|
||||
unsubscribeFromStreamStateChange('screenshare', this.onStreamStateChange);
|
||||
@ -153,11 +162,12 @@ class ScreenshareComponent extends React.Component {
|
||||
});
|
||||
}
|
||||
|
||||
if (hidePresentation) {
|
||||
if (hidePresentation || !restoreOnUnmount) {
|
||||
layoutContextDispatch({
|
||||
type: ACTIONS.SET_PRESENTATION_IS_OPEN,
|
||||
value: false,
|
||||
});
|
||||
toggleSwapLayout(layoutContextDispatch);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,8 @@ import CaptionsContainer from '/imports/ui/components/captions/container';
|
||||
import BreakoutRoomContainer from '/imports/ui/components/breakout-room/container';
|
||||
import WaitingUsersPanel from '/imports/ui/components/waiting-users/container';
|
||||
import Styled from './styles';
|
||||
import ErrorBoundary from '/imports/ui/components/error-boundary/component';
|
||||
import FallbackView from '/imports/ui/components/fallback-errors/fallback-view/component';
|
||||
|
||||
const propTypes = {
|
||||
top: PropTypes.number.isRequired,
|
||||
@ -122,7 +124,14 @@ const SidebarContent = (props) => {
|
||||
height,
|
||||
}}
|
||||
>
|
||||
{sidebarContentPanel === PANELS.CHAT && <ChatContainer />}
|
||||
{sidebarContentPanel === PANELS.CHAT
|
||||
&& (
|
||||
<ErrorBoundary
|
||||
Fallback={FallbackView}
|
||||
>
|
||||
<ChatContainer />
|
||||
</ErrorBoundary>
|
||||
)}
|
||||
{sidebarContentPanel === PANELS.SHARED_NOTES && <NotesContainer />}
|
||||
{sidebarContentPanel === PANELS.CAPTIONS && <CaptionsContainer />}
|
||||
{sidebarContentPanel === PANELS.BREAKOUT && <BreakoutRoomContainer />}
|
||||
|
@ -30,9 +30,9 @@ const STARTED_CHAT_LIST_KEY = 'startedChatList';
|
||||
|
||||
const CUSTOM_LOGO_URL_KEY = 'CustomLogoUrl';
|
||||
|
||||
export const setCustomLogoUrl = path => Storage.setItem(CUSTOM_LOGO_URL_KEY, path);
|
||||
export const setCustomLogoUrl = (path) => Storage.setItem(CUSTOM_LOGO_URL_KEY, path);
|
||||
|
||||
export const setModeratorOnlyMessage = msg => Storage.setItem('ModeratorOnlyMessage', msg);
|
||||
export const setModeratorOnlyMessage = (msg) => Storage.setItem('ModeratorOnlyMessage', msg);
|
||||
|
||||
const getCustomLogoUrl = () => Storage.getItem(CUSTOM_LOGO_URL_KEY);
|
||||
|
||||
@ -304,7 +304,7 @@ const isMeetingLocked = (id) => {
|
||||
let isLocked = false;
|
||||
|
||||
if (meeting.lockSettingsProps !== undefined) {
|
||||
const {lockSettingsProps:lockSettings, usersProp} = meeting;
|
||||
const { lockSettingsProps: lockSettings, usersProp } = meeting;
|
||||
|
||||
if (lockSettings.disableCam
|
||||
|| lockSettings.disableMic
|
||||
@ -447,7 +447,7 @@ const assignPresenter = (userId) => { makeCall('assignPresenter', userId); };
|
||||
|
||||
const removeUser = (userId, banUser) => {
|
||||
if (isVoiceOnlyUser(userId)) {
|
||||
makeCall('ejectUserFromVoice', userId);
|
||||
makeCall('ejectUserFromVoice', userId, banUser);
|
||||
} else {
|
||||
makeCall('removeUser', userId, banUser);
|
||||
}
|
||||
|
@ -216,6 +216,7 @@ class VideoPreview extends Component {
|
||||
componentDidMount() {
|
||||
const {
|
||||
webcamDeviceId,
|
||||
forceOpen,
|
||||
} = this.props;
|
||||
|
||||
this._isMounted = true;
|
||||
@ -224,7 +225,7 @@ class VideoPreview extends Component {
|
||||
navigator.mediaDevices.enumerateDevices().then((devices) => {
|
||||
VideoService.updateNumberOfDevices(devices);
|
||||
// Video preview skip is activated, short circuit via a simpler procedure
|
||||
if (PreviewService.getSkipVideoPreview()) return this.skipVideoPreview();
|
||||
if (PreviewService.getSkipVideoPreview() && !forceOpen) return this.skipVideoPreview();
|
||||
// Late enumerateDevices resolution, stop.
|
||||
if (!this._isMounted) return;
|
||||
|
||||
@ -713,6 +714,7 @@ class VideoPreview extends Component {
|
||||
intl,
|
||||
sharedDevices,
|
||||
hasVideoStream,
|
||||
forceOpen,
|
||||
} = this.props;
|
||||
|
||||
const {
|
||||
@ -721,7 +723,9 @@ class VideoPreview extends Component {
|
||||
deviceError,
|
||||
previewError,
|
||||
} = this.state;
|
||||
const shouldDisableButtons = PreviewService.getSkipVideoPreview() && !(deviceError || previewError);
|
||||
const shouldDisableButtons = PreviewService.getSkipVideoPreview()
|
||||
&& !forceOpen
|
||||
&& !(deviceError || previewError);
|
||||
|
||||
const shared = sharedDevices.includes(webcamDeviceId);
|
||||
|
||||
@ -779,6 +783,7 @@ class VideoPreview extends Component {
|
||||
const {
|
||||
intl,
|
||||
isCamLocked,
|
||||
forceOpen,
|
||||
} = this.props;
|
||||
|
||||
if (isCamLocked === true) {
|
||||
@ -786,7 +791,7 @@ class VideoPreview extends Component {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (PreviewService.getSkipVideoPreview()) {
|
||||
if (PreviewService.getSkipVideoPreview() && !forceOpen) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -795,7 +800,9 @@ class VideoPreview extends Component {
|
||||
previewError,
|
||||
} = this.state;
|
||||
|
||||
const allowCloseModal = !!(deviceError || previewError) || !PreviewService.getSkipVideoPreview();
|
||||
const allowCloseModal = !!(deviceError || previewError)
|
||||
|| !PreviewService.getSkipVideoPreview()
|
||||
|| forceOpen;
|
||||
|
||||
return (
|
||||
<Styled.VideoPreviewModal
|
||||
|
@ -522,42 +522,46 @@ class VideoProvider extends Component {
|
||||
}
|
||||
|
||||
const handlePubPeerCreation = (error) => {
|
||||
const peer = this.webRtcPeers[stream];
|
||||
peer.stream = stream;
|
||||
peer.started = false;
|
||||
peer.attached = false;
|
||||
peer.didSDPAnswered = false;
|
||||
peer.inboundIceQueue = [];
|
||||
peer.isPublisher = true;
|
||||
peer.originalProfileId = profileId;
|
||||
peer.currentProfileId = profileId;
|
||||
try {
|
||||
const peer = this.webRtcPeers[stream];
|
||||
peer.stream = stream;
|
||||
peer.started = false;
|
||||
peer.attached = false;
|
||||
peer.didSDPAnswered = false;
|
||||
peer.inboundIceQueue = [];
|
||||
peer.isPublisher = true;
|
||||
peer.originalProfileId = profileId;
|
||||
peer.currentProfileId = profileId;
|
||||
|
||||
if (error) return reject(error);
|
||||
if (error) return reject(error);
|
||||
|
||||
// Store the media stream if necessary. The scenario here is one where
|
||||
// there is no preloaded stream stored.
|
||||
if (bbbVideoStream == null) {
|
||||
bbbVideoStream = new BBBVideoStream(peer.getLocalStream());
|
||||
VideoPreviewService.storeStream(
|
||||
MediaStreamUtils.extractVideoDeviceId(bbbVideoStream.mediaStream),
|
||||
bbbVideoStream
|
||||
);
|
||||
// Store the media stream if necessary. The scenario here is one where
|
||||
// there is no preloaded stream stored.
|
||||
if (bbbVideoStream == null) {
|
||||
bbbVideoStream = new BBBVideoStream(peer.getLocalStream());
|
||||
VideoPreviewService.storeStream(
|
||||
MediaStreamUtils.extractVideoDeviceId(bbbVideoStream.mediaStream),
|
||||
bbbVideoStream
|
||||
);
|
||||
}
|
||||
|
||||
peer.bbbVideoStream = bbbVideoStream;
|
||||
bbbVideoStream.on('streamSwapped', ({ newStream }) => {
|
||||
if (newStream && newStream instanceof MediaStream) {
|
||||
this.replacePCVideoTracks(stream, newStream);
|
||||
}
|
||||
});
|
||||
|
||||
peer.generateOffer((errorGenOffer, offerSdp) => {
|
||||
if (errorGenOffer) {
|
||||
return reject(errorGenOffer);
|
||||
}
|
||||
|
||||
return resolve(offerSdp);
|
||||
});
|
||||
} catch (error) {
|
||||
return reject(error);
|
||||
}
|
||||
|
||||
peer.bbbVideoStream = bbbVideoStream;
|
||||
bbbVideoStream.on('streamSwapped', ({ newStream }) => {
|
||||
if (newStream && newStream instanceof MediaStream) {
|
||||
this.replacePCVideoTracks(stream, newStream);
|
||||
}
|
||||
});
|
||||
|
||||
peer.generateOffer((errorGenOffer, offerSdp) => {
|
||||
if (errorGenOffer) {
|
||||
return reject(errorGenOffer);
|
||||
}
|
||||
|
||||
return resolve(offerSdp);
|
||||
});
|
||||
}
|
||||
|
||||
this.webRtcPeers[stream] = new window.kurentoUtils.WebRtcPeer.WebRtcPeerSendonly(
|
||||
@ -574,17 +578,21 @@ class VideoProvider extends Component {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const handleSubPeerCreation = (error) => {
|
||||
const peer = this.webRtcPeers[stream];
|
||||
peer.stream = stream;
|
||||
peer.started = false;
|
||||
peer.attached = false;
|
||||
peer.didSDPAnswered = false;
|
||||
peer.inboundIceQueue = [];
|
||||
peer.isPublisher = false;
|
||||
try {
|
||||
const peer = this.webRtcPeers[stream];
|
||||
peer.stream = stream;
|
||||
peer.started = false;
|
||||
peer.attached = false;
|
||||
peer.didSDPAnswered = false;
|
||||
peer.inboundIceQueue = [];
|
||||
peer.isPublisher = false;
|
||||
|
||||
if (error) return reject(error);
|
||||
if (error) return reject(error);
|
||||
|
||||
return resolve();
|
||||
return resolve();
|
||||
} catch (error) {
|
||||
return reject(error);
|
||||
}
|
||||
};
|
||||
|
||||
this.webRtcPeers[stream] = new window.kurentoUtils.WebRtcPeer.WebRtcPeerRecvonly(
|
||||
|
@ -47,6 +47,7 @@ const propTypes = {
|
||||
intl: PropTypes.object.isRequired,
|
||||
hasVideoStream: PropTypes.bool.isRequired,
|
||||
mountVideoPreview: PropTypes.func.isRequired,
|
||||
forceMountVideoPreview: PropTypes.func.isRequired,
|
||||
};
|
||||
|
||||
const JoinVideoButton = ({
|
||||
@ -54,6 +55,7 @@ const JoinVideoButton = ({
|
||||
hasVideoStream,
|
||||
disableReason,
|
||||
mountVideoPreview,
|
||||
forceMountVideoPreview,
|
||||
}) => {
|
||||
const { isMobile } = deviceInfo;
|
||||
const shouldEnableWebcamSelectorButton = ENABLE_WEBCAM_SELECTOR_BUTTON
|
||||
@ -62,6 +64,7 @@ const JoinVideoButton = ({
|
||||
const exitVideo = () => hasVideoStream
|
||||
&& !isMobile
|
||||
&& (!VideoService.isMultipleCamerasEnabled() || shouldEnableWebcamSelectorButton);
|
||||
const isMobileSharingCamera = hasVideoStream && isMobile;
|
||||
|
||||
const handleOnClick = debounce(() => {
|
||||
if (!validIOSVersion()) {
|
||||
@ -70,6 +73,8 @@ const JoinVideoButton = ({
|
||||
|
||||
if (exitVideo()) {
|
||||
VideoService.exitVideo();
|
||||
} else if (isMobileSharingCamera) {
|
||||
forceMountVideoPreview();
|
||||
} else {
|
||||
mountVideoPreview();
|
||||
}
|
||||
@ -77,7 +82,7 @@ const JoinVideoButton = ({
|
||||
|
||||
const handleOpenAdvancedOptions = (e) => {
|
||||
e.stopPropagation();
|
||||
mountVideoPreview();
|
||||
forceMountVideoPreview();
|
||||
};
|
||||
|
||||
let label = exitVideo()
|
||||
|
@ -15,11 +15,12 @@ const JoinVideoOptionsContainer = (props) => {
|
||||
...restProps
|
||||
} = props;
|
||||
|
||||
const mountVideoPreview = () => { mountModal(<VideoPreviewContainer />); };
|
||||
const mountVideoPreview = () => { mountModal(<VideoPreviewContainer forceOpen={false} />); };
|
||||
const forceMountVideoPreview = () => { mountModal(<VideoPreviewContainer forceOpen />); };
|
||||
|
||||
return (
|
||||
<JoinVideoButton {...{
|
||||
mountVideoPreview, hasVideoStream, disableReason, ...restProps,
|
||||
mountVideoPreview, forceMountVideoPreview, hasVideoStream, disableReason, ...restProps,
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
@ -65,7 +65,7 @@ class VideoListItem extends Component {
|
||||
videoIsReady: false,
|
||||
isFullscreen: false,
|
||||
isStreamHealthy: false,
|
||||
isMirrored: false,
|
||||
isMirrored: VideoService.mirrorOwnWebcam(props.userId),
|
||||
};
|
||||
|
||||
this.mirrorOwnWebcam = VideoService.mirrorOwnWebcam(props.userId);
|
||||
|
@ -211,6 +211,7 @@ const HideButton = styled(Button)`
|
||||
|
||||
const LobbyMessage = styled.div`
|
||||
border-bottom: 1px solid ${colorGrayLightest};
|
||||
margin: 2px 2px 0 2px;
|
||||
|
||||
& > p {
|
||||
background-color: ${colorOffWhite};
|
||||
|
@ -6,6 +6,7 @@ import { ACTIONS, CAMERADOCK_POSITION } from '../layout/enums';
|
||||
import DropAreaContainer from './drop-areas/container';
|
||||
import VideoProviderContainer from '/imports/ui/components/video-provider/container';
|
||||
import Storage from '/imports/ui/services/storage/session';
|
||||
import { colorContentBackground } from '/imports/ui/stylesheets/styled-components/palette';
|
||||
|
||||
const WebcamComponent = ({
|
||||
cameraDock,
|
||||
@ -250,6 +251,7 @@ const WebcamComponent = ({
|
||||
width: isDragging ? cameraSize.width : cameraDock.width,
|
||||
height: isDragging ? cameraSize.height : cameraDock.height,
|
||||
opacity: isDragging ? 0.5 : undefined,
|
||||
background: isCameraSidebar ? colorContentBackground : null,
|
||||
}}
|
||||
>
|
||||
<VideoProviderContainer
|
||||
|
@ -1,6 +1,8 @@
|
||||
import deviceInfo from '/imports/utils/deviceInfo';
|
||||
import browserInfo from '/imports/utils/browserInfo';
|
||||
import { createVirtualBackgroundService } from '/imports/ui/services/virtual-background';
|
||||
import Meetings from '/imports/api/meetings';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
|
||||
const BLUR_FILENAME = 'blur.jpg';
|
||||
const EFFECT_TYPES = {
|
||||
@ -84,6 +86,13 @@ const getSessionVirtualBackgroundInfoWithDefault = (deviceId) => {
|
||||
}
|
||||
|
||||
const isVirtualBackgroundEnabled = () => {
|
||||
const meeting = Meetings.findOne({ meetingId: Auth.meetingID },
|
||||
{ fields: { 'usersProp.virtualBackgroundsDisabled': 1 } });
|
||||
|
||||
if (meeting?.usersProp && meeting.usersProp.virtualBackgroundsDisabled === true) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return VIRTUAL_BACKGROUND_ENABLED;
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
const TITLE_WITH_VIEW = 3;
|
||||
const ARIA_ALERT_TIMEOUT = 3000;
|
||||
const ARIA_ALERT_EXT_TIMEOUT = 15000;
|
||||
|
||||
const getTitleData = () => {
|
||||
const title = document.getElementsByTagName('title')[0];
|
||||
@ -37,4 +38,12 @@ export const alertScreenReader = (s = '') => {
|
||||
}, ARIA_ALERT_TIMEOUT);
|
||||
};
|
||||
|
||||
export default { registerTitleView, unregisterTitleView, alertScreenReader };
|
||||
export const politeSRAlert = (s = '') => {
|
||||
const liveArea = document.getElementById('aria-polite-alert')
|
||||
if (liveArea) liveArea.innerHTML = s;
|
||||
setTimeout(() => {
|
||||
if (liveArea) liveArea.innerHTML = '';
|
||||
}, ARIA_ALERT_EXT_TIMEOUT);
|
||||
};
|
||||
|
||||
export default { registerTitleView, unregisterTitleView, alertScreenReader, politeSRAlert };
|
||||
|
241
bigbluebutton-html5/package-lock.json
generated
241
bigbluebutton-html5/package-lock.json
generated
@ -1027,9 +1027,9 @@
|
||||
"integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs="
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001233",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001233.tgz",
|
||||
"integrity": "sha512-BmkbxLfStqiPA7IEzQpIk0UFZFf3A4E6fzjPJ6OR+bFC2L8ES9J8zGA/asoi47p8XDVkev+WJo2I2Nc8c/34Yg=="
|
||||
"version": "1.0.30001301",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001301.tgz",
|
||||
"integrity": "sha512-csfD/GpHMqgEL3V3uIgosvh+SVIQvCh43SNu9HRbP1lnxkKm1kjDG4f32PP571JplkLjfS+mg2p1gxR7MYrrIA=="
|
||||
},
|
||||
"caseless": {
|
||||
"version": "0.12.0",
|
||||
@ -1337,16 +1337,6 @@
|
||||
"resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
|
||||
"integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU="
|
||||
},
|
||||
"css-selector-tokenizer": {
|
||||
"version": "0.7.3",
|
||||
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz",
|
||||
"integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"cssesc": "^3.0.0",
|
||||
"fastparse": "^1.1.2"
|
||||
}
|
||||
},
|
||||
"css-to-react-native": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz",
|
||||
@ -1652,9 +1642,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"ansi-styles": {
|
||||
@ -2246,12 +2236,6 @@
|
||||
"strictdom": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"fastparse": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
|
||||
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
|
||||
"dev": true
|
||||
},
|
||||
"fecha": {
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.1.tgz",
|
||||
@ -2313,9 +2297,9 @@
|
||||
"integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.14.4",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
|
||||
"integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g=="
|
||||
"version": "1.14.7",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz",
|
||||
"integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ=="
|
||||
},
|
||||
"forever-agent": {
|
||||
"version": "0.6.1",
|
||||
@ -2600,10 +2584,10 @@
|
||||
"resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz",
|
||||
"integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ=="
|
||||
},
|
||||
"icss-replace-symbols": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
|
||||
"integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
|
||||
"icss-utils": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
|
||||
"integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
|
||||
"dev": true
|
||||
},
|
||||
"ignore": {
|
||||
@ -2904,9 +2888,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"json-schema": {
|
||||
"version": "0.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
|
||||
"integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
|
||||
"version": "0.4.0",
|
||||
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
|
||||
"integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
|
||||
},
|
||||
"json-schema-traverse": {
|
||||
"version": "0.4.1",
|
||||
@ -2934,13 +2918,13 @@
|
||||
}
|
||||
},
|
||||
"jsprim": {
|
||||
"version": "1.4.1",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
|
||||
"integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
|
||||
"version": "1.4.2",
|
||||
"resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
|
||||
"integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
|
||||
"requires": {
|
||||
"assert-plus": "1.0.0",
|
||||
"extsprintf": "1.3.0",
|
||||
"json-schema": "0.2.3",
|
||||
"json-schema": "0.4.0",
|
||||
"verror": "1.10.0"
|
||||
}
|
||||
},
|
||||
@ -4272,9 +4256,9 @@
|
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
|
||||
},
|
||||
"nanoid": {
|
||||
"version": "3.1.23",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
|
||||
"integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw=="
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
|
||||
"integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA=="
|
||||
},
|
||||
"natural-compare": {
|
||||
"version": "1.4.0",
|
||||
@ -4690,177 +4674,32 @@
|
||||
"dev": true
|
||||
},
|
||||
"postcss-modules-local-by-default": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz",
|
||||
"integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=",
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
|
||||
"integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"css-selector-tokenizer": "^0.7.0",
|
||||
"postcss": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"version": "6.0.23",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
|
||||
"integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.4.1",
|
||||
"source-map": "^0.6.1",
|
||||
"supports-color": "^5.4.0"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
}
|
||||
"icss-utils": "^5.0.0",
|
||||
"postcss-selector-parser": "^6.0.2",
|
||||
"postcss-value-parser": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"postcss-modules-scope": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz",
|
||||
"integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=",
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
|
||||
"integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"css-selector-tokenizer": "^0.7.0",
|
||||
"postcss": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"version": "6.0.23",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
|
||||
"integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.4.1",
|
||||
"source-map": "^0.6.1",
|
||||
"supports-color": "^5.4.0"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
}
|
||||
"postcss-selector-parser": "^6.0.4"
|
||||
}
|
||||
},
|
||||
"postcss-modules-values": {
|
||||
"version": "1.3.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz",
|
||||
"integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=",
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz",
|
||||
"integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"icss-replace-symbols": "^1.1.0",
|
||||
"postcss": "^6.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"ansi-styles": {
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"color-convert": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"ansi-styles": "^3.2.1",
|
||||
"escape-string-regexp": "^1.0.5",
|
||||
"supports-color": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"postcss": {
|
||||
"version": "6.0.23",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
|
||||
"integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"chalk": "^2.4.1",
|
||||
"source-map": "^0.6.1",
|
||||
"supports-color": "^5.4.0"
|
||||
}
|
||||
},
|
||||
"source-map": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
|
||||
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
|
||||
"dev": true
|
||||
},
|
||||
"supports-color": {
|
||||
"version": "5.5.0",
|
||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"has-flag": "^3.0.0"
|
||||
}
|
||||
}
|
||||
"icss-utils": "^5.0.0"
|
||||
}
|
||||
},
|
||||
"postcss-nested": {
|
||||
@ -5737,9 +5576,9 @@
|
||||
}
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"emoji-regex": {
|
||||
|
@ -98,9 +98,9 @@
|
||||
"lint-staged": "11.0.0",
|
||||
"postcss": "^8.2.15",
|
||||
"postcss-modules-extract-imports": "^3.0.0",
|
||||
"postcss-modules-local-by-default": "1.2.0",
|
||||
"postcss-modules-scope": "1.1.0",
|
||||
"postcss-modules-values": "1.3.0",
|
||||
"postcss-modules-local-by-default": "^4.0.0",
|
||||
"postcss-modules-scope": "^3.0.0",
|
||||
"postcss-modules-values": "^4.0.0",
|
||||
"sha1": "^1.1.1"
|
||||
},
|
||||
"resolutions": {
|
||||
|
@ -29,7 +29,7 @@ public:
|
||||
clientTitle: BigBlueButton
|
||||
appName: BigBlueButton HTML5 Client
|
||||
bbbServerVersion: 2.4
|
||||
copyright: '©2021 BigBlueButton Inc.'
|
||||
copyright: '©2022 BigBlueButton Inc.'
|
||||
html5ClientBuild: HTML5_CLIENT_VERSION
|
||||
helpLink: https://bigbluebutton.org/html5/
|
||||
lockOnJoin: true
|
||||
@ -604,6 +604,11 @@ public:
|
||||
restoreOnUpdate: false
|
||||
oldMinimizeButton: false
|
||||
uploadEndpoint: '/bigbluebutton/presentation/upload'
|
||||
fileUploadConstraintsHint: false
|
||||
# mirroredFromBBBCore are values controlled in bbb-web properties file. We include a copy here for notification purposes
|
||||
mirroredFromBBBCore:
|
||||
uploadSizeMax: 30000000
|
||||
uploadPagesMax: 200
|
||||
uploadValidMimeTypes:
|
||||
- extension: .pdf
|
||||
mime: application/pdf
|
||||
|
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "منع هذا المستخدم من إعادة الانضمام إلى الجلسة.",
|
||||
"app.userList.menu.muteUserAudio.label": "كتم صوت المستخدم",
|
||||
"app.userList.menu.unmuteUserAudio.label": "إلغاء كتم صوت المستخدم",
|
||||
"app.userList.menu.webcamPin.label": "تثبيت كاميرا المستخدم",
|
||||
"app.userList.menu.webcamUnpin.label": "فك تثبيت كاميرا المستخدم",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "امنح الوصول إلى السبورة",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "إزالة الوصول إلى السبورة",
|
||||
"app.userList.menu.ejectUserCameras.label": "أغلق الكاميرات",
|
||||
@ -189,7 +191,7 @@
|
||||
"app.presentation.presentationToolbar.goToSlide": "شريحة {0}",
|
||||
"app.presentation.placeholder": "في انتظار تحميل العرض",
|
||||
"app.presentationUploder.title": "عرض",
|
||||
"app.presentationUploder.message": "كمقدم للعرض لديك القدرة على رفع أي وثيقة أوفيس أو ملف PDF. نوصي بملف PDF للحصول على أفضل النتائج. يرجى التأكد من تحديد العرض باستخدام أيقونة الاختيار على الجانب الأيمن.",
|
||||
"app.presentationUploder.message": "كمقدم للعرض لديك القدرة على رفع أي وثيقة أوفيس أو ملف بي دي اف. نوصي بملف بي دي اف للحصول على أفضل النتائج. يرجى التأكد من تحديد العرض باستخدام أيقونة الاختيار على الجانب الأيمن.",
|
||||
"app.presentationUploder.uploadLabel": "رفع",
|
||||
"app.presentationUploder.confirmLabel": "موافقة",
|
||||
"app.presentationUploder.confirmDesc": "حفظ التغييرات وبدء العرض",
|
||||
@ -214,9 +216,9 @@
|
||||
"app.presentationUploder.conversion.generatedSlides": "الشرائح المنشأة...",
|
||||
"app.presentationUploder.conversion.generatingSvg": "إنشاء صور SVG ...",
|
||||
"app.presentationUploder.conversion.pageCountExceeded": "تجاوز عدد الصفحات الحد الأقصى {0}",
|
||||
"app.presentationUploder.conversion.officeDocConversionInvalid": "فشل في معالجة مستند المكتب. الرجاء تحميل PDF بدلاً من ذلك.",
|
||||
"app.presentationUploder.conversion.officeDocConversionFailed": "فشل في معالجة مستند المكتب. الرجاء تحميل PDF بدلاً من ذلك.",
|
||||
"app.presentationUploder.conversion.pdfHasBigPage": "لم نتمكن من تحويل ملف PDF ، يرجى محاولة تحسينه. أقصى حجم للصفحة {0}",
|
||||
"app.presentationUploder.conversion.officeDocConversionInvalid": "فشل في معالجة مستند المكتب. الرجاء تحميل بي دي اف بدلاً من ذلك.",
|
||||
"app.presentationUploder.conversion.officeDocConversionFailed": "فشل في معالجة مستند المكتب. الرجاء تحميل بي دي اف بدلاً من ذلك.",
|
||||
"app.presentationUploder.conversion.pdfHasBigPage": "لم نتمكن من تحويل ملف بي دي اف ، يرجى محاولة تحسينه. أقصى حجم للصفحة {0}",
|
||||
"app.presentationUploder.conversion.timeout": "مكتب خدمات المشاريع, تحويل يستغرق وقتا اطول",
|
||||
"app.presentationUploder.conversion.pageCountFailed": "فشل تحديد عدد الصفحات.",
|
||||
"app.presentationUploder.conversion.unsupportedDocument": "امتداد الملف غير مدعوم",
|
||||
@ -698,7 +700,7 @@
|
||||
"app.connection-status.sessionLogs": "سجلات الجلسة",
|
||||
"app.learning-dashboard.label": "لوحة التعلم",
|
||||
"app.learning-dashboard.description": "افتح لوحة التعلم مع أنشطة المستخدمين",
|
||||
"app.learning-dashboard.clickHereToOpen": "افتح لوحة التعلم",
|
||||
"app.learning-dashboard.clickHereToOpen": "افتح لوحة تحليلات التعلم",
|
||||
"app.recording.startTitle": "بدء التسجيل",
|
||||
"app.recording.stopTitle": "تعليق التسجيل",
|
||||
"app.recording.resumeTitle": "مواصلة التسجيل",
|
||||
@ -827,6 +829,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "التركيز على الكاميرا المحدّدة",
|
||||
"app.videoDock.webcamUnfocusLabel": "غير مركزة",
|
||||
"app.videoDock.webcamUnfocusDesc": "إلغاء تركيز كاميرا الويب المحددة",
|
||||
"app.videoDock.webcamPinLabel": "تثبيت",
|
||||
"app.videoDock.webcamPinDesc": "ثبّت الكاميرا المحددة",
|
||||
"app.videoDock.webcamUnpinLabel": "فك التثبيت",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "يمكن للمشرفين فقط إلغاء تثبيت المستخدمين",
|
||||
"app.videoDock.webcamUnpinDesc": "إلغاء تثبيت الكاميرا المحددة",
|
||||
"app.videoDock.autoplayBlockedDesc": "نحتاج إلى إذنك لتظهر لك كاميرات المستخدمين الآخرين.",
|
||||
"app.videoDock.autoplayAllowLabel": "عرض كاميرات الويب",
|
||||
"app.invitation.title": "استدعاء غرفة جانبية",
|
||||
@ -929,7 +936,7 @@
|
||||
"playback.player.search.modal.subtitle": "البحث عن محتوى شرائح العرض",
|
||||
"playback.player.thumbnails.wrapper.aria": "مساحة الصور المصغرة",
|
||||
"playback.player.video.wrapper.aria": "مساحة الفيديو",
|
||||
"app.learningDashboard.dashboardTitle": "لوحة التعلم",
|
||||
"app.learningDashboard.dashboardTitle": "لوحة تحليلات التعلم",
|
||||
"app.learningDashboard.user": "مستخدم",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "انتهت",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "فعًال",
|
||||
|
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Teilnehmer sperren, sodass eine erneute Teilnahme an dieser Konferenz nicht mehr möglich ist.",
|
||||
"app.userList.menu.muteUserAudio.label": "Teilnehmer stummschalten",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Stummschaltung aufheben",
|
||||
"app.userList.menu.webcamPin.label": "Webcam der Teilnehmer anheften",
|
||||
"app.userList.menu.webcamUnpin.label": "Webcam der Teilnehmer lösen",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Zugriff auf Whiteboard erlauben",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Zugriff auf Whiteboard aufheben",
|
||||
"app.userList.menu.ejectUserCameras.label": "Kameras schließen",
|
||||
@ -332,6 +334,7 @@
|
||||
"app.navBar.userListToggleBtnLabel": "Teilnehmerliste umschalten",
|
||||
"app.navBar.toggleUserList.ariaLabel": "Teilnehmer/Nachrichten-Umschaltung",
|
||||
"app.navBar.toggleUserList.newMessages": "mit Benachrichtigung für neue Nachrichten",
|
||||
"app.navBar.toggleUserList.newMsgAria": "Neue Nachricht von {0}",
|
||||
"app.navBar.recording": "Diese Konferenz wird aufgezeichnet",
|
||||
"app.navBar.recording.on": "Aufzeichnung läuft",
|
||||
"app.navBar.recording.off": "Keine Aufnahme",
|
||||
@ -689,9 +692,9 @@
|
||||
"app.connection-status.lostPackets": "Verlorene Pakete",
|
||||
"app.connection-status.usingTurn": "TURN wird genutzt",
|
||||
"app.connection-status.yes": "Ja",
|
||||
"app.learning-dashboard.label": "Lern-Dashboard",
|
||||
"app.learning-dashboard.label": "Lernanalyse-Dashboard",
|
||||
"app.learning-dashboard.description": "Übersichtsseite mit Benutzeraktivitäten öffnen",
|
||||
"app.learning-dashboard.clickHereToOpen": "Lern-Dashboard öffnen",
|
||||
"app.learning-dashboard.clickHereToOpen": "Lernanalyse-Dashboard öffnen",
|
||||
"app.recording.startTitle": "Aufzeichnung starten",
|
||||
"app.recording.stopTitle": "Aufzeichnung pausieren",
|
||||
"app.recording.resumeTitle": "Aufzeichnung fortsetzen",
|
||||
@ -820,6 +823,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Ausgewählte Webcam vergrößern",
|
||||
"app.videoDock.webcamUnfocusLabel": "Normalgröße",
|
||||
"app.videoDock.webcamUnfocusDesc": "Ausgewählte Webcam auf Normalgröße verkleinern",
|
||||
"app.videoDock.webcamPinLabel": "Anheften",
|
||||
"app.videoDock.webcamPinDesc": "Ausgewählte Webcam anheften",
|
||||
"app.videoDock.webcamUnpinLabel": "Lösen",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Nur Moderatoren können Teilnehmer lösen",
|
||||
"app.videoDock.webcamUnpinDesc": "Ausgewählte Webcam lösen",
|
||||
"app.videoDock.autoplayBlockedDesc": "Wir benötigen Ihre Zustimmung, um Ihnen die Webcams anderer Teilnehmer zu zeigen.",
|
||||
"app.videoDock.autoplayAllowLabel": "Webcams zeigen",
|
||||
"app.invitation.title": "Gruppenraumeinladung",
|
||||
@ -922,7 +930,7 @@
|
||||
"playback.player.search.modal.subtitle": "Suche Inhalt der Präsentationsfolien",
|
||||
"playback.player.thumbnails.wrapper.aria": "Vorschaubildbereich",
|
||||
"playback.player.video.wrapper.aria": "Webcambereich",
|
||||
"app.learningDashboard.dashboardTitle": "Lern-Dashboard",
|
||||
"app.learningDashboard.dashboardTitle": "Lernanalyse-Dashboard",
|
||||
"app.learningDashboard.user": "Teilnehmer",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Beendet",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Aktiv",
|
||||
|
@ -41,7 +41,7 @@
|
||||
"app.captions.menu.previewLabel": "Προεπισκόπηση",
|
||||
"app.captions.menu.cancelLabel": "Ακύρωση",
|
||||
"app.captions.pad.hide": "Απόκρυψη ενδογλωσσικών υποτίτλων",
|
||||
"app.captions.pad.tip": "Πατήστε Esc για εστίαση της γραμμής εργαλείων",
|
||||
"app.captions.pad.tip": "Πατήστε Esc για εστίαση στη γραμμή εργαλείων",
|
||||
"app.captions.pad.ownership": "Αναλάβετε",
|
||||
"app.captions.pad.ownershipTooltip": "Θα καταχωρηθείτε ως κάτοχος των {0} υποτίτλων.",
|
||||
"app.captions.pad.interimResult": "Αποτελέσματα έως τώρα",
|
||||
@ -86,6 +86,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Αποτροπή επανασύνδεσης αυτού του χρήστη στη συνεδρία.",
|
||||
"app.userList.menu.muteUserAudio.label": "Σίγαση χρήστη",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Επαναφορά ήχου χρήστη",
|
||||
"app.userList.menu.webcamPin.label": "Καρφίτσωμα κάμερας χρηστών",
|
||||
"app.userList.menu.webcamUnpin.label": "Ξεκαρφίτσωμα κάμερας χρηστών",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Παραχώρηση πρόσβασης στον λευκοπίνακα",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Αφαίρεση πρόσβασης στον λευκοπίνακα",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} Κατάσταση {3}",
|
||||
@ -139,8 +141,8 @@
|
||||
"app.screenshare.presenterSharingLabel": "Γίνεται διαμοιρασμός της οθόνης σας",
|
||||
"app.screenshare.screenshareFinalError": "Κωδικός {0}. Δεν είναι δυνατός ο διαμοιρασμός οθόνης.",
|
||||
"app.screenshare.screenshareRetryError": "Κωδικός {0}. Δοκιμάστε ξανά να διαμοιράσετε την οθόνη.",
|
||||
"app.screenshare.screenshareRetryOtherEnvError": "Κωδικός {0}. Δεν είναι δυνατός ο διαμοιρασμός οθόνης. Δοκιμάστε ξανά από άλλη συσκευή η περιηγητή.",
|
||||
"app.screenshare.screenshareUnsupportedEnv": "Κωδικός {0}. Ο περιηγητής δεν υποστηρίζεται. Δοκιμάστε ξανά από άλλη συσκευή ή περιηγητή.",
|
||||
"app.screenshare.screenshareRetryOtherEnvError": "Κωδικός {0}. Δεν είναι δυνατός ο διαμοιρασμός οθόνης. Δοκιμάστε ξανά από άλλη συσκευή ή φυλλομετρητή.",
|
||||
"app.screenshare.screenshareUnsupportedEnv": "Κωδικός {0}. Ο φυλλομετρητής δεν υποστηρίζεται. Δοκιμάστε ξανά από άλλη συσκευή ή φυλλομετρητή.",
|
||||
"app.screenshare.screensharePermissionError": "Κωδικός {0}. Για την καταγραφή της οθόνης απαιτείται εξουσιοδότηση.",
|
||||
"app.meeting.ended": "Η συνεδρία έληξε",
|
||||
"app.meeting.meetingTimeRemaining": "Υπολειπόμενος χρόνος σύσκεψης: {0}",
|
||||
@ -260,6 +262,7 @@
|
||||
"app.poll.secretPoll.label" : "Ανώνυμη δημοσκόπηση",
|
||||
"app.poll.secretPoll.isSecretLabel": "Η δημοσκόπηση είναι ανώνυμη - δεν θα μπορείτε να δείτε τις απαντήσεις των συμμετεχόντων.",
|
||||
"app.poll.optionErr": "Εισαγωγή επιλογής στη δημοσκόπηση",
|
||||
"app.poll.startPollDesc": "Έναρξη δημοσκόπησης",
|
||||
"app.poll.t": "Σωστό",
|
||||
"app.poll.f": "Λάθος",
|
||||
"app.poll.tf": "Σωστό / Λάθος",
|
||||
@ -478,8 +481,8 @@
|
||||
"app.audioModal.ariaTitle": "Συμμετοχή με τυπικό ήχο",
|
||||
"app.audioModal.microphoneLabel": "Μικρόφωνο",
|
||||
"app.audioModal.listenOnlyLabel": "Μόνο ακρόαση",
|
||||
"app.audioModal.microphoneDesc": "Συμμετοχή στην τηλεδιάσκεψη με μικρόφωνο",
|
||||
"app.audioModal.listenOnlyDesc": "Συμμετοχή στην τηλεδιάσκεψη μόνο με ακρόαση",
|
||||
"app.audioModal.microphoneDesc": "Συμμετοχή στην σύσκεψη με μικρόφωνο",
|
||||
"app.audioModal.listenOnlyDesc": "Συμμετοχή στην σύσκεψη μόνο με ακρόαση",
|
||||
"app.audioModal.audioChoiceLabel": "Πώς θέλετε να συνδέσετε τον ήχο σας;",
|
||||
"app.audioModal.iOSBrowser": "Δεν υποστηρίζεται το Βίντεο/Ήχος",
|
||||
"app.audioModal.iOSErrorDescription": "Αυτή την στιγμή ο ήχος και το βίντεο δεν υποστηρίζονται στον Chrome για iOS.",
|
||||
@ -504,7 +507,7 @@
|
||||
"app.audioModal.playAudio": "Αναπαραγωγή ήχου",
|
||||
"app.audioModal.playAudio.arialabel" : "Αναπαραγωγή ήχου",
|
||||
"app.audioDial.tipIndicator": "Συμβουλή",
|
||||
"app.audioDial.tipMessage": "Πατήστε το κουμπί '0' στο τηλέφωνό σας για σίγαση/αποσίγαση του μικροφώνου σας.",
|
||||
"app.audioDial.tipMessage": "Πατήστε το κουμπί '0' στο τηλέφωνό σας για (απο)σίγαση του μικροφώνου σας.",
|
||||
"app.audioManager.joinedAudio": "Έχετε συνδεθεί σε φωνητική σύσκεψη.",
|
||||
"app.audioManager.joinedEcho": "Συνδεθήκατε με την δοκιμή ήχου.",
|
||||
"app.audioManager.leftAudio": "Έχετε αποσυνδεθεί από τη φωνητική σύσκεψη.",
|
||||
@ -582,6 +585,7 @@
|
||||
"app.guest.guestWait": "Παρακαλούμε περιμένετε έως ότου ένας διαχειριστής εγκρίνει την είσοδο σας στη σύσκεψη.",
|
||||
"app.guest.guestDeny": "Δεν επιτρέπονται οι επισκέπτες στη σύσκεψη.",
|
||||
"app.guest.seatWait": "Ένας επισκέπτης σε αναμονή για μια θέση στη συνεδρία.",
|
||||
"app.guest.allow": "Ο επισκέπτης εγκρίθηκε και ανακατευθύνετε στη σύσκεψη.",
|
||||
"app.userList.guest.waitingUsers": "Αναμονή χρηστών",
|
||||
"app.userList.guest.waitingUsersTitle": "Διαχείριση χρηστών",
|
||||
"app.userList.guest.optionTitle": "Ελέγξτε τους χρήστες σε αναμονή",
|
||||
@ -613,6 +617,7 @@
|
||||
"app.notification.recordingPaused": "Η καταγραφή της συνεδρίας τερματίστηκε",
|
||||
"app.notification.recordingAriaLabel": "Χρόνος καταγραφής",
|
||||
"app.notification.userJoinPushAlert": "{0} συμμετέχει στη σύνοδο",
|
||||
"app.notification.userLeavePushAlert": "{0} αποχώρησε από τη συννεδρία",
|
||||
"app.submenu.notification.raiseHandLabel": "Σηκώστε το χέρι σας",
|
||||
"app.shortcut-help.title": "Συντομεύσεις πληκτρολογίου",
|
||||
"app.shortcut-help.accessKeyNotAvailable": "Τα κλειδιά πρόσβασης δεν είναι διαθέσιμα",
|
||||
@ -621,7 +626,7 @@
|
||||
"app.shortcut-help.closeLabel": "Κλείσιμο",
|
||||
"app.shortcut-help.closeDesc": "Κλείνει το παράθυρο με συντομεύσεις πληκτρολογίου",
|
||||
"app.shortcut-help.openOptions": "Άνοιγμα Επιλογών",
|
||||
"app.shortcut-help.toggleUserList": "Εναλλαγή Λίστας χρηστών",
|
||||
"app.shortcut-help.toggleUserList": "Εναλλαγή λίστας χρηστών",
|
||||
"app.shortcut-help.toggleMute": "Σίγαση/Αποσίγαση",
|
||||
"app.shortcut-help.togglePublicChat": "Εναλλαγή Δημόσιας συνομιλίας (πρέπει να είναι ανοικτή η Λίστα χρηστών)",
|
||||
"app.shortcut-help.hidePrivateChat": "Απόκρυψη ιδιωτικής συνομιλίας",
|
||||
@ -636,7 +641,7 @@
|
||||
"app.shortcut-help.previousSlideDesc": "Προηγούμενη διαφάνεια (Παρουσιαστής)",
|
||||
"app.lock-viewers.title": "Κλείδωμα θεατών",
|
||||
"app.lock-viewers.description": "Με τις παρακάτω επιλογές μπορείτε να ελέγξετε τη πρόσβαση σε συγκεκριμένες λειτουργίες από τους θεατές.",
|
||||
"app.lock-viewers.featuresLable": "Λειτουργία",
|
||||
"app.lock-viewers.featuresLable": "Δυνατότητα",
|
||||
"app.lock-viewers.lockStatusLabel": "Κατάσταση",
|
||||
"app.lock-viewers.webcamLabel": "Διαμοιρασμός κάμερας",
|
||||
"app.lock-viewers.otherViewersWebcamLabel": "Θέαση καμερών άλλων θεατών",
|
||||
@ -698,6 +703,7 @@
|
||||
"app.video.joinVideo": "Διαμοιρασμός κάμερας",
|
||||
"app.video.connecting": "Έναρξη διαμοιρασμού κάμερας ...",
|
||||
"app.video.leaveVideo": "Κατάργηση διαμοιρασμού κάμερας",
|
||||
"app.video.advancedVideo": "Άνοιγμα ρυθμίσεων για προχωρημένους",
|
||||
"app.video.iceCandidateError": "Σφάλμα στη προσθήκη υποψήφιου ICE",
|
||||
"app.video.iceConnectionStateError": "Αποτυχία σύνδεσης (ICE σφάλμα 1007)",
|
||||
"app.video.permissionError": "Σφάλμα διαμοιρασμού κάμερας. Παρακαλούμε ελέγξετε τα δικαιώματα σας.",
|
||||
@ -730,6 +736,9 @@
|
||||
"app.video.clientDisconnected": "Η κάμερα δεν μπορεί να διαμοιραστεί λόγω προβλημάτων σύνδεσης.",
|
||||
"app.video.virtualBackground.none": "Κανένα",
|
||||
"app.video.virtualBackground.blur": "Θόλωμα",
|
||||
"app.video.virtualBackground.home": "Αρχική",
|
||||
"app.video.virtualBackground.board": "Πίνακας",
|
||||
"app.video.virtualBackground.background": "Φόντο",
|
||||
"app.video.virtualBackground.genericError": "Η εφαρμογή εφέ της κάμερας απέτυχε. Προσπαθήστε ξανά.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "Ορισμός εικονικού φόντου της δικτυακής κάμερας {0}",
|
||||
"app.video.dropZoneLabel": "Εναποθέστε εδώ",
|
||||
@ -749,8 +758,9 @@
|
||||
"app.meeting.endNotification.ok.label": "OK",
|
||||
"app.whiteboard.annotations.poll": "Τα αποτελέσματα της δημοσκόπησης δημοσιεύτηκαν.",
|
||||
"app.whiteboard.annotations.pollResult": "Αποτελέσματα δημοσκόπησης",
|
||||
"app.whiteboard.annotations.noResponses": "Καμία αντίδραση",
|
||||
"app.whiteboard.toolbar.tools": "Εργαλεία",
|
||||
"app.whiteboard.toolbar.tools.hand": "Pan",
|
||||
"app.whiteboard.toolbar.tools.hand": "Μετατόπιση",
|
||||
"app.whiteboard.toolbar.tools.pencil": "Μολύβι",
|
||||
"app.whiteboard.toolbar.tools.rectangle": "Ορθογώνιο",
|
||||
"app.whiteboard.toolbar.tools.triangle": "Τρίγωνο",
|
||||
@ -768,18 +778,18 @@
|
||||
"app.whiteboard.toolbar.color.eletricLime": "Φωτεινό κίτρινο",
|
||||
"app.whiteboard.toolbar.color.lime": "Κίτρινο",
|
||||
"app.whiteboard.toolbar.color.cyan": "Κυανό",
|
||||
"app.whiteboard.toolbar.color.dodgerBlue": "Dodger blue",
|
||||
"app.whiteboard.toolbar.color.dodgerBlue": "Μπλέ",
|
||||
"app.whiteboard.toolbar.color.blue": "Μπλε",
|
||||
"app.whiteboard.toolbar.color.violet": "Βιολετί",
|
||||
"app.whiteboard.toolbar.color.magenta": "Magenta",
|
||||
"app.whiteboard.toolbar.color.silver": "Ασημί",
|
||||
"app.whiteboard.toolbar.undo": "Αναίρεση επισήμανσης",
|
||||
"app.whiteboard.toolbar.clear": "Απαλοιφή όλων των επισημάνσεων",
|
||||
"app.whiteboard.toolbar.undo": "Αναίρεση σχολιασμού",
|
||||
"app.whiteboard.toolbar.clear": "Απαλοιφή όλων των σχολιασμών",
|
||||
"app.whiteboard.toolbar.multiUserOn": "Ενεργοποίηση κοινόχρηστου πίνακα.",
|
||||
"app.whiteboard.toolbar.multiUserOff": "Απενεργοποίηση κοινόχρηστου πίνακα.",
|
||||
"app.whiteboard.toolbar.palmRejectionOn": "Ενεργοποιήστε την απόρριψη παλάμης",
|
||||
"app.whiteboard.toolbar.palmRejectionOff": "Απενεργοποιήστε την απόρριψη παλάμης",
|
||||
"app.whiteboard.toolbar.fontSize": "Λίστα μέγεθους γραμματοσειράς",
|
||||
"app.whiteboard.toolbar.fontSize": "Λίστα μεγέθους γραμματοσειράς",
|
||||
"app.whiteboard.toolbarAriaLabel": "Εργαλεία παρουσίασης",
|
||||
"app.feedback.title": "Έχετε αποσυνδεθεί από τη σύσκεψη.",
|
||||
"app.feedback.subtitle": "Θα θέλαμε να μας πείτε για την εμπειρία σας με το BigBlueButton (προαιρετικά)",
|
||||
@ -792,6 +802,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Εστίαση στην επιλεγμένη κάμερα.",
|
||||
"app.videoDock.webcamUnfocusLabel": "Απεστίαση",
|
||||
"app.videoDock.webcamUnfocusDesc": "Απεστίαση της επιλεγμένης κάμερας",
|
||||
"app.videoDock.webcamPinLabel": "Καρφίτσωμα",
|
||||
"app.videoDock.webcamPinDesc": "Καρφίτσωμα επιλεγμένων καμερών",
|
||||
"app.videoDock.webcamUnpinLabel": "Ξεκαρφίτσωμα",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Μόνο οι συντονιστές μπορούν να ξεκαρφιτσώσουν χρήστες",
|
||||
"app.videoDock.webcamUnpinDesc": "Ξεκαρφίτσωμα επιλεγμένων καμερών",
|
||||
"app.videoDock.autoplayBlockedDesc": "Χρειαζόμαστε την άδειά σας για να σας δείξουμε τις κάμερες των άλλων χρηστών.",
|
||||
"app.videoDock.autoplayAllowLabel": "Προβολή καμερών",
|
||||
"app.invitation.title": "Πρόσκληση σε υπό-δωμάτιο (breakout).",
|
||||
@ -822,7 +837,7 @@
|
||||
"app.createBreakoutRoom.addParticipantLabel": "+ Προσθήκη συμμετέχοντα",
|
||||
"app.createBreakoutRoom.freeJoin": "Επιτρέψτε στους χρήστες να επιλέγουν σε ποιο υπο-δωμάτιο (breakout) θα συμμετέχουν.",
|
||||
"app.createBreakoutRoom.leastOneWarnBreakout": "Πρέπει να προσθέσετε τουλάχιστο έναν χρήστη στο υπο-δωμάτιο (breakout).",
|
||||
"app.createBreakoutRoom.minimumDurationWarnBreakout": "Ελάχιστη διάρκεια του δωματίου διαλείμματος είναι {0} λεπτά.",
|
||||
"app.createBreakoutRoom.minimumDurationWarnBreakout": "Η ελάχιστη διάρκεια του δωματίου διαλείμματος είναι {0} λεπτά.",
|
||||
"app.createBreakoutRoom.modalDesc": "Συμβουλή: Μπορείτε σύρετε το όνομα ενός χρήστη για να τον προσθέσετε στο υπο-δωμάτιο (breakout).",
|
||||
"app.createBreakoutRoom.roomTime": "{0} λεπτά",
|
||||
"app.createBreakoutRoom.numberOfRoomsError": "Δεν είναι έγκυρος ο αριθμός των δωματίων",
|
||||
@ -847,7 +862,7 @@
|
||||
"app.legacy.upgradeBrowser": "Φαίνεται πως χρησιμοποιείτε μια παλαιότερη έκδοση ενός υποστηριζόμενου περιηγητή. Παρακαλούμε αναβαθμίστε τον περιηγητή σας για πλήρη υποστήριξη.",
|
||||
"app.legacy.criosBrowser": "Στο iOS παρακαλούμε χρησιμοποιήστε τον Safari για πλήρη υποστήριξη.",
|
||||
"app.debugWindow.windowTitle": "Αποσφαλμάτωση",
|
||||
"app.debugWindow.form.userAgentLabel": "User Agent",
|
||||
"app.debugWindow.form.userAgentLabel": "Εφαρμογή χρήστη",
|
||||
"app.debugWindow.form.button.copy": "Αντιγραφή",
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutLabel": "Ενεργοποίηση αυτόματης τακτοποίησης διάταξης",
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutDescription": "(θα απενεργοποιηθεί αν σύρετε ή αλλάξετε το μέγεθος της περιοχής των καμερών)",
|
||||
@ -856,6 +871,10 @@
|
||||
"app.layout.style.smart": "Έξυπνη διάταξη",
|
||||
"app.layout.style.presentationFocus": "Εστίαση στην παρουσίαση",
|
||||
"app.layout.style.videoFocus": "Εστίαση στο βίντεο",
|
||||
"app.layout.style.customPush": "Προσαρμοσμένο (επιβολή διάταξης για όλους)",
|
||||
"app.layout.style.smartPush": "Έξυπνη διάταξη (επιβολή διάταξης για όλους)",
|
||||
"app.layout.style.presentationFocusPush": "Εστίαση στην παρουσίαση (επιβολή διάταξης για όλους)",
|
||||
"app.layout.style.videoFocusPush": "Εστίαση στο βίντεο (επιβολή διάταξης για όλους)",
|
||||
"playback.button.about.aria": "Σχετικά",
|
||||
"playback.button.clear.aria": "Καθαρισμός αναζήτησης",
|
||||
"playback.button.fullscreen.aria": "Περιεχόμενα πλήρους οθόνης",
|
||||
@ -887,17 +906,25 @@
|
||||
"app.learningDashboard.indicators.usersTotal": "Συνολικός αριθμός χρηστών",
|
||||
"app.learningDashboard.indicators.polls": "Δημοσκοπήσεις",
|
||||
"app.learningDashboard.indicators.raiseHand": "Σηκώστε το χέρι σας",
|
||||
"app.learningDashboard.indicators.activityScore": "Βαθμολογία δραστηριότητας",
|
||||
"app.learningDashboard.indicators.duration": "Διάρκεια",
|
||||
"app.learningDashboard.usersTable.title": "Προεπισκόπιση",
|
||||
"app.learningDashboard.usersTable.colOnline": "Χρόνος σύνδεσης",
|
||||
"app.learningDashboard.usersTable.colTalk": "Χρόνος ομιλίας",
|
||||
"app.learningDashboard.usersTable.colWebcam": "Χρόνος κάμερας",
|
||||
"app.learningDashboard.usersTable.colMessages": "Μηνύματα",
|
||||
"app.learningDashboard.usersTable.colEmojis": "Emojis",
|
||||
"app.learningDashboard.usersTable.colRaiseHands": "Σηκωμένα χέρια",
|
||||
"app.learningDashboard.usersTable.colActivityScore": "Βαθμολογία δραστηριότητας",
|
||||
"app.learningDashboard.usersTable.colStatus": "Κατάσταση",
|
||||
"app.learningDashboard.usersTable.userStatusOnline": "Σε σύνδεση",
|
||||
"app.learningDashboard.usersTable.userStatusOffline": "Εκτός σύνδεσης",
|
||||
"app.learningDashboard.usersTable.noUsers": "Χωρίς χρήστες ακόμα",
|
||||
"app.learningDashboard.pollsTable.title": "Δημοσκόπηση",
|
||||
"app.learningDashboard.pollsTable.anonymousAnswer": "Ανώνυμη δημοσκόπηση (απαντήσεις στην τελευταία γραμμή)",
|
||||
"app.learningDashboard.pollsTable.anonymousRowName": "Ανώνυμα",
|
||||
"app.learningDashboard.statusTimelineTable.title": "Κατάσταση χρονοδιαγράμματος",
|
||||
"app.learningDashboard.errors.invalidToken": "Μη έγκυρο αναγνωριστικό σύνδεσης",
|
||||
"app.learningDashboard.errors.dataUnavailable": "Τα δεδομένα δεν είναι πλέον διαθέσιμα"
|
||||
|
||||
}
|
||||
|
@ -164,6 +164,7 @@
|
||||
"app.presentation.slideContent": "Slide Content",
|
||||
"app.presentation.startSlideContent": "Slide content start",
|
||||
"app.presentation.endSlideContent": "Slide content end",
|
||||
"app.presentation.changedSlideContent": "Presentation changed to slide: {0}",
|
||||
"app.presentation.emptySlideContent": "No content for current slide",
|
||||
"app.presentation.presentationToolbar.noNextSlideDesc": "End of presentation",
|
||||
"app.presentation.presentationToolbar.noPrevSlideDesc": "Start of presentation",
|
||||
@ -192,6 +193,7 @@
|
||||
"app.presentation.placeholder": "Waiting for a presentation to be uploaded",
|
||||
"app.presentationUploder.title": "Presentation",
|
||||
"app.presentationUploder.message": "As a presenter you have the ability to upload any office document or PDF file. We recommend PDF file for best results. Please ensure that a presentation is selected using the circle checkbox on the right hand side.",
|
||||
"app.presentationUploder.extraHint": "IMPORTANT: each file may not exceed {0} MB and {1} pages.",
|
||||
"app.presentationUploder.uploadLabel": "Upload",
|
||||
"app.presentationUploder.confirmLabel": "Confirm",
|
||||
"app.presentationUploder.confirmDesc": "Save your changes and start the presentation",
|
||||
|
@ -88,8 +88,11 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Takista kasutajal sessiooniga taasliituda.",
|
||||
"app.userList.menu.muteUserAudio.label": "Vaigista kasutaja",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Eemalda kasutaja vaigistus",
|
||||
"app.userList.menu.webcamPin.label": "Kinnita veebikaamera",
|
||||
"app.userList.menu.webcamUnpin.label": "Vabasta veebikaamera",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Anna tahvli kasutusluba",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Eemalda tahvli kasutusluba",
|
||||
"app.userList.menu.ejectUserCameras.label": "Sulge kaamerad",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} staatus {3}",
|
||||
"app.userList.menu.promoteUser.label": "Ülenda moderaatoriks",
|
||||
"app.userList.menu.demoteUser.label": "Alanda vaatajaks",
|
||||
@ -330,6 +333,7 @@
|
||||
"app.navBar.userListToggleBtnLabel": "Kasutajate nimekiri sisse/välja",
|
||||
"app.navBar.toggleUserList.ariaLabel": "Kasutajad ja sõnumid sisse/välja",
|
||||
"app.navBar.toggleUserList.newMessages": "koos uue sõnumi teavitusega",
|
||||
"app.navBar.toggleUserList.newMsgAria": "Uus sõnum kasutajalt {0}",
|
||||
"app.navBar.recording": "Sessiooni salvestatakse",
|
||||
"app.navBar.recording.on": "Salvestatakse",
|
||||
"app.navBar.recording.off": "Ei salvestata",
|
||||
@ -687,9 +691,9 @@
|
||||
"app.connection-status.lostPackets": "Kadunud paketid",
|
||||
"app.connection-status.usingTurn": "Kasutatakse TURNi",
|
||||
"app.connection-status.yes": "Jah",
|
||||
"app.learning-dashboard.label": "Õppetöö ülevaateleht",
|
||||
"app.learning-dashboard.label": "Õpianalüütika andmelaud",
|
||||
"app.learning-dashboard.description": "Ava ülevaateleht kasutajate tegevustega",
|
||||
"app.learning-dashboard.clickHereToOpen": "Ava õppetöö ülevaateleht",
|
||||
"app.learning-dashboard.clickHereToOpen": "Ava õpianalüütika andmelaud",
|
||||
"app.recording.startTitle": "Alusta salvestamist",
|
||||
"app.recording.stopTitle": "Peata salvestamine",
|
||||
"app.recording.resumeTitle": "Jätka salvestamist",
|
||||
@ -749,8 +753,12 @@
|
||||
"app.video.pagination.prevPage": "Vaata eelmisi videoid",
|
||||
"app.video.pagination.nextPage": "Vaata järgmisi videoid",
|
||||
"app.video.clientDisconnected": "Veebikaamerat ei saa jagada ühendusprobleemide tõttu",
|
||||
"app.video.virtualBackground.none": "Mitte midagi",
|
||||
"app.video.virtualBackground.blur": "Hägustatud",
|
||||
"app.video.virtualBackground.none": "Puudub",
|
||||
"app.video.virtualBackground.blur": "Hägu",
|
||||
"app.video.virtualBackground.home": "Kodu",
|
||||
"app.video.virtualBackground.board": "Tahvel",
|
||||
"app.video.virtualBackground.coffeeshop": "Kohvik",
|
||||
"app.video.virtualBackground.background": "Taust",
|
||||
"app.video.virtualBackground.genericError": "Kaameraefekti rakendamine ebaõnnestus. Proovi uuesti.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "Määrab {0} veebikaamera virtuaalseks taustaks",
|
||||
"app.video.dropZoneLabel": "Aseta siia",
|
||||
@ -814,6 +822,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Anna valitud veebikaamerale fookus",
|
||||
"app.videoDock.webcamUnfocusLabel": "Lõpeta fookus",
|
||||
"app.videoDock.webcamUnfocusDesc": "Lõpeta valitud veebikaamera fookus",
|
||||
"app.videoDock.webcamPinLabel": "Kinnita",
|
||||
"app.videoDock.webcamPinDesc": "Kinnita valitud veebikaamera",
|
||||
"app.videoDock.webcamUnpinLabel": "Vabasta",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Kasutajat saab vabastada ainult moderaator",
|
||||
"app.videoDock.webcamUnpinDesc": "Vabasta valitud veebikaamera",
|
||||
"app.videoDock.autoplayBlockedDesc": "Vajame sinu luba, et näidata sulle teiste kasutajate veebikaameraid.",
|
||||
"app.videoDock.autoplayAllowLabel": "Vaata veebikaameraid",
|
||||
"app.invitation.title": "Eraldatud ruumi kutse",
|
||||
@ -916,7 +929,7 @@
|
||||
"playback.player.search.modal.subtitle": "Otsi esitluse slaidide sisu",
|
||||
"playback.player.thumbnails.wrapper.aria": "Pisipiltide ala",
|
||||
"playback.player.video.wrapper.aria": "Video ala",
|
||||
"app.learningDashboard.dashboardTitle": "Õppetöö ülevaateleht",
|
||||
"app.learningDashboard.dashboardTitle": "Õpianalüütika andmelaud",
|
||||
"app.learningDashboard.user": "Kasutaja",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Lõppenud",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Kestab",
|
||||
|
@ -686,9 +686,7 @@
|
||||
"app.connection-status.lostPackets": "Pakete galduak",
|
||||
"app.connection-status.usingTurn": "TXANDA erabiltzen",
|
||||
"app.connection-status.yes": "Bai",
|
||||
"app.learning-dashboard.label": "Ikasteko arbela",
|
||||
"app.learning-dashboard.description": "Ireki arbela erabiltzaileen aktibitateekin",
|
||||
"app.learning-dashboard.clickHereToOpen": "Ireki ikasteko arbela",
|
||||
"app.recording.startTitle": "Hasi grabatzen",
|
||||
"app.recording.stopTitle": "Pausarazi grabazioa",
|
||||
"app.recording.resumeTitle": "Jarraitu grabatzen",
|
||||
@ -912,7 +910,6 @@
|
||||
"playback.player.search.modal.subtitle": "Aurkitu aurkezpenaren diapositiben edukia",
|
||||
"playback.player.thumbnails.wrapper.aria": "Koadro txikien eremua",
|
||||
"playback.player.video.wrapper.aria": "Bideoaren eremua",
|
||||
"app.learningDashboard.dashboardTitle": "Ikasteko arbela",
|
||||
"app.learningDashboard.user": "Erabiltzailea",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Bukatua",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Aktiboa",
|
||||
|
@ -88,8 +88,11 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "از ورود دوباره کاربر به این جلسه جلوگیری کن.",
|
||||
"app.userList.menu.muteUserAudio.label": "بستن صدای کاربر",
|
||||
"app.userList.menu.unmuteUserAudio.label": "فعال سازی صدای کاربر",
|
||||
"app.userList.menu.webcamPin.label": "سنجاق کردن وبکم کاربر",
|
||||
"app.userList.menu.webcamUnpin.label": "سنجاق وبکم کاربر را بردارید",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "اعطای دسترسی تخته سفید",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "حذف دسترسی تخته سفید",
|
||||
"app.userList.menu.ejectUserCameras.label": "بستن دوربینها",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} وضعیت {3}",
|
||||
"app.userList.menu.promoteUser.label": "ارتقا نقش به مدیر",
|
||||
"app.userList.menu.demoteUser.label": "تبدیل به کاربر عادی",
|
||||
@ -687,9 +690,7 @@
|
||||
"app.connection-status.lostPackets": "پکتهای از دست رفته",
|
||||
"app.connection-status.usingTurn": "استفاده از TURN",
|
||||
"app.connection-status.yes": "بله",
|
||||
"app.learning-dashboard.label": "داشبورد یادگیری",
|
||||
"app.learning-dashboard.description": "باز کردن داشبورد با فعالیتهای کاربران",
|
||||
"app.learning-dashboard.clickHereToOpen": "نمایش داشبورد یادگیری",
|
||||
"app.recording.startTitle": "شروع ضبط",
|
||||
"app.recording.stopTitle": "مکث ضبط",
|
||||
"app.recording.resumeTitle": "از سر گرفتن ضبط",
|
||||
@ -751,6 +752,10 @@
|
||||
"app.video.clientDisconnected": "وب کم به دلیل مشکلات اتصال به اشتراک گذاشته نمی شود",
|
||||
"app.video.virtualBackground.none": "هیچی",
|
||||
"app.video.virtualBackground.blur": "محو کردن",
|
||||
"app.video.virtualBackground.home": "خانه",
|
||||
"app.video.virtualBackground.board": "تابلو",
|
||||
"app.video.virtualBackground.coffeeshop": "کافیشاپ",
|
||||
"app.video.virtualBackground.background": "پسزمینه",
|
||||
"app.video.virtualBackground.genericError": "افکت دوربین اعمال نشد. مجددا تلاش کنید.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "تنظیم پسزمینه مجازی دوربین به {0}",
|
||||
"app.video.dropZoneLabel": "اینجا بیندازید",
|
||||
@ -814,6 +819,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "تمرکز روی دوربین انتخاب شده",
|
||||
"app.videoDock.webcamUnfocusLabel": "خروج از حالت تمرکز",
|
||||
"app.videoDock.webcamUnfocusDesc": "خروج از حالت تمرکز روی دوربین انتخاب شده",
|
||||
"app.videoDock.webcamPinLabel": "سنجاق",
|
||||
"app.videoDock.webcamPinDesc": "وبکم انتخاب شده را سنجاق کنید",
|
||||
"app.videoDock.webcamUnpinLabel": "از سنجاق برداشتن",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "فقط مدیران میتوانند، سنجاق کاربران را بردارن",
|
||||
"app.videoDock.webcamUnpinDesc": "سنجاق وبکم انتخاب شده را بردارید",
|
||||
"app.videoDock.autoplayBlockedDesc": "ما به مجوز شما برای نمایش دوربین کاربران به شما نیاز داریم",
|
||||
"app.videoDock.autoplayAllowLabel": "مشاهده دوربین ها",
|
||||
"app.invitation.title": "دعوت به اتاق زیرمجموعه",
|
||||
@ -916,7 +926,6 @@
|
||||
"playback.player.search.modal.subtitle": "یافتن محتوای صفحات ارائه شده",
|
||||
"playback.player.thumbnails.wrapper.aria": "محدوده تصاویر بندانگشتی",
|
||||
"playback.player.video.wrapper.aria": "محدوده فیلم",
|
||||
"app.learningDashboard.dashboardTitle": "داشبورد یادگیری",
|
||||
"app.learningDashboard.user": "کاربر",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "پایان یافته",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "فعال",
|
||||
|
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Empêcher cet utilisateur de rejoindre de nouveau la réunion.",
|
||||
"app.userList.menu.muteUserAudio.label": "Rendre l'utilisateur silencieux",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Autoriser l'utilisateur à parler",
|
||||
"app.userList.menu.webcamPin.label": "Afficher de préférence ce participant",
|
||||
"app.userList.menu.webcamUnpin.label": "Ne plus afficher de préférence ce participant",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Donner l'accès au tableau blanc",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Supprimer l'accès au tableau blanc",
|
||||
"app.userList.menu.ejectUserCameras.label": "Eteindre les caméras",
|
||||
@ -331,6 +333,7 @@
|
||||
"app.navBar.userListToggleBtnLabel": "Affichage de la liste des utilisateurs",
|
||||
"app.navBar.toggleUserList.ariaLabel": "Affichage des utilisateurs et des messages",
|
||||
"app.navBar.toggleUserList.newMessages": "avec notification des nouveaux messages",
|
||||
"app.navBar.toggleUserList.newMsgAria": "Nouveau message de {0}",
|
||||
"app.navBar.recording": "Cette session est enregistrée",
|
||||
"app.navBar.recording.on": "Enregistrement en cours",
|
||||
"app.navBar.recording.off": "Pas d'enregistrement en cours",
|
||||
@ -546,9 +549,9 @@
|
||||
"app.audio.listenOnly.backLabel": "Retour",
|
||||
"app.audio.listenOnly.closeLabel": "Fermer",
|
||||
"app.audio.permissionsOverlay.title": "Autoriser BigBlueButton à utiliser votre micro",
|
||||
"app.audio.permissionsOverlay.hint": "Il est nécessaire que vous nous autorisiez à utiliser vos appareils multimédias pour que vous puissiez rejoindre la conférence vocale :)",
|
||||
"app.error.removed": "Vous avez été retiré de la conférence",
|
||||
"app.error.meeting.ended": "Vous avez été déconnecté de la conférence",
|
||||
"app.audio.permissionsOverlay.hint": "Il est nécessaire que vous nous autorisiez à utiliser vos appareils multimédias pour que vous puissiez participer à la réunion",
|
||||
"app.error.removed": "Vous avez été écarté de la réunion",
|
||||
"app.error.meeting.ended": "Vous avez été déconnecté de la réunion",
|
||||
"app.meeting.logout.duplicateUserEjectReason": " Un compte déjà connecté tente de rejoindre la réunion",
|
||||
"app.meeting.logout.permissionEjectReason": "Expulsé en raison d'une violation de permission",
|
||||
"app.meeting.logout.ejectedFromMeeting": "Vous avez été retiré de la réunion",
|
||||
@ -681,7 +684,7 @@
|
||||
"app.connection-status.copy": "Copier les données réseau",
|
||||
"app.connection-status.copied": "Copié!",
|
||||
"app.connection-status.jitter": "Gigue",
|
||||
"app.connection-status.label": "Etat de la connexion",
|
||||
"app.connection-status.label": "État de la connexion",
|
||||
"app.connection-status.no": "Non",
|
||||
"app.connection-status.notification": "Une perte de votre connexion a été détectée",
|
||||
"app.connection-status.offline": "Hors ligne",
|
||||
@ -808,7 +811,7 @@
|
||||
"app.whiteboard.toolbar.palmRejectionOff": "Contacts de la paume de la main sur écrans tactiles : Activé",
|
||||
"app.whiteboard.toolbar.fontSize": "Liste de tailles de police",
|
||||
"app.whiteboard.toolbarAriaLabel": "Outils de présentation",
|
||||
"app.feedback.title": "Vous avez quitté la conférence",
|
||||
"app.feedback.title": "Vous avez quitté la réunion",
|
||||
"app.feedback.subtitle": "Nous aimerions beaucoup savoir ce que vous pensez de votre expérience avec BigBlueButton (optionnel)",
|
||||
"app.feedback.textarea": "Comment pouvons-nous améliorer BigBlueButton ?",
|
||||
"app.feedback.sendFeedback": "Envoyer l'avis",
|
||||
@ -819,6 +822,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Centrer sur la webcam sélectionnée",
|
||||
"app.videoDock.webcamUnfocusLabel": "Arrêter le centrage",
|
||||
"app.videoDock.webcamUnfocusDesc": "Arrêter de centrer sur la webcam sélectionnée",
|
||||
"app.videoDock.webcamPinLabel": "Afficher de préférence",
|
||||
"app.videoDock.webcamPinDesc": "Afficher de préférence la webcam sélectionnée",
|
||||
"app.videoDock.webcamUnpinLabel": "Ne plus afficher préférentiellement",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Seuls les modérateurs peuvent arrêter l'affichage préférentiel",
|
||||
"app.videoDock.webcamUnpinDesc": "Ne plus afficher de préférence la webcam sélectionnée",
|
||||
"app.videoDock.autoplayBlockedDesc": "Nous avons besoin de votre permission pour vous montrer les webcams des autres utilisateurs.",
|
||||
"app.videoDock.autoplayAllowLabel": "Voir les webcams",
|
||||
"app.invitation.title": "Invitation à une réunion privée",
|
||||
|
@ -687,9 +687,7 @@
|
||||
"app.connection-status.lostPackets": "Paquetes perdidos",
|
||||
"app.connection-status.usingTurn": "Usando TURN",
|
||||
"app.connection-status.yes": "Si",
|
||||
"app.learning-dashboard.label": "Panel de aprendizaxe",
|
||||
"app.learning-dashboard.description": "Abrir panel coas actividades das persoas usuarias",
|
||||
"app.learning-dashboard.clickHereToOpen": "Abrir o panel de aprendizaxe",
|
||||
"app.recording.startTitle": "Iniciar a gravación",
|
||||
"app.recording.stopTitle": "Pausar a gravación",
|
||||
"app.recording.resumeTitle": "Continuar coa gravación",
|
||||
@ -916,7 +914,6 @@
|
||||
"playback.player.search.modal.subtitle": "Atopar o contido das diapositivas da presentación",
|
||||
"playback.player.thumbnails.wrapper.aria": "Área de miniaturas",
|
||||
"playback.player.video.wrapper.aria": "Área de vídeo",
|
||||
"app.learningDashboard.dashboardTitle": "Panel de aprendizaxe",
|
||||
"app.learningDashboard.user": "Persoa usuaria",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Rematado",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Activo",
|
||||
|
@ -12,19 +12,20 @@
|
||||
"app.chat.closeChatLabel": "סגירה {0}",
|
||||
"app.chat.hideChatLabel": "הסתרה {0}",
|
||||
"app.chat.moreMessages": "הודעות נוספות מתחת",
|
||||
"app.chat.dropdown.options": "אפשרויות צ'אט",
|
||||
"app.chat.dropdown.options": "אפשרויות רב־שיח",
|
||||
"app.chat.dropdown.clear": "ניקוי",
|
||||
"app.chat.dropdown.copy": "העתקה",
|
||||
"app.chat.dropdown.save": "שמירה",
|
||||
"app.chat.label": "צ'אט",
|
||||
"app.chat.label": "רב־שיח",
|
||||
"app.chat.offline": "לא מקוון",
|
||||
"app.chat.pollResult": "תוצאות סקר",
|
||||
"app.chat.emptyLogLabel": "תיעוד מפגש ריק",
|
||||
"app.chat.clearPublicChatMessage": "היסטוריית המפגש נמחקה ע''י המורה",
|
||||
"app.chat.emptyLogLabel": "ארכיון רב־שיח של המפגש ריק",
|
||||
"app.chat.clearPublicChatMessage": "היסטוריית רב־שיח של המפגש נמחקה ע''י המורה",
|
||||
"app.chat.multi.typing": "מספר משתתפים מקלידים...",
|
||||
"app.chat.one.typing": "{0} מקליד..",
|
||||
"app.chat.two.typing": "{0} ו {1} מקלידים..",
|
||||
"app.chat.copySuccess": "תמליל הצ'אט הועתק",
|
||||
"app.chat.copySuccess": "תמליל רב־שיח הועתק",
|
||||
"app.chat.copyErr": "העתקת תמליל רב־שיח נכשלה",
|
||||
"app.captions.label": "כתוביות",
|
||||
"app.captions.menu.close": "סגירה",
|
||||
"app.captions.menu.start": "התחלה",
|
||||
@ -101,7 +102,7 @@
|
||||
"app.userList.userOptions.disableCam": "מצלמות הצופים בוטלו",
|
||||
"app.userList.userOptions.disableMic": "כל הצופים הושתקו",
|
||||
"app.userList.userOptions.disablePrivChat": "שיחה פרטית מבוטלת",
|
||||
"app.userList.userOptions.disablePubChat": "שיחה ציבורית מבוטלת",
|
||||
"app.userList.userOptions.disablePubChat": "רב־שיח ציבורי מבוטל",
|
||||
"app.userList.userOptions.disableNote": "פתקיות ציבוריות נעולות",
|
||||
"app.userList.userOptions.hideUserList": "רשימת המשתתפים מוסתרת מהצופים כעת",
|
||||
"app.userList.userOptions.webcamsOnlyForModerator": "רק מנחים יכולים לצפות במצלמות המשתתפים (בעקבות הגדרות הנעילה)",
|
||||
@ -109,7 +110,7 @@
|
||||
"app.userList.userOptions.enableCam": "מצלמות כל הצופים הפכו לזמינות",
|
||||
"app.userList.userOptions.enableMic": "בוטלה השתקת כל הצופים",
|
||||
"app.userList.userOptions.enablePrivChat": "שיחה פרטית מאופשרת",
|
||||
"app.userList.userOptions.enablePubChat": "שיחה ציבורית מאופשרת",
|
||||
"app.userList.userOptions.enablePubChat": "רב־שיח ציבורי מאופשר",
|
||||
"app.userList.userOptions.enableNote": "פתקיות ציבוריות מאופשרות",
|
||||
"app.userList.userOptions.showUserList": "רשימת המשתתפים גלויה לצופים",
|
||||
"app.userList.userOptions.enableOnlyModeratorWebcam": "ניתן להדליק את מצלמת הרשת שלך כעת! כולם יראו אותך",
|
||||
@ -408,8 +409,8 @@
|
||||
"app.userList.guest.rememberChoice": "זכירת בחירה",
|
||||
"app.user-info.title": "חיפוש תיקיה",
|
||||
"app.toast.breakoutRoomEnded": "מפגש חדר למידה הסתיים. בבקשה הצטרפו מחדש למפגש הקולי.",
|
||||
"app.toast.chat.public": "הודעת צ'אט ציבורי חדשה",
|
||||
"app.toast.chat.private": "הודעת צ'אט פרטי חדשה",
|
||||
"app.toast.chat.public": "הודעת רב־שיח ציבורי חדשה",
|
||||
"app.toast.chat.private": "הודעת רב־שיח פרטי חדשה",
|
||||
"app.toast.chat.system": "מערכת",
|
||||
"app.toast.clearedEmoji.label": "אמוג'י מצב נמחק",
|
||||
"app.toast.setEmoji.label": "מצב הוחלף ל {0}",
|
||||
@ -422,17 +423,18 @@
|
||||
"app.notification.userJoinPushAlert": "{0} הצטרף למפגש",
|
||||
"app.shortcut-help.title": "קיצורי מקלדת",
|
||||
"app.shortcut-help.toggleMute": "השתקה / ביטול השתקה",
|
||||
"app.shortcut-help.togglePublicChat": "עדכון מצב רב־שיח ציבורי (נדרשת רשימת משתתפים פתוחה)",
|
||||
"app.shortcut-help.hidePrivateChat": "הסתרת רב־שיח פרטי",
|
||||
"app.shortcut-help.closePrivateChat": "סגור צ'אט פרטי",
|
||||
"app.shortcut-help.openActions": "פתח את תפריט הפעולות",
|
||||
"app.shortcut-help.openStatus": "פתח את תפריט הסטטוסים",
|
||||
"app.shortcut-help.nextSlideDesc": "שקופית הבאה (מנחה)",
|
||||
"app.shortcut-help.previousSlideDesc": "שקופית קודמת (מנחה)",
|
||||
"app.lock-viewers.title": "נעינת הגדרות משתתפים",
|
||||
"app.shortcut-help.closePrivateChat": "סגירת שיחה פרטית",
|
||||
"app.shortcut-help.openActions": "פתיחת תפריט הפעולות",
|
||||
"app.shortcut-help.openStatus": "פתיחת תפריט מצבים",
|
||||
"app.shortcut-help.nextSlideDesc": "עמוד הבאה (מנחה)",
|
||||
"app.shortcut-help.previousSlideDesc": "עמוד קודם (מנחה)",
|
||||
"app.lock-viewers.title": "נעילת הגדרות משתתפים",
|
||||
"app.lock-viewers.description": "מסך זה מאפשר לך לקבע את מצב השיתוף של הצופים.",
|
||||
"app.lock-viewers.featuresLable": "הרשאה",
|
||||
"app.lock-viewers.lockStatusLabel": "נעול/פתוח לשינוי",
|
||||
"app.lock-viewers.webcamLabel": "שיתוף וידאו",
|
||||
"app.lock-viewers.featuresLable": "תכונה",
|
||||
"app.lock-viewers.lockStatusLabel": "מצב",
|
||||
"app.lock-viewers.webcamLabel": "שיתוף מצלמת וידאו",
|
||||
"app.lock-viewers.otherViewersWebcamLabel": "צפיה בווידאו שאחרים משתפים",
|
||||
"app.lock-viewers.microphoneLable": "שיתוף קול",
|
||||
"app.lock-viewers.PublicChatLabel": "שליחת הודעות ציבוריות",
|
||||
@ -448,7 +450,7 @@
|
||||
"app.recording.stopTitle": "השהית הקלטה",
|
||||
"app.recording.resumeTitle": "הפעלת הקלטה מחדש",
|
||||
"app.recording.startDescription": "ניתן להפעיל את ההקלטה במועד מואחר יותר על ידי לחיצה על כפתור ההקלטה.",
|
||||
"app.recording.stopDescription": "אתה בטוח כי ברצונך לעצור את ההקלטה? ניתצן להמשיך אותה על ידי לחיצה על כפתור ההקלטה.",
|
||||
"app.recording.stopDescription": "האם ברצונך לעצור את ההקלטה? ניתן להמשיך אותה על ידי לחיצה על כפתור ההקלטה.",
|
||||
"app.videoPreview.cameraLabel": "מצלמה",
|
||||
"app.videoPreview.profileLabel": "איכות",
|
||||
"app.videoPreview.cancelLabel": "ביטול",
|
||||
@ -478,7 +480,7 @@
|
||||
"app.whiteboard.toolbar.tools.triangle": "משולש",
|
||||
"app.whiteboard.toolbar.tools.ellipse": "אליפסה",
|
||||
"app.whiteboard.toolbar.tools.line": "קו",
|
||||
"app.whiteboard.toolbar.tools.text": "טקסט",
|
||||
"app.whiteboard.toolbar.tools.text": "מלל",
|
||||
"app.whiteboard.toolbar.thickness": "עובי קו",
|
||||
"app.whiteboard.toolbar.thicknessDisabled": "שינוי עובי קו לא מאופשר",
|
||||
"app.whiteboard.toolbar.color": "צבעים",
|
||||
@ -532,7 +534,7 @@
|
||||
"app.createBreakoutRoom.minusRoomTime": "צמצום משך זמן לחדר הלימוד",
|
||||
"app.createBreakoutRoom.addRoomTime": "הוספת משך זמן לחדר הלימוד",
|
||||
"app.createBreakoutRoom.addParticipantLabel": "+ הוספת משתתפים",
|
||||
"app.createBreakoutRoom.freeJoin": "אפשרות למשתמשים בחירת חדר לימוד",
|
||||
"app.createBreakoutRoom.freeJoin": "אפשרות בחירת חדר לימוד למשתמשים ",
|
||||
"app.createBreakoutRoom.leastOneWarnBreakout": "יש לשייך משתמש אחד לפחות לחדר לימוד כלשהו.",
|
||||
"app.createBreakoutRoom.roomTime": "{0} דקות",
|
||||
"app.createBreakoutRoom.numberOfRoomsError": "מספר חדרי הלימוד לא תקין.",
|
||||
@ -540,7 +542,8 @@
|
||||
"app.externalVideo.title": "שיתוף וידאו חיצוני",
|
||||
"app.externalVideo.input": "כתובת וידאו חיצוני URL",
|
||||
"app.externalVideo.urlInput": "הוספת כתובת וידאו URL",
|
||||
"app.externalVideo.close": "סגירה"
|
||||
"app.externalVideo.close": "סגירה",
|
||||
"playback.player.chat.wrapper.aria": "אזור רב־שיח"
|
||||
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
"app.home.greeting": "A prezentáció hamarosan elindul ...",
|
||||
"app.chat.submitLabel": "Üzenet küldése",
|
||||
"app.chat.loading": "Üzenet töltődik: {0}%",
|
||||
"app.chat.errorMaxMessageLength": "Az üzenet {0} karakterrel túl hosszú",
|
||||
"app.chat.errorMaxMessageLength": "Az üzenet {0} karakterrel hosszabb",
|
||||
"app.chat.disconnected": "Nem küldhetsz üzenete, mert nem kapcsolódtál",
|
||||
"app.chat.locked": "Nem küldhetsz üzenetet, mert a beszélgetés zárolt",
|
||||
"app.chat.inputLabel": "{0}: üzenet érkezett",
|
||||
@ -80,6 +80,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "A felhasználó újracsatlakozásának megakadályozása.",
|
||||
"app.userList.menu.muteUserAudio.label": "Felhasználó némítása",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Felhasználó hangosítása",
|
||||
"app.userList.menu.webcamPin.label": "Felhasználó webkamera rögzítés",
|
||||
"app.userList.menu.webcamUnpin.label": "Felhasználó webkamera feloldás",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Hozzáférést biztosít a táblához",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Hozzáférés megvonás a táblától",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} állapot {3}",
|
||||
@ -117,6 +119,9 @@
|
||||
"app.userList.userOptions.enableNote": "A megosztott jegyzet engedélyezve van",
|
||||
"app.userList.userOptions.showUserList": "A résztvevők látják a felhasználók listáját",
|
||||
"app.userList.userOptions.enableOnlyModeratorWebcam": "A webkamerád engedélyezve van, így a többiek láthatnak",
|
||||
"app.userList.userOptions.savedNames.title": "A(z) {0} megbeszélésben résztvevő felhasználók listája, {1}",
|
||||
"app.userList.userOptions.sortedFirstName.heading": "Keresztnév szerint rendezve:",
|
||||
"app.userList.userOptions.sortedLastName.heading": "Vezetéknév szerint rendezve:",
|
||||
"app.media.label": "Média",
|
||||
"app.media.autoplayAlertDesc": "Hozzáférés engedélyezése",
|
||||
"app.media.screenshare.start": "A képernyőmegosztás elindult",
|
||||
@ -125,6 +130,9 @@
|
||||
"app.media.screenshare.notSupported": "Ez a böngésző nem támogatja a képernyőmegosztást.",
|
||||
"app.media.screenshare.autoplayBlockedDesc": "Az előadó képernyőjének megjelenítéséhez az engedélyedre van szükségünk.",
|
||||
"app.media.screenshare.autoplayAllowLabel": "Megosztott képernyő megjelenítése",
|
||||
"app.screenshare.presenterLoadingLabel": "A képernyőmegosztásod betöltődik",
|
||||
"app.screenshare.viewerLoadingLabel": "Az előadó képernyője betöltődik",
|
||||
"app.screenshare.presenterSharingLabel": "Most megosztod a képernyőd",
|
||||
"app.screenshare.screenshareFinalError": "Kód: {0}. Nem sikerült megosztani a képernyőt.",
|
||||
"app.screenshare.screenshareRetryError": "Kód: {0}. Próbáld újra a képernyőmegosztást!",
|
||||
"app.screenshare.screenshareRetryOtherEnvError": "Kód: {0}. Nem sikerült megosztani a képernyőt. Próbáld újra másik böngészőben, vagy egy másik számítógépen!",
|
||||
@ -133,6 +141,9 @@
|
||||
"app.meeting.ended": "Ez a munkamenet befejeződött",
|
||||
"app.meeting.meetingTimeRemaining": "Az előadásból hátralévő idő: {0}",
|
||||
"app.meeting.meetingTimeHasEnded": "Az idő lejárt. Az előadás hamarosan véget ér",
|
||||
"app.meeting.endedByUserMessage": "Ezt a munkamenetet {0} befejezte",
|
||||
"app.meeting.endedByNoModeratorMessageSingular": "Az értekezlet véget ért, mert egy percig nem volt jelen moderátor",
|
||||
"app.meeting.endedByNoModeratorMessagePlural": "Az értekezlet véget ért, mert {0} percig nem volt jelen moderátor",
|
||||
"app.meeting.endedMessage": "Visszairányítunk a kezdőképernyőre",
|
||||
"app.meeting.alertMeetingEndsUnderMinutesSingular": "A megbeszélés egy perc múlva véget ér.",
|
||||
"app.meeting.alertMeetingEndsUnderMinutesPlural": "A megbeszélés {0} percen belül véget ér.",
|
||||
@ -169,6 +180,7 @@
|
||||
"app.presentation.presentationToolbar.fitToWidth": "A szélességhez illeszkedjen",
|
||||
"app.presentation.presentationToolbar.fitToPage": "Az oldalhoz illeszkedjen",
|
||||
"app.presentation.presentationToolbar.goToSlide": "{0}. dia",
|
||||
"app.presentation.placeholder": "Várakozás a prezentáció feltöltésére",
|
||||
"app.presentationUploder.title": "Prezentáció",
|
||||
"app.presentationUploder.message": "Előadóként tetszőleges office dokumentumot, illetve PDF fájlt fel tudsz tölteni. A legjobb eredmény érdekében javasoljuk PDF fájl használatát. Kérjük, ellenőrizd, hogy egy prezentációt kiválasztottál a jobb oldalon lévő jelölővel. ",
|
||||
"app.presentationUploder.uploadLabel": "Feltöltés",
|
||||
@ -184,6 +196,7 @@
|
||||
"app.presentationUploder.currentBadge": "Jelenlegi",
|
||||
"app.presentationUploder.rejectedError": "A kiválasztott fájl(oka)t visszautasítottuk. Kérjük, ellenőrizd a fájl(ok) típusát.",
|
||||
"app.presentationUploder.upload.progress": "({0}%) feltöltve",
|
||||
"app.presentationUploder.upload.413": "A fájl túl nagy, túllépte a maximális {0} MB-ot",
|
||||
"app.presentationUploder.genericError": "Hoppá, valami hiba történt ...",
|
||||
"app.presentationUploder.upload.408": "Feltöltési token kérés időtúllépése.",
|
||||
"app.presentationUploder.upload.404": "404: Érvénytelen feltöltési token ",
|
||||
@ -193,10 +206,13 @@
|
||||
"app.presentationUploder.conversion.generatingThumbnail": "Miniatűrök létrehozása ...",
|
||||
"app.presentationUploder.conversion.generatedSlides": "Diák létrehozása ...",
|
||||
"app.presentationUploder.conversion.generatingSvg": "SVG képek létrehozása ...",
|
||||
"app.presentationUploder.conversion.pageCountExceeded": "Az oldalak száma túllépte a maximális {0} értéket",
|
||||
"app.presentationUploder.conversion.officeDocConversionInvalid": "Az office dokumentumot nem sikerült előállítani. Kérjük, PDF-fájlt tölts fel.",
|
||||
"app.presentationUploder.conversion.officeDocConversionFailed": "Az office dokumentumot nem sikerült előállítani. Kérjük, PDF-fájlt tölts fel.",
|
||||
"app.presentationUploder.conversion.pdfHasBigPage": "Nem tudtuk konvertálni a PDF-fájlt, kérjük, próbáld meg optimalizálni. Max oldalméret: {0}",
|
||||
"app.presentationUploder.conversion.timeout": "Sajnáljuk, az átalakítás túl sokáig tartott",
|
||||
"app.presentationUploder.conversion.pageCountFailed": "Az oldalak számát nem sikerült meghatározni.",
|
||||
"app.presentationUploder.conversion.unsupportedDocument": "A fájl kiterjesztése nem támogatott",
|
||||
"app.presentationUploder.isDownloadableLabel": "Prezentáció letöltése nem engedélyezett - kattintson a prezentáció letöltésének engedélyezéséhez",
|
||||
"app.presentationUploder.isNotDownloadableLabel": "A prezentáció letöltése megengedett - kattintson ide, ha szeretné letiltani a letöltést",
|
||||
"app.presentationUploder.removePresentationLabel": "Prezentáció törlése",
|
||||
@ -211,12 +227,16 @@
|
||||
"app.presentationUploder.itemPlural" : "elemek",
|
||||
"app.presentationUploder.clearErrors": "Hibák törlése",
|
||||
"app.presentationUploder.clearErrorsDesc": "Hibás feltöltések törlése",
|
||||
"app.presentationUploder.uploadViewTitle": "Bemutató feltöltése",
|
||||
"app.poll.pollPaneTitle": "Szavazás",
|
||||
"app.poll.quickPollTitle": "Gyorsszavazás",
|
||||
"app.poll.hidePollDesc": "Szavazásmenü-panel elrejtése",
|
||||
"app.poll.quickPollInstruction": "Válassz egy beállítást a szavazás indításához",
|
||||
"app.poll.activePollInstruction": "Ennek a panelnek a megnyitásával megtekintheted szavazásod élő állását. Amikor készen állsz, nyomd meg a szavazás lezárásához és a végeredmény közzétételéhez a 'Szavazás eredményének közzététele' gombot.",
|
||||
"app.poll.dragDropPollInstruction": "A szavazáshoz húzz egy szöveges fájlt a a kiemelt mezőre",
|
||||
"app.poll.customPollTextArea": "Töltsd ki a szavazás értékeit",
|
||||
"app.poll.publishLabel": "Szavazás publikálása",
|
||||
"app.poll.cancelPollLabel": "Mégsem",
|
||||
"app.poll.backLabel": "Új szavazás indítása",
|
||||
"app.poll.closeLabel": "Bezárás",
|
||||
"app.poll.waitingLabel": "Várakozás a válaszokra ({0}/{1})",
|
||||
@ -224,12 +244,19 @@
|
||||
"app.poll.customPlaceholder": "Válaszlehetőség hozzáadása",
|
||||
"app.poll.noPresentationSelected": "Egy prezentáció sincs kiválasztva. Kérjük, válasszon egyet. ",
|
||||
"app.poll.clickHereToSelect": "A választásához kattints ide",
|
||||
"app.poll.question.label" : "Írd meg kérdésed...",
|
||||
"app.poll.optionalQuestion.label" : "Írd meg kérdésed (opcionális)...",
|
||||
"app.poll.userResponse.label" : "Szabad felhasználói válasz",
|
||||
"app.poll.responseTypes.label" : "Választípusok",
|
||||
"app.poll.optionDelete.label" : "Törlés",
|
||||
"app.poll.responseChoices.label" : "Lehetséges válaszok",
|
||||
"app.poll.typedResponse.desc" : "Felhasználóknak egy szövegmező jelenik meg, melybe beírhatják válaszukat szabadon.",
|
||||
"app.poll.addItem.label" : "Új válasz hozzáadása",
|
||||
"app.poll.start.label" : "Szavazás indítása",
|
||||
"app.poll.secretPoll.label" : "Névtelen szavazás",
|
||||
"app.poll.secretPoll.isSecretLabel": "A szavazás anonim – az egyéni válaszokat nem láthatja.",
|
||||
"app.poll.questionErr": "Kérdés megadása kötelező.",
|
||||
"app.poll.startPollDesc": "Szavazás kezdése",
|
||||
"app.poll.t": "Igaz",
|
||||
"app.poll.f": "Hamis",
|
||||
"app.poll.tf": "Igaz / Hamis",
|
||||
@ -253,11 +280,14 @@
|
||||
"app.poll.answer.e": "E",
|
||||
"app.poll.liveResult.usersTitle": "Felhasználók",
|
||||
"app.poll.liveResult.responsesTitle": "Válasz",
|
||||
"app.poll.liveResult.secretLabel": "Ez egy névtelen szavazás. Az egyéni válaszok nem jelennek meg.",
|
||||
"app.polling.pollingTitle": "Válaszlehetőségek",
|
||||
"app.polling.pollQuestionTitle": "Szavazás kérdése",
|
||||
"app.polling.submitLabel": "Beküldés",
|
||||
"app.polling.submitAriaLabel": "Küldd be szavazatod!",
|
||||
"app.polling.responsePlaceholder": "Válasz...",
|
||||
"app.polling.responseSecret": "Névtelen szavazás – az Előadó nem látja a választ.",
|
||||
"app.polling.responseNotSecret": "Normál szavazás – az előadó láthatja válaszod",
|
||||
"app.polling.pollAnswerLabel": "{0} válasz",
|
||||
"app.polling.pollAnswerDesc": "Válaszd ezt a lehetőséget, hogy erre szavazz: {0}",
|
||||
"app.failedMessage": "Sajnáljuk, hiba a szerverhez kapcsolódáskor",
|
||||
@ -312,6 +342,9 @@
|
||||
"app.actionsBar.raiseLabel": "Kézfeltartás",
|
||||
"app.actionsBar.label": "Műveletek sáv",
|
||||
"app.actionsBar.actionsDropdown.restorePresentationLabel": "Prezentáció visszaállítása",
|
||||
"app.actionsBar.actionsDropdown.restorePresentationDesc": "minimalizálva",
|
||||
"app.actionsBar.actionsDropdown.minimizePresentationLabel": "Prezentáció minimalizálása",
|
||||
"app.actionsBar.actionsDropdown.minimizePresentationDesc": "Prezentáció minimalizálására használt gomb",
|
||||
"app.screenshare.screenShareLabel" : "Képernyőmegosztás",
|
||||
"app.submenu.application.applicationSectionTitle": "Alkalmazás",
|
||||
"app.submenu.application.animationsLabel": "Animációk",
|
||||
@ -323,12 +356,15 @@
|
||||
"app.submenu.application.languageLabel": "Az alkalmazás nyelve",
|
||||
"app.submenu.application.languageOptionLabel": "Válassz nyelvet",
|
||||
"app.submenu.application.noLocaleOptionLabel": "Egy aktív fordítás sincs",
|
||||
"app.submenu.application.paginationEnabledLabel": "Videó oldalszámozás",
|
||||
"app.submenu.application.layoutOptionLabel": "Elrendezés típus",
|
||||
"app.submenu.notification.SectionTitle": "Értesítések",
|
||||
"app.submenu.notification.Desc": "Add meg, miről és hogyan kapj értesítéseket.",
|
||||
"app.submenu.notification.audioAlertLabel": "Hangértesítés",
|
||||
"app.submenu.notification.pushAlertLabel": "Felugró értesítés",
|
||||
"app.submenu.notification.messagesLabel": "Üzenet",
|
||||
"app.submenu.notification.userJoinLabel": "Felhasználó csatlakozás",
|
||||
"app.submenu.notification.userLeaveLabel": "Felhasználó távozás",
|
||||
"app.submenu.notification.guestWaitingLabel": "Jóváhagyásra váró vendég",
|
||||
"app.submenu.audio.micSourceLabel": "Mikrofon forrása",
|
||||
"app.submenu.audio.speakerSourceLabel": "Hangszóró forrása",
|
||||
@ -362,6 +398,8 @@
|
||||
"app.switch.offLabel": "KI",
|
||||
"app.talkingIndicator.ariaMuteDesc" : "Válasszd ki a némítani kívánt felhasználót",
|
||||
"app.talkingIndicator.isTalking" : "{0} beszél",
|
||||
"app.talkingIndicator.moreThanMaxIndicatorsTalking" : "0}+ beszél",
|
||||
"app.talkingIndicator.moreThanMaxIndicatorsWereTalking" : "{0}+ beszélgettek",
|
||||
"app.talkingIndicator.wasTalking" : "{0} befejezte beszédét",
|
||||
"app.actionsBar.actionsDropdown.actionsLabel": "Műveletek",
|
||||
"app.actionsBar.actionsDropdown.presentationLabel": "Prezentációs anyag előkészítése",
|
||||
@ -383,6 +421,7 @@
|
||||
"app.actionsBar.actionsDropdown.takePresenter": "Legyen az előadó",
|
||||
"app.actionsBar.actionsDropdown.takePresenterDesc": "Legyek én az új előadó",
|
||||
"app.actionsBar.actionsDropdown.selectRandUserLabel": "Felhasználó véletlenszerű kiválasztása",
|
||||
"app.actionsBar.actionsDropdown.selectRandUserDesc": "Véletlenszerűen kiválaszt egy felhasználót az elérhetőek közül",
|
||||
"app.actionsBar.emojiMenu.statusTriggerLabel": "Hangulatod kifejezése",
|
||||
"app.actionsBar.emojiMenu.awayLabel": "Nem vagyok a gépnél",
|
||||
"app.actionsBar.emojiMenu.awayDesc": "Hangulatjeled 'Nem vagyok a gépnél'-re módosítod",
|
||||
@ -436,6 +475,8 @@
|
||||
"app.audioModal.ariaTitle": "Csatlakozás hangablak",
|
||||
"app.audioModal.microphoneLabel": "Mikrofon",
|
||||
"app.audioModal.listenOnlyLabel": "Csak hallgatok",
|
||||
"app.audioModal.microphoneDesc": "Csatlakozás a konferenciához mikrofonnal",
|
||||
"app.audioModal.listenOnlyDesc": "Csak hallgatóként csatlakozol a konferenciához",
|
||||
"app.audioModal.audioChoiceLabel": "Hogyan csatlakozol a beszélgetéshez? ",
|
||||
"app.audioModal.iOSBrowser": "Hang/videó nem támogatott",
|
||||
"app.audioModal.iOSErrorDescription": "A hangot és a videót nem támogatjuk az iOS-en Chrome böngészővel.",
|
||||
@ -461,6 +502,7 @@
|
||||
"app.audioModal.playAudio.arialabel" : "Hang lejátszása",
|
||||
"app.audioDial.tipIndicator": "Tipp",
|
||||
"app.audioDial.tipMessage": "Saját magad némításához/hangosításához nyomj '0'-t a telefonon.",
|
||||
"app.audioModal.connecting": "Hangkapcsolat létrehozása",
|
||||
"app.audioManager.joinedAudio": "Csatlakoztál a beszélgetéshez",
|
||||
"app.audioManager.joinedEcho": "Csatlakoztál a hangteszthez",
|
||||
"app.audioManager.leftAudio": "Kiléptél a beszélgetésből",
|
||||
@ -472,11 +514,14 @@
|
||||
"app.audioManager.mediaError": "Hiba: Probléma lépett fel a médiaeszközök megszerzésekor",
|
||||
"app.audio.joinAudio": "Hang bekapcsolása",
|
||||
"app.audio.leaveAudio": "Hang kikapcsolása",
|
||||
"app.audio.changeAudioDevice": "Hangeszköz váltás",
|
||||
"app.audio.enterSessionLabel": "Belépés a munkamenetbe",
|
||||
"app.audio.playSoundLabel": "Hang lejátszása",
|
||||
"app.audio.backLabel": "Vissza",
|
||||
"app.audio.loading": "Betöltés",
|
||||
"app.audio.microphones": "Mikrofonok",
|
||||
"app.audio.speakers": "Hangszórók",
|
||||
"app.audio.noDeviceFound": "Nem található eszköz",
|
||||
"app.audio.audioSettings.titleLabel": "Válaszd ki a hangbeállításaidat",
|
||||
"app.audio.audioSettings.descriptionLabel": "Kérjük, figyelj, hogy egy ablak fog megjelenni a böngésződben, benne kérés, hogy fogadd el a mikrofonod megosztását.",
|
||||
"app.audio.audioSettings.microphoneSourceLabel": "Mikrofon forrása",
|
||||
@ -502,22 +547,39 @@
|
||||
"app.modal.newTab": "(új ablakban nyílik meg)",
|
||||
"app.modal.confirm.description": "Módosítások mentése és az ablak bezárása",
|
||||
"app.modal.randomUser.noViewers.description": "Nincs felhasználó, akik közül választhtatnál!",
|
||||
"app.modal.randomUser.selected.description": "Téged véletlenszerűen kiválasztottak",
|
||||
"app.modal.randomUser.title": "Véletlenszerű felhasználó kiválasztás",
|
||||
"app.modal.randomUser.who": "Ki lesz kiválasztva..?",
|
||||
"app.modal.randomUser.alone": "Csak egy felhasználó van",
|
||||
"app.modal.randomUser.reselect.label": "Újraválasztás",
|
||||
"app.modal.randomUser.ariaLabel.title": "Véletlenszerű felhasználó kiválasztás",
|
||||
"app.dropdown.close": "Bezárás",
|
||||
"app.dropdown.list.item.activeLabel": "Aktív",
|
||||
"app.error.400": "Hibás kérés",
|
||||
"app.error.401": "Nem hitelesített",
|
||||
"app.error.403": "Eltávolítottak a megbeszélésből",
|
||||
"app.error.404": "Nem található",
|
||||
"app.error.408": "Hitelesítés nem sikerült",
|
||||
"app.error.410": "A találkozó véget ért",
|
||||
"app.error.500": "Sajnáljuk, hiba történt",
|
||||
"app.error.userBanned": "A felhasználót kitiltották",
|
||||
"app.error.leaveLabel": "Bejelentkezés újra",
|
||||
"app.error.fallback.presentation.title": "Hiba lépett fel",
|
||||
"app.error.fallback.presentation.description": "Naplóztuk. Kérjük, próbáld újra betölteni az oldalt.",
|
||||
"app.error.fallback.presentation.reloadButton": "Újratöltése",
|
||||
"app.guest.waiting": "Várakozás jóváhagyásra",
|
||||
"app.guest.errorSeeConsole": "Hiba: további részletek a konzolban.",
|
||||
"app.guest.noModeratorResponse": "Nincs válasz a moderátortól.",
|
||||
"app.guest.noSessionToken": "Nem érkezett munkamenet Token.",
|
||||
"app.guest.windowTitle": "BBB - Vendég lobbi",
|
||||
"app.guest.missingToken": "A vendégnek hiányzik a munkamenet-tokenje.",
|
||||
"app.guest.missingSession": "Hiányzó munkamenet",
|
||||
"app.guest.missingMeeting": "A találkozó nem létezik.",
|
||||
"app.guest.meetingEnded": "A találkozó véget ért.",
|
||||
"app.guest.guestWait": "Várj, amíg egy moderátor jóváhagyja a csatlakozásod",
|
||||
"app.guest.guestDeny": "A vendég megtagadta a csatlakozást ",
|
||||
"app.guest.seatWait": "Vendég várakozik csatlakozáshoz",
|
||||
"app.guest.allow": "Vendég csatlakozása jóváhagyva",
|
||||
"app.userList.guest.waitingUsers": "Várakozó felhasználók",
|
||||
"app.userList.guest.waitingUsersTitle": "Felhasználókezelése",
|
||||
"app.userList.guest.optionTitle": "Várakozó felhasználók előnézete",
|
||||
@ -549,6 +611,7 @@
|
||||
"app.notification.recordingPaused": "Ezt a munkamenetet nem rögzítjük tovább",
|
||||
"app.notification.recordingAriaLabel": "Felvétel hossza",
|
||||
"app.notification.userJoinPushAlert": "{0} csatlakozott a munkamenethez",
|
||||
"app.notification.userLeavePushAlert": "{0} elhagyta a munkamenetet",
|
||||
"app.submenu.notification.raiseHandLabel": "Jelentkezem",
|
||||
"app.shortcut-help.title": "Gyorsbillentyűk",
|
||||
"app.shortcut-help.accessKeyNotAvailable": "A hozzáférési kulcsok nem érhetőek el",
|
||||
@ -563,8 +626,11 @@
|
||||
"app.shortcut-help.hidePrivateChat": "Privát üzenetek elrejtése",
|
||||
"app.shortcut-help.closePrivateChat": "Privát üzenetek bezárása",
|
||||
"app.shortcut-help.openActions": "Műveletek menü megnyitása",
|
||||
"app.shortcut-help.raiseHand": "Váltás: Jelentkezés",
|
||||
"app.shortcut-help.openDebugWindow": "Hibakereső ablak megnyitása",
|
||||
"app.shortcut-help.openStatus": "Állapotok menü megnyitása",
|
||||
"app.shortcut-help.togglePan": "Mozgató eszköz bekapcsolása (előadó)",
|
||||
"app.shortcut-help.toggleFullscreen": "Teljes képernyő váltás (előadó)",
|
||||
"app.shortcut-help.nextSlideDesc": "Következő dia (előadó)",
|
||||
"app.shortcut-help.previousSlideDesc": "Előző dia (előadó)",
|
||||
"app.lock-viewers.title": "Résztvevők zárolása",
|
||||
@ -589,13 +655,24 @@
|
||||
"app.guest-policy.button.askModerator": "Eseti elbírálással",
|
||||
"app.guest-policy.button.alwaysAccept": "Minden vendég engedélyezve",
|
||||
"app.guest-policy.button.alwaysDeny": "Minden vendég elutasítva",
|
||||
"app.guest-policy.policyBtnDesc": "Konferencia résztvevőire vonatkozó szabály beállítása",
|
||||
"app.connection-status.ariaTitle": "Kapcsolódási állapot modal",
|
||||
"app.connection-status.title": "Kapcsolódás állapota",
|
||||
"app.connection-status.description": "Az állapotjel saját interneted minőségéről mutat képet.",
|
||||
"app.connection-status.empty": "Jelenleg nincs kapcsolódási probléma.",
|
||||
"app.connection-status.more": "több",
|
||||
"app.connection-status.copy": "Hálózati adatok másolása",
|
||||
"app.connection-status.copied": "Másolva!",
|
||||
"app.connection-status.jitter": "Jitter",
|
||||
"app.connection-status.label": "Kapcsolódás állapota",
|
||||
"app.connection-status.no": "Nem",
|
||||
"app.connection-status.notification": "Kapcsolatod szakadozik.",
|
||||
"app.connection-status.lostPackets": "Elvesztett csomag",
|
||||
"app.connection-status.usingTurn": "TURN használat",
|
||||
"app.connection-status.yes": "Igen",
|
||||
"app.learning-dashboard.label": "Aktivitási elemzés irányítópult",
|
||||
"app.learning-dashboard.description": "Irányítópult megnyitása a felhasználói tevékenységekkel",
|
||||
"app.learning-dashboard.clickHereToOpen": "Aktivitási elemzés irányítópult megnyitása",
|
||||
"app.recording.startTitle": "Felvétel indítása",
|
||||
"app.recording.stopTitle": "Felvétel szüneteltetése",
|
||||
"app.recording.resumeTitle": "Felvétel folytatása",
|
||||
@ -617,18 +694,28 @@
|
||||
"app.videoPreview.webcamOptionLabel": "Válassz webkamerát",
|
||||
"app.videoPreview.webcamPreviewLabel": "Webkamerám előnézete",
|
||||
"app.videoPreview.webcamSettingsTitle": "Webkamerám beállításai",
|
||||
"app.videoPreview.webcamVirtualBackgroundLabel": "Virtuális háttér beállítás",
|
||||
"app.videoPreview.webcamVirtualBackgroundDisabledLabel": "Ez az eszköz nem támogatja a virtuális háttereket",
|
||||
"app.videoPreview.webcamNotFoundLabel": "Egy webkamera sem található",
|
||||
"app.videoPreview.profileNotFoundLabel": "Egy támogatott kameraprofil sem található",
|
||||
"app.video.joinVideo": "Webkamerám megosztása",
|
||||
"app.video.connecting": "A webkamera megosztása elindul...",
|
||||
"app.video.leaveVideo": "Webkamerám megosztásának befejezése",
|
||||
"app.video.advancedVideo": "Speciális beállítások megnyitása",
|
||||
"app.video.iceCandidateError": "Hiba az ICE-jelölt hozzáadásakor",
|
||||
"app.video.iceConnectionStateError": "Csatlakozási hiba (ICE hiba 1107)",
|
||||
"app.video.permissionError": "Hiba a webkamera megosztásakor. Kérjük, ellenőrizd a jogosultságokat, engedélyeket",
|
||||
"app.video.sharingError": "Hiba a webkamera megosztásakor",
|
||||
"app.video.abortError": "Ismeretlen kamera hiba",
|
||||
"app.video.overconstrainedError": "Kamerád nem támogatja ezt a minőségi profilt",
|
||||
"app.video.securityError": "Böngésződ letiltotta a kamera használatát. Próbálkozz másik - Chromium alapú- böngészővel!",
|
||||
"app.video.typeError": "Érvénytelen kameraminőségi profil. Fordulj a rendszergazdához",
|
||||
"app.video.notFoundError": "A webkamera nem található. Kérem, győződj meg róla, hogy csatlakoztatva van",
|
||||
"app.video.notAllowed": "Hiányzik engedély a kamera megosztásához, kérem, ellenőrizd a böngésződ beállításait",
|
||||
"app.video.notSupportedError": "Csak biztonságok forrásból oszthatsz meg webkamerát, ezért kérjük, ellenőrizd, hogy SSL tanúsítványod érvényes-e",
|
||||
"app.video.notReadableError": "Nem vesszük a webkamera képét. Kérjük, ellenőrizd, hogy másik program ne használja a webkamerát",
|
||||
"app.video.timeoutError": "A böngésző nem válaszolt időben.",
|
||||
"app.video.mediaTimedOutError": "A webkamera adatfolyama megszakadt. Próbáld meg újra megosztani",
|
||||
"app.video.mediaFlowTimeout1020": "A média nem éri el a szervert (hiba 1020)",
|
||||
"app.video.suggestWebcamLock": "Érvényesíted a zárolási beállítást a nézők webkameráján?",
|
||||
"app.video.suggestWebcamLockReason": "(ez növeli a beszélgetés stabilitását)",
|
||||
@ -641,7 +728,16 @@
|
||||
"app.video.videoMenu": "Videómenü",
|
||||
"app.video.videoMenuDisabled": "Videó menü Webkamera ki van kapcsolva a beállításokban",
|
||||
"app.video.videoMenuDesc": "Videó lenyíló menü megnyitása",
|
||||
"app.video.pagination.prevPage": "korábbi videók",
|
||||
"app.video.pagination.nextPage": "további videók",
|
||||
"app.video.clientDisconnected": "A webkamerát nem lehet megosztani kapcsolódási problémák miatt",
|
||||
"app.video.virtualBackground.none": "Egyik sem",
|
||||
"app.video.virtualBackground.blur": "Elhomályosít",
|
||||
"app.video.virtualBackground.board": "Tábla",
|
||||
"app.video.virtualBackground.coffeeshop": "Kávézó",
|
||||
"app.video.virtualBackground.background": "Háttér",
|
||||
"app.video.virtualBackground.genericError": "Nem sikerült alkalmazni a kameraeffektust. Próbáld újra.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "A webkamera virtuális hátterét a következőre állítottad: {0}",
|
||||
"app.fullscreenButton.label": "{0} teljes képernyős módra állítása",
|
||||
"app.sfu.mediaServerConnectionError2000": "Nem sikerült csatlakozni a médiaszerverhez (hiba 2000)",
|
||||
"app.sfu.mediaServerOffline2001": "A médiaszerver ki van kapcsolva. Kérjük, próbálja később. (hiba 2001)",
|
||||
@ -697,6 +793,9 @@
|
||||
"app.videoDock.webcamFocusDesc": "Fókusz a kiválasztott webkamerára",
|
||||
"app.videoDock.webcamUnfocusLabel": "Fókusz elvétele",
|
||||
"app.videoDock.webcamUnfocusDesc": "Fókusz elvétele a kiválasztott webkameráról",
|
||||
"app.videoDock.webcamPinDesc": "Rögzítsd a kiválasztott webkamerát",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Csak moderátorok oldhatják fel a felhasználók rögzítését",
|
||||
"app.videoDock.webcamUnpinDesc": "Oldd fel a kiválasztott webkamerát",
|
||||
"app.videoDock.autoplayBlockedDesc": "Mások webkamerájának a megjelenítéséhez az engedélyedre van szükségünk.",
|
||||
"app.videoDock.autoplayAllowLabel": "Webkamerák megjelenítése",
|
||||
"app.invitation.title": "Meghívás csapatszobába",
|
||||
@ -717,6 +816,7 @@
|
||||
"app.createBreakoutRoom.numberOfRooms": "Szobák száma",
|
||||
"app.createBreakoutRoom.durationInMinutes": "Időtartam (percben)",
|
||||
"app.createBreakoutRoom.randomlyAssign": "Véletlenszerű hozzárendelés",
|
||||
"app.createBreakoutRoom.randomlyAssignDesc": "Véletlenszerűen rendeli a felhasználókat a szekciószobákhoz",
|
||||
"app.createBreakoutRoom.endAllBreakouts": "Összes csapatszoba bezárása",
|
||||
"app.createBreakoutRoom.roomName": "{0} (Szoba - {1})",
|
||||
"app.createBreakoutRoom.doneLabel": "Kész",
|
||||
@ -726,9 +826,11 @@
|
||||
"app.createBreakoutRoom.addParticipantLabel": "+ Résztvevő hozzáadása",
|
||||
"app.createBreakoutRoom.freeJoin": "A felhasználók maguk választhatnak csapatszobát",
|
||||
"app.createBreakoutRoom.leastOneWarnBreakout": "Minden csapatszobába legalább egy felhasználónak kell kerülnie.",
|
||||
"app.createBreakoutRoom.minimumDurationWarnBreakout": "Egy szekciószoba minimális időtartama {0} perc.",
|
||||
"app.createBreakoutRoom.modalDesc": "Tipp: Fogd-és-vidd a felhasználó nevét a kívánt csapatszobára.",
|
||||
"app.createBreakoutRoom.roomTime": "{0} perc",
|
||||
"app.createBreakoutRoom.numberOfRoomsError": "A szobák száma érvénytelen.",
|
||||
"app.createBreakoutRoom.extendTimeHigherThanMeetingTimeError": "A szekciószobák időtartama nem haladhatja meg a megbeszélésből hátralévő időt.",
|
||||
"app.externalVideo.start": "Egy új videó megosztása",
|
||||
"app.externalVideo.title": "Egy külső videó megosztása",
|
||||
"app.externalVideo.input": "Külső videó URL",
|
||||
@ -743,7 +845,38 @@
|
||||
"app.legacy.unsupportedBrowser": "Úgy néz ki, hogy a böngésződ nem támogatott. Kérjük, használj {0} vagy {1} böngészőt a teljes támogatás érdekében.",
|
||||
"app.legacy.upgradeBrowser": "Úgy néz ki, hogy a böngésződ egy régi verzióját használod. Kérjük, frissítsd a böngésződet a teljes támogatás érdekében.",
|
||||
"app.legacy.criosBrowser": "iOS-en a teljes támogatáshoz használj Safari böngészőt .",
|
||||
"app.debugWindow.form.button.copy": "Másolás"
|
||||
"app.debugWindow.form.button.copy": "Másolás",
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutLabel": "Automatikus elrendezés engedélyezése",
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutDescription": "(le van tiltva, hogy húzd vagy átméretezd a webkamerák területét)",
|
||||
"app.layout.style.custom": "Egyéni",
|
||||
"app.layout.style.smart": "Intelligens elrendezés",
|
||||
"app.layout.style.presentationFocus": "Prezentáció a fókuszban",
|
||||
"app.layout.style.videoFocus": "Videó a fókuszban",
|
||||
"app.layout.style.customPush": "Egyéni elrendezés (mindenkinél kikényszerítve)",
|
||||
"app.layout.style.smartPush": "Intelligens elrendezés (mindenkinél kikényszerítve)",
|
||||
"app.layout.style.presentationFocusPush": "Prezentáció a fókuszban (mindenkinél kikényszerítve)",
|
||||
"app.layout.style.videoFocusPush": "Video a fókuszban (mindenkinél kikényszerítve)",
|
||||
"app.learningDashboard.dashboardTitle": "Aktivitási elemzés irányítópult",
|
||||
"app.learningDashboard.user": "Felhasználó",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Aktív",
|
||||
"app.learningDashboard.indicators.usersOnline": "Aktív felhasználók",
|
||||
"app.learningDashboard.indicators.usersTotal": "Felhasználók száma",
|
||||
"app.learningDashboard.indicators.polls": "Szavazások",
|
||||
"app.learningDashboard.indicators.raiseHand": "Jelentkezés",
|
||||
"app.learningDashboard.indicators.activityScore": "Aktivitás pontszám",
|
||||
"app.learningDashboard.indicators.duration": "Időtartam",
|
||||
"app.learningDashboard.usersTable.title": "Áttekintés",
|
||||
"app.learningDashboard.usersTable.colOnline": "Kapcsolódás ideje",
|
||||
"app.learningDashboard.usersTable.colTalk": "Beszélgetés ideje",
|
||||
"app.learningDashboard.usersTable.colWebcam": "Webkamera ideje",
|
||||
"app.learningDashboard.usersTable.colMessages": "Üzenetek",
|
||||
"app.learningDashboard.usersTable.colRaiseHands": "Jelentkezések",
|
||||
"app.learningDashboard.usersTable.colActivityScore": "Aktivitás pontszám",
|
||||
"app.learningDashboard.usersTable.colStatus": "Állapot",
|
||||
"app.learningDashboard.usersTable.userStatusOnline": "Kapcsolódva",
|
||||
"app.learningDashboard.usersTable.noUsers": "Még nincsenek felhasználók",
|
||||
"app.learningDashboard.pollsTable.anonymousAnswer": "Névtelen szavazás (válaszok az utolsó sorban)",
|
||||
"app.learningDashboard.statusTimelineTable.title": "Állapot idővonal"
|
||||
|
||||
}
|
||||
|
||||
|
@ -686,9 +686,7 @@
|
||||
"app.connection-status.lostPackets": "Փաթեթների կորուստ",
|
||||
"app.connection-status.usingTurn": "TURN-ի օգտագործում",
|
||||
"app.connection-status.yes": "Այո",
|
||||
"app.learning-dashboard.label": "Հանդիպման հաշվետվությունը",
|
||||
"app.learning-dashboard.description": "Բացել մասնակիցների գործողությունների հաշվետվությունը",
|
||||
"app.learning-dashboard.clickHereToOpen": "Բացել հանդիպման հաշվետվությունը",
|
||||
"app.recording.startTitle": "Միացնել տեսագրումը",
|
||||
"app.recording.stopTitle": "Ընդհատել տեսաձայնագրումը",
|
||||
"app.recording.resumeTitle": "Շարունակել տեսաձայնագրումը",
|
||||
@ -912,7 +910,6 @@
|
||||
"playback.player.search.modal.subtitle": "Որոնում ներկայացման սլայդերում",
|
||||
"playback.player.thumbnails.wrapper.aria": "Էսքիզների տարածք",
|
||||
"playback.player.video.wrapper.aria": "Տեսանյութի տարածք",
|
||||
"app.learningDashboard.dashboardTitle": "Հանդիպման հաշվետվություն",
|
||||
"app.learningDashboard.user": "Մասնակից",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Ավարտվել է",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Ակտիվ է",
|
||||
|
@ -673,9 +673,7 @@
|
||||
"app.connection-status.lostPackets": "Paket hilang",
|
||||
"app.connection-status.usingTurn": "Memakai TURN",
|
||||
"app.connection-status.yes": "Ya",
|
||||
"app.learning-dashboard.label": "Dasbor Belajar",
|
||||
"app.learning-dashboard.description": "Buka dasbor dengan aktivitas pengguna",
|
||||
"app.learning-dashboard.clickHereToOpen": "Buka Dasbor Belajar",
|
||||
"app.recording.startTitle": "Mulai merekam",
|
||||
"app.recording.stopTitle": "Jeda merekam",
|
||||
"app.recording.resumeTitle": "Lanjutkan merekam",
|
||||
@ -863,7 +861,6 @@
|
||||
"playback.player.search.modal.subtitle": "Cari isi salindia presentasi",
|
||||
"playback.player.thumbnails.wrapper.aria": "Area gambar mini",
|
||||
"playback.player.video.wrapper.aria": "Area video",
|
||||
"app.learningDashboard.dashboardTitle": "Dasbor Belajar",
|
||||
"app.learningDashboard.user": "Pengguna",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Berakhir",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Aktif",
|
||||
|
@ -688,9 +688,7 @@
|
||||
"app.connection-status.lostPackets": "Pacchetti persi",
|
||||
"app.connection-status.usingTurn": "Si sta usando TURN",
|
||||
"app.connection-status.yes": "Sì",
|
||||
"app.learning-dashboard.label": "Bacheca di apprendimento",
|
||||
"app.learning-dashboard.description": "Apre la bacheca con le attività degli utenti",
|
||||
"app.learning-dashboard.clickHereToOpen": "Apri bacheca di apprendimento",
|
||||
"app.recording.startTitle": "Avvia registrazione",
|
||||
"app.recording.stopTitle": "Sospendi registrazione",
|
||||
"app.recording.resumeTitle": "Riprendi registrazione",
|
||||
@ -921,7 +919,6 @@
|
||||
"playback.player.search.modal.subtitle": "Trova contenuto nelle slide della presentazione",
|
||||
"playback.player.thumbnails.wrapper.aria": "Area miniature",
|
||||
"playback.player.video.wrapper.aria": "Area video",
|
||||
"app.learningDashboard.dashboardTitle": "Bacheca di apprendimento",
|
||||
"app.learningDashboard.user": "Utente",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Terminato",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Attivo",
|
||||
|
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "このユーザーを二度とセッションに参加させない",
|
||||
"app.userList.menu.muteUserAudio.label": "ユーザーをミュートする",
|
||||
"app.userList.menu.unmuteUserAudio.label": "ユーザーのミュートを解除する",
|
||||
"app.userList.menu.webcamPin.label": "ウェブカメラをピン止めする",
|
||||
"app.userList.menu.webcamUnpin.label": "ウェブカメラのピン止めを外す",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "ホワイトボードへの書き込み許可を与える",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "ホワイトボードへの書き込み許可を取り消す",
|
||||
"app.userList.menu.ejectUserCameras.label": "カメラを閉じる",
|
||||
@ -100,7 +102,7 @@
|
||||
"app.userList.menu.makePresenter.label": "プレゼンターにする",
|
||||
"app.userList.userOptions.manageUsersLabel": "ユーザー管理",
|
||||
"app.userList.userOptions.muteAllLabel": "全ユーザーをミュート",
|
||||
"app.userList.userOptions.muteAllDesc": "この会議の全ユーザーをミュートにする",
|
||||
"app.userList.userOptions.muteAllDesc": "会議の全ユーザーをミュートする",
|
||||
"app.userList.userOptions.clearAllLabel": "全てのステータスを消す",
|
||||
"app.userList.userOptions.clearAllDesc": "ユーザーの全ステータスアイコンを消去する",
|
||||
"app.userList.userOptions.muteAllExceptPresenterLabel": "プレゼンター以外全員ミュート",
|
||||
@ -199,7 +201,7 @@
|
||||
"app.presentationUploder.dropzoneImagesLabel": "画像をここにドラッグしてアップロードする",
|
||||
"app.presentationUploder.browseFilesLabel": "またはファイルを探す",
|
||||
"app.presentationUploder.browseImagesLabel": "または画像を探す/キャプチャする",
|
||||
"app.presentationUploder.fileToUpload": "アップロードされます…",
|
||||
"app.presentationUploder.fileToUpload": "アップロード前...",
|
||||
"app.presentationUploder.currentBadge": "現在",
|
||||
"app.presentationUploder.rejectedError": "選択ファイルが拒否されました。ファイル形式を確認してください。",
|
||||
"app.presentationUploder.upload.progress": "アップロード中({0}%)",
|
||||
@ -252,9 +254,9 @@
|
||||
"app.poll.noPresentationSelected": "プレゼンテーションが選択されていません!1つ選択してください。",
|
||||
"app.poll.clickHereToSelect": "ここをクリックして選択する",
|
||||
"app.poll.question.label" : "質問を入力してください...",
|
||||
"app.poll.optionalQuestion.label" : "質問を入力してください(任意)...",
|
||||
"app.poll.optionalQuestion.label" : "(必要であれば)質問を入力してください...",
|
||||
"app.poll.userResponse.label" : "自由回答",
|
||||
"app.poll.responseTypes.label" : "回答のタイプ",
|
||||
"app.poll.responseTypes.label" : "回答方式",
|
||||
"app.poll.optionDelete.label" : "削除",
|
||||
"app.poll.responseChoices.label" : "回答の選択肢",
|
||||
"app.poll.typedResponse.desc" : "ユーザーには回答を記入するためのテキストボックスが提示されます。",
|
||||
@ -527,7 +529,7 @@
|
||||
"app.audioManager.requestTimeout": "エラー:リクエストに時間がかかりすぎました",
|
||||
"app.audioManager.invalidTarget": "エラー:リクエスト先がいませんでした",
|
||||
"app.audioManager.mediaError": "エラー:デバイスが見つかりませんでした",
|
||||
"app.audio.joinAudio": "音声で参加",
|
||||
"app.audio.joinAudio": "音声を聴く",
|
||||
"app.audio.leaveAudio": "音声を停止",
|
||||
"app.audio.changeAudioDevice": "オーディオデバイスを変更",
|
||||
"app.audio.enterSessionLabel": "セッションに参加",
|
||||
@ -613,7 +615,7 @@
|
||||
"app.userList.guest.acceptLabel": "承認",
|
||||
"app.userList.guest.denyLabel": "却下",
|
||||
"app.user-info.title": "ディレクトリ検索",
|
||||
"app.toast.breakoutRoomEnded": "小会議が終了しました。音声でもう一度参加してください。",
|
||||
"app.toast.breakoutRoomEnded": "小会議が終了しました。もう一度音声参加を行ってください。",
|
||||
"app.toast.chat.public": "新しいグループチャットメッセージ",
|
||||
"app.toast.chat.private": "新しい非公開チャットメッセージ",
|
||||
"app.toast.chat.system": "システム",
|
||||
@ -688,9 +690,9 @@
|
||||
"app.connection-status.lostPackets": "パケットロス",
|
||||
"app.connection-status.usingTurn": "TURN使用",
|
||||
"app.connection-status.yes": "あり",
|
||||
"app.learning-dashboard.label": "ラーニングダッシュボード",
|
||||
"app.learning-dashboard.label": "参加情報分析ダッシュボード",
|
||||
"app.learning-dashboard.description": "ダッシュボードを開いてユーザーのアクティビティを見る",
|
||||
"app.learning-dashboard.clickHereToOpen": "ラーニングダッシュボードを開く",
|
||||
"app.learning-dashboard.clickHereToOpen": "参加情報分析ダッシュボードを開く",
|
||||
"app.recording.startTitle": "録画開始",
|
||||
"app.recording.stopTitle": "録画一時停止",
|
||||
"app.recording.resumeTitle": "録画再開",
|
||||
@ -819,6 +821,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "選択したウェブカメラにフォーカスする",
|
||||
"app.videoDock.webcamUnfocusLabel": "フォーカスを外す",
|
||||
"app.videoDock.webcamUnfocusDesc": "選択したウェブカメラのフォーカスを外す",
|
||||
"app.videoDock.webcamPinLabel": "ピン止め",
|
||||
"app.videoDock.webcamPinDesc": "選択したウェブカメラをピン止めする",
|
||||
"app.videoDock.webcamUnpinLabel": "ピン止めを外す",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "モデレーターだけがピン止めを外すことができます",
|
||||
"app.videoDock.webcamUnpinDesc": "選択したウェブカメラのピン止めを外す",
|
||||
"app.videoDock.autoplayBlockedDesc": "他の人のウェブカメラを表示するため、許可してください",
|
||||
"app.videoDock.autoplayAllowLabel": "ウェブカメラ表示",
|
||||
"app.invitation.title": "小会議室への招待",
|
||||
@ -826,13 +833,13 @@
|
||||
"app.createBreakoutRoom.title": "小会議室",
|
||||
"app.createBreakoutRoom.ariaTitle": "小会議室を隠す",
|
||||
"app.createBreakoutRoom.breakoutRoomLabel": "小会議室 {0}",
|
||||
"app.createBreakoutRoom.askToJoin": "参加させてもらう",
|
||||
"app.createBreakoutRoom.askToJoin": "入室を求める",
|
||||
"app.createBreakoutRoom.generatingURL": "URL生成中",
|
||||
"app.createBreakoutRoom.generatingURLMessage": "選択された小会議室に参加するためのURLを作成しています。少し時間がかかるかもしれません...",
|
||||
"app.createBreakoutRoom.duration": "利用時間 {0}",
|
||||
"app.createBreakoutRoom.room": "会議室 {0}",
|
||||
"app.createBreakoutRoom.notAssigned": "未定({0})",
|
||||
"app.createBreakoutRoom.join": "入室",
|
||||
"app.createBreakoutRoom.join": "入室する",
|
||||
"app.createBreakoutRoom.joinAudio": "音声で参加",
|
||||
"app.createBreakoutRoom.returnAudio": "音声を戻す",
|
||||
"app.createBreakoutRoom.alreadyConnected": "既に会議室内です",
|
||||
@ -921,11 +928,11 @@
|
||||
"playback.player.search.modal.subtitle": "プレゼンスライドの内容を探す",
|
||||
"playback.player.thumbnails.wrapper.aria": "サムネイルエリア",
|
||||
"playback.player.video.wrapper.aria": "ビデオエリア",
|
||||
"app.learningDashboard.dashboardTitle": "ラーニングダッシュボード",
|
||||
"app.learningDashboard.dashboardTitle": "参加情報分析ダッシュボード",
|
||||
"app.learningDashboard.user": "ユーザー",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "終了",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "会議中",
|
||||
"app.learningDashboard.indicators.usersOnline": "人のアクティブなユーザー",
|
||||
"app.learningDashboard.indicators.usersOnline": "人のアクティブユーザー",
|
||||
"app.learningDashboard.indicators.usersTotal": "ユーザー総数",
|
||||
"app.learningDashboard.indicators.polls": "回の投票",
|
||||
"app.learningDashboard.indicators.raiseHand": "回の挙手",
|
||||
|
@ -88,8 +88,11 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "이 사용자가 세션에 재진입을 방지",
|
||||
"app.userList.menu.muteUserAudio.label": "사용자 음소거",
|
||||
"app.userList.menu.unmuteUserAudio.label": "사용자 음소거 취소",
|
||||
"app.userList.menu.webcamPin.label": "사용자의 웹캠 고정",
|
||||
"app.userList.menu.webcamUnpin.label": "사용자 웹캠 고정 해제",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "화이트 보드 액세스 권한 부여",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "화이트 보드 접속 끊기",
|
||||
"app.userList.menu.ejectUserCameras.label": "카메라 닫기",
|
||||
"app.userList.userAriaLabel": "{0}{1}{2} 상태 {3}",
|
||||
"app.userList.menu.promoteUser.label": "주관자로 승격",
|
||||
"app.userList.menu.demoteUser.label": "참여자로 강등",
|
||||
@ -108,8 +111,8 @@
|
||||
"app.userList.userOptions.unmuteAllDesc": "미팅 음소거 해제",
|
||||
"app.userList.userOptions.lockViewersLabel": "모든 참여자 잠그기",
|
||||
"app.userList.userOptions.lockViewersDesc": "미팅의 참석자 기능들을 잠그기",
|
||||
"app.userList.userOptions.guestPolicyLabel": "게스트 정책",
|
||||
"app.userList.userOptions.guestPolicyDesc": "게스트 미팅 정책 설정 변경",
|
||||
"app.userList.userOptions.guestPolicyLabel": "참여자 승인 정책",
|
||||
"app.userList.userOptions.guestPolicyDesc": "참여자 승인 정책 변경",
|
||||
"app.userList.userOptions.disableCam": "참여자들의 웹캠 사용 중지",
|
||||
"app.userList.userOptions.disableMic": "참여자들의 마이크 사용 중지",
|
||||
"app.userList.userOptions.disablePrivChat": "비공개 채팅 사용 중지",
|
||||
@ -665,13 +668,13 @@
|
||||
"app.lock-viewers.button.cancel": "취소",
|
||||
"app.lock-viewers.locked": "잠김",
|
||||
"app.lock-viewers.unlocked": "해제",
|
||||
"app.guest-policy.ariaTitle": "게스트 정책 설정 모달",
|
||||
"app.guest-policy.title": "게스트 정책",
|
||||
"app.guest-policy.description": "게스트 미팅 정책 설정 변경",
|
||||
"app.guest-policy.button.askModerator": "주관자에게 문의",
|
||||
"app.guest-policy.ariaTitle": "참여자 승인 정책 설정 모달",
|
||||
"app.guest-policy.title": "참여자 승인 정책",
|
||||
"app.guest-policy.description": "참여자 승인 정책 변경",
|
||||
"app.guest-policy.button.askModerator": "주관자 승인",
|
||||
"app.guest-policy.button.alwaysAccept": "항상 수락",
|
||||
"app.guest-policy.button.alwaysDeny": "항상 거부",
|
||||
"app.guest-policy.policyBtnDesc": "게스트 승인정책 설정",
|
||||
"app.guest-policy.policyBtnDesc": "참여자 승인 정책 설정",
|
||||
"app.connection-status.ariaTitle": "modal 의 접속 상태",
|
||||
"app.connection-status.title": "접속 상태",
|
||||
"app.connection-status.description": "사용자 접속상태 보기",
|
||||
@ -687,9 +690,7 @@
|
||||
"app.connection-status.lostPackets": "패킷 손실",
|
||||
"app.connection-status.usingTurn": "TURN 사용",
|
||||
"app.connection-status.yes": "예",
|
||||
"app.learning-dashboard.label": "참여자 현황판",
|
||||
"app.learning-dashboard.description": "사용자 활동 기반 현황판 열기",
|
||||
"app.learning-dashboard.clickHereToOpen": "참여자 현황판 열기",
|
||||
"app.recording.startTitle": "녹화 시작",
|
||||
"app.recording.stopTitle": "녹화 일시중지",
|
||||
"app.recording.resumeTitle": "녹화 재시작",
|
||||
@ -751,6 +752,10 @@
|
||||
"app.video.clientDisconnected": "연결 문제로 인해 웹캠을 공유 할 수 없습니다.",
|
||||
"app.video.virtualBackground.none": "없음",
|
||||
"app.video.virtualBackground.blur": "흐리기",
|
||||
"app.video.virtualBackground.home": "홈",
|
||||
"app.video.virtualBackground.board": "보드",
|
||||
"app.video.virtualBackground.coffeeshop": "커피숍",
|
||||
"app.video.virtualBackground.background": "배경",
|
||||
"app.video.virtualBackground.genericError": "카메라 효과를 적용하지 못했습니다. 다시 시도하세요.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "웹캠의 배경을 {0}으로 설정",
|
||||
"app.video.dropZoneLabel": "여기에 드롭",
|
||||
@ -814,6 +819,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "선택된 웹캠에 집중",
|
||||
"app.videoDock.webcamUnfocusLabel": "포커스 해제",
|
||||
"app.videoDock.webcamUnfocusDesc": "선택된 웹캠에 포커스 해제",
|
||||
"app.videoDock.webcamPinLabel": "고정",
|
||||
"app.videoDock.webcamPinDesc": "선택한 웹캠 고정",
|
||||
"app.videoDock.webcamUnpinLabel": "고정 해제",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "중재자만 사용자를 고정 해제할 수 있습니다.",
|
||||
"app.videoDock.webcamUnpinDesc": "선택한 웹캠 고정 해제",
|
||||
"app.videoDock.autoplayBlockedDesc": "다른 사용자의 웹캠을 보여 주기 위해 당신의 허가가 필요 합니다 ",
|
||||
"app.videoDock.autoplayAllowLabel": "웹캠 보기",
|
||||
"app.invitation.title": "브레이크아웃룸 초대",
|
||||
@ -821,7 +831,7 @@
|
||||
"app.createBreakoutRoom.title": "브레이크 아웃룸",
|
||||
"app.createBreakoutRoom.ariaTitle": "브레이크 아웃룸 숨기기",
|
||||
"app.createBreakoutRoom.breakoutRoomLabel": "브레이크 아웃룸 {0}",
|
||||
"app.createBreakoutRoom.askToJoin": "참가 요청",
|
||||
"app.createBreakoutRoom.askToJoin": "참여 요청",
|
||||
"app.createBreakoutRoom.generatingURL": "URL 생성",
|
||||
"app.createBreakoutRoom.generatingURLMessage": "선택한 브레이크아웃 룸에 대해 참여 URL을 생성하고 있습니다. 잠시 기다려 주십시오...",
|
||||
"app.createBreakoutRoom.duration": "지속 {0}",
|
||||
@ -916,7 +926,6 @@
|
||||
"playback.player.search.modal.subtitle": "프레젠테이션 슬라이드 찾기",
|
||||
"playback.player.thumbnails.wrapper.aria": "썸네일 영역",
|
||||
"playback.player.video.wrapper.aria": "비디오 영역",
|
||||
"app.learningDashboard.dashboardTitle": "참여자 현황판",
|
||||
"app.learningDashboard.user": "사용자",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "종료 됨",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "활성",
|
||||
|
@ -25,6 +25,8 @@
|
||||
"app.chat.multi.typing": "ഒന്നിലധികം ഉപയോക്താക്കൾ ടൈപ്പുചെയ്യുന്നു",
|
||||
"app.chat.one.typing": "{0 typ ടൈപ്പുചെയ്യുന്നു",
|
||||
"app.chat.two.typing": "{0}, {1 ing എന്നിവ ടൈപ്പുചെയ്യുന്നു",
|
||||
"app.chat.copySuccess": "ചാറ്റ് ട്രാൻസ്ക്രിപ്റ്റ് പകർത്തി",
|
||||
"app.chat.copyErr": "ചാറ്റ് ട്രാൻസ്ക്രിപ്റ്റ് പകർത്താനായില്ല",
|
||||
"app.captions.label": "അടിക്കുറിപ്പുകൾ",
|
||||
"app.captions.menu.close": "അടയ്ക്കുക",
|
||||
"app.captions.menu.start": "ആരംഭിക്കുക",
|
||||
@ -49,7 +51,9 @@
|
||||
"app.captions.pad.dictationStop": "ആജ്ഞാപനം നിർത്തുക",
|
||||
"app.captions.pad.dictationOnDesc": "സംഭാഷണ തിരിച്ചറിയൽ ഓണാക്കുന്നു",
|
||||
"app.captions.pad.dictationOffDesc": "സംഭാഷണ തിരിച്ചറിയൽ ഓഫാക്കുന്നു",
|
||||
"app.captions.pad.speechRecognitionStop": "ബ്രൗസർ പൊരുത്തക്കേട് അല്ലെങ്കിൽ കുറച്ച് സമയത്തെ നിശബ്ദത കാരണം സംഭാഷണം തിരിച്ചറിയൽ നിർത്തി",
|
||||
"app.textInput.sendLabel": "അയയ്ക്കുക",
|
||||
"app.title.defaultViewLabel": "സ്വയമേവ തിരഞ്ഞെടുത്ത അവതരണ കാഴ്ച",
|
||||
"app.note.title": "പങ്കിട്ട കുറിപ്പുകൾ",
|
||||
"app.note.label": "കുറിപ്പ്",
|
||||
"app.note.hideNoteLabel": "കുറിപ്പ് മറയ്ക്കുക",
|
||||
@ -73,7 +77,10 @@
|
||||
"app.userList.moderator": "മോഡറേറ്റർ",
|
||||
"app.userList.mobile": "മൊബൈൽ",
|
||||
"app.userList.guest": "അതിഥി",
|
||||
"app.userList.sharingWebcam": "വെബ് കാമറ ",
|
||||
"app.userList.menuTitleContext": "ലഭ്യമായ ഓപ്ഷനുകൾ",
|
||||
"app.userList.chatListItem.unreadSingular": "ഒരു പുതിയ സന്ദേശം",
|
||||
"app.userList.chatListItem.unreadPlural": "{0} പുതിയ സന്ദേശങ്ങൾ ",
|
||||
"app.userList.menu.chat.label": "ഒരു സ്വകാര്യ ചാറ്റ് ആരംഭിക്കുക",
|
||||
"app.userList.menu.clearStatus.label": "നില മായ്ക്കുക",
|
||||
"app.userList.menu.removeUser.label": "ഉപയോക്താവിനെ നീക്കംചെയ്യുക",
|
||||
@ -81,8 +88,11 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "സെഷനിൽ വീണ്ടും ചേരുന്നതിൽ നിന്ന് ഈ ഉപയോക്താവിനെ തടയുക.",
|
||||
"app.userList.menu.muteUserAudio.label": "ഉപയോക്താവിനെ നിശബ്ദമാക്കുക",
|
||||
"app.userList.menu.unmuteUserAudio.label": "ഉപയോക്താവിനെ നിശബ്ദമാക്കുക",
|
||||
"app.userList.menu.webcamPin.label": "ഉപയോക്താവിന്റെ വെബ്ക്യാം പിൻ ചെയ്യുക",
|
||||
"app.userList.menu.webcamUnpin.label": "ഉപയോക്താവിന്റെ വെബ്ക്യാം അൺപിൻ ചെയ്യുക",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "വൈറ്റ്ബോർഡ് ആക്സസ് നൽകുക",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "വൈറ്റ്ബോർഡ് ആക്സസ് നീക്കംചെയ്യുക",
|
||||
"app.userList.menu.ejectUserCameras.label": "ക്യാമറകൾ അടയ്ക്കുക",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} നില {3}",
|
||||
"app.userList.menu.promoteUser.label": "മോഡറേറ്ററായി പ്രമോട്ടുചെയ്യുക",
|
||||
"app.userList.menu.demoteUser.label": "കാഴ്ചക്കാരന് ഡെമോട്ട് ചെയ്യുക",
|
||||
@ -129,6 +139,9 @@
|
||||
"app.media.screenshare.notSupported": "ഈ ബ്ര .സറിൽ സ്ക്രീൻഷെയറിംഗ് പിന്തുണയ്ക്കുന്നില്ല.",
|
||||
"app.media.screenshare.autoplayBlockedDesc": "അവതാരകന്റെ സ്ക്രീൻ കാണിക്കാൻ ഞങ്ങൾക്ക് നിങ്ങളുടെ അനുമതി ആവശ്യമാണ്.",
|
||||
"app.media.screenshare.autoplayAllowLabel": "പങ്കിട്ട സ്ക്രീൻ കാണുക",
|
||||
"app.screenshare.presenterLoadingLabel": "നിങ്ങളുടെ സ്ക്രീൻഷെയർ ലോഡ് ചെയ്യുന്നു",
|
||||
"app.screenshare.viewerLoadingLabel": "അവതാരകന്റെ സ്ക്രീൻ ലോഡുചെയ്യുന്നു",
|
||||
"app.screenshare.presenterSharingLabel": "നിങ്ങൾ ഇപ്പോൾ നിങ്ങളുടെ സ്ക്രീൻ പങ്കിടുകയാണ്",
|
||||
"app.screenshare.screenshareFinalError": "കോഡ് {0}. സ്ക്രീൻ പങ്കിടാനായില്ല.",
|
||||
"app.screenshare.screenshareRetryError": "കോഡ് {0}. സ്ക്രീൻ വീണ്ടും പങ്കിടാൻ ശ്രമിക്കുക.",
|
||||
"app.screenshare.screenshareRetryOtherEnvError": "കോഡ് {0}. സ്ക്രീൻ പങ്കിടാനായില്ല. മറ്റൊരു ബ്ര browser സറോ ഉപകരണമോ ഉപയോഗിച്ച് വീണ്ടും ശ്രമിക്കുക.",
|
||||
@ -137,6 +150,9 @@
|
||||
"app.meeting.ended": "ഈ സെഷൻ അവസാനിച്ചു",
|
||||
"app.meeting.meetingTimeRemaining": "മീറ്റിംഗ് സമയം ശേഷിക്കുന്നു: {0}",
|
||||
"app.meeting.meetingTimeHasEnded": "സമയം അവസാനിച്ചു. മീറ്റിംഗ് ഉടൻ അവസാനിക്കും",
|
||||
"app.meeting.endedByUserMessage": "ഈ സെഷൻ അവസാനിച്ചത് {0} ആണ്",
|
||||
"app.meeting.endedByNoModeratorMessageSingular": "ഒരു മിനിറ്റ് കഴിഞ്ഞിട്ടും മോഡറേറ്റർ ഹാജരാകാത്തതിനാൽ മീറ്റിംഗ് അവസാനിച്ചു",
|
||||
"app.meeting.endedByNoModeratorMessagePlural": "{0} മിനിറ്റിന് ശേഷം മോഡറേറ്റർ ഹാജരാകാത്തതിനാൽ മീറ്റിംഗ് അവസാനിച്ചു",
|
||||
"app.meeting.endedMessage": "നിങ്ങളെ ഹോം സ്ക്രീനിലേക്ക് തിരികെ കൈമാറും",
|
||||
"app.meeting.alertMeetingEndsUnderMinutesSingular": "മീറ്റിംഗ് ഒരു മിനിറ്റിനുള്ളിൽ അവസാനിക്കുന്നു.",
|
||||
"app.meeting.alertMeetingEndsUnderMinutesPlural": "മീറ്റിംഗ് {0} മിനിറ്റിനുള്ളിൽ അവസാനിക്കുന്നു.",
|
||||
@ -173,6 +189,7 @@
|
||||
"app.presentation.presentationToolbar.fitToWidth": "വീതിയിൽ യോജിക്കുക",
|
||||
"app.presentation.presentationToolbar.fitToPage": "പേജിലേക്ക് യോജിക്കുക",
|
||||
"app.presentation.presentationToolbar.goToSlide": "സ്ലൈഡ് {0}",
|
||||
"app.presentation.placeholder": "ഒരു അവതരണം അപ്ലോഡ് ചെയ്യുന്നതിനായി കാത്തിരിക്കുന്നു",
|
||||
"app.presentationUploder.title": "അവതരണം",
|
||||
"app.presentationUploder.message": "ഒരു അവതാരകനെന്ന നിലയിൽ നിങ്ങൾക്ക് ഏതെങ്കിലും ഓഫീസ് പ്രമാണമോ PDF ഫയലോ അപ്ലോഡ് ചെയ്യാനുള്ള കഴിവുണ്ട്. മികച്ച ഫലങ്ങൾക്കായി ഞങ്ങൾ PDF ഫയൽ ശുപാർശ ചെയ്യുന്നു. വലതുവശത്തുള്ള സർക്കിൾ ചെക്ക്ബോക്സ് ഉപയോഗിച്ച് ഒരു അവതരണം തിരഞ്ഞെടുത്തുവെന്ന് ഉറപ്പാക്കുക.",
|
||||
"app.presentationUploder.uploadLabel": "അപ്ലോഡുചെയ്യുക",
|
||||
@ -219,6 +236,7 @@
|
||||
"app.presentationUploder.itemPlural" : "ഇനങ്ങൾ",
|
||||
"app.presentationUploder.clearErrors": "പിശകുകൾ മായ്ക്കുക",
|
||||
"app.presentationUploder.clearErrorsDesc": "പരാജയപ്പെട്ട അവതരണ അപ്ലോഡുകൾ മായ്ക്കുന്നു",
|
||||
"app.presentationUploder.uploadViewTitle": "അവതരണം അപ്ലോഡ് ചെയ്യുക",
|
||||
"app.poll.pollPaneTitle": "പോളിംഗ്",
|
||||
"app.poll.quickPollTitle": "ദ്രുത വോട്ടെടുപ്പ്",
|
||||
"app.poll.hidePollDesc": "വോട്ടെടുപ്പ് മെനു പാളി മറയ്ക്കുന്നു",
|
||||
@ -226,6 +244,8 @@
|
||||
"app.poll.activePollInstruction": "നിങ്ങളുടെ വോട്ടെടുപ്പിനോടുള്ള തത്സമയ പ്രതികരണങ്ങൾ കാണുന്നതിന് ഈ പാനൽ തുറന്നിടുക. നിങ്ങൾ തയ്യാറാകുമ്പോൾ, ഫലങ്ങൾ പ്രസിദ്ധീകരിക്കുന്നതിനും വോട്ടെടുപ്പ് അവസാനിപ്പിക്കുന്നതിനും 'പോളിംഗ് ഫലങ്ങൾ പ്രസിദ്ധീകരിക്കുക' തിരഞ്ഞെടുക്കുക.",
|
||||
"app.poll.dragDropPollInstruction": "വോട്ടെടുപ്പ് മൂല്യങ്ങൾ പൂരിപ്പിക്കുന്നതിന്, വോട്ടെടുപ്പ് മൂല്യങ്ങളുള്ള ഒരു വാചക ഫയൽ ഹൈലൈറ്റുചെയ്ത ഫീൽഡിലേക്ക് വലിച്ചിടുക",
|
||||
"app.poll.customPollTextArea": "വോട്ടെടുപ്പ് മൂല്യങ്ങൾ പൂരിപ്പിക്കുക",
|
||||
"app.poll.publishLabel": "വോട്ടെടുപ്പ് പ്രസിദ്ധീകരിക്കുക",
|
||||
"app.poll.cancelPollLabel": "റദ്ദാക്കുക",
|
||||
"app.poll.backLabel": "ഒരു വോട്ടെടുപ്പ് ആരംഭിക്കുക",
|
||||
"app.poll.closeLabel": "അടയ്ക്കുക",
|
||||
"app.poll.waitingLabel": "പ്രതികരണങ്ങൾക്കായി കാത്തിരിക്കുന്നു ({0} / {1})",
|
||||
@ -233,6 +253,8 @@
|
||||
"app.poll.customPlaceholder": "വോട്ടെടുപ്പ് ഓപ്ഷൻ ചേർക്കുക",
|
||||
"app.poll.noPresentationSelected": "അവതരണമൊന്നും തിരഞ്ഞെടുത്തിട്ടില്ല! ഒരെണ്ണം തിരഞ്ഞെടുക്കുക.",
|
||||
"app.poll.clickHereToSelect": "തിരഞ്ഞെടുക്കാൻ ഇവിടെ ക്ലിക്കുചെയ്യുക",
|
||||
"app.poll.question.label" : "നിങ്ങളുടെ ചോദ്യം എഴുതുക",
|
||||
"app.poll.optionalQuestion.label" : "നിങ്ങളുടെ ചോദ്യം എഴുതുക (ഇഷ്ടാനുസൃതം)...",
|
||||
"app.poll.userResponse.label" : "ഉപയോക്തൃ പ്രതികരണം",
|
||||
"app.poll.responseTypes.label" : "പ്രതികരണ തരങ്ങൾ",
|
||||
"app.poll.optionDelete.label" : "ഇല്ലാതാക്കുക",
|
||||
@ -240,7 +262,13 @@
|
||||
"app.poll.typedResponse.desc" : "ഉപയോക്താക്കൾക്ക് അവരുടെ പ്രതികരണം പൂരിപ്പിക്കുന്നതിന് ഒരു ടെക്സ്റ്റ് ബോക്സ് നൽകും.",
|
||||
"app.poll.addItem.label" : "ഇനം ചേർക്കുക",
|
||||
"app.poll.start.label" : "വോട്ടെടുപ്പ് ആരംഭിക്കുക",
|
||||
"app.poll.secretPoll.label" : "അജ്ഞാത വോട്ടെടുപ്പ്",
|
||||
"app.poll.secretPoll.isSecretLabel": "വോട്ടെടുപ്പ് അജ്ഞാതമാണ് - നിങ്ങൾക്ക് വ്യക്തിഗത പ്രതികരണങ്ങൾ കാണാൻ കഴിയില്ല.",
|
||||
"app.poll.questionErr": "ഒരു ചോദ്യം നൽകേണ്ടത് ആവശ്യമാണ്.",
|
||||
"app.poll.optionErr": "ഒരു പോൾ ഓപ്ഷൻ നൽകുക",
|
||||
"app.poll.startPollDesc": "വോട്ടെടുപ്പ് ആരംഭിക്കുന്നു",
|
||||
"app.poll.addRespDesc": "വോട്ടെടുപ്പ് പ്രതികരണ ഇൻപുട്ട് ചേർക്കുന്നു",
|
||||
"app.poll.deleteRespDesc": "ഓപ്ഷൻ നീക്കം ചെയ്യുന്നു {0}",
|
||||
"app.poll.t": "ശരിയാണ്",
|
||||
"app.poll.f": "തെറ്റായ",
|
||||
"app.poll.tf": "ശരി തെറ്റ്",
|
||||
@ -264,6 +292,9 @@
|
||||
"app.poll.answer.e": "ഇ",
|
||||
"app.poll.liveResult.usersTitle": "ഉപയോക്താക്കൾ",
|
||||
"app.poll.liveResult.responsesTitle": "പ്രതികരണം",
|
||||
"app.poll.liveResult.secretLabel": "ഇതൊരു അജ്ഞാത വോട്ടെടുപ്പാണ്. വ്യക്തിഗത പ്രതികരണങ്ങൾ കാണിക്കുന്നില്ല.",
|
||||
"app.poll.removePollOpt": "പോൾ ഓപ്ഷൻ നീക്കം ചെയ്തു {0}",
|
||||
"app.poll.emptyPollOpt": "ശൂന്യം",
|
||||
"app.polling.pollingTitle": "പോളിംഗ് ഓപ്ഷനുകൾ",
|
||||
"app.polling.pollQuestionTitle": "പോളിംഗ് ചോദ്യം",
|
||||
"app.polling.submitLabel": "സമർപ്പിക്കുക",
|
||||
@ -544,7 +575,6 @@
|
||||
"app.guest.errorSeeConsole": "പിശക്: കൂടുതൽ വിശദാംശങ്ങൾ കൺസോളിൽ.",
|
||||
"app.guest.noModeratorResponse": "മോഡറേറ്ററിൽ നിന്ന് പ്രതികരണമൊന്നുമില്ല.",
|
||||
"app.guest.noSessionToken": "ടോക്കൺ ലഭിച്ചില്ല.",
|
||||
"app.guest.windowTitle": "അതിഥി ലോബി",
|
||||
"app.guest.missingToken": "അതിഥിയെ കാണാത്ത സെഷൻ ടോക്കൺ.",
|
||||
"app.guest.missingSession": "അതിഥിയെ കാണാതായ സെഷൻ.",
|
||||
"app.guest.missingMeeting": "മീറ്റിംഗ് നിലവിലില്ല.",
|
||||
|
@ -90,6 +90,7 @@
|
||||
"app.userList.menu.unmuteUserAudio.label": "Gebruiker dempen ongedaan maken",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Geef toegang tot whiteboard",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Geef geen toegang tot whiteboard",
|
||||
"app.userList.menu.ejectUserCameras.label": "Sluit camera's",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} Status {3}",
|
||||
"app.userList.menu.promoteUser.label": "Promoveren tot moderator",
|
||||
"app.userList.menu.demoteUser.label": "Degraderen tot gebruiker",
|
||||
@ -587,6 +588,7 @@
|
||||
"app.guest.errorSeeConsole": "Fout: meer details in de console",
|
||||
"app.guest.noModeratorResponse": "Geen antwoord van de moderator",
|
||||
"app.guest.noSessionToken": "Geen sessie-teken ontvangen.",
|
||||
"app.guest.windowTitle": "Bigbluebutton - gastenkamer",
|
||||
"app.guest.missingToken": "Gast heeft geen sessie-token.",
|
||||
"app.guest.missingSession": "Gast heeft geen sessie.",
|
||||
"app.guest.missingMeeting": "Vergadering bestaat niet.",
|
||||
@ -686,9 +688,7 @@
|
||||
"app.connection-status.lostPackets": "Verloren pakketten",
|
||||
"app.connection-status.usingTurn": "TURN gebruiken",
|
||||
"app.connection-status.yes": "Ja",
|
||||
"app.learning-dashboard.label": "Leer-startpagina",
|
||||
"app.learning-dashboard.description": "Open een startpagina met gebruikersactiviteiten",
|
||||
"app.learning-dashboard.clickHereToOpen": "Open een leer-startpagina",
|
||||
"app.recording.startTitle": "Opname starten",
|
||||
"app.recording.stopTitle": "Opname onderbreken",
|
||||
"app.recording.resumeTitle": "Opname hervatten",
|
||||
@ -717,6 +717,7 @@
|
||||
"app.video.joinVideo": "Webcam delen",
|
||||
"app.video.connecting": "Het delen van de webcam begint ...",
|
||||
"app.video.leaveVideo": "Stop met delen webcam",
|
||||
"app.video.advancedVideo": "Open geavanceerde instellingen",
|
||||
"app.video.iceCandidateError": "Fout bij het toevoegen van ICE-kandidaat",
|
||||
"app.video.iceConnectionStateError": "Verbindingsfout (ICE-fout 1107)",
|
||||
"app.video.permissionError": "Fout bij het delen van webcam. Controleer de rechten",
|
||||
@ -749,6 +750,10 @@
|
||||
"app.video.clientDisconnected": "Webcam kan niet worden gedeeld vanwege verbindingsproblemen",
|
||||
"app.video.virtualBackground.none": "Geen",
|
||||
"app.video.virtualBackground.blur": "Vervaag",
|
||||
"app.video.virtualBackground.home": "Startpagina",
|
||||
"app.video.virtualBackground.board": "Bord",
|
||||
"app.video.virtualBackground.coffeeshop": "Koffieshop",
|
||||
"app.video.virtualBackground.background": "Achtergrond",
|
||||
"app.video.virtualBackground.genericError": "Toepassen van het camera-effect mislukt. Probeer opnieuw.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "Webcam virtuele achtergrond instellen op {0}",
|
||||
"app.video.dropZoneLabel": "Zet hier neer",
|
||||
@ -768,6 +773,7 @@
|
||||
"app.meeting.endNotification.ok.label": "OK",
|
||||
"app.whiteboard.annotations.poll": "Peiling resultaten zijn gepubliceerd",
|
||||
"app.whiteboard.annotations.pollResult": "Peiling resultaten",
|
||||
"app.whiteboard.annotations.noResponses": "Geen antwoorden",
|
||||
"app.whiteboard.toolbar.tools": "Gereedschappen",
|
||||
"app.whiteboard.toolbar.tools.hand": "Hand",
|
||||
"app.whiteboard.toolbar.tools.pencil": "Potlood",
|
||||
@ -862,6 +868,7 @@
|
||||
"app.externalVideo.close": "Sluiten",
|
||||
"app.externalVideo.autoPlayWarning": "Speel de video af om mediasynchronisatie in te schakelen",
|
||||
"app.externalVideo.refreshLabel": "Videospeler opnieuw instellen",
|
||||
"app.externalVideo.fullscreenLabel": "Videospeler",
|
||||
"app.externalVideo.noteLabel": "Opmerking: gedeelde externe video's worden niet weergegeven in de opname. YouTube, Vimeo, Instructure Media, Twitch, Dailymotion en mediabestand-URL's (bijv. https://example.com/xy.mp4) worden ondersteund.",
|
||||
"app.actionsBar.actionsDropdown.shareExternalVideo": "Deel een externe video",
|
||||
"app.actionsBar.actionsDropdown.stopShareExternalVideo": "Stop met het delen van externe video",
|
||||
@ -912,7 +919,6 @@
|
||||
"playback.player.search.modal.subtitle": "Zoek inhoud in presentatie",
|
||||
"playback.player.thumbnails.wrapper.aria": "Miniaturenzone",
|
||||
"playback.player.video.wrapper.aria": "Videozone",
|
||||
"app.learningDashboard.dashboardTitle": "Leer-startpagina",
|
||||
"app.learningDashboard.user": "Gebruiker",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Beëindigd",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Actief",
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"app.home.greeting": "A sessão vai iniciar em breve ...",
|
||||
"app.chat.submitLabel": "Enviar mensagem",
|
||||
"app.chat.loading": "Mensagens carregadas: {0}%",
|
||||
"app.chat.errorMaxMessageLength": "Mensagem maior do que {0} caracter(es)",
|
||||
"app.chat.disconnected": "Está desligado, pelo que mensagens não podem ser enviadas",
|
||||
"app.chat.locked": "Chat bloqueado, pelo que mensagens não podem ser enviadas",
|
||||
@ -24,6 +25,8 @@
|
||||
"app.chat.multi.typing": "Múltiplos utilizadores estão a escrever",
|
||||
"app.chat.one.typing": "{0} está a escrever",
|
||||
"app.chat.two.typing": "{0} e {1} estão a escrever",
|
||||
"app.chat.copySuccess": "Transcrição do chat copiado",
|
||||
"app.chat.copyErr": "A transcrição da cópia do chat falhou",
|
||||
"app.captions.label": "Legendas",
|
||||
"app.captions.menu.close": "Fechar",
|
||||
"app.captions.menu.start": "Iniciar",
|
||||
@ -48,10 +51,14 @@
|
||||
"app.captions.pad.dictationStop": "Parar ditado",
|
||||
"app.captions.pad.dictationOnDesc": "Activar reconhecimento de fala",
|
||||
"app.captions.pad.dictationOffDesc": "Desactivar reconhecimento de fala",
|
||||
"app.captions.pad.speechRecognitionStop": "O reconhecimento da fala foi interrompido devido à incompatibilidade do navegador ou a algum tempo de silêncio",
|
||||
"app.textInput.sendLabel": "Enviar",
|
||||
"app.title.defaultViewLabel": "Vista de apresentação padrão",
|
||||
"app.note.title": "Notas Partilhadas",
|
||||
"app.note.label": "Nota",
|
||||
"app.note.hideNoteLabel": "Ocultar nota",
|
||||
"app.note.tipLabel": "Prima Esc para barra voltar à barra de ferramentas do editor",
|
||||
"app.note.locked": "Bloqueado",
|
||||
"app.user.activityCheck": "Verificar atividade do utilizador",
|
||||
"app.user.activityCheck.label": "Verificar se o utilizador ainda está na sessão ({0})",
|
||||
"app.user.activityCheck.check": "Verificar",
|
||||
@ -67,8 +74,13 @@
|
||||
"app.userList.byModerator": "pelo (Moderador)",
|
||||
"app.userList.label": "Lista de utilizadores",
|
||||
"app.userList.toggleCompactView.label": "Alternar para o modo de exibição compacto",
|
||||
"app.userList.moderator": "Moderador",
|
||||
"app.userList.mobile": "Móvel",
|
||||
"app.userList.guest": "Convidado",
|
||||
"app.userList.sharingWebcam": "Webcam",
|
||||
"app.userList.menuTitleContext": "Opções disponíveis",
|
||||
"app.userList.chatListItem.unreadSingular": "Uma nova mensagem",
|
||||
"app.userList.chatListItem.unreadPlural": "{0} novas mensagens",
|
||||
"app.userList.menu.chat.label": "Iniciar um chat privado",
|
||||
"app.userList.menu.clearStatus.label": "Limpar estado",
|
||||
"app.userList.menu.removeUser.label": "Remover utilizador",
|
||||
@ -76,6 +88,11 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Impedir este utilizador de entrar novamente na sessão.",
|
||||
"app.userList.menu.muteUserAudio.label": "Silenciar utilizador",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Ativar microfone do utilizador",
|
||||
"app.userList.menu.webcamPin.label": "Fixar a webcam do utilizador",
|
||||
"app.userList.menu.webcamUnpin.label": "Soltar a webcam do utilizador",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Permitir acesso ao quadro branco",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Remover acesso ao quadro branco",
|
||||
"app.userList.menu.ejectUserCameras.label": "Fechar webcams",
|
||||
"app.userList.userAriaLabel": "{0} {1} {2} Estado {3}",
|
||||
"app.userList.menu.promoteUser.label": "Promover a moderador",
|
||||
"app.userList.menu.demoteUser.label": "Despromover a participante",
|
||||
@ -94,6 +111,8 @@
|
||||
"app.userList.userOptions.unmuteAllDesc": "Desliga o modo de silêncio da sessão",
|
||||
"app.userList.userOptions.lockViewersLabel": "Bloquear participantes",
|
||||
"app.userList.userOptions.lockViewersDesc": "Bloquear acesso a algumas funcionalidades aos participantes da sessão",
|
||||
"app.userList.userOptions.guestPolicyLabel": "Política de convidado",
|
||||
"app.userList.userOptions.guestPolicyDesc": "Alterar configuração da política de convidados da sessão",
|
||||
"app.userList.userOptions.disableCam": "As webcams dos espetadores estão desativadas",
|
||||
"app.userList.userOptions.disableMic": "Os microfones dos espetadores estão desativados",
|
||||
"app.userList.userOptions.disablePrivChat": "O chat privado está desativado",
|
||||
@ -120,9 +139,20 @@
|
||||
"app.media.screenshare.notSupported": "A partilha de ecrã não é suportada neste browser.",
|
||||
"app.media.screenshare.autoplayBlockedDesc": "Necessitamos da sua permissão para lhe mostrar o ecrã do apresentador",
|
||||
"app.media.screenshare.autoplayAllowLabel": "Ver ecrã partilhado",
|
||||
"app.screenshare.presenterLoadingLabel": "A sua partilha de ecrã está a carregar",
|
||||
"app.screenshare.viewerLoadingLabel": "O ecrã do apresentador está a carregar",
|
||||
"app.screenshare.presenterSharingLabel": "Está agora a partilhar o seu ecrã",
|
||||
"app.screenshare.screenshareFinalError": "Código {0}. Não foi possível partilhar o ecrã.",
|
||||
"app.screenshare.screenshareRetryError": "Código {0}. Tente partilhar o ecrã novamente.",
|
||||
"app.screenshare.screenshareRetryOtherEnvError": "Código {0}. Não foi possível partilhar o ecrã. Tente novamente usando um navegador ou dispositivo diferente.",
|
||||
"app.screenshare.screenshareUnsupportedEnv": "Código {0}. Navegador não é suportado. Tente novamente usando um navegador ou dispositivo diferente.",
|
||||
"app.screenshare.screensharePermissionError": "Código {0}. É necessário conceder autorização para capturar o ecrã.",
|
||||
"app.meeting.ended": "Esta sessão terminou",
|
||||
"app.meeting.meetingTimeRemaining": "Tempo restante da sessão: {0}",
|
||||
"app.meeting.meetingTimeHasEnded": "Tempo limite atingido. A sessão vai fechar dentro de momentos",
|
||||
"app.meeting.endedByUserMessage": "Esta sessão foi encerrada por {0}",
|
||||
"app.meeting.endedByNoModeratorMessageSingular": "A reunião terminou devido à ausência de um moderador ao fim de um minuto",
|
||||
"app.meeting.endedByNoModeratorMessagePlural": "A reunião terminou devido à ausência de um moderador após {0} minutos",
|
||||
"app.meeting.endedMessage": "Vai ser redirecionado para o ecrã inicial",
|
||||
"app.meeting.alertMeetingEndsUnderMinutesSingular": "Sessão vai terminar em um minuto.",
|
||||
"app.meeting.alertMeetingEndsUnderMinutesPlural": "Sessão vai terminar em {0} minutos.",
|
||||
@ -159,6 +189,7 @@
|
||||
"app.presentation.presentationToolbar.fitToWidth": "Ajustar à largura",
|
||||
"app.presentation.presentationToolbar.fitToPage": "Ajustar à página",
|
||||
"app.presentation.presentationToolbar.goToSlide": "Slide {0}",
|
||||
"app.presentation.placeholder": "Aguardando que a apresentação carregue",
|
||||
"app.presentationUploder.title": "Apresentação",
|
||||
"app.presentationUploder.message": "Como um apresentador, possui acesso à funcionalidade de carregar qualquer documento do Office ou ficheiro PDF. Recomendamos PDF para melhores resultados. Por favor, certifique-se que uma apresentação está escolhida, usado a checkbox circular do lado direito.",
|
||||
"app.presentationUploder.uploadLabel": "Carregar",
|
||||
@ -174,6 +205,7 @@
|
||||
"app.presentationUploder.currentBadge": "Atual",
|
||||
"app.presentationUploder.rejectedError": "O(s) ficheiro(s) selecionados foram rejeitados. Verifique por favor os tipos de ficheiro.",
|
||||
"app.presentationUploder.upload.progress": "A carregar ({0}%)",
|
||||
"app.presentationUploder.upload.413": "O ficheiro é demasiado grande, excedeu o máximo de {0} MB",
|
||||
"app.presentationUploder.genericError": "Oops, aconteceu algo errado...",
|
||||
"app.presentationUploder.upload.408": "Timeout no pedido de token de carregamento.",
|
||||
"app.presentationUploder.upload.404": "404: Token de carregamento inválido",
|
||||
@ -183,10 +215,13 @@
|
||||
"app.presentationUploder.conversion.generatingThumbnail": "A gerar miniaturas ...",
|
||||
"app.presentationUploder.conversion.generatedSlides": "Slides gerados ...",
|
||||
"app.presentationUploder.conversion.generatingSvg": "A gerar imagens SVG ...",
|
||||
"app.presentationUploder.conversion.pageCountExceeded": "Número de páginas excedeu o máximo de {0}",
|
||||
"app.presentationUploder.conversion.officeDocConversionInvalid": "Não foi possível processar este documento do Office. Por favor tente enviar em formato PDF.",
|
||||
"app.presentationUploder.conversion.officeDocConversionFailed": "Não foi possível processar este documento do Office. Por favor tente enviar em formato PDF.",
|
||||
"app.presentationUploder.conversion.pdfHasBigPage": "Não foi possível converter o ficheiro PDF, por favor tente optimizá-lo. Tamanho máximo de página {0}",
|
||||
"app.presentationUploder.conversion.timeout": "Ops, a conversão demorou muito",
|
||||
"app.presentationUploder.conversion.pageCountFailed": "Não foi possível determinar o número de páginas.",
|
||||
"app.presentationUploder.conversion.unsupportedDocument": "Extensão de ficheiro não suportada",
|
||||
"app.presentationUploder.isDownloadableLabel": "O download da apresentação não é permitido - clique para permitir",
|
||||
"app.presentationUploder.isNotDownloadableLabel": "O download da apresentação é permitido - clique para impedir",
|
||||
"app.presentationUploder.removePresentationLabel": "Eliminar apresentação",
|
||||
@ -201,22 +236,47 @@
|
||||
"app.presentationUploder.itemPlural" : "items",
|
||||
"app.presentationUploder.clearErrors": "Limpar erros",
|
||||
"app.presentationUploder.clearErrorsDesc": "Limpar ficheiros de apresentação que falharam o carregamento",
|
||||
"app.presentationUploder.uploadViewTitle": "Carregar apresentação",
|
||||
"app.poll.pollPaneTitle": "Sondagem",
|
||||
"app.poll.quickPollTitle": "Sondagem rápida",
|
||||
"app.poll.hidePollDesc": "Ocultar menu de sondagem",
|
||||
"app.poll.quickPollInstruction": "Selecione uma opção abaixo para iniciar a sua sondagem.",
|
||||
"app.poll.activePollInstruction": "Deixe este painel aberto de forma a ver as respostas à sua sondagem, em tempo real. Quando estiver pronto, escolha 'Publicar resultado da sondagem' para publicar os resultados e fechar a sondagem.",
|
||||
"app.poll.dragDropPollInstruction": "Para preencher os valores da sondagem, arraste um ficheiro de texto com os valores da sondagem para o campo em destaque",
|
||||
"app.poll.customPollTextArea": "Preencher valores de sondagem",
|
||||
"app.poll.publishLabel": "Publicar sondagem",
|
||||
"app.poll.cancelPollLabel": "Cancelar",
|
||||
"app.poll.backLabel": "Iniciar uma sondagem",
|
||||
"app.poll.closeLabel": "Fechar",
|
||||
"app.poll.waitingLabel": "A aguardar respostas ({0}/{1}) ",
|
||||
"app.poll.ariaInputCount": "Opção de sondagem customizada {0} of {1} ",
|
||||
"app.poll.customPlaceholder": "Adicionar opção à sondagem",
|
||||
"app.poll.noPresentationSelected": "Não foi selecionada nenhuma apresentação! Por favor selecione uma.",
|
||||
"app.poll.clickHereToSelect": "Clique aqui para selecionar",
|
||||
"app.poll.question.label" : "Escreva a sua pergunta...",
|
||||
"app.poll.optionalQuestion.label" : "Escreva a sua pergunta (opcional)...",
|
||||
"app.poll.userResponse.label" : "Resposta do utilizador",
|
||||
"app.poll.responseTypes.label" : "Tipos de resposta",
|
||||
"app.poll.optionDelete.label" : "Apagar",
|
||||
"app.poll.responseChoices.label" : "Opções de resposta",
|
||||
"app.poll.typedResponse.desc" : "Será apresentada aos utilizadores uma caixa de texto para preencher a sua resposta.",
|
||||
"app.poll.addItem.label" : "Adicionar item",
|
||||
"app.poll.start.label" : "Iniciar uma sondagem",
|
||||
"app.poll.secretPoll.label" : "Sondagem anónima",
|
||||
"app.poll.secretPoll.isSecretLabel": "A sondagem é anónima - não será possível ver respostas individuais.",
|
||||
"app.poll.questionErr": "É obrigatório fornecer uma pergunta.",
|
||||
"app.poll.optionErr": "Insira uma pergunta",
|
||||
"app.poll.startPollDesc": "Inicia a sondagem",
|
||||
"app.poll.showRespDesc": "Mostra a configuração da resposta",
|
||||
"app.poll.addRespDesc": "Adiciona a resposta à sondagem",
|
||||
"app.poll.deleteRespDesc": "Remove a opção {0}",
|
||||
"app.poll.t": "Verdadeiro",
|
||||
"app.poll.f": "Falso",
|
||||
"app.poll.tf": "Verdadeiro / Falso",
|
||||
"app.poll.y": "Sim",
|
||||
"app.poll.n": "Não",
|
||||
"app.poll.abstention": "Abstenção",
|
||||
"app.poll.yna": "Sim / Não / Abstenção",
|
||||
"app.poll.a2": "A / B",
|
||||
"app.poll.a3": "A / B / C",
|
||||
"app.poll.a4": "A / B / C / D",
|
||||
@ -225,6 +285,7 @@
|
||||
"app.poll.answer.false": "Falso",
|
||||
"app.poll.answer.yes": "Sim",
|
||||
"app.poll.answer.no": "Não",
|
||||
"app.poll.answer.abstention": "Abstenção",
|
||||
"app.poll.answer.a": "A",
|
||||
"app.poll.answer.b": "B",
|
||||
"app.poll.answer.c": "C",
|
||||
@ -232,7 +293,16 @@
|
||||
"app.poll.answer.e": "E",
|
||||
"app.poll.liveResult.usersTitle": "Utilizadores",
|
||||
"app.poll.liveResult.responsesTitle": "Respostas",
|
||||
"app.poll.liveResult.secretLabel": "Esta é uma sondagem anónima. As respostas individuais não são mostradas.",
|
||||
"app.poll.removePollOpt": "Removida a opção de sondagem {0}",
|
||||
"app.poll.emptyPollOpt": "Em branco",
|
||||
"app.polling.pollingTitle": "Opções da sondagem",
|
||||
"app.polling.pollQuestionTitle": "Pergunta de sondagem",
|
||||
"app.polling.submitLabel": "Publicar",
|
||||
"app.polling.submitAriaLabel": "Publicar resposta da sondagem",
|
||||
"app.polling.responsePlaceholder": "Insira uma resposta",
|
||||
"app.polling.responseSecret": "Enquete anónima - o apresentador não consegue ver a sua resposta.",
|
||||
"app.polling.responseNotSecret": "Sondagem normal - o apresentador pode ver a sua resposta.",
|
||||
"app.polling.pollAnswerLabel": "Resposta à sondagem {0}",
|
||||
"app.polling.pollAnswerDesc": "Selecione esta opção para votar em {0}",
|
||||
"app.failedMessage": "Lamentamos mas estamos com problemas de ligação ao servidor",
|
||||
@ -241,10 +311,13 @@
|
||||
"app.waitingMessage": "Desligado. A tentar ligar novamente em {0} segundos ...",
|
||||
"app.retryNow": "Tentar agora",
|
||||
"app.muteWarning.label": "Clique em {0} para voltar a falar.",
|
||||
"app.muteWarning.disableMessage": "Alertas de silêncio desactivados até desactivar o silêncio",
|
||||
"app.muteWarning.tooltip": "Clique para fechar e desativar o aviso até a próxima ativação do som",
|
||||
"app.navBar.settingsDropdown.optionsLabel": "Opções",
|
||||
"app.navBar.settingsDropdown.fullscreenLabel": "Alternar para ecrã inteiro",
|
||||
"app.navBar.settingsDropdown.settingsLabel": "Abrir configurações",
|
||||
"app.navBar.settingsDropdown.aboutLabel": "Sobre",
|
||||
"app.navBar.settingsDropdown.leaveSessionLabel": "Sair da sessão",
|
||||
"app.navBar.settingsDropdown.exitFullscreenLabel": "Sair do modo de ecrã inteiro",
|
||||
"app.navBar.settingsDropdown.fullscreenDesc": "Alternar o menu de configurações para ecrã inteiro",
|
||||
"app.navBar.settingsDropdown.settingsDesc": "Alterar as configurações gerais",
|
||||
@ -268,6 +341,8 @@
|
||||
"app.leaveConfirmation.confirmDesc": "Sai da sessão",
|
||||
"app.endMeeting.title": "Fim {0}",
|
||||
"app.endMeeting.description": "Esta acção vai terminar a sessão para {0} utilizador(es). Tem a certeza que deseja terminar a sessão?",
|
||||
"app.endMeeting.noUserDescription": "Tem certeza que deseja encerrar esta sessão?",
|
||||
"app.endMeeting.contentWarning": "Mensagens de chat, notas partilhadas, conteúdo de quadro branco e documentos partilhados para esta sessão deixarão de ser directamente acessíveis",
|
||||
"app.endMeeting.yesLabel": "Sim",
|
||||
"app.endMeeting.noLabel": "Não",
|
||||
"app.about.title": "Sobre",
|
||||
@ -280,13 +355,17 @@
|
||||
"app.actionsBar.changeStatusLabel": "Alterar estado",
|
||||
"app.actionsBar.muteLabel": "Silenciar",
|
||||
"app.actionsBar.unmuteLabel": "Falar",
|
||||
"app.actionsBar.camOffLabel": "Câmera desligada",
|
||||
"app.actionsBar.camOffLabel": "Webcam desligada",
|
||||
"app.actionsBar.raiseLabel": "Levantar a mão",
|
||||
"app.actionsBar.label": "Barra de ações",
|
||||
"app.actionsBar.actionsDropdown.restorePresentationLabel": "Restaurar apresentação",
|
||||
"app.actionsBar.actionsDropdown.restorePresentationDesc": "Botão para restaurar apresentação minimizada",
|
||||
"app.actionsBar.actionsDropdown.minimizePresentationLabel": "Minimizar apresentação",
|
||||
"app.actionsBar.actionsDropdown.minimizePresentationDesc": "Botão para minimizar apresentação",
|
||||
"app.screenshare.screenShareLabel" : "Partilhar ecrã",
|
||||
"app.submenu.application.applicationSectionTitle": "Aplicação",
|
||||
"app.submenu.application.animationsLabel": "Animações",
|
||||
"app.submenu.application.audioFilterLabel": "Filtros de áudio para o microfone",
|
||||
"app.submenu.application.fontSizeControlLabel": "Tamanho da fonte",
|
||||
"app.submenu.application.increaseFontBtnLabel": "Aumentar o tamanho da fonte da aplicação",
|
||||
"app.submenu.application.decreaseFontBtnLabel": "Diminuir o tamanho da fonte da aplicação",
|
||||
@ -294,12 +373,16 @@
|
||||
"app.submenu.application.languageLabel": "Idioma da aplicação",
|
||||
"app.submenu.application.languageOptionLabel": "Escolha o idioma",
|
||||
"app.submenu.application.noLocaleOptionLabel": "Não existem esquemas de idiomas disponíveis",
|
||||
"app.submenu.application.paginationEnabledLabel": "Paginação de vídeo",
|
||||
"app.submenu.application.layoutOptionLabel": "Tipo de layout",
|
||||
"app.submenu.notification.SectionTitle": "Notificações",
|
||||
"app.submenu.notification.Desc": "Defina as notificações pretendidas.",
|
||||
"app.submenu.notification.audioAlertLabel": "Alertas de audio",
|
||||
"app.submenu.notification.pushAlertLabel": "Alertas visuais",
|
||||
"app.submenu.notification.messagesLabel": "Mensagens no Chat",
|
||||
"app.submenu.notification.userJoinLabel": "Quando um utilizador entrar",
|
||||
"app.submenu.notification.userLeaveLabel": "Saída de utilizador",
|
||||
"app.submenu.notification.guestWaitingLabel": "Convidado aguardando aprovação",
|
||||
"app.submenu.audio.micSourceLabel": "Seleção do microfone",
|
||||
"app.submenu.audio.speakerSourceLabel": "Seleção do altifalante",
|
||||
"app.submenu.audio.streamVolumeLabel": "Volume do seu áudio",
|
||||
@ -325,13 +408,18 @@
|
||||
"app.settings.save-notification.label": "As configurações foram guardadas",
|
||||
"app.statusNotifier.lowerHands": "Mãos baixadas",
|
||||
"app.statusNotifier.raisedHandsTitle": "Mãos levantadas",
|
||||
"app.statusNotifier.raisedHandDesc": "{0} levantaram as mãos",
|
||||
"app.statusNotifier.raisedHandDescOneUser": "{0} levantou a mão",
|
||||
"app.statusNotifier.and": "e",
|
||||
"app.switch.onLabel": "Ligar",
|
||||
"app.switch.offLabel": "Desligar",
|
||||
"app.talkingIndicator.ariaMuteDesc" : "Escolher para silenciar o utilizador",
|
||||
"app.talkingIndicator.isTalking" : "{0} está a falar",
|
||||
"app.talkingIndicator.moreThanMaxIndicatorsTalking" : "{0}+ estão a falar",
|
||||
"app.talkingIndicator.moreThanMaxIndicatorsWereTalking" : "{0}+ estavam a falar",
|
||||
"app.talkingIndicator.wasTalking" : "{0} parou de falar",
|
||||
"app.actionsBar.actionsDropdown.actionsLabel": "Ações",
|
||||
"app.actionsBar.actionsDropdown.presentationLabel": "Gerir apresentações",
|
||||
"app.actionsBar.actionsDropdown.initPollLabel": "Iniciar uma sondagem",
|
||||
"app.actionsBar.actionsDropdown.desktopShareLabel": "Partilhar o seu ecrã",
|
||||
"app.actionsBar.actionsDropdown.lockedDesktopShareLabel": "Partilha de ecrã bloqueada",
|
||||
@ -349,11 +437,13 @@
|
||||
"app.actionsBar.actionsDropdown.captionsDesc": "Alterna painel de legendas",
|
||||
"app.actionsBar.actionsDropdown.takePresenter": "Assumir apresentador",
|
||||
"app.actionsBar.actionsDropdown.takePresenterDesc": "Atribuir a si o papel de apresentador",
|
||||
"app.actionsBar.actionsDropdown.selectRandUserLabel": "Selecionar um utilizador aleatoriamente",
|
||||
"app.actionsBar.actionsDropdown.selectRandUserDesc": "Escolhe aleatoriamente um utilizador da lista",
|
||||
"app.actionsBar.emojiMenu.statusTriggerLabel": "Definir estado",
|
||||
"app.actionsBar.emojiMenu.awayLabel": "Ausente",
|
||||
"app.actionsBar.emojiMenu.awayDesc": "Mudar o seu estado para ausente",
|
||||
"app.actionsBar.emojiMenu.raiseHandLabel": "Levantar a mão",
|
||||
"app.actionsBar.emojiMenu.lowerHandLabel": "Baixar a mão",
|
||||
"app.actionsBar.emojiMenu.raiseHandDesc": "Levante a mão para fazer uma pergunta",
|
||||
"app.actionsBar.emojiMenu.neutralLabel": "Indeciso",
|
||||
"app.actionsBar.emojiMenu.neutralDesc": "Mudar o seu estado para indeciso",
|
||||
@ -402,6 +492,8 @@
|
||||
"app.audioModal.ariaTitle": "Modal de ativar áudio",
|
||||
"app.audioModal.microphoneLabel": "Microfone",
|
||||
"app.audioModal.listenOnlyLabel": "Ouvir apenas",
|
||||
"app.audioModal.microphoneDesc": "Entrar na áudio-conferência com microfone",
|
||||
"app.audioModal.listenOnlyDesc": "Entrar na áudio-conferência apenas a ouvir",
|
||||
"app.audioModal.audioChoiceLabel": "Como pretende ativar o áudio?",
|
||||
"app.audioModal.iOSBrowser": "Áudio/Vídeo não suportado",
|
||||
"app.audioModal.iOSErrorDescription": "No momento, o Chrome não suporta áudio e vídeo para iOS.",
|
||||
@ -427,6 +519,7 @@
|
||||
"app.audioModal.playAudio.arialabel" : "Reproduzir audio",
|
||||
"app.audioDial.tipIndicator": "Dica",
|
||||
"app.audioDial.tipMessage": "Prima a tecla '0' no seu telefone para alternar entre o modo silencio",
|
||||
"app.audioModal.connecting": "A estabelecer ligação áudio",
|
||||
"app.audioManager.joinedAudio": "Entrou na conferência de áudio",
|
||||
"app.audioManager.joinedEcho": "Iniciou o teste de áudio",
|
||||
"app.audioManager.leftAudio": "Saiu da conferência de áudio",
|
||||
@ -438,9 +531,14 @@
|
||||
"app.audioManager.mediaError": "Erro: Houve um problema ao aceder aos seus dispositivos de media",
|
||||
"app.audio.joinAudio": "Ativar áudio",
|
||||
"app.audio.leaveAudio": "Desativar áudio",
|
||||
"app.audio.changeAudioDevice": "Alterar dispositivo de áudio",
|
||||
"app.audio.enterSessionLabel": "Entrar na sessão",
|
||||
"app.audio.playSoundLabel": "Reproduzir som",
|
||||
"app.audio.backLabel": "Voltar",
|
||||
"app.audio.loading": "A carregar",
|
||||
"app.audio.microphones": "Microfones",
|
||||
"app.audio.speakers": "Colunas de som",
|
||||
"app.audio.noDeviceFound": "Nenhum dispositivo encontrado",
|
||||
"app.audio.audioSettings.titleLabel": "Configurações de áudio",
|
||||
"app.audio.audioSettings.descriptionLabel": "Por favor, note que aparecerá uma caixa de diálogo no seu navegador, a solicitar autorização para partilhar o seu microfone.",
|
||||
"app.audio.audioSettings.microphoneSourceLabel": "Selecionar microfone",
|
||||
@ -468,6 +566,8 @@
|
||||
"app.modal.randomUser.noViewers.description": "Não existem utilizadores por onde escolher",
|
||||
"app.modal.randomUser.selected.description": "Foi escolhido aleatoriamente",
|
||||
"app.modal.randomUser.title": "Utilizador escolhido aleatoriamente",
|
||||
"app.modal.randomUser.who": "Quem será escolhido?",
|
||||
"app.modal.randomUser.alone": "Existe apenas um participante",
|
||||
"app.modal.randomUser.reselect.label": "Escolher novamente",
|
||||
"app.modal.randomUser.ariaLabel.title": "Janela de escolha aleatória de Utilizador",
|
||||
"app.dropdown.close": "Fechar",
|
||||
@ -476,13 +576,29 @@
|
||||
"app.error.401": "Não autorizado",
|
||||
"app.error.403": "Foi removido da sessão",
|
||||
"app.error.404": "Não encontrado",
|
||||
"app.error.408": "Falha de autenticação",
|
||||
"app.error.410": "A sessão terminou",
|
||||
"app.error.500": "Ops, ocorreu um erro",
|
||||
"app.error.userLoggedOut": "O participante tem um token de sessão inválido porque se desconectou",
|
||||
"app.error.ejectedUser": "O participante tem um token de sessão inválido porque foi bloqueado",
|
||||
"app.error.userBanned": "O participante foi bloqueado",
|
||||
"app.error.leaveLabel": "Faça login novamente",
|
||||
"app.error.fallback.presentation.title": "Ocorreu um erro",
|
||||
"app.error.fallback.presentation.description": "Foi logado. Por favor tente recarregar a página",
|
||||
"app.error.fallback.presentation.reloadButton": "Recarregar",
|
||||
"app.guest.waiting": "À espera de aprovação para entrar",
|
||||
"app.guest.errorSeeConsole": "Erro: mais detalhes na consola de erros.",
|
||||
"app.guest.noModeratorResponse": "Sem resposta do moderador.",
|
||||
"app.guest.noSessionToken": "Token de sessão não recebido.",
|
||||
"app.guest.windowTitle": "Sala de espera dos convidados",
|
||||
"app.guest.missingToken": "Convidado sem token de sessão.",
|
||||
"app.guest.missingSession": "Convidado sem sessão.",
|
||||
"app.guest.missingMeeting": "Reunião não existente.",
|
||||
"app.guest.meetingEnded": "Reunião encerrada.",
|
||||
"app.guest.guestWait": "Por favor aguarde até que um moderador aprove a sua entrada.",
|
||||
"app.guest.guestDeny": "Convidado teve sua entrada negada.",
|
||||
"app.guest.seatWait": "Convidado aguardando uma vaga na reunião.",
|
||||
"app.guest.allow": "Convidado aprovado e sendo redirecionado para a sessão.",
|
||||
"app.userList.guest.waitingUsers": "Utilizadores à espera",
|
||||
"app.userList.guest.waitingUsersTitle": "Gestão de utilizadores",
|
||||
"app.userList.guest.optionTitle": "Rever utilizadores pendentes",
|
||||
@ -494,6 +610,8 @@
|
||||
"app.userList.guest.pendingGuestUsers": "{0} Utilizadores Convidados pendentes",
|
||||
"app.userList.guest.pendingGuestAlert": "Entrou na sessão e está à espera da sua aprovação",
|
||||
"app.userList.guest.rememberChoice": "Lembrar escolha",
|
||||
"app.userList.guest.emptyMessage": "Actualmente sem mensagem",
|
||||
"app.userList.guest.inputPlaceholder": "Mensagem para a sala de espera",
|
||||
"app.userList.guest.acceptLabel": "Aceitar",
|
||||
"app.userList.guest.denyLabel": "Negar",
|
||||
"app.user-info.title": "Pesquisa de diretório",
|
||||
@ -505,11 +623,14 @@
|
||||
"app.toast.setEmoji.label": "Estado emoji definido para {0}",
|
||||
"app.toast.meetingMuteOn.label": "Todos os utilizadores foram silenciados",
|
||||
"app.toast.meetingMuteOff.label": "Esta sessão não se encontra agora silenciada",
|
||||
"app.toast.setEmoji.raiseHand": "Levantou a sua mão",
|
||||
"app.toast.setEmoji.lowerHand": "Baixou a sua mão",
|
||||
"app.notification.recordingStart": "Esta reunião está a ser gravada",
|
||||
"app.notification.recordingStop": "Esta sessão não está a ser gravada",
|
||||
"app.notification.recordingPaused": "Esta sessão já não está a ser gravada",
|
||||
"app.notification.recordingAriaLabel": "Tempo gravado",
|
||||
"app.notification.userJoinPushAlert": "{0} entrou nesta sessão",
|
||||
"app.notification.userLeavePushAlert": "{0} saiu da sessão",
|
||||
"app.submenu.notification.raiseHandLabel": "Levantar a mão",
|
||||
"app.shortcut-help.title": "Atalhos do teclado",
|
||||
"app.shortcut-help.accessKeyNotAvailable": "Teclas de acesso não disponíveis",
|
||||
@ -524,9 +645,11 @@
|
||||
"app.shortcut-help.hidePrivateChat": "Esconder o chat privado",
|
||||
"app.shortcut-help.closePrivateChat": "Fechar o chat privado",
|
||||
"app.shortcut-help.openActions": "Abrir o menu de ações",
|
||||
"app.shortcut-help.raiseHand": "Alternar levantar a mão",
|
||||
"app.shortcut-help.openDebugWindow": "Abrir janela de depuração",
|
||||
"app.shortcut-help.openStatus": "Abrir o menu de estado",
|
||||
"app.shortcut-help.togglePan": "Ativar a ferramenta Pan (apresentador)",
|
||||
"app.shortcut-help.toggleFullscreen": "Alternar tela cheia (Apresentador)",
|
||||
"app.shortcut-help.nextSlideDesc": "Slide seguinte (apresentador)",
|
||||
"app.shortcut-help.previousSlideDesc": "Slide anterior (apresentador)",
|
||||
"app.lock-viewers.title": "Bloquear participantes",
|
||||
@ -545,16 +668,37 @@
|
||||
"app.lock-viewers.button.cancel": "Cancelar",
|
||||
"app.lock-viewers.locked": "Bloqueado",
|
||||
"app.lock-viewers.unlocked": "Desbloqueado",
|
||||
"app.guest-policy.ariaTitle": "Janela de configurações da política de convidado",
|
||||
"app.guest-policy.title": "Política de convidado",
|
||||
"app.guest-policy.description": "Alterar configuração da política de convidados da sessão",
|
||||
"app.guest-policy.button.askModerator": "Pergunte ao moderador",
|
||||
"app.guest-policy.button.alwaysAccept": "Aceitar sempre",
|
||||
"app.guest-policy.button.alwaysDeny": "Negar sempre",
|
||||
"app.guest-policy.policyBtnDesc": "Define a política de convidados da sessão",
|
||||
"app.connection-status.ariaTitle": "Janela de estado de ligação",
|
||||
"app.connection-status.title": "Estado de ligação",
|
||||
"app.connection-status.description": "Ver o estado da ligação do utilizador",
|
||||
"app.connection-status.empty": "Atualmente não foram comunicados problemas de ligação",
|
||||
"app.connection-status.more": "mais",
|
||||
"app.connection-status.copy": "Copiar dados de rede",
|
||||
"app.connection-status.copied": "Copiado!",
|
||||
"app.connection-status.jitter": "Jitter",
|
||||
"app.connection-status.label": "Estado de ligação",
|
||||
"app.connection-status.no": "Não",
|
||||
"app.connection-status.notification": "Foi detectada uma falha na ligação",
|
||||
"app.connection-status.offline": "desconectado",
|
||||
"app.connection-status.lostPackets": "Pacotes perdidos",
|
||||
"app.connection-status.usingTurn": "Usando TURN",
|
||||
"app.connection-status.yes": "Sim",
|
||||
"app.learning-dashboard.label": "Estatísticas do Painel de Aprendizagem",
|
||||
"app.learning-dashboard.description": "Abrir painel com a atividade dos utilizadores",
|
||||
"app.learning-dashboard.clickHereToOpen": "Abrir as Estatísticas do Painel de Aprendizagem",
|
||||
"app.recording.startTitle": "Iniciar gravação",
|
||||
"app.recording.stopTitle": "Pausar gravação",
|
||||
"app.recording.resumeTitle": "Retomar gravação",
|
||||
"app.recording.startDescription": "Pode clicar no botão gravar novamente para pausar a gravação.",
|
||||
"app.recording.stopDescription": "Pretende pausar a gravação? Poderá recomeçar novamente mais tarde clicando no botão de gravação.",
|
||||
"app.videoPreview.cameraLabel": "Câmera",
|
||||
"app.videoPreview.cameraLabel": "Webcam",
|
||||
"app.videoPreview.profileLabel": "Qualidade",
|
||||
"app.videoPreview.quality.low": "Baixa",
|
||||
"app.videoPreview.quality.medium": "Média",
|
||||
@ -570,19 +714,29 @@
|
||||
"app.videoPreview.webcamOptionLabel": "Escolher webcam",
|
||||
"app.videoPreview.webcamPreviewLabel": "Pré-visualização da webcam",
|
||||
"app.videoPreview.webcamSettingsTitle": "Configurações da webcam",
|
||||
"app.videoPreview.webcamVirtualBackgroundLabel": "Configurações do fundo virtual",
|
||||
"app.videoPreview.webcamVirtualBackgroundDisabledLabel": "Este dispositivo não suporta fundos virtuais",
|
||||
"app.videoPreview.webcamNotFoundLabel": "Webcam não encontrada",
|
||||
"app.videoPreview.profileNotFoundLabel": "Não existe perfil de câmera suportado",
|
||||
"app.videoPreview.profileNotFoundLabel": "Não existe perfil de webcam suportado",
|
||||
"app.video.joinVideo": "Partilhar webcam",
|
||||
"app.video.connecting": "A iniciar a partilha da webcam...",
|
||||
"app.video.leaveVideo": "Parar partilha de webcam",
|
||||
"app.video.advancedVideo": "Abrir opções avançadas",
|
||||
"app.video.iceCandidateError": "Error ao adicionar candidato ICE",
|
||||
"app.video.iceConnectionStateError": "Falha na ligação (erro ICE 1107)",
|
||||
"app.video.permissionError": "Erro ao partilhar a webcam. Por favor verifique as permissões",
|
||||
"app.video.sharingError": "Erro ao partilhar a webcam",
|
||||
"app.video.abortError": "Ocorreu um problema que impediu o uso do dispositivo",
|
||||
"app.video.overconstrainedError": "Nenhum tipo de dispositivo corresponde aos critérios exigidos",
|
||||
"app.video.securityError": "O seu navegador desactivou a utilização da câmara. Experimente um navegador diferente",
|
||||
"app.video.typeError": "Perfil de qualidade de câmara inválido. Contacte o seu administrador",
|
||||
"app.video.notFoundError": "Não foi possível encontrar uma webcam. Por favor, verifique se ela está ligada",
|
||||
"app.video.notAllowed": "A partilha da webcam não foi possível, verifique as permissões do seu navegador",
|
||||
"app.video.notSupportedError": "A webcam só pode ser partilhada via conexão segura, verifique se o certificado SSL é válido",
|
||||
"app.video.notReadableError": "Não foi possível aceder à webcam. Por favor, certifique-se que a webcam não está a ser usada por nenhum outro programa",
|
||||
"app.video.timeoutError": "O navegador não respondeu a tempo.",
|
||||
"app.video.genericError": "Ocorreu um erro desconhecido com o dispositivo (Erro {0})",
|
||||
"app.video.mediaTimedOutError": "A transmissão da sua webcam foi interrompida. Tente partilhá-la novamente",
|
||||
"app.video.mediaFlowTimeout1020": "O ficheiro de media não chegou ao servidor (erro 1020)",
|
||||
"app.video.suggestWebcamLock": "Forçar a definição de bloqueio das webcams dos utilizadores?",
|
||||
"app.video.suggestWebcamLockReason": "(isto irá melhorar a estabilidade desta sessão)",
|
||||
@ -598,8 +752,19 @@
|
||||
"app.video.pagination.prevPage": "Ver vídeos anteriores",
|
||||
"app.video.pagination.nextPage": "Ver vídeos seguintes",
|
||||
"app.video.clientDisconnected": "A webcam não pode ser partilhada devido a um problema de ligação",
|
||||
"app.video.virtualBackground.none": "Nenhum",
|
||||
"app.video.virtualBackground.blur": "Desfocado",
|
||||
"app.video.virtualBackground.home": "Casa",
|
||||
"app.video.virtualBackground.board": "Quadro",
|
||||
"app.video.virtualBackground.coffeeshop": "Café",
|
||||
"app.video.virtualBackground.background": "Fundo",
|
||||
"app.video.virtualBackground.genericError": "Falha ao aplicar efeito de webcam. Tente novamente.",
|
||||
"app.video.virtualBackground.camBgAriaDesc": "Define fundo virtual de webcam para {0}",
|
||||
"app.video.dropZoneLabel": "Largar aqui",
|
||||
"app.fullscreenButton.label": "Passar {0} a ecrã inteiro",
|
||||
"app.fullscreenUndoButton.label": "Reverter {0} de ecrã inteiro",
|
||||
"app.switchButton.expandLabel": "Expandir o vídeo da partilha de ecrã",
|
||||
"app.switchButton.shrinkLabel": "Reduzir o vídeo da partilha de ecrã",
|
||||
"app.sfu.mediaServerConnectionError2000": "Não foi possível ligar ao media server (erro 2000)",
|
||||
"app.sfu.mediaServerOffline2001": "O media server está offline. Por favor, tente mais tarde (erro 2001)",
|
||||
"app.sfu.mediaServerNoResources2002": "O media server não dispõe de recursos disponíveis (erro 2002)",
|
||||
@ -612,6 +777,7 @@
|
||||
"app.meeting.endNotification.ok.label": "OK",
|
||||
"app.whiteboard.annotations.poll": "Os resultados da sondagem foram publicados",
|
||||
"app.whiteboard.annotations.pollResult": "Resultados da sondagem",
|
||||
"app.whiteboard.annotations.noResponses": "Sem respostas",
|
||||
"app.whiteboard.toolbar.tools": "Ferramentas",
|
||||
"app.whiteboard.toolbar.tools.hand": "Pan",
|
||||
"app.whiteboard.toolbar.tools.pencil": "Lápis",
|
||||
@ -640,7 +806,10 @@
|
||||
"app.whiteboard.toolbar.clear": "Limpar todas as anotações",
|
||||
"app.whiteboard.toolbar.multiUserOn": "Iniciar o modo multiutilizador",
|
||||
"app.whiteboard.toolbar.multiUserOff": "Terminar modo multiutilizador",
|
||||
"app.whiteboard.toolbar.palmRejectionOn": "Ligar a rejeição da palma da mão",
|
||||
"app.whiteboard.toolbar.palmRejectionOff": "Desligar a rejeição da palma da mão",
|
||||
"app.whiteboard.toolbar.fontSize": "Lista de tamanhos de letra",
|
||||
"app.whiteboard.toolbarAriaLabel": "Ferramentas de apresentação",
|
||||
"app.feedback.title": "Saiu da sessão",
|
||||
"app.feedback.subtitle": "Gostaríamos de conhecer a sua opinião sobre a sua experiência com o BigBlueButton (opcional)",
|
||||
"app.feedback.textarea": "Como podemos melhorar o BigBlueButton?",
|
||||
@ -652,6 +821,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Focar a webcam selecionada",
|
||||
"app.videoDock.webcamUnfocusLabel": "Desfocar",
|
||||
"app.videoDock.webcamUnfocusDesc": "Desfocar a webcam selecionada",
|
||||
"app.videoDock.webcamPinLabel": "Fixar",
|
||||
"app.videoDock.webcamPinDesc": "Fixar a webcam selecionada",
|
||||
"app.videoDock.webcamUnpinLabel": "Soltar",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Apenas moderadores podem soltar utilizadores",
|
||||
"app.videoDock.webcamUnpinDesc": "Soltar a webcam escolhida",
|
||||
"app.videoDock.autoplayBlockedDesc": "Necessitamos da sua permissão para exibir a webcam de outros utilizadores",
|
||||
"app.videoDock.autoplayAllowLabel": "Ver webcams",
|
||||
"app.invitation.title": "Convite para sala de grupo",
|
||||
@ -659,7 +833,9 @@
|
||||
"app.createBreakoutRoom.title": "Salas de Grupo",
|
||||
"app.createBreakoutRoom.ariaTitle": "Esconder Salas de Grupo",
|
||||
"app.createBreakoutRoom.breakoutRoomLabel": "Salas de Grupo {0}",
|
||||
"app.createBreakoutRoom.askToJoin": "Pedir para entrar",
|
||||
"app.createBreakoutRoom.generatingURL": "A gerar URL",
|
||||
"app.createBreakoutRoom.generatingURLMessage": "Estamos a gerar um URL para entrar na sala de apoio selecionada. Pode demorar alguns segundos...",
|
||||
"app.createBreakoutRoom.duration": "Duração {0}",
|
||||
"app.createBreakoutRoom.room": "Sala {0}",
|
||||
"app.createBreakoutRoom.notAssigned": "Não atribuído ({0})",
|
||||
@ -672,6 +848,7 @@
|
||||
"app.createBreakoutRoom.numberOfRooms": "Número de salas",
|
||||
"app.createBreakoutRoom.durationInMinutes": "Duração (minutos)",
|
||||
"app.createBreakoutRoom.randomlyAssign": "Atribuir aleatóriamente",
|
||||
"app.createBreakoutRoom.randomlyAssignDesc": "Atribui os utilizadores aleatoriamente a salas de grupo",
|
||||
"app.createBreakoutRoom.endAllBreakouts": "Terminar todas as salas de grupo",
|
||||
"app.createBreakoutRoom.roomName": "{0} (Sala - {1})",
|
||||
"app.createBreakoutRoom.doneLabel": "Terminado",
|
||||
@ -681,9 +858,17 @@
|
||||
"app.createBreakoutRoom.addParticipantLabel": "+ Adicionar participante",
|
||||
"app.createBreakoutRoom.freeJoin": "Permitir que os utilizadores escolham uma sala de grupo para entrar",
|
||||
"app.createBreakoutRoom.leastOneWarnBreakout": "É necessário atribuir pelo menos um utilizador a uma sala de grupo",
|
||||
"app.createBreakoutRoom.minimumDurationWarnBreakout": "A duração mínima de uma sala de apoio é de {0} minutos.",
|
||||
"app.createBreakoutRoom.modalDesc": "Dica: Pode arrastar um utilizador para uma sala de grupo.",
|
||||
"app.createBreakoutRoom.roomTime": "{0} minutos",
|
||||
"app.createBreakoutRoom.numberOfRoomsError": "O número de salas é inválido",
|
||||
"app.createBreakoutRoom.duplicatedRoomNameError": "O nome da sala não pode ser duplicado.",
|
||||
"app.createBreakoutRoom.emptyRoomNameError": "O nome da sala não pode estar vazio.",
|
||||
"app.createBreakoutRoom.extendTimeInMinutes": "Tempo para estender (minutos)",
|
||||
"app.createBreakoutRoom.extendTimeLabel": "Estender",
|
||||
"app.createBreakoutRoom.extendTimeCancel": "Cancelar",
|
||||
"app.createBreakoutRoom.extendTimeHigherThanMeetingTimeError": "A duração das salas de apoio não pode exceder o tempo restante da reunião.",
|
||||
"app.createBreakoutRoom.roomNameInputDesc": "Atualiza o nome da sala de apoio",
|
||||
"app.externalVideo.start": "Partilhar novo vídeo",
|
||||
"app.externalVideo.title": "Partilhar um vídeo externo",
|
||||
"app.externalVideo.input": "URL do vídeo externo",
|
||||
@ -691,6 +876,8 @@
|
||||
"app.externalVideo.urlError": "Este tipo de URL de vídeo não é suportado",
|
||||
"app.externalVideo.close": "Fechar",
|
||||
"app.externalVideo.autoPlayWarning": "Reproduzir o vídeo de forma a activar a sincronização de media",
|
||||
"app.externalVideo.refreshLabel": "Atualizar reprodutor de vídeo",
|
||||
"app.externalVideo.fullscreenLabel": "Reprodutor de vídeo",
|
||||
"app.externalVideo.noteLabel": "Nota: A partilha de vídeo externos não vai aparecer em gravações de sessão. URLs do YouTube, Vimeo, Instructure Media, Twitch, Dailymotion e outros tipos de URL de ficheiros multimedia (ex. https://example.com/xy.mp4) são suportados.",
|
||||
"app.actionsBar.actionsDropdown.shareExternalVideo": "Partilhar um vídeo externo",
|
||||
"app.actionsBar.actionsDropdown.stopShareExternalVideo": "Parar a partilha de vídeo externo",
|
||||
@ -702,7 +889,73 @@
|
||||
"app.debugWindow.form.userAgentLabel": "User Agent",
|
||||
"app.debugWindow.form.button.copy": "Copiar",
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutLabel": "Activar a disposição automática",
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutDescription": "(será desactivado se arrastar ou redimensionar a área das webcams)"
|
||||
"app.debugWindow.form.enableAutoarrangeLayoutDescription": "(será desactivado se arrastar ou redimensionar a área das webcams)",
|
||||
"app.debugWindow.form.chatLoggerLabel": "Testar níveis do registador de chat",
|
||||
"app.debugWindow.form.button.apply": "Aplicar",
|
||||
"app.layout.style.custom": "Personalizado",
|
||||
"app.layout.style.smart": "Layout inteligente",
|
||||
"app.layout.style.presentationFocus": "Foco na apresentação",
|
||||
"app.layout.style.videoFocus": "Foco no vídeo",
|
||||
"app.layout.style.customPush": "Modificado (aplicar a todos)",
|
||||
"app.layout.style.smartPush": "Layout inteligente (aplicar a todos)",
|
||||
"app.layout.style.presentationFocusPush": "Foco na apresentação (aplicar a todos)",
|
||||
"app.layout.style.videoFocusPush": "Foco no vídeo (aplicar a todos)",
|
||||
"playback.button.about.aria": "Sobre",
|
||||
"playback.button.clear.aria": "Limpar pesquisa",
|
||||
"playback.button.close.aria": "Fechar janela",
|
||||
"playback.button.fullscreen.aria": "Conteúdo em tela cheia",
|
||||
"playback.button.restore.aria": "Repor conteúdo",
|
||||
"playback.button.search.aria": "Procurar",
|
||||
"playback.button.section.aria": "Secção lateral",
|
||||
"playback.button.swap.aria": "Trocar conteúdo",
|
||||
"playback.error.wrapper.aria": "Área de erro",
|
||||
"playback.loader.wrapper.aria": "Área de carregamento",
|
||||
"playback.player.wrapper.aria": "Área do reprodutor",
|
||||
"playback.player.chat.message.poll.name": "Resultado da sondagem",
|
||||
"playback.player.chat.message.poll.question": "Pergunta",
|
||||
"playback.player.chat.message.poll.options": "Opções",
|
||||
"playback.player.chat.message.poll.option.yes": "Sim",
|
||||
"playback.player.chat.message.poll.option.no": "Não",
|
||||
"playback.player.chat.message.poll.option.abstention": "Abstenção",
|
||||
"playback.player.chat.message.poll.option.true": "Verdadeiro",
|
||||
"playback.player.chat.message.poll.option.false": "Falso",
|
||||
"playback.player.chat.message.externalVideo.name": "Vídeo externo",
|
||||
"playback.player.chat.wrapper.aria": "Área do chat",
|
||||
"playback.player.notes.wrapper.aria": "Área das anotações",
|
||||
"playback.player.presentation.wrapper.aria": "Área da apresentação",
|
||||
"playback.player.screenshare.wrapper.aria": "Área da partilha de ecrã",
|
||||
"playback.player.search.modal.title": "Procurar",
|
||||
"playback.player.search.modal.subtitle": "Encontre o conteúdo dos slides da apresentação",
|
||||
"playback.player.thumbnails.wrapper.aria": "Área das miniaturas",
|
||||
"playback.player.video.wrapper.aria": "Área do vídeo",
|
||||
"app.learningDashboard.dashboardTitle": "Estatísticas do Painel de Aprendizagem",
|
||||
"app.learningDashboard.user": "Utilizador",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Terminou",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Activo",
|
||||
"app.learningDashboard.indicators.usersOnline": "Utilizadores activos",
|
||||
"app.learningDashboard.indicators.usersTotal": "Número total de utilizadores",
|
||||
"app.learningDashboard.indicators.polls": "Sondagens",
|
||||
"app.learningDashboard.indicators.raiseHand": "Levantar a mão",
|
||||
"app.learningDashboard.indicators.activityScore": "Pontuação de atividade",
|
||||
"app.learningDashboard.indicators.duration": "Duração",
|
||||
"app.learningDashboard.usersTable.title": "Visão geral",
|
||||
"app.learningDashboard.usersTable.colOnline": "Tempo online",
|
||||
"app.learningDashboard.usersTable.colTalk": "Tempo de fala",
|
||||
"app.learningDashboard.usersTable.colWebcam": "Tempo com webcam",
|
||||
"app.learningDashboard.usersTable.colMessages": "Mensagens",
|
||||
"app.learningDashboard.usersTable.colEmojis": "Emojis",
|
||||
"app.learningDashboard.usersTable.colRaiseHands": "Mãos levantadas",
|
||||
"app.learningDashboard.usersTable.colActivityScore": "Pontuação de atividade",
|
||||
"app.learningDashboard.usersTable.colStatus": "Estado",
|
||||
"app.learningDashboard.usersTable.userStatusOnline": "Online",
|
||||
"app.learningDashboard.usersTable.userStatusOffline": "Offline",
|
||||
"app.learningDashboard.usersTable.noUsers": "Ainda sem utilizadores",
|
||||
"app.learningDashboard.pollsTable.title": "Sondagem",
|
||||
"app.learningDashboard.pollsTable.anonymousAnswer": "Sondagem Anónima (respostas na última linha)",
|
||||
"app.learningDashboard.pollsTable.anonymousRowName": "Anónimo",
|
||||
"app.learningDashboard.statusTimelineTable.title": "Linha do tempo de estado",
|
||||
"app.learningDashboard.errors.invalidToken": "Token de sessão inválido",
|
||||
"app.learningDashboard.errors.dataUnavailable": "Dados actualmente indisponíveis"
|
||||
|
||||
}
|
||||
|
||||
|
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Impedir que este usuário volte à sessão.",
|
||||
"app.userList.menu.muteUserAudio.label": "Silenciar usuário",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Desbloquear microfone do usuário",
|
||||
"app.userList.menu.webcamPin.label": "Fixar a webcam do usuário",
|
||||
"app.userList.menu.webcamUnpin.label": "Desafixar a webcam do usuário",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Permitir acesso ao quadro branco",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Remover acesso ao quadro branco",
|
||||
"app.userList.menu.ejectUserCameras.label": "Fechar câmeras",
|
||||
@ -692,9 +694,9 @@
|
||||
"app.connection-status.lostPackets": "Pacotes perdidos",
|
||||
"app.connection-status.usingTurn": "Usando TURN",
|
||||
"app.connection-status.yes": "Sim",
|
||||
"app.learning-dashboard.label": "Painel de Aprendizagem",
|
||||
"app.learning-dashboard.label": "Painel Analítico de Aprendizagem",
|
||||
"app.learning-dashboard.description": "Abrir painel com a atividade dos usuários",
|
||||
"app.learning-dashboard.clickHereToOpen": "Abrir Painel de Aprendizagem",
|
||||
"app.learning-dashboard.clickHereToOpen": "Abrir Painel Analítico de Aprendizagem",
|
||||
"app.recording.startTitle": "Iniciar gravação",
|
||||
"app.recording.stopTitle": "Pausar gravação",
|
||||
"app.recording.resumeTitle": "Continuar gravação",
|
||||
@ -823,6 +825,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Focar a webcam selecionada",
|
||||
"app.videoDock.webcamUnfocusLabel": "Desfocar",
|
||||
"app.videoDock.webcamUnfocusDesc": "Desfocar a webcam selecionada",
|
||||
"app.videoDock.webcamPinLabel": "Fixar",
|
||||
"app.videoDock.webcamPinDesc": "Fixa a webcam selecionada",
|
||||
"app.videoDock.webcamUnpinLabel": "Desafixar",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Apenas moderadores podem desafixar usuários",
|
||||
"app.videoDock.webcamUnpinDesc": "Desafixar a webcam selecionada",
|
||||
"app.videoDock.autoplayBlockedDesc": "Precisamos da sua permissão para mostrar as webcams de outros participantes.",
|
||||
"app.videoDock.autoplayAllowLabel": "Ver webcams",
|
||||
"app.invitation.title": "Convite para sala de apoio",
|
||||
@ -925,7 +932,7 @@
|
||||
"playback.player.search.modal.subtitle": "Encontre o conteúdo dos slides da apresentação",
|
||||
"playback.player.thumbnails.wrapper.aria": "Área das miniaturas",
|
||||
"playback.player.video.wrapper.aria": "Área do vídeo",
|
||||
"app.learningDashboard.dashboardTitle": "Painel de Aprendizagem",
|
||||
"app.learningDashboard.dashboardTitle": "Painel Analítico de Aprendizagem",
|
||||
"app.learningDashboard.user": "Usuário",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Finalizado",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Ativo",
|
||||
|
@ -44,7 +44,7 @@
|
||||
"app.captions.menu.cancelLabel": "Отмена",
|
||||
"app.captions.pad.hide": "Скрыть скрытые субтитры",
|
||||
"app.captions.pad.tip": "Нажмите Esc, чтобы сфокусировать панель инструментов редактора",
|
||||
"app.captions.pad.ownership": "Стать ведущим",
|
||||
"app.captions.pad.ownership": "Стать владельцем",
|
||||
"app.captions.pad.ownershipTooltip": "Вы будете назначены владельцем {0} субтитров",
|
||||
"app.captions.pad.interimResult": "Промежуточные результаты",
|
||||
"app.captions.pad.dictationStart": "Начать диктовку",
|
||||
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Запретить пользователю повторно присоединяться к сессии",
|
||||
"app.userList.menu.muteUserAudio.label": "Выключить микрофон пользователя",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Включить микрофон пользователя",
|
||||
"app.userList.menu.webcamPin.label": "Закрепить веб-камеру",
|
||||
"app.userList.menu.webcamUnpin.label": "Открепить веб-камеру",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Дать право рисования на доске этому пользователю",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Забрать право рисования на доске у этого пользователя",
|
||||
"app.userList.menu.ejectUserCameras.label": "Закрыть камеры",
|
||||
@ -242,7 +244,7 @@
|
||||
"app.poll.activePollInstruction": "Оставьте данное меню открытым, чтобы увидеть ответы пользователей в реальном времени. Когда вы будете готовы, выберите 'опубликовать результаты голосования', чтобы опубликовать результаты и завершить голосование.",
|
||||
"app.poll.dragDropPollInstruction": "Чтобы вставить варианты ответа в голосование, перенесите текстовый документ с вариантами ответа для голосования в выделенное поле",
|
||||
"app.poll.customPollTextArea": "Вставить варианты ответов для голосования",
|
||||
"app.poll.publishLabel": "Публичное голосование",
|
||||
"app.poll.publishLabel": "Опубликовать голосование",
|
||||
"app.poll.cancelPollLabel": "Отмена",
|
||||
"app.poll.backLabel": "Начать голосование",
|
||||
"app.poll.closeLabel": "Закрыть",
|
||||
@ -268,9 +270,9 @@
|
||||
"app.poll.showRespDesc": "Отображает настройку ответов",
|
||||
"app.poll.addRespDesc": "Добавить поле ввода для ответа",
|
||||
"app.poll.deleteRespDesc": "Удалить вариант ответа {0}",
|
||||
"app.poll.t": "Правда",
|
||||
"app.poll.f": "Неправда",
|
||||
"app.poll.tf": "Правда / Неправда",
|
||||
"app.poll.t": "Верно",
|
||||
"app.poll.f": "Неверно",
|
||||
"app.poll.tf": "Верно/Неверно",
|
||||
"app.poll.y": "Да",
|
||||
"app.poll.n": "Нет",
|
||||
"app.poll.abstention": "Воздержусь",
|
||||
@ -279,8 +281,8 @@
|
||||
"app.poll.a3": "A / B / C",
|
||||
"app.poll.a4": "A / B / C / D",
|
||||
"app.poll.a5": "A / B / C / D / E",
|
||||
"app.poll.answer.true": "Правда",
|
||||
"app.poll.answer.false": "Ложь",
|
||||
"app.poll.answer.true": "Верно",
|
||||
"app.poll.answer.false": "Неверно",
|
||||
"app.poll.answer.yes": "Да",
|
||||
"app.poll.answer.no": "Нет",
|
||||
"app.poll.answer.abstention": "Воздержусь",
|
||||
@ -324,7 +326,7 @@
|
||||
"app.navBar.settingsDropdown.exitFullscreenDesc": "Выйти из полноэкранного режима",
|
||||
"app.navBar.settingsDropdown.hotkeysLabel": "Клавиши быстрого доступа",
|
||||
"app.navBar.settingsDropdown.hotkeysDesc": "Список доступных клавиш быстрого доступа",
|
||||
"app.navBar.settingsDropdown.helpLabel": "Помощь",
|
||||
"app.navBar.settingsDropdown.helpLabel": "Справка",
|
||||
"app.navBar.settingsDropdown.helpDesc": "Ссылает пользователей на видеоуроки ( в новой вкладке)",
|
||||
"app.navBar.settingsDropdown.endMeetingDesc": "Прервать текущую конференцию",
|
||||
"app.navBar.settingsDropdown.endMeetingLabel": "Закончить конференцию",
|
||||
@ -502,11 +504,11 @@
|
||||
"app.audioModal.yes": "Да",
|
||||
"app.audioModal.no": "Нет",
|
||||
"app.audioModal.yes.arialabel" : "Эхо слышно",
|
||||
"app.audioModal.no.arialabel" : "Эхо неслышимо",
|
||||
"app.audioModal.no.arialabel" : "Эхо не слышно",
|
||||
"app.audioModal.echoTestTitle": "Это тестирование звука, его слышите только вы. Скажите несколько слов в микрофон. Слышите ли вы себя?",
|
||||
"app.audioModal.settingsTitle": "Изменить настройки звука",
|
||||
"app.audioModal.helpTitle": "Возникли проблемы с вашими аудио-устройствами",
|
||||
"app.audioModal.helpText": "Вы дали разрешение на доступ к вашему микрофону? Обратите внимание, что при попытке подключиться к аудиоконференции должно появиться диалоговое окно, спрашивающее разрешения у вашего мультимедийного устройства, пожалуйста, примите это, чтобы присоединиться к аудиоконференции. Если это не так, попробуйте изменить права доступа к микрофону в настройках браузера.",
|
||||
"app.audioModal.helpText": "Вы дали разрешение на доступ к вашему микрофону? Обратите внимание, что при попытке подключиться к аудио конференции должно появиться диалоговое окно, запрашивающее разрешение у вашего мультимедийного устройства, пожалуйста, примите его, чтобы присоединиться к аудио конференции. Если это не так, попробуйте изменить права доступа к микрофону в настройках браузера.",
|
||||
"app.audioModal.help.noSSL": "Страница небезопасна. Чтобы разрешить доступ к микрофону, страница должна обслуживаться через HTTPS. Пожалуйста, свяжитесь с администратором сервера.",
|
||||
"app.audioModal.help.macNotAllowed": "Похоже, системные настройки Mac блокируют доступ к Вашему микрофону. Откройте System Preferences > Security & Privacy > Privacy > Microphone, и убедитесь, что используемый Вами браузер отмечен. ",
|
||||
"app.audioModal.audioDialTitle": "Присоединься используя свой телефон",
|
||||
@ -688,9 +690,7 @@
|
||||
"app.connection-status.lostPackets": "Потеряно пакетов",
|
||||
"app.connection-status.usingTurn": "Использование TURN",
|
||||
"app.connection-status.yes": "Да",
|
||||
"app.learning-dashboard.label": "Отчёт о конференции",
|
||||
"app.learning-dashboard.description": "Открыть отчёт о конференции с действиями пользователей",
|
||||
"app.learning-dashboard.clickHereToOpen": "Открыть отчёт о конференции",
|
||||
"app.recording.startTitle": "Включить запись",
|
||||
"app.recording.stopTitle": "Поставить запись на паузу",
|
||||
"app.recording.resumeTitle": "Возобновить запись",
|
||||
@ -819,6 +819,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Сфокусировать выбранную веб-камеру",
|
||||
"app.videoDock.webcamUnfocusLabel": "Расфокусировать",
|
||||
"app.videoDock.webcamUnfocusDesc": "Расфокусировать выбранную веб-камеру",
|
||||
"app.videoDock.webcamPinLabel": "Закрепить",
|
||||
"app.videoDock.webcamPinDesc": "Закрепить выбранную веб-камеру",
|
||||
"app.videoDock.webcamUnpinLabel": "Открепить",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Только модераторы могут откреплять веб-камеры",
|
||||
"app.videoDock.webcamUnpinDesc": "Открепить выбранную веб-камеру",
|
||||
"app.videoDock.autoplayBlockedDesc": "Нам нужно ваше разрешение, чтобы показать вам веб-камеры других пользователей.",
|
||||
"app.videoDock.autoplayAllowLabel": "Посмотреть веб-камеры",
|
||||
"app.invitation.title": "Приглашение в комнату групповой работы",
|
||||
@ -866,7 +871,7 @@
|
||||
"app.externalVideo.title": "Демонстрировать видео с внешних ресурсов",
|
||||
"app.externalVideo.input": "Ссылка на видео",
|
||||
"app.externalVideo.urlInput": "Добавить URL-адрес видео",
|
||||
"app.externalVideo.urlError": "Данный URL вдрес видео не поддерживается",
|
||||
"app.externalVideo.urlError": "Данный URL-адрес видео не поддерживается",
|
||||
"app.externalVideo.close": "Закрыть",
|
||||
"app.externalVideo.autoPlayWarning": "Запустите видео, чтобы активировать синхронизацию медиа",
|
||||
"app.externalVideo.refreshLabel": "Перезагрузить видеоплеер",
|
||||
@ -901,27 +906,26 @@
|
||||
"playback.button.search.aria": "Поиск",
|
||||
"playback.button.section.aria": "Боковая секция",
|
||||
"playback.button.swap.aria": "Изменить контент",
|
||||
"playback.error.wrapper.aria": "Зона ошибок",
|
||||
"playback.loader.wrapper.aria": "Зона загрузки",
|
||||
"playback.player.wrapper.aria": "Зона проигрывателя",
|
||||
"playback.error.wrapper.aria": "Область ошибок",
|
||||
"playback.loader.wrapper.aria": "Область загрузки",
|
||||
"playback.player.wrapper.aria": "Область проигрывателя",
|
||||
"playback.player.chat.message.poll.name": "Результаты голосования",
|
||||
"playback.player.chat.message.poll.question": "Вопрос",
|
||||
"playback.player.chat.message.poll.options": "Варианты",
|
||||
"playback.player.chat.message.poll.option.yes": "Да",
|
||||
"playback.player.chat.message.poll.option.no": "Нет",
|
||||
"playback.player.chat.message.poll.option.abstention": "Воздержались",
|
||||
"playback.player.chat.message.poll.option.true": "Правда",
|
||||
"playback.player.chat.message.poll.option.false": "Ложь",
|
||||
"playback.player.chat.message.poll.option.true": "Верно",
|
||||
"playback.player.chat.message.poll.option.false": "Неверно",
|
||||
"playback.player.chat.message.externalVideo.name": "Внешнее видео",
|
||||
"playback.player.chat.wrapper.aria": "Зона чата",
|
||||
"playback.player.notes.wrapper.aria": "Зона заметок",
|
||||
"playback.player.presentation.wrapper.aria": "Зона презентации",
|
||||
"playback.player.screenshare.wrapper.aria": "Зона демонстрации экрана",
|
||||
"playback.player.chat.wrapper.aria": "Область чата",
|
||||
"playback.player.notes.wrapper.aria": "Область заметок",
|
||||
"playback.player.presentation.wrapper.aria": "Область презентации",
|
||||
"playback.player.screenshare.wrapper.aria": "Область демонстрации экрана",
|
||||
"playback.player.search.modal.title": "Поиск",
|
||||
"playback.player.search.modal.subtitle": "Поиск по содержимому слайдов презентации",
|
||||
"playback.player.thumbnails.wrapper.aria": "Зона эскизов",
|
||||
"playback.player.video.wrapper.aria": "Зона видео",
|
||||
"app.learningDashboard.dashboardTitle": "Отчёт о конференции",
|
||||
"playback.player.thumbnails.wrapper.aria": "Область эскизов",
|
||||
"playback.player.video.wrapper.aria": "Область видео",
|
||||
"app.learningDashboard.user": "Пользователь",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Завершена",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Продолжается",
|
||||
@ -932,7 +936,7 @@
|
||||
"app.learningDashboard.indicators.activityScore": "Оценка активности",
|
||||
"app.learningDashboard.indicators.duration": "Длительность",
|
||||
"app.learningDashboard.usersTable.title": "Обзор",
|
||||
"app.learningDashboard.usersTable.colOnline": "Время онлайна",
|
||||
"app.learningDashboard.usersTable.colOnline": "Время в сети",
|
||||
"app.learningDashboard.usersTable.colTalk": "Время разговора",
|
||||
"app.learningDashboard.usersTable.colWebcam": "Время с веб-камерой",
|
||||
"app.learningDashboard.usersTable.colMessages": "Сообщений",
|
||||
@ -940,8 +944,8 @@
|
||||
"app.learningDashboard.usersTable.colRaiseHands": "Поднятых рук",
|
||||
"app.learningDashboard.usersTable.colActivityScore": "Оценка активности",
|
||||
"app.learningDashboard.usersTable.colStatus": "Статус",
|
||||
"app.learningDashboard.usersTable.userStatusOnline": "Онлайн",
|
||||
"app.learningDashboard.usersTable.userStatusOffline": "Оффлайн",
|
||||
"app.learningDashboard.usersTable.userStatusOnline": "В сети",
|
||||
"app.learningDashboard.usersTable.userStatusOffline": "Не в сети",
|
||||
"app.learningDashboard.usersTable.noUsers": "Пользователей пока нет",
|
||||
"app.learningDashboard.pollsTable.title": "Голосование",
|
||||
"app.learningDashboard.pollsTable.anonymousAnswer": "Анонимное голосование (ответы в последней строке)",
|
||||
|
@ -669,9 +669,7 @@
|
||||
"app.connection-status.lostPackets": "Tappade packet",
|
||||
"app.connection-status.usingTurn": "Använder TURN",
|
||||
"app.connection-status.yes": "Ja",
|
||||
"app.learning-dashboard.label": "Läro-översikt",
|
||||
"app.learning-dashboard.description": "Öppna översikt med användarnas aktiviteter",
|
||||
"app.learning-dashboard.clickHereToOpen": "Öppna Läraröversikt",
|
||||
"app.recording.startTitle": "Starta inspelningen",
|
||||
"app.recording.stopTitle": "Pausa inspelningen",
|
||||
"app.recording.resumeTitle": "Fortsätta inspelningen",
|
||||
@ -886,7 +884,6 @@
|
||||
"playback.player.search.modal.subtitle": "Hitta presentationsinnehåll",
|
||||
"playback.player.thumbnails.wrapper.aria": "Miniatyr-fält",
|
||||
"playback.player.video.wrapper.aria": "Videofält",
|
||||
"app.learningDashboard.dashboardTitle": "Läro-översikt",
|
||||
"app.learningDashboard.user": "Användare",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Avslutad",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Aktiv",
|
||||
|
@ -684,9 +684,7 @@
|
||||
"app.connection-status.lostPackets": "కోల్పోయిన ప్యాకెట్లు",
|
||||
"app.connection-status.usingTurn": "TURN ని ఉపయోగిస్తోంది",
|
||||
"app.connection-status.yes": "అవును",
|
||||
"app.learning-dashboard.label": "లెర్నింగ్ డాష్బోర్డ్",
|
||||
"app.learning-dashboard.description": "వినియోగదారుల కార్యకలాపాలతో డ్యాష్బోర్డ్ని తెరవండి",
|
||||
"app.learning-dashboard.clickHereToOpen": "లెర్నింగ్ డాష్బోర్డ్ను తెరవండి",
|
||||
"app.recording.startTitle": "రికార్డింగ్ ప్రారంభించు",
|
||||
"app.recording.stopTitle": "రికార్డింగ్ను పాజ్ చేయి",
|
||||
"app.recording.resumeTitle": "రికార్డింగ్ను తిరిగి ప్రారంభించు",
|
||||
@ -908,7 +906,6 @@
|
||||
"playback.player.search.modal.subtitle": "ప్రదర్శన స్లయిడ్ల కంటెంట్ను కనుగొనండి",
|
||||
"playback.player.thumbnails.wrapper.aria": "సూక్ష్మచిత్రాల ప్రాంతం",
|
||||
"playback.player.video.wrapper.aria": "వీడియో ప్రాంతం",
|
||||
"app.learningDashboard.dashboardTitle": "చాట్ ప్రదేశం",
|
||||
"app.learningDashboard.user": "వినియోగదారుడు ",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "ముగిసింది",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "యాక్టివ్",
|
||||
|
@ -687,9 +687,7 @@
|
||||
"app.connection-status.lostPackets": "Kayıp Paketler",
|
||||
"app.connection-status.usingTurn": "TURN Kullanımı",
|
||||
"app.connection-status.yes": "Evet",
|
||||
"app.learning-dashboard.label": "Katılım Panosu",
|
||||
"app.learning-dashboard.description": "Kullanıcı etkinlikleriyle birlikte katılım panosunu aç",
|
||||
"app.learning-dashboard.clickHereToOpen": "Katılım Panosunu Aç",
|
||||
"app.recording.startTitle": "Kaydı başlat",
|
||||
"app.recording.stopTitle": "Kaydı durdur",
|
||||
"app.recording.resumeTitle": "Kaydı sürdür",
|
||||
@ -916,7 +914,6 @@
|
||||
"playback.player.search.modal.subtitle": "Sunum slaytları içeriğini bul",
|
||||
"playback.player.thumbnails.wrapper.aria": "Küçük resim alanı",
|
||||
"playback.player.video.wrapper.aria": "Video alanı",
|
||||
"app.learningDashboard.dashboardTitle": "Katılım Panosu",
|
||||
"app.learningDashboard.user": "Kullanıcı",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Sonlandı",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Aktif",
|
||||
|
@ -687,9 +687,7 @@
|
||||
"app.connection-status.lostPackets": "Kayıp Paketler",
|
||||
"app.connection-status.usingTurn": "TURN Kullanımı",
|
||||
"app.connection-status.yes": "Evet",
|
||||
"app.learning-dashboard.label": "Katılım Panosu",
|
||||
"app.learning-dashboard.description": "Kullanıcı etkinlikleriyle birlikte katılım panosunu aç",
|
||||
"app.learning-dashboard.clickHereToOpen": "Katılım Panosunu Aç",
|
||||
"app.recording.startTitle": "Kaydı Başlat",
|
||||
"app.recording.stopTitle": "Kaydı Durdur",
|
||||
"app.recording.resumeTitle": "Kaydı Devam Ettir",
|
||||
@ -916,7 +914,6 @@
|
||||
"playback.player.search.modal.subtitle": "Sunum slaytları içeriğini bul",
|
||||
"playback.player.thumbnails.wrapper.aria": "Küçük resim alanı",
|
||||
"playback.player.video.wrapper.aria": "Video alanı",
|
||||
"app.learningDashboard.dashboardTitle": "Katılım Panosu",
|
||||
"app.learningDashboard.user": "Kullanıcı",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Sonlandı",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Devam Ediyor",
|
||||
|
@ -88,6 +88,8 @@
|
||||
"app.userlist.menu.removeConfirmation.desc": "Не дозволяти учасникові повторно приєднуватися до сеансу.",
|
||||
"app.userList.menu.muteUserAudio.label": "Вимкнути мікрофон учасника",
|
||||
"app.userList.menu.unmuteUserAudio.label": "Увімкнути мікрофон",
|
||||
"app.userList.menu.webcamPin.label": "Закріпити камеру користувача",
|
||||
"app.userList.menu.webcamUnpin.label": "Відкріпити камеру користувача",
|
||||
"app.userList.menu.giveWhiteboardAccess.label" : "Надати доступ до дошки",
|
||||
"app.userList.menu.removeWhiteboardAccess.label": "Заборонити доступ до дошки",
|
||||
"app.userList.menu.ejectUserCameras.label": "Відключити вебкамери",
|
||||
@ -331,6 +333,7 @@
|
||||
"app.navBar.userListToggleBtnLabel": "Перемкнути список учасників",
|
||||
"app.navBar.toggleUserList.ariaLabel": "Перемкнути учасників та повідомлення",
|
||||
"app.navBar.toggleUserList.newMessages": "зі сповіщенням про нове повідомлення",
|
||||
"app.navBar.toggleUserList.newMsgAria": "Нове повідомлення від {0}",
|
||||
"app.navBar.recording": "Цей сеанс записується",
|
||||
"app.navBar.recording.on": "Записується",
|
||||
"app.navBar.recording.off": "Не записується",
|
||||
@ -688,9 +691,9 @@
|
||||
"app.connection-status.lostPackets": "Втрачені пакети",
|
||||
"app.connection-status.usingTurn": "Використання TURN",
|
||||
"app.connection-status.yes": "Так",
|
||||
"app.learning-dashboard.label": "Панель навчання",
|
||||
"app.learning-dashboard.label": "Дошка аналітики навчання",
|
||||
"app.learning-dashboard.description": "Відкрити панель обліку активності учасників",
|
||||
"app.learning-dashboard.clickHereToOpen": "Відкрити панель навчання",
|
||||
"app.learning-dashboard.clickHereToOpen": "Відкрити дошку аналітики навчання",
|
||||
"app.recording.startTitle": "Почати запис",
|
||||
"app.recording.stopTitle": "Призупинити запис",
|
||||
"app.recording.resumeTitle": "Відновити запис",
|
||||
@ -819,6 +822,11 @@
|
||||
"app.videoDock.webcamFocusDesc": "Акцентувати обрану камеру",
|
||||
"app.videoDock.webcamUnfocusLabel": "Не акцентувати",
|
||||
"app.videoDock.webcamUnfocusDesc": "Не акцентувати обрану камеру",
|
||||
"app.videoDock.webcamPinLabel": "Закріпити",
|
||||
"app.videoDock.webcamPinDesc": "Закріпити обрану камеру",
|
||||
"app.videoDock.webcamUnpinLabel": "Відкріпити",
|
||||
"app.videoDock.webcamUnpinLabelDisabled": "Тільки модератори можуть відкріпляти користувачів",
|
||||
"app.videoDock.webcamUnpinDesc": "Відкріпити обрану камеру",
|
||||
"app.videoDock.autoplayBlockedDesc": "Потрібен дозвіл, щоб показати вам вебкамери інших учасників.",
|
||||
"app.videoDock.autoplayAllowLabel": "Дивитися вебкамери",
|
||||
"app.invitation.title": "Запрошення до кімнати перерв ",
|
||||
@ -921,7 +929,7 @@
|
||||
"playback.player.search.modal.subtitle": "Знайти вміст слайдів презентації",
|
||||
"playback.player.thumbnails.wrapper.aria": "Область мініатюр",
|
||||
"playback.player.video.wrapper.aria": "Область відео",
|
||||
"app.learningDashboard.dashboardTitle": "Панель навчання",
|
||||
"app.learningDashboard.dashboardTitle": "Дошка аналітики навчання",
|
||||
"app.learningDashboard.user": "Користувач",
|
||||
"app.learningDashboard.indicators.meetingStatusEnded": "Закінчилась",
|
||||
"app.learningDashboard.indicators.meetingStatusActive": "Активна",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user