diff --git a/bigbluebutton-config/bin/bbb-conf b/bigbluebutton-config/bin/bbb-conf index d4ce42551abdbc2fcde1cc573943ee5705fcb805..123ae2437da538a78f5cebe82eeb8f82957fa480 100755 --- a/bigbluebutton-config/bin/bbb-conf +++ b/bigbluebutton-config/bin/bbb-conf @@ -92,14 +92,14 @@ source /etc/bigbluebutton/bigbluebutton-release if [ -f /etc/centos-release ]; then DISTRIB_ID=centos - TOMCAT_SERVICE=tomcat - TOMCAT_DIR=/var/lib/$TOMCAT_SERVICE + TOMCAT_USER=tomcat + TOMCAT_DIR=/var/lib/$TOMCAT_USER SERVLET_LOGS=/usr/share/tomcat/logs REDIS_SERVICE=redis.service else . /etc/lsb-release # Get value for DISTRIB_ID - TOMCAT_SERVICE=tomcat7 - TOMCAT_DIR=/var/lib/$TOMCAT_SERVICE + TOMCAT_USER=tomcat7 + TOMCAT_DIR=/var/lib/$TOMCAT_USER SERVLET_LOGS=$TOMCAT_DIR/logs REDIS_SERVICE=redis-server fi @@ -328,7 +328,15 @@ stop_bigbluebutton () { BBB_WEB=bbb-web fi - systemctl stop red5 $TOMCAT_SERVICE nginx freeswitch $REDIS_SERVICE bbb-apps-akka $BBB_TRANSCODE_AKKA bbb-fsesl-akka bbb-rap-archive-worker.service bbb-rap-process-worker.service bbb-rap-publish-worker.service bbb-rap-sanity-worker.service bbb-record-core.timer $HTML5 $WEBHOOKS $ETHERPAD $BBB_WEB + if [ -d $TOMCAT_DIR ]; then + TOMCAT_SERVICE=$TOMCAT_USER + fi + + if [ -d $RED5_DIR ]; then + BBB_APPS_AKKA_SERVICE=bbb-apps-akka + fi + + systemctl stop red5 $TOMCAT_SERVICE $BBB_APPS_AKKA_SERVICE nginx freeswitch $REDIS_SERVICE bbb-apps-akka $BBB_TRANSCODE_AKKA bbb-fsesl-akka bbb-rap-archive-worker.service bbb-rap-process-worker.service bbb-rap-publish-worker.service bbb-rap-sanity-worker.service bbb-record-core.timer $HTML5 $WEBHOOKS $ETHERPAD $BBB_WEB } start_bigbluebutton () { @@ -431,7 +439,7 @@ display_bigbluebutton_status () { units="red5 nginx freeswitch $REDIS_SERVICE bbb-apps-akka bbb-transcode-akka bbb-fsesl-akka" if [ -d $TOMCAT_DIR ]; then - units="$units $TOMCAT_SERVICE" + units="$units $TOMCAT_USER" fi if [ -f /usr/lib/systemd/system/bbb-html5.service ]; then @@ -936,14 +944,14 @@ check_state() { if ! netstat -ant | grep '8090' > /dev/null; then print_header - NOT_RUNNING_APPS="${NOT_RUNNING_APPS} ${TOMCAT_SERVICE} or grails" + NOT_RUNNING_APPS="${NOT_RUNNING_APPS} ${TOMCAT_USER} or grails" else if ps aux | ps -aef | grep -v grep | grep grails | grep run-app > /dev/null; then print_header RUNNING_APPS="${RUNNING_APPS} Grails" - echo "# ${TOMCAT_SERVICE}: noticed you are running grails run-app instead of ${TOMCAT_SERVICE}" + echo "# ${TOMCAT_USER}: noticed you are running grails run-app instead of ${TOMCAT_USER}" else - RUNNING_APPS="${RUNNING_APPS} ${TOMCAT_SERVICE}" + RUNNING_APPS="${RUNNING_APPS} ${TOMCAT_USER}" fi fi diff --git a/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js b/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js index 656f28b48721ae0a403ba5302ce9a9b45b37202d..9700c6415f4b876ba8afcd5fae72f8d8d0e0213d 100755 --- a/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js +++ b/bigbluebutton-html5/imports/api/annotations/server/methods/sendAnnotation.js @@ -44,14 +44,59 @@ export default function sendAnnotation(credentials, annotation) { // and then slide/presentation changes, the user lost presenter rights, // or multi-user whiteboard gets turned off // So we allow the last "DRAW_END" message to pass through, to finish the shape. - const allowed = isPodPresenter(meetingId, whiteboardId, requesterUserId) || - getMultiUserStatus(meetingId, whiteboardId) || - isLastMessage(meetingId, annotation, requesterUserId); + const allowed = isPodPresenter(meetingId, whiteboardId, requesterUserId) + || getMultiUserStatus(meetingId, whiteboardId) + || isLastMessage(meetingId, annotation, requesterUserId); if (!allowed) { throw new Meteor.Error('not-allowed', `User ${requesterUserId} is not allowed to send an annotation`); } + if (annotation.annotationType === 'text') { + check(annotation, { + id: String, + status: String, + annotationType: String, + annotationInfo: { + x: Number, + y: Number, + fontColor: Number, + calcedFontSize: Number, + textBoxWidth: Number, + text: String, + textBoxHeight: Number, + id: String, + whiteboardId: String, + status: String, + fontSize: Number, + dataPoints: String, + type: String, + }, + wbId: String, + userId: String, + position: Number, + }); + } else { + check(annotation, { + id: String, + status: String, + annotationType: String, + annotationInfo: { + color: Number, + thickness: Number, + points: Array, + id: String, + whiteboardId: String, + status: String, + type: String, + dimensions: Match.Maybe([Number]), + }, + wbId: String, + userId: String, + position: Number, + }); + } + const payload = { annotation, }; diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js b/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js old mode 100644 new mode 100755 index aa91ad5c311f2a585808e0a2dafab6ed6f7683d7..95bd3414cfeb95ddebf9dd657e65a112c4d58f8d --- a/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js +++ b/bigbluebutton-html5/imports/api/audio/client/bridge/kurento.js @@ -89,7 +89,10 @@ export default class KurentoAudioBridge extends BaseAudioBridge { }; const onFail = (error) => { - const { reason } = error; + let reason = 'Undefined'; + if (error) { + reason = error.reason || error.id || error; + } this.callback({ status: this.baseCallStates.failed, error: this.baseErrorCodes.CONNECTION_ERROR, diff --git a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js index 3aa3bd611f359a24c4ba024079e39fa42d0c4ad1..92d6542bd3288c2a52e7377ea3f676ee96a8a507 100755 --- a/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js +++ b/bigbluebutton-html5/imports/api/audio/client/bridge/sip.js @@ -2,7 +2,9 @@ import browser from 'browser-detect'; import BaseAudioBridge from './base'; import logger from '/imports/startup/client/logger'; import { fetchStunTurnServers } from '/imports/utils/fetchStunTurnServers'; -import { isUnifiedPlan, toUnifiedPlan, toPlanB} from '/imports/utils/sdpUtils'; +import { + isUnifiedPlan, toUnifiedPlan, toPlanB, stripMDnsCandidates, +} from '/imports/utils/sdpUtils'; const MEDIA = Meteor.settings.public.media; const MEDIA_TAG = MEDIA.mediaTag; @@ -40,6 +42,7 @@ export default class SIPBridge extends BaseAudioBridge { window.isUnifiedPlan = isUnifiedPlan; window.toUnifiedPlan = toUnifiedPlan; window.toPlanB = toPlanB; + window.stripMDnsCandidates = stripMDnsCandidates; } static parseDTMF(message) { @@ -182,7 +185,7 @@ export default class SIPBridge extends BaseAudioBridge { // transceivers - prlanzarin 2019/05/21 const browserUA = window.navigator.userAgent.toLocaleLowerCase(); const isSafariWebview = ((browserUA.indexOf('iphone') > -1 - || browserUA.indexOf('ipad') > -1) && browserUA.indexOf('safari') == -1); + || browserUA.indexOf('ipad') > -1) && browserUA.indexOf('safari') === -1); // Second UA check to get all Safari browsers to enable Unified Plan <-> PlanB // translation diff --git a/bigbluebutton-html5/imports/startup/client/base.jsx b/bigbluebutton-html5/imports/startup/client/base.jsx index 91ac5b3e70876d5213052f50b8358b2b9769cca5..2c8df7178c218843f5d46ec6072bd9f3ea78ff1d 100755 --- a/bigbluebutton-html5/imports/startup/client/base.jsx +++ b/bigbluebutton-html5/imports/startup/client/base.jsx @@ -33,7 +33,7 @@ const propTypes = { const defaultProps = { locale: undefined, - approved: undefined, + approved: false, meetingExist: false, subscriptionsReady: false, }; @@ -227,7 +227,7 @@ const BaseContainer = withTracker(() => { if (meetingEnded) Session.set('codeError', '410'); } - const approved = Users.findOne({ userId: Auth.userID, approved: true, guest: true }); + const approved = !!Users.findOne({ userId: Auth.userID, approved: true, guest: true }); const ejected = Users.findOne({ userId: Auth.userID, ejected: true }); if (Session.get('codeError')) { return { diff --git a/bigbluebutton-html5/imports/startup/client/intl.jsx b/bigbluebutton-html5/imports/startup/client/intl.jsx index 41687658139ed1183c04b30b37c38ff2f43d01da..307c3b09bfa63a9f74f9c741da408768ceb6df71 100644 --- a/bigbluebutton-html5/imports/startup/client/intl.jsx +++ b/bigbluebutton-html5/imports/startup/client/intl.jsx @@ -17,6 +17,7 @@ import fa from 'react-intl/locale-data/fa'; import fr from 'react-intl/locale-data/fr'; import he from 'react-intl/locale-data/he'; import hi from 'react-intl/locale-data/hi'; +import hu from 'react-intl/locale-data/hu'; import id from 'react-intl/locale-data/id'; import it from 'react-intl/locale-data/it'; import ja from 'react-intl/locale-data/ja'; @@ -44,6 +45,7 @@ addLocaleData([ ...fr, ...he, ...hi, + ...hu, ...id, ...it, ...ja, diff --git a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx index 997b75a60096caca38d64f1e4fb4d8b6b0ff8fd3..aabcbe8f61f1685fc9c2d92ca31113894c38248a 100755 --- a/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/audio/audio-modal/component.jsx @@ -442,7 +442,7 @@ class AudioModal extends Component { return ( <span> - {showPermissionsOvelay ? <PermissionsOverlay /> : null} + {showPermissionsOvelay ? <PermissionsOverlay closeModal={closeModal} /> : null} <Modal overlayClassName={styles.overlay} className={styles.modal} diff --git a/bigbluebutton-html5/imports/ui/components/audio/permissions-overlay/component.jsx b/bigbluebutton-html5/imports/ui/components/audio/permissions-overlay/component.jsx index 1ebf36945ccefc44f940d3b69becccd8d73ae5d8..a1ac3e0e65352070cb45151af9eaaff029dd08de 100644 --- a/bigbluebutton-html5/imports/ui/components/audio/permissions-overlay/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/audio/permissions-overlay/component.jsx @@ -1,10 +1,12 @@ import React from 'react'; import { injectIntl, intlShape, defineMessages } from 'react-intl'; import Modal from '/imports/ui/components/modal/simple/component'; +import PropTypes from 'prop-types'; import { styles } from './styles'; const propTypes = { intl: intlShape.isRequired, + closeModal: PropTypes.func.isRequired, }; const intlMessages = defineMessages({ diff --git a/bigbluebutton-html5/imports/ui/components/end-meeting-confirmation/component.jsx b/bigbluebutton-html5/imports/ui/components/end-meeting-confirmation/component.jsx index 2dde19f705bbfedfd82a4a87462a5a4ec62a3274..2b99b2c673a2b824f7555d9692937b4558cc9c6b 100644 --- a/bigbluebutton-html5/imports/ui/components/end-meeting-confirmation/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/end-meeting-confirmation/component.jsx @@ -49,6 +49,7 @@ class EndMeetingComponent extends React.PureComponent { </div> <div className={styles.footer}> <Button + data-test="confirmEndMeeting" color="primary" className={styles.button} label={intl.formatMessage(intlMessages.yesLabel)} diff --git a/bigbluebutton-html5/imports/ui/components/lock-viewers/notify/component.jsx b/bigbluebutton-html5/imports/ui/components/lock-viewers/notify/component.jsx index 3edcdfd6b68996862dc3b53ca61e0fe34f412dd6..95bde9fcdef1b169ac90fcf23e0961db1067a063 100644 --- a/bigbluebutton-html5/imports/ui/components/lock-viewers/notify/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/lock-viewers/notify/component.jsx @@ -3,7 +3,7 @@ import { defineMessages, injectIntl } from 'react-intl'; import { notify } from '/imports/ui/services/notification'; import _ from 'lodash'; -const intlMessages = defineMessages({ +const intlDisableMessages = defineMessages({ disableCam: { id: 'app.userList.userOptions.disableCam', description: 'label to disable cam notification', @@ -30,6 +30,33 @@ const intlMessages = defineMessages({ }, }); +const intlEnableMessages = defineMessages({ + disableCam: { + id: 'app.userList.userOptions.enableCam', + description: 'label to enable cam notification', + }, + disableMic: { + id: 'app.userList.userOptions.enableMic', + description: 'label to enable mic notification', + }, + disablePrivateChat: { + id: 'app.userList.userOptions.enablePrivChat', + description: 'label to enable private chat notification', + }, + disablePublicChat: { + id: 'app.userList.userOptions.enablePubChat', + description: 'label to enable private chat notification', + }, + disableNote: { + id: 'app.userList.userOptions.enableNote', + description: 'label to enable note notification', + }, + onlyModeratorWebcam: { + id: 'app.userList.userOptions.enableOnlyModeratorWebcam', + description: 'label to enable all webcams except for the moderators cam', + }, +}); + class LockViewersNotifyComponent extends Component { componentDidUpdate(prevProps) { const { @@ -43,18 +70,36 @@ class LockViewersNotifyComponent extends Component { webcamsOnlyForModerator: prevWebcamsOnlyForModerator, } = prevProps; + function notifyLocks(arrLocks, intlMessages) { + arrLocks.forEach((key) => { + notify(intl.formatMessage(intlMessages[key]), 'info', 'lock'); + }); + } + if (!_.isEqual(lockSettings, prevLockSettings)) { const rejectedKeys = ['setBy', 'lockedLayout']; - const filteredSettings = Object.keys(lockSettings) + + const disabledSettings = Object.keys(lockSettings) .filter(key => prevLockSettings[key] !== lockSettings[key] && lockSettings[key] && !rejectedKeys.includes(key)); - filteredSettings.forEach((key) => { - notify(intl.formatMessage(intlMessages[key]), 'info', 'lock'); - }); + const enableSettings = Object.keys(lockSettings) + .filter(key => prevLockSettings[key] !== lockSettings[key] + && !lockSettings[key] + && !rejectedKeys.includes(key)); + + if (disabledSettings.length > 0) { + notifyLocks(disabledSettings, intlDisableMessages); + } + if (enableSettings.length > 0) { + notifyLocks(enableSettings, intlEnableMessages); + } } if (webcamsOnlyForModerator && !prevWebcamsOnlyForModerator) { - notify(intl.formatMessage(intlMessages.onlyModeratorWebcam), 'info', 'lock'); + notify(intl.formatMessage(intlDisableMessages.onlyModeratorWebcam), 'info', 'lock'); + } + if (!webcamsOnlyForModerator && prevWebcamsOnlyForModerator) { + notify(intl.formatMessage(intlEnableMessages.onlyModeratorWebcam), 'info', 'lock'); } } diff --git a/bigbluebutton-html5/imports/ui/components/media/component.jsx b/bigbluebutton-html5/imports/ui/components/media/component.jsx index 20a8510028a696595e608eaee1ca6469bdca987c..45f295c565ce8e05fe2ef626d603ef709388ab30 100644 --- a/bigbluebutton-html5/imports/ui/components/media/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/media/component.jsx @@ -1,7 +1,7 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import cx from 'classnames'; -import VideoProviderContainer from '/imports/ui/components/video-provider/container'; +import WebcamDraggableOverlay from './webcam-draggable-overlay/component'; import { styles } from './styles'; @@ -18,6 +18,11 @@ const defaultProps = { export default class Media extends Component { + constructor(props) { + super(props); + this.refContainer = React.createRef(); + } + componentWillUpdate() { window.dispatchEvent(new Event('resize')); } @@ -60,13 +65,22 @@ export default class Media extends Component { }); return ( - <div className={styles.container}> + <div + id="container" + className={cx(styles.container)} + ref={this.refContainer} + > <div className={!swapLayout ? contentClassName : overlayClassName}> {children} </div> - <div className={!swapLayout ? overlayClassName : contentClassName}> - { !disableVideo && !audioModalIsOpen ? <VideoProviderContainer /> : null } - </div> + <WebcamDraggableOverlay + refMediaContainer={this.refContainer} + swapLayout={swapLayout} + floatingOverlay={floatingOverlay} + hideOverlay={hideOverlay} + disableVideo={disableVideo} + audioModalIsOpen={audioModalIsOpen} + /> </div> ); } diff --git a/bigbluebutton-html5/imports/ui/components/media/styles.scss b/bigbluebutton-html5/imports/ui/components/media/styles.scss index 333bc57b9819f0fd08f42abacc6243ec3680f4bb..106191a85a27f80a812fd1e4c69dc89209cb7979 100644 --- a/bigbluebutton-html5/imports/ui/components/media/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/media/styles.scss @@ -1,4 +1,5 @@ @import "../../stylesheets/variables/_all"; +@import "../../stylesheets/variables/video"; .container { order: 1; @@ -18,20 +19,40 @@ overflow: auto; width: 100%; position: relative; + order: 2; } .overlay { - flex: 1; display: flex; - order: 1; width: 100%; - border: 5px solid transparent; - border-top: 0 !important; + border: 0; + margin-top: 10px; + margin-bottom: 10px; + z-index: 2; + align-items: center; + + min-height: calc(var(--video-width) / var(--video-ratio)); +} + +.overlayRelative{ position: relative; +} - @include mq($medium-up) { - border: 10px solid transparent; - } +.overlayAbsoluteSingle{ + position: absolute; + height: calc(var(--video-width) / var(--video-ratio)); +} + +.overlayAbsoluteMult{ + position: absolute; +} + +.overlayToTop { + order: 3; +} + +.overlayToBottom { + order: 1; } .hideOverlay { @@ -44,28 +65,61 @@ } .floatingOverlay { - --overlay-width: 20vw; - --overlay-min-width: 235px; - --overlay-max-width: 20vw; - --overlay-ratio: calc(16 / 9); + margin: 10px; @include mq($medium-up) { z-index: 999; - position: fixed; - margin: 0; - bottom: .8rem; - left: auto; - right: .8rem; - width: var(--overlay-width); - min-width: var(--overlay-min-width); - max-width: var(--overlay-max-width); - height: calc(var(--overlay-width) / var(--overlay-ratio)); - min-height: calc(var(--overlay-min-width) / var(--overlay-ratio)); - max-height: calc(var(--overlay-max-width) / var(--overlay-ratio)); - - [dir="rtl"] & { - right: auto; - left: .8rem; - } + position: absolute; + bottom: 0; + right: 0; + width: var(--video-width); + min-width: var(--video-width); + max-width: var(--video-max-width); + height: calc(var(--video-width) / var(--video-ratio)); + min-height: calc(var(--video-width) / var(--video-ratio)); } } + +.hide { + display: none; +} + +.show { + display: block; +} + +.top { + top: 0; +} + +.bottom { + bottom: 0; +} + +.dragging { + opacity: .5; +} + +.dropZoneTop, +.dropZoneBottom { + border: 1px dashed var(--color-gray-light); + position: absolute; + width: 100%; + z-index: 9999; + cursor: grabbing; +} + +.dropZoneTop { + top: 0; +} + +.dropZoneBottom { + bottom: 0; +} + +.dropZoneBg { + position: absolute; + z-index: 99; + width: 100%; + background-color: rgba(255, 255, 255, .3); +} \ No newline at end of file diff --git a/bigbluebutton-html5/imports/ui/components/media/webcam-draggable-overlay/component.jsx b/bigbluebutton-html5/imports/ui/components/media/webcam-draggable-overlay/component.jsx new file mode 100644 index 0000000000000000000000000000000000000000..42f14f9d926291f3325025ad9841f3133552016e --- /dev/null +++ b/bigbluebutton-html5/imports/ui/components/media/webcam-draggable-overlay/component.jsx @@ -0,0 +1,551 @@ +import React, { Component, Fragment } from 'react'; +import PropTypes from 'prop-types'; +import cx from 'classnames'; +import VideoProviderContainer from '/imports/ui/components/video-provider/container'; +import _ from 'lodash'; +import browser from 'browser-detect'; + +import Draggable from 'react-draggable'; + +import { styles } from '../styles'; + +const propTypes = { + floatingOverlay: PropTypes.bool, + hideOverlay: PropTypes.bool, +}; + +const defaultProps = { + floatingOverlay: false, + hideOverlay: true, +}; + +const fullscreenChangedEvents = [ + 'fullscreenchange', + 'webkitfullscreenchange', + 'mozfullscreenchange', + 'MSFullscreenChange', +]; + +const BROWSER_ISMOBILE = browser().mobile; + +export default class WebcamDraggableOverlay extends Component { + static getWebcamBySelector() { + return document.querySelector('video[class^="media"]'); + } + + static getWebcamBySelectorCount() { + return document.querySelectorAll('video[class^="media"]').length; + } + + static getWebcamListBySelector() { + return document.querySelector('div[class^="videoList"]'); + } + + static getVideoCanvasBySelector() { + return document.querySelector('div[class^="videoCanvas"]'); + } + + static getOverlayBySelector() { + return document.querySelector('div[class*="overlay"]'); + } + + static isOverlayAbsolute() { + return !!(document.querySelector('div[class*="overlayAbsolute"]')); + } + + static getIsOverlayChanged() { + const overlayToTop = document.querySelector('div[class*="overlayToTop"]'); + const overlayToBottom = document.querySelector('div[class*="overlayToBottom"]'); + + return !!(overlayToTop || overlayToBottom); + } + + static getGridLineNum(numCams, camWidth, containerWidth) { + let used = (camWidth + 10) * numCams; + let countLines = 0; + + while (used > containerWidth) { + used -= containerWidth; + countLines += 1; + } + + return countLines + 1; + } + + static waitFor(condition, callback) { + const cond = condition(); + if (!cond) { + setTimeout(WebcamDraggableOverlay.waitFor.bind(null, condition, callback), 500); + } else { + callback(); + } + return false; + } + + constructor(props) { + super(props); + + this.state = { + dragging: false, + showDropZones: false, + showBgDropZoneTop: false, + showBgDropZoneBottom: false, + dropOnTop: BROWSER_ISMOBILE, + dropOnBottom: !BROWSER_ISMOBILE, + initialPosition: { x: 0, y: 0 }, + initialRectPosition: { x: 0, y: 0 }, + lastPosition: { x: 0, y: 0 }, + resetPosition: false, + isFullScreen: false, + isVideoLoaded: false, + isMinWidth: false, + userLength: 0, + }; + + this.updateWebcamPositionByResize = this.updateWebcamPositionByResize.bind(this); + + this.eventResizeListener = _.throttle( + this.updateWebcamPositionByResize, + 500, + { + leading: true, + trailing: true, + }, + ); + + this.videoMounted = this.videoMounted.bind(this); + + this.handleWebcamDragStart = this.handleWebcamDragStart.bind(this); + this.handleWebcamDragStop = this.handleWebcamDragStop.bind(this); + this.handleFullscreenChange = this.handleFullscreenChange.bind(this); + this.fullscreenButtonChange = this.fullscreenButtonChange.bind(this); + + this.getVideoListUsersChange = this.getVideoListUsersChange.bind(this); + this.setIsFullScreen = this.setIsFullScreen.bind(this); + this.setResetPosition = this.setResetPosition.bind(this); + this.setInitialReferencePoint = this.setInitialReferencePoint.bind(this); + this.setLastPosition = this.setLastPosition.bind(this); + this.setLastWebcamPosition = this.setLastWebcamPosition.bind(this); + this.setisMinWidth = this.setisMinWidth.bind(this); + + this.dropZoneTopEnterHandler = this.dropZoneTopEnterHandler.bind(this); + this.dropZoneTopLeaveHandler = this.dropZoneTopLeaveHandler.bind(this); + + this.dropZoneBottomEnterHandler = this.dropZoneBottomEnterHandler.bind(this); + this.dropZoneBottomLeaveHandler = this.dropZoneBottomLeaveHandler.bind(this); + + this.dropZoneTopMouseUpHandler = this.dropZoneTopMouseUpHandler.bind(this); + this.dropZoneBottomMouseUpHandler = this.dropZoneBottomMouseUpHandler.bind(this); + } + + componentDidMount() { + const { floatingOverlay } = this.props; + const { resetPosition } = this.state; + + if (!floatingOverlay + && !resetPosition) this.setResetPosition(true); + + window.addEventListener('resize', this.eventResizeListener); + + fullscreenChangedEvents.forEach((event) => { + document.addEventListener(event, this.handleFullscreenChange); + }); + + // Ensures that the event will be called before the resize + document.addEventListener('webcamFullscreenButtonChange', this.fullscreenButtonChange); + + window.addEventListener('videoListUsersChange', this.getVideoListUsersChange); + } + + componentDidUpdate(prevProps, prevState) { + const { userLength } = this.state; + if (userLength !== prevState.userLength) { + this.setLastWebcamPosition({ x: 0 }); + } + } + + componentWillUnmount() { + fullscreenChangedEvents.forEach((event) => { + document.removeEventListener(event, this.fullScreenToggleCallback); + }); + + document.removeEventListener('webcamFullscreenButtonChange', this.fullscreenButtonChange); + } + + getVideoListUsersChange() { + const userLength = WebcamDraggableOverlay.getWebcamBySelectorCount(); + this.setState({ userLength }); + } + + setIsFullScreen(isFullScreen) { + this.setState({ isFullScreen }); + } + + setResetPosition(resetPosition) { + this.setState({ resetPosition }); + } + + setLastPosition(x, y) { + this.setState({ lastPosition: { x, y } }); + } + + setInitialReferencePoint() { + const { refMediaContainer } = this.props; + const { userLength } = this.state; + const { current: mediaContainer } = refMediaContainer; + + const webcamBySelector = WebcamDraggableOverlay.getWebcamBySelector(); + + if (webcamBySelector && mediaContainer) { + if (userLength === 0) this.getVideoListUsersChange(); + + let x = 0; + let y = 0; + + const webcamBySelectorRect = webcamBySelector.getBoundingClientRect(); + const { + width: webcamWidth, + height: webcamHeight, + } = webcamBySelectorRect; + + const mediaContainerRect = mediaContainer.getBoundingClientRect(); + const { + width: mediaWidth, + height: mediaHeight, + } = mediaContainerRect; + + const lineNum = WebcamDraggableOverlay + .getGridLineNum(userLength, webcamWidth, mediaWidth); + + x = mediaWidth - ((webcamWidth + 10) * userLength); // 10 is margin + y = mediaHeight - ((webcamHeight + 10) * lineNum); // 10 is margin + + if (x === 0 && y === 0) return false; + + this.setState({ initialRectPosition: { x, y } }); + return true; + } + return false; + } + + setLastWebcamPosition() { + const { refMediaContainer } = this.props; + const { current: mediaContainer } = refMediaContainer; + const { initialRectPosition, userLength } = this.state; + + const { x: initX, y: initY } = initialRectPosition; + const webcamBySelector = WebcamDraggableOverlay.getWebcamBySelector(); + + if (webcamBySelector && mediaContainer) { + const webcamBySelectorRect = webcamBySelector.getBoundingClientRect(); + const { + left: webcamLeft, + top: webcamTop, + } = webcamBySelectorRect; + + const mediaContainerRect = mediaContainer.getBoundingClientRect(); + const { + left: mediaLeft, + top: mediaTop, + } = mediaContainerRect; + + const webcamXByMedia = userLength > 1 ? 0 : webcamLeft - mediaLeft; + const webcamYByMedia = webcamTop - mediaTop; + + let x = 0; + let y = 0; + + if (webcamXByMedia > 0) { + x = webcamXByMedia - initX; + } else { + x = 0 - initX; + } + if (webcamXByMedia > initX) x = -(initY - 10); + if (userLength > 1) x = 0; + + y = webcamYByMedia - (initY - 10); + + if (webcamYByMedia > initY) { + y = -10; + } + if (webcamYByMedia < 0) y = -(initY - 10); + + this.setLastPosition(x, y); + } + } + + setisMinWidth(isMinWidth) { + this.setState({ isMinWidth }); + } + + videoMounted() { + this.setResetPosition(true); + WebcamDraggableOverlay.waitFor(this.setInitialReferencePoint, this.setLastWebcamPosition); + this.setState({ isVideoLoaded: true }); + } + + fullscreenButtonChange() { + this.setIsFullScreen(true); + } + + updateWebcamPositionByResize() { + const { + isVideoLoaded, + isMinWidth, + } = this.state; + const webcamBySelectorCount = WebcamDraggableOverlay.getWebcamBySelectorCount(); + + if (isVideoLoaded) { + if (WebcamDraggableOverlay.isOverlayAbsolute() && webcamBySelectorCount > 1) { + this.setInitialReferencePoint(); + this.setLastWebcamPosition(); + } + this.setInitialReferencePoint(); + this.setLastWebcamPosition(); + } + + if (window.innerWidth < 641) { + this.setisMinWidth(true); + this.setState({ dropOnBottom: true }); + this.setResetPosition(true); + } else if (isMinWidth) { + this.setisMinWidth(false); + } + } + + handleFullscreenChange() { + if (document.fullscreenElement + || document.webkitFullscreenElement + || document.mozFullScreenElement + || document.msFullscreenElement) { + window.removeEventListener('resize', this.eventResizeListener); + this.setIsFullScreen(true); + } else { + this.setIsFullScreen(false); + window.addEventListener('resize', this.eventResizeListener); + } + } + + handleWebcamDragStart() { + const { floatingOverlay } = this.props; + const { + dragging, + showDropZones, + dropOnTop, + dropOnBottom, + resetPosition, + } = this.state; + + if (!floatingOverlay) WebcamDraggableOverlay.getOverlayBySelector().style.bottom = 0; + + if (!dragging) this.setState({ dragging: true }); + if (!showDropZones) this.setState({ showDropZones: true }); + if (dropOnTop) this.setState({ dropOnTop: false }); + if (dropOnBottom) this.setState({ dropOnBottom: false }); + if (resetPosition) this.setState({ resetPosition: false }); + window.dispatchEvent(new Event('resize')); + } + + handleWebcamDragStop(e, position) { + const { + dragging, + showDropZones, + } = this.state; + + const { x, y } = position; + + if (dragging) this.setState({ dragging: false }); + if (showDropZones) this.setState({ showDropZones: false }); + + this.setLastPosition(x, y); + } + + dropZoneTopEnterHandler() { + const { + showBgDropZoneTop, + } = this.state; + + if (!showBgDropZoneTop) this.setState({ showBgDropZoneTop: true }); + } + + dropZoneBottomEnterHandler() { + const { + showBgDropZoneBottom, + } = this.state; + + if (!showBgDropZoneBottom) this.setState({ showBgDropZoneBottom: true }); + } + + dropZoneTopLeaveHandler() { + const { + showBgDropZoneTop, + } = this.state; + + if (showBgDropZoneTop) this.setState({ showBgDropZoneTop: false }); + } + + dropZoneBottomLeaveHandler() { + const { + showBgDropZoneBottom, + } = this.state; + + if (showBgDropZoneBottom) this.setState({ showBgDropZoneBottom: false }); + } + + dropZoneTopMouseUpHandler() { + const { dropOnTop } = this.state; + if (!dropOnTop) { + this.setState({ + dropOnTop: true, + dropOnBottom: false, + resetPosition: true, + }); + } + window.dispatchEvent(new Event('resize')); + setTimeout(() => this.setLastWebcamPosition(), 500); + } + + dropZoneBottomMouseUpHandler() { + const { dropOnBottom } = this.state; + if (!dropOnBottom) { + this.setState({ + dropOnTop: false, + dropOnBottom: true, + resetPosition: true, + }); + } + window.dispatchEvent(new Event('resize')); + setTimeout(() => this.setLastWebcamPosition(), 500); + } + + render() { + const { + swapLayout, + floatingOverlay, + hideOverlay, + disableVideo, + audioModalIsOpen, + } = this.props; + + const { + dragging, + showDropZones, + showBgDropZoneTop, + showBgDropZoneBottom, + dropOnTop, + dropOnBottom, + initialPosition, + lastPosition, + resetPosition, + isFullScreen, + isMinWidth, + } = this.state; + + const webcamBySelectorCount = WebcamDraggableOverlay.getWebcamBySelectorCount(); + + const contentClassName = cx({ + [styles.content]: true, + }); + + const overlayClassName = cx({ + [styles.overlay]: true, + [styles.overlayRelative]: (dropOnTop || dropOnBottom), + [styles.overlayAbsoluteSingle]: (!dropOnTop && !dropOnBottom && webcamBySelectorCount <= 1), + [styles.overlayAbsoluteMult]: (!dropOnTop && !dropOnBottom && webcamBySelectorCount > 1), + [styles.hideOverlay]: hideOverlay, + [styles.floatingOverlay]: floatingOverlay && (!dropOnTop && !dropOnBottom), + [styles.overlayToTop]: dropOnTop, + [styles.overlayToBottom]: dropOnBottom, + [styles.dragging]: dragging, + }); + + const dropZoneTopClassName = cx({ + [styles.dropZoneTop]: true, + [styles.show]: showDropZones, + [styles.hide]: !showDropZones, + }); + + const dropZoneBottomClassName = cx({ + [styles.dropZoneBottom]: true, + [styles.show]: showDropZones, + [styles.hide]: !showDropZones, + }); + + const dropZoneBgTopClassName = cx({ + [styles.dropZoneBg]: true, + [styles.top]: true, + [styles.show]: showBgDropZoneTop, + [styles.hide]: !showBgDropZoneTop, + }); + + const dropZoneBgBottomClassName = cx({ + [styles.dropZoneBg]: true, + [styles.bottom]: true, + [styles.show]: showBgDropZoneBottom, + [styles.hide]: !showBgDropZoneBottom, + }); + + const cursor = () => { + if ((!swapLayout || !isFullScreen || !BROWSER_ISMOBILE) && !dragging && !isMinWidth) return 'grab'; + if (dragging) return 'grabbing'; + return 'default'; + }; + + return ( + <Fragment> + <div + className={dropZoneTopClassName} + onMouseEnter={this.dropZoneTopEnterHandler} + onMouseLeave={this.dropZoneTopLeaveHandler} + onMouseUp={this.dropZoneTopMouseUpHandler} + role="presentation" + style={{ height: '100px' }} + /> + <div + className={dropZoneBgTopClassName} + style={{ height: '100px' }} + /> + + <Draggable + handle="video" + bounds="#container" + onStart={this.handleWebcamDragStart} + onStop={this.handleWebcamDragStop} + onMouseDown={e => e.preventDefault()} + disabled={swapLayout || isFullScreen || BROWSER_ISMOBILE || isMinWidth} + position={resetPosition || swapLayout ? initialPosition : lastPosition} + > + <div + className={!swapLayout ? overlayClassName : contentClassName} + > + { + !disableVideo && !audioModalIsOpen + ? ( + <VideoProviderContainer + cursor={cursor()} + onMount={this.videoMounted} + onUpdate={this.videoUpdated} + /> + ) : null} + </div> + </Draggable> + + <div + className={dropZoneBottomClassName} + onMouseEnter={this.dropZoneBottomEnterHandler} + onMouseLeave={this.dropZoneBottomLeaveHandler} + onMouseUp={this.dropZoneBottomMouseUpHandler} + role="presentation" + style={{ height: '100px' }} + /> + <div + className={dropZoneBgBottomClassName} + style={{ height: '100px' }} + /> + </Fragment> + ); + } +} + +WebcamDraggableOverlay.propTypes = propTypes; +WebcamDraggableOverlay.defaultProps = defaultProps; diff --git a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx index d43aeffc8094b46c0480a4f52cb6a28091ce4489..af697fdc5db886e538de1dee08b917568e48dae5 100755 --- a/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/meeting-ended/component.jsx @@ -170,7 +170,7 @@ class MeetingEnded extends React.PureComponent { <div className={styles.parent}> <div className={styles.modal}> <div className={styles.content}> - <h1 className={styles.title}> + <h1 className={styles.title} data-test="meetingEndedModalTitle"> { intl.formatMessage(intlMessage[code] || intlMessage[430]) } diff --git a/bigbluebutton-html5/imports/ui/components/modal/fullscreen/component.jsx b/bigbluebutton-html5/imports/ui/components/modal/fullscreen/component.jsx index 00995d241e36fe53ed2ad3711823234068d365bc..12a90008332e17de9bfba09af7dda7ddfe0468c8 100644 --- a/bigbluebutton-html5/imports/ui/components/modal/fullscreen/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/modal/fullscreen/component.jsx @@ -40,6 +40,7 @@ const propTypes = { disabled: PropTypes.bool, }), preventClosing: PropTypes.bool, + shouldCloseOnOverlayClick: PropTypes.bool, }; const defaultProps = { @@ -54,9 +55,31 @@ const defaultProps = { }; class ModalFullscreen extends PureComponent { + constructor(props) { + super(props); + + this.handleAction = this.handleAction.bind(this); + } + handleAction(name) { - const action = this.props[name]; - return this.props.modalHide(action.callback); + const { confirm, dismiss, modalHide } = this.props; + const { callback: callBackConfirm } = confirm; + const { callback: callBackDismiss } = dismiss; + + let callback; + + switch (name) { + case 'confirm': + callback = callBackConfirm; + break; + case 'dismiss': + callback = callBackDismiss; + break; + default: + break; + } + + return modalHide(callback); } render() { @@ -66,6 +89,7 @@ class ModalFullscreen extends PureComponent { confirm, dismiss, className, + children, modalisOpen, preventClosing, ...otherProps @@ -93,17 +117,17 @@ class ModalFullscreen extends PureComponent { label={intl.formatMessage(intlMessages.modalClose)} aria-label={`${intl.formatMessage(intlMessages.modalClose)} ${title}`} disabled={dismiss.disabled} - onClick={this.handleAction.bind(this, 'dismiss')} + onClick={() => this.handleAction('dismiss')} aria-describedby="modalDismissDescription" /> <Button data-test="modalConfirmButton" color="primary" className={popoutIcon ? cx(styles.confirm, styles.popout) : styles.confirm} - label={confirm.label} + label={confirm.label || intl.formatMessage(intlMessages.modalDone)} aria-label={confirmAriaLabel} disabled={confirm.disabled} - onClick={this.handleAction.bind(this, 'confirm')} + onClick={() => this.handleAction('confirm')} aria-describedby="modalConfirmDescription" icon={confirm.icon || null} iconRight={popoutIcon} @@ -111,7 +135,7 @@ class ModalFullscreen extends PureComponent { </div> </header> <div className={styles.content}> - {this.props.children} + {children} </div> <div id="modalDismissDescription" hidden>{intl.formatMessage(intlMessages.modalCloseDescription)}</div> <div id="modalConfirmDescription" hidden>{intl.formatMessage(intlMessages.modalDoneDescription)}</div> diff --git a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx index 07ba5b9844e6d0fac73c79497216aa4252f3072f..cf9369f3185a0b1ea003d060d182fd1315e8a98c 100755 --- a/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/presentation/presentation-uploader/component.jsx @@ -18,6 +18,7 @@ import { styles } from './styles.scss'; const propTypes = { intl: intlShape.isRequired, + mountModal: PropTypes.func.isRequired, defaultFileName: PropTypes.string.isRequired, fileSizeMin: PropTypes.number.isRequired, fileSizeMax: PropTypes.number.isRequired, @@ -48,9 +49,13 @@ const intlMessages = defineMessages({ id: 'app.presentationUploder.message', description: 'message warning the types of files accepted', }, + uploadLabel: { + id: 'app.presentationUploder.uploadLabel', + description: 'confirm label when presentations are to be uploaded', + }, confirmLabel: { id: 'app.presentationUploder.confirmLabel', - description: 'used in the button that start the upload of the new presentation', + description: 'confirm label when no presentations are to be uploaded', }, confirmDesc: { id: 'app.presentationUploder.confirmDesc', @@ -174,6 +179,7 @@ class PresentationUploader extends Component { oldCurrentId: currentPres ? currentPres.id : -1, preventClosing: false, disableActions: false, + disableConfirm: false, }; this.handleConfirm = this.handleConfirm.bind(this); @@ -189,6 +195,15 @@ class PresentationUploader extends Component { this.releaseActionsOnPresentationError = this.releaseActionsOnPresentationError.bind(this); } + static getDerivedStateFromProps(props, state) { + if (props.presentations[0].isCurrent && state.disableConfirm) { + return { + disableConfirm: !state.disableConfirm, + }; + } + return null; + } + componentDidUpdate() { this.releaseActionsOnPresentationError(); } @@ -395,6 +410,7 @@ class PresentationUploader extends Component { this.setState({ presentations: presentationsUpdated, + disableConfirm: false, }); } @@ -408,6 +424,7 @@ class PresentationUploader extends Component { presentations: update(presentations, { $splice: [[toRemoveIndex, 1]], }), + disableConfirm: true, }); } @@ -669,7 +686,19 @@ class PresentationUploader extends Component { render() { const { intl } = this.props; - const { preventClosing, disableActions } = this.state; + const { + preventClosing, disableActions, presentations, disableConfirm, + } = this.state; + + let awaitingConversion = false; + presentations.map((presentation) => { + if (!presentation.conversion.done) awaitingConversion = true; + return null; + }); + + const confirmLabel = awaitingConversion + ? intl.formatMessage(intlMessages.uploadLabel) + : intl.formatMessage(intlMessages.confirmLabel); return ( <ModalFullscreen @@ -677,9 +706,9 @@ class PresentationUploader extends Component { preventClosing={preventClosing} confirm={{ callback: this.handleConfirm, - label: intl.formatMessage(intlMessages.confirmLabel), + label: confirmLabel, description: intl.formatMessage(intlMessages.confirmDesc), - disabled: disableActions, + disabled: disableConfirm, }} dismiss={{ callback: this.handleDismiss, diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/component.jsx index bc39f5f8f8ab38bd1953edff9462f96c371a6bf5..6032f1daa5c6a17c127f520183d024d8d6e65df2 100644 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/component.jsx @@ -50,6 +50,9 @@ class UserListItem extends PureComponent { hasPrivateChatBetweenUsers, toggleUserLock, requestUserInformation, + userInBreakout, + breakoutSequence, + meetignIsBreakout, } = this.props; const { meetingId, lockSettingsProps } = meeting; @@ -80,6 +83,9 @@ class UserListItem extends PureComponent { hasPrivateChatBetweenUsers, toggleUserLock, requestUserInformation, + userInBreakout, + breakoutSequence, + meetignIsBreakout, }} /> ); diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/container.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/container.jsx index e27d54154b162b2d11c859833d53dbcdde184cf6..70e36ae0b1c4528febd57fa6915cb58237d11866 100644 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/container.jsx @@ -1,11 +1,22 @@ import React from 'react'; import { withTracker } from 'meteor/react-meteor-data'; import Users from '/imports/api/users'; +import Breakouts from '/imports/api/breakouts'; +import Meetings from '/imports/api/meetings'; +import Auth from '/imports/ui/services/auth'; import mapUser from '/imports/ui/services/user/mapUser'; import UserListItem from './component'; const UserListItemContainer = props => <UserListItem {...props} />; -export default withTracker(({ userId }) => ({ - user: mapUser(Users.findOne({ userId })), -}))(UserListItemContainer); +export default withTracker(({ userId }) => { + const findUserInBreakout = Breakouts.findOne({ 'joinedUsers.userId': new RegExp(`^${userId}`) }); + const breakoutSequence = (findUserInBreakout || {}).sequence; + const Meeting = Meetings.findOne({ MeetingId: Auth.meetingID }); + return { + user: mapUser(Users.findOne({ userId })), + userInBreakout: !!findUserInBreakout, + breakoutSequence, + meetignIsBreakout: Meeting && Meeting.meetingProp.isBreakout, + }; +})(UserListItemContainer); diff --git a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-dropdown/component.jsx b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-dropdown/component.jsx index 3362870d2b3e04f1a85908f5c9e9e56128c959e0..5fc57cb5a9970b66c87fda338a37dee3f5c0e97d 100755 --- a/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-dropdown/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/user-list/user-list-content/user-participants/user-list-item/user-dropdown/component.jsx @@ -460,6 +460,9 @@ class UserDropdown extends PureComponent { const { normalizeEmojiName, user, + userInBreakout, + breakoutSequence, + meetignIsBreakout, } = this.props; const { clientType } = user; @@ -470,6 +473,7 @@ class UserDropdown extends PureComponent { : user.name.toLowerCase().slice(0, 2); const iconVoiceOnlyUser = (<Icon iconName="audio_on" />); + const userIcon = isVoiceOnly ? iconVoiceOnlyUser : iconUser; return ( <UserAvatar @@ -482,7 +486,10 @@ class UserDropdown extends PureComponent { noVoice={!user.isVoiceUser} color={user.color} > - {isVoiceOnly ? iconVoiceOnlyUser : iconUser} + { + userInBreakout + && !meetignIsBreakout + ? breakoutSequence : userIcon} </UserAvatar> ); } @@ -496,7 +503,7 @@ class UserDropdown extends PureComponent { isMeetingLocked, meetingId, } = this.props; - + const { isActionsOpen, dropdownVisible, diff --git a/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx b/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx index bc64c27d4ae3a13dc5277a49fbb5efc90636321c..8ad42ff94b787542bd9ad670ff09d2c8732c54b0 100755 --- a/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-preview/component.jsx @@ -501,7 +501,7 @@ class VideoPreview extends Component { color="primary" label={intl.formatMessage(intlMessages.startSharingLabel)} onClick={() => this.handleStartSharing()} - disabled={isStartSharingDisabled} + disabled={isStartSharingDisabled || isStartSharingDisabled === null} /> </div> </div> diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx index bdc35fa9a2c77cfb2cd4ce8384f54e5ec7a9a4f7..2cf9f87fb1591c07086ba7d54326213baa2a820c 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/component.jsx @@ -111,6 +111,10 @@ const MAX_CAMERA_SHARE_FAILED_WAIT_TIME = 60000; const PING_INTERVAL = 15000; class VideoProvider extends Component { + static notifyError(message) { + notify(message, 'error', 'video'); + } + constructor(props) { super(props); @@ -158,6 +162,9 @@ class VideoProvider extends Component { } componentDidMount() { + const { onMount } = this.props; + onMount(); + this.checkIceConnectivity(); document.addEventListener('joinVideo', this.shareWebcam); // TODO find a better way to do this document.addEventListener('exitVideo', this.unshareWebcam); @@ -203,6 +210,11 @@ class VideoProvider extends Component { usersToDisconnect.forEach(id => this.stopWebRTCPeer(id)); } + componentDidUpdate(prevProps) { + const { users } = this.props; + if (users.length !== prevProps.users.length) window.dispatchEvent(new Event('videoListUsersChange')); + } + componentWillUnmount() { document.removeEventListener('joinVideo', this.shareWebcam); document.removeEventListener('exitVideo', this.unshareWebcam); @@ -312,8 +324,8 @@ class VideoProvider extends Component { // host candidates if (browser().name === 'safari') { const { intl } = this.props; - tryGenerateIceCandidates().catch((e) => { - this.notifyError(intl.formatMessage(intlSFUErrors[2021])); + tryGenerateIceCandidates().catch(() => { + VideoProvider.notifyError(intl.formatMessage(intlSFUErrors[2021])); }); } } @@ -375,11 +387,9 @@ class VideoProvider extends Component { this.logger('error', `client: Websocket error '${error}' on message '${message.id}'`, 'video_provider_ws_error', { topic: 'ws' }); } }); - } else { + } else if (message.id !== 'stop') { // No need to queue video stop messages - if (message.id !== 'stop') { - this.wsQueue.push(message); - } + this.wsQueue.push(message); } } @@ -402,6 +412,7 @@ class VideoProvider extends Component { peer.didSDPAnswered = true; this._processIceQueue(peer, id); + return true; }); } else { this.logger('warn', '[startResponse] Message arrived after the peer was already thrown out, discarding it...', 'video_provider_no_peer'); @@ -419,6 +430,7 @@ class VideoProvider extends Component { if (err) { return this.logger('error', `Error adding candidate: ${err}`, 'video_provider_ice_candidate_cant_add', { cameraId: message.cameraId }); } + return true; }); } else { if (webRtcPeer.iceQueue == null) { @@ -548,7 +560,7 @@ class VideoProvider extends Component { return this._webRTCOnError(errorGenOffer, id, shareWebcam); } - this.logger('debug', `Invoking SDP offer callback function ${location.host}`, 'video_provider_sdp_offer_callback', { cameraId: id, offerSdp }); + this.logger('debug', `Invoking SDP offer callback function ${window.location.host}`, 'video_provider_sdp_offer_callback', { cameraId: id, offerSdp }); const message = { type: 'video', @@ -560,10 +572,14 @@ class VideoProvider extends Component { voiceBridge, }; this.sendMessage(message); + return true; }); + return true; }); if (this.webRtcPeers[id].peerConnection) { - this.webRtcPeers[id].peerConnection.oniceconnectionstatechange = this._getOnIceConnectionStateChangeCallback(id); + this.webRtcPeers[id] + .peerConnection + .oniceconnectionstatechange = this._getOnIceConnectionStateChangeCallback(id); } if (ENABLE_NETWORK_INFORMATION) { newWebcamConnection(id); @@ -579,7 +595,7 @@ class VideoProvider extends Component { this.logger('error', `Camera share has not succeeded in ${CAMERA_SHARE_FAILED_WAIT_TIME}`, 'video_provider_cam_timeout', { cameraId: id }); if (userId === id) { - this.notifyError(intl.formatMessage(intlClientErrors.mediaFlowTimeout)); + VideoProvider.notifyError(intl.formatMessage(intlClientErrors.mediaFlowTimeout)); this.stopWebRTCPeer(id, false); } else { // Subscribers try to reconnect according to their timers if media could @@ -589,7 +605,8 @@ class VideoProvider extends Component { this.createWebRTCPeer(id, shareWebcam); // Increment reconnect interval - this.restartTimer[id] = Math.min(2 * this.restartTimer[id], MAX_CAMERA_SHARE_FAILED_WAIT_TIME); + this.restartTimer[id] = Math + .min(2 * this.restartTimer[id], MAX_CAMERA_SHARE_FAILED_WAIT_TIME); this.logger('info', `Reconnecting peer ${id} with timer`, 'video_provider_reconnecting_peer', this.restartTimer); } @@ -603,9 +620,10 @@ class VideoProvider extends Component { const candidate = peer.iceQueue.shift(); peer.addIceCandidate(candidate, (err) => { if (err) { - this.notifyError(intl.formatMessage(intlClientErrors.iceCandidateError)); + VideoProvider.notifyError(intl.formatMessage(intlClientErrors.iceCandidateError)); return this.logger('error', `Error adding candidate: ${err}`, 'video_provider_cant_add_candidate', { cameraId }); } + return true; }); } } @@ -624,10 +642,10 @@ class VideoProvider extends Component { this.logger('error', ' WebRTC peerObj create error', 'video_provider_webrtc_error_before', { id, error }); const errorMessage = intlClientErrors[error.name] || intlSFUErrors[error] || intlClientErrors.permissionError; - this.notifyError(intl.formatMessage(errorMessage)); + VideoProvider.notifyError(intl.formatMessage(errorMessage)); this.stopWebRTCPeer(id); - return this.logger('error', errorMessage, 'video_provider_webrtc_error_after', { cameraId: id, errorMessage }); + this.logger('error', errorMessage, 'video_provider_webrtc_error_after', { cameraId: id, errorMessage }); } _getOnIceCandidateCallback(id, shareWebcam) { @@ -669,7 +687,7 @@ class VideoProvider extends Component { this.logger('error', `ICE connection state id:${id}, connectionState:${connectionState}`, 'video_provider_ice_connection_failed_state'); this.stopWebRTCPeer(id); - this.notifyError(intl.formatMessage(intlClientErrors.iceConnectionStateError)); + VideoProvider.notifyError(intl.formatMessage(intlClientErrors.iceConnectionStateError)); } }; } @@ -739,7 +757,7 @@ class VideoProvider extends Component { res.packetsLost = parseInt(res.packetsLost, 10) || 0; res.packetsReceived = parseInt(res.packetsReceived, 10); - if ((isNaN(res.packetsSent) && res.packetsReceived === 0) + if ((Number.isNaN(res.packetsSent) && res.packetsReceived === 0) || (res.type === 'outbound-rtp' && res.isRemote)) { return; // Discard local video receiving } @@ -794,9 +812,11 @@ class VideoProvider extends Component { const lastVideoStats = videoStatsArray[videoStatsArray.length - 1]; const videoIntervalPacketsLost = lastVideoStats.packetsLost - firstVideoStats.packetsLost; - const videoIntervalPacketsReceived = lastVideoStats.packetsReceived - firstVideoStats.packetsReceived; + const videoIntervalPacketsReceived = lastVideoStats + .packetsReceived - firstVideoStats.packetsReceived; const videoIntervalPacketsSent = lastVideoStats.packetsSent - firstVideoStats.packetsSent; - const videoIntervalBytesReceived = lastVideoStats.bytesReceived - firstVideoStats.bytesReceived; + const videoIntervalBytesReceived = lastVideoStats + .bytesReceived - firstVideoStats.bytesReceived; const videoIntervalBytesSent = lastVideoStats.bytesSent - firstVideoStats.bytesSent; const videoReceivedInterval = lastVideoStats.timestamp - firstVideoStats.timestamp; @@ -813,13 +833,18 @@ class VideoProvider extends Component { let videoBitrate; if (videoStats.packetsReceived > 0) { // Remote video - videoLostPercentage = ((videoStats.packetsLost / ((videoStats.packetsLost + videoStats.packetsReceived)) * 100) || 0).toFixed(1); + videoLostPercentage = ((videoStats + .packetsLost / ((videoStats + .packetsLost + videoStats.packetsReceived) * 100)) || 0).toFixed(1); videoBitrate = Math.floor(videoKbitsReceivedPerSecond || 0); - videoLostRecentPercentage = ((videoIntervalPacketsLost / ((videoIntervalPacketsLost + videoIntervalPacketsReceived)) * 100) || 0).toFixed(1); + videoLostRecentPercentage = ((videoIntervalPacketsLost / ((videoIntervalPacketsLost + + videoIntervalPacketsReceived) * 100)) || 0).toFixed(1); } else { - videoLostPercentage = (((videoStats.packetsLost / (videoStats.packetsLost + videoStats.packetsSent)) * 100) || 0).toFixed(1); + videoLostPercentage = (((videoStats.packetsLost / (videoStats.packetsLost + + videoStats.packetsSent)) * 100) || 0).toFixed(1); videoBitrate = Math.floor(videoKbitsSentPerSecond || 0); - videoLostRecentPercentage = ((videoIntervalPacketsLost / ((videoIntervalPacketsLost + videoIntervalPacketsSent) * 100)) || 0).toFixed(1); + videoLostRecentPercentage = ((videoIntervalPacketsLost / ((videoIntervalPacketsLost + + videoIntervalPacketsSent) * 100)) || 0).toFixed(1); } const result = { @@ -950,7 +975,7 @@ class VideoProvider extends Component { }); if (message.streamId === userId) { this.unshareWebcam(); - this.notifyError(intl.formatMessage(intlSFUErrors[code] + VideoProvider.notifyError(intl.formatMessage(intlSFUErrors[code] || intlSFUErrors[2200])); } else { this.stopWebRTCPeer(message.cameraId); @@ -959,10 +984,6 @@ class VideoProvider extends Component { this.logger('error', `Handle error ---------------------> ${message.message}`, 'video_provider_handle_sfu_error', { message }); } - notifyError(message) { - notify(message, 'error', 'video'); - } - shareWebcam() { if (this.connectedToMediaServer()) { this.logger('info', 'Sharing webcam', 'video_provider_share_webcam'); @@ -984,9 +1005,10 @@ class VideoProvider extends Component { const { socketOpen } = this.state; if (!socketOpen) return null; - const { users, enableVideoStats } = this.props; + const { users, enableVideoStats, cursor } = this.props; return ( <VideoList + cursor={cursor} users={users} onMount={this.createVideoTag} getStats={this.getStats} diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx index 2fea564c46643a04980b66aa7d7a0082dc38369a..9cee75901ca36197ce581157b4c309c3c1aa43d6 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/container.jsx @@ -9,7 +9,8 @@ const VideoProviderContainer = ({ children, ...props }) => { return (!users.length ? null : <VideoProvider {...props}>{children}</VideoProvider>); }; -export default withTracker(() => ({ +export default withTracker(props => ({ + cursor: props.cursor, meetingId: VideoService.meetingId(), users: VideoService.getAllUsersVideo(), userId: VideoService.userId(), @@ -17,4 +18,5 @@ export default withTracker(() => ({ userName: VideoService.userName(), enableVideoStats: getFromUserSettings('enableVideoStats', Meteor.settings.public.kurento.enableVideoStats), voiceBridge: VideoService.voiceBridge(), + onMount: props.onMount, }))(VideoProviderContainer); diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx index 1fa16e4871a70c18351238a901f9b687916233e0..7a18d9a44344f52e4a4f0f387cc64074180ac2e2 100644 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/component.jsx @@ -1,7 +1,6 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl } from 'react-intl'; -import _ from 'lodash'; import cx from 'classnames'; import { styles } from './styles'; import VideoListItem from './video-list-item/component'; @@ -30,97 +29,17 @@ const intlMessages = defineMessages({ }); // See: https://stackoverflow.com/a/3513565 -const findOptimalGrid = (canvasWidth, canvasHeight, gutter, aspectRatio, numItems, columns = 1) => { - const rows = Math.ceil(numItems / columns); - - const gutterTotalWidth = (columns - 1) * gutter; - const gutterTotalHeight = (rows - 1) * gutter; - - const usableWidth = canvasWidth - gutterTotalWidth; - const usableHeight = canvasHeight - gutterTotalHeight; - - let cellWidth = Math.floor(usableWidth / columns); - let cellHeight = Math.ceil(cellWidth / aspectRatio); - - if ((cellHeight * rows) > usableHeight) { - cellHeight = Math.floor(usableHeight / rows); - cellWidth = Math.ceil(cellHeight * aspectRatio); - } - - return { - columns, - rows, - width: (cellWidth * columns) + gutterTotalWidth, - height: (cellHeight * rows) + gutterTotalHeight, - filledArea: (cellWidth * cellHeight) * numItems, - }; -}; - class VideoList extends Component { constructor(props) { super(props); this.state = { focusedId: false, - optimalGrid: { - cols: 1, - rows: 1, - filledArea: 0, - }, }; this.ticking = false; this.grid = null; this.canvas = null; - this.handleCanvasResize = _.throttle(this.handleCanvasResize.bind(this), 66); - this.setOptimalGrid = this.setOptimalGrid.bind(this); - } - - componentDidMount() { - this.handleCanvasResize(); - window.addEventListener('resize', this.handleCanvasResize, false); - } - - componentWillUnmount() { - window.removeEventListener('resize', this.handleCanvasResize, false); - } - - setOptimalGrid() { - let numItems = this.props.users.length; - - if (numItems < 1 || !this.canvas || !this.grid) { - return; - } - - const { focusedId } = this.state; - const aspectRatio = 4 / 3; - const { width: canvasWidth, height: canvasHeight } = this.canvas.getBoundingClientRect(); - const gridGutter = parseInt(window.getComputedStyle(this.grid).getPropertyValue('grid-row-gap'), 10); - - - const hasFocusedItem = numItems > 2 && focusedId; - - // Has a focused item so we need +3 cells - if (hasFocusedItem) { - numItems += 3; - } - - const optimalGrid = _.range(1, numItems + 1).reduce((currentGrid, col) => { - const testGrid = findOptimalGrid( - canvasWidth, canvasHeight, gridGutter, - aspectRatio, numItems, col, - ); - - // We need a minimun of 2 rows and columns for the focused - const focusedConstraint = hasFocusedItem ? testGrid.rows > 1 && testGrid.columns > 1 : true; - const betterThanCurrent = testGrid.filledArea > currentGrid.filledArea; - - return focusedConstraint && betterThanCurrent ? testGrid : currentGrid; - }, { filledArea: 0 }); - - this.setState({ - optimalGrid, - }); } handleVideoFocus(id) { @@ -128,22 +47,12 @@ class VideoList extends Component { this.setState({ focusedId: focusedId !== id ? id : false, }, this.handleCanvasResize); - } - - handleCanvasResize() { - if (!this.ticking) { - window.requestAnimationFrame(() => { - this.ticking = false; - this.setOptimalGrid(); - }); - } - - this.ticking = true; + window.dispatchEvent(new Event('resize')); } renderVideoList() { const { - intl, users, onMount, getStats, stopGettingStats, enableVideoStats, + intl, users, onMount, getStats, stopGettingStats, enableVideoStats, cursor, } = this.props; const { focusedId } = this.state; @@ -167,15 +76,15 @@ class VideoList extends Component { [styles.videoListItem]: true, [styles.focused]: focusedId === user.id && users.length > 2, })} + style={{ + cursor, + }} > <VideoListItem numOfUsers={users.length} user={user} actions={actions} - onMount={(videoRef) => { - this.handleCanvasResize(); - return onMount(user.id, videoRef); - }} + onMount={(videoRef) => { onMount(user.id, videoRef); }} getStats={(videoRef, callback) => getStats(user.id, videoRef, callback)} stopGettingStats={() => stopGettingStats(user.id)} enableVideoStats={enableVideoStats} @@ -187,8 +96,6 @@ class VideoList extends Component { render() { const { users } = this.props; - const { optimalGrid } = this.state; - return ( <div ref={(ref) => { this.canvas = ref; }} @@ -198,12 +105,6 @@ class VideoList extends Component { <div ref={(ref) => { this.grid = ref; }} className={styles.videoList} - style={{ - width: `${optimalGrid.width}px`, - height: `${optimalGrid.height}px`, - gridTemplateColumns: `repeat(${optimalGrid.columns}, 1fr)`, - gridTemplateRows: `repeat(${optimalGrid.rows}, 1fr)`, - }} > {this.renderVideoList()} </div> diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/styles.scss b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/styles.scss index 4527df146ab4aa409963a400bc589529b4483e35..56d924289be289e16d098d63e53aeb2d2be63fa6 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/styles.scss @@ -1,4 +1,6 @@ @import "/imports/ui/stylesheets/variables/_all"; +@import "/imports/ui/stylesheets/variables/video"; + :root { --color-white-with-transparency: #ffffff40; } @@ -7,22 +9,33 @@ --cam-dropdown-width: 70%; --audio-indicator-width: 1.12rem; --audio-indicator-fs: 75%; - position: absolute; + position: relative; + width: 100%; top: 0; left: 0; right: 0; bottom: 0; - display: flex; align-items: center; justify-content: center; + min-height: calc(var(--video-width) / var(--video-ratio)); } .videoList { display: grid; + padding: 10px; + border-radius: 5px; + + min-height: calc(var(--video-width) / var(--video-ratio)); + + grid-template-columns: repeat(auto-fit, var(--video-width)); + grid-auto-columns: var(--video-width); + grid-auto-rows: calc(var(--video-width) / var(--video-ratio)); - grid-auto-flow: dense; grid-gap: 5px; + align-items: center; + justify-content: center; + @include mq($medium-up) { grid-gap: 10px; } @@ -30,21 +43,39 @@ .videoListItem { display: flex; - overflow: hidden; + max-width: fit-content; &.focused { grid-column: 1 / span 2; grid-row: 1 / span 2; + width: 100%; + min-width: 100%; + max-width: 100%; + height: 100%; + min-height: 100%; + max-height: 100%; } + + width: var(--video-width); + min-width: var(--video-width); + height: calc(var(--video-width) / var(--video-ratio)); + min-height: calc(var(--video-width) / var(--video-ratio)); } .content { position: relative; - display: flex; min-width: 100%; height: 100%; + min-height: 100%; border-radius: 5px; + background-color: var(--color-gray); + + width: var(--video-width); + min-width: var(--video-width); + height: calc(var(--video-width) / var(--video-ratio)); + min-height: calc(var(--video-width) / var(--video-ratio)); + &::after { content: ""; position: absolute; @@ -65,9 +96,26 @@ &.talking::after { opacity: 1; } + + .focused & { + width: 100%; + min-width: 100%; + max-width: 100%; + height: 100%; + min-height: 100%; + max-height: 100%; + } +} + +.contentLoading { + width: var(--video-width); + min-width: var(--video-width); + height: calc(var(--video-width) / var(--video-ratio)); + min-height: calc(var(--video-width) / var(--video-ratio)); } %media-area { + position: relative; height: 100%; width: 100%; @@ -76,8 +124,13 @@ } @keyframes spin { - from { transform: rotate(0deg); } - to { transform: rotate(-360deg); } + from { + transform: rotate(0deg); + } + + to { + transform: rotate(-360deg); + } } .connecting { @@ -88,13 +141,16 @@ font-size: 2.5rem; text-align: center; white-space: nowrap; + width: 100%; + height: 100%; + &::after { content: ''; display: inline-block; height: 100%; vertical-align: middle; - margin:0 -0.25em 0 0; + margin: 0 -0.25em 0 0; [dir="rtl"] & { margin: 0 0 0 -0.25em @@ -102,7 +158,8 @@ } &::before { - content: "\e949"; /* ascii code for the ellipsis character */ + content: "\e949"; + /* ascii code for the ellipsis character */ font-family: 'bbb-icons' !important; display: inline-block; @@ -128,14 +185,15 @@ z-index: 2; } -.dropdown, .dropdownFireFox { +.dropdown, +.dropdownFireFox { flex: 1; display: flex; outline: none !important; width: var(--cam-dropdown-width); @include mq($medium-up) { - > [aria-expanded] { + >[aria-expanded] { padding: .25rem; } } @@ -145,7 +203,8 @@ max-width: 100%; } -.dropdownTrigger, .userName { +.dropdownTrigger, +.userName { @extend %text-elipsis; position: relative; background-color: var(--color-black); @@ -176,7 +235,7 @@ .dropdownContent { min-width: 8.5rem; - + [dir="rtl"] & { right: 2rem; } @@ -212,7 +271,7 @@ } .webRTCStats { - background: rgba(0,0,0,0.85); + background: rgba(0, 0, 0, 0.85); padding: 15px; height: 100%; color: var(--color-white); @@ -237,4 +296,4 @@ .voice { background-color: var(--color-success); -} +} \ No newline at end of file diff --git a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx index 5a91960a8e2ce15424b3f22caa355f76a5085863..46a1d2b782561425485f8a2cb8a613e211bddb48 100755 --- a/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/video-provider/video-list/video-list-item/component.jsx @@ -31,15 +31,19 @@ class VideoListItem extends Component { this.state = { showStats: false, stats: { video: {} }, + videoIsReady: false, }; this.toggleStats = this.toggleStats.bind(this); this.setStats = this.setStats.bind(this); + this.setVideoIsReady = this.setVideoIsReady.bind(this); } componentDidMount() { const { onMount } = this.props; onMount(this.videoTag); + + this.videoTag.addEventListener('loadeddata', () => this.setVideoIsReady()); } componentDidUpdate() { @@ -72,6 +76,12 @@ class VideoListItem extends Component { this.setState({ stats: { ...stats, video, audio } }); } + setVideoIsReady() { + const { videoIsReady } = this.state; + if (!videoIsReady) this.setState({ videoIsReady: true }); + window.dispatchEvent(new Event('resize')); + } + getAvailableActions() { const { intl, @@ -118,7 +128,7 @@ class VideoListItem extends Component { } render() { - const { showStats, stats } = this.state; + const { showStats, stats, videoIsReady } = this.state; const { user, numOfUsers } = this.props; const availableActions = this.getAvailableActions(); const enableVideoMenu = Meteor.settings.public.kurento.enableVideoMenu || false; @@ -130,13 +140,17 @@ class VideoListItem extends Component { <div className={cx({ [styles.content]: true, [styles.talking]: user.isTalking, + [styles.contentLoading]: !videoIsReady, })} > - <div className={styles.connecting} /> + {!videoIsReady && <div className={styles.connecting} />} <video - className={styles.media} + muted + className={cx({ + [styles.media]: true, + [styles.contentLoading]: !videoIsReady, + })} ref={(ref) => { this.videoTag = ref; }} - muted={user.isCurrent} autoPlay playsInline /> @@ -173,8 +187,12 @@ class VideoListItem extends Component { {user.isMuted ? <Icon className={styles.muted} iconName="unmute_filled" /> : null} {user.isListenOnly ? <Icon className={styles.voice} iconName="listen" /> : null} </div> - {showStats ? <VideoListItemStats toggleStats={this.toggleStats} stats={stats} /> : null} - {this.renderFullscreenButton()} + { + showStats + ? <VideoListItemStats toggleStats={this.toggleStats} stats={stats} /> + : null + } + {videoIsReady && this.renderFullscreenButton()} </div> ); } @@ -189,7 +207,7 @@ VideoListItem.defaultProps = { VideoListItem.propTypes = { intl: intlShape.isRequired, enableVideoStats: PropTypes.bool.isRequired, - actions: PropTypes.arrayOf(PropTypes.func).isRequired, + actions: PropTypes.arrayOf(PropTypes.object).isRequired, user: PropTypes.objectOf(PropTypes.oneOfType([ PropTypes.bool, PropTypes.number, diff --git a/bigbluebutton-html5/imports/ui/components/waiting-users/component.jsx b/bigbluebutton-html5/imports/ui/components/waiting-users/component.jsx index 8c5d929f3f9bcf3225a886c9e3a5f72b649c878c..ba9c1272b7efce10e6345dfd0e329cd0d4b890d4 100755 --- a/bigbluebutton-html5/imports/ui/components/waiting-users/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/waiting-users/component.jsx @@ -216,10 +216,10 @@ const WaitingUsers = (props) => { )) } </div> - <div> - <label htmlFor="remiderUsersId" className={styles.rememberContainer}> - <input id="remiderUsersId" type="checkbox" onChange={onCheckBoxChange} /> - <p>{intl.formatMessage(intlMessages.rememberChoice)}</p> + <div className={styles.rememberContainer}> + <input id="rememderCheckboxId" type="checkbox" onChange={onCheckBoxChange} /> + <label htmlFor="rememderCheckboxId"> + {intl.formatMessage(intlMessages.rememberChoice)} </label> </div> {renderPendingUsers( diff --git a/bigbluebutton-html5/imports/ui/components/waiting-users/styles.scss b/bigbluebutton-html5/imports/ui/components/waiting-users/styles.scss index c5980f39186ed7d2318ffa28d027df83eda6ad19..520adccd9a4979d83da29865db09a489a962d2e5 100644 --- a/bigbluebutton-html5/imports/ui/components/waiting-users/styles.scss +++ b/bigbluebutton-html5/imports/ui/components/waiting-users/styles.scss @@ -153,20 +153,20 @@ width: 100%; } -.remenberContainer { - margin: 1rem 0; +.rememberContainer { + margin: 1rem 1rem; height: 2rem; display: flex; align-items: center; - & > p { + & > label { height: fit-content; padding: 0; margin: 0; - margin-left: .5rem; + margin-left: .7rem; [dir="rtl"] & { margin: 0; - margin-right: .5rem; + margin-right: .7rem; } } -} \ No newline at end of file +} diff --git a/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx index 6c0f0c9b862d032d60241a4803f5a02729ffc949..3196c0895b46f49955a246551a37b486a06fb005 100755 --- a/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx +++ b/bigbluebutton-html5/imports/ui/components/whiteboard/whiteboard-toolbar/component.jsx @@ -599,7 +599,7 @@ class WhiteboardToolbar extends Component { to={colorSelected.value} begin="indefinite" dur={TRANSITION_DURATION} - repeatCount="0" + repeatCount="1" fill="freeze" /> <animate @@ -610,7 +610,7 @@ class WhiteboardToolbar extends Component { to={thicknessSelected.value} begin="indefinite" dur={TRANSITION_DURATION} - repeatCount="0" + repeatCount="1" fill="freeze" /> </circle> @@ -692,7 +692,7 @@ class WhiteboardToolbar extends Component { to={colorSelected.value} begin="indefinite" dur={TRANSITION_DURATION} - repeatCount="0" + repeatCount="1" fill="freeze" /> </rect> diff --git a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js index 740fc59d84e4d17d1615a70896d4d92556898120..23e0201a875f7c6b2aaf6d983244874858c6350e 100755 --- a/bigbluebutton-html5/imports/ui/services/audio-manager/index.js +++ b/bigbluebutton-html5/imports/ui/services/audio-manager/index.js @@ -310,7 +310,7 @@ class AudioManager { this.onAudioJoin(); resolve(STARTED); } else if (status === ENDED) { - logger.debug({ logCode: 'audio_ended' }, 'Audio ended without issue'); + logger.info({ logCode: 'audio_ended' }, 'Audio ended without issue'); this.onAudioExit(); } else if (status === FAILED) { const errorKey = this.messages.error[error] || this.messages.error.GENERIC_ERROR; diff --git a/bigbluebutton-html5/imports/ui/services/auth/index.js b/bigbluebutton-html5/imports/ui/services/auth/index.js index 2113b849a965bf79b0ff13945dd3903e8beacc6a..700b8839e062e1f9c8bbf0f8556276a4634ddb0c 100755 --- a/bigbluebutton-html5/imports/ui/services/auth/index.js +++ b/bigbluebutton-html5/imports/ui/services/auth/index.js @@ -200,7 +200,6 @@ class Auth { return new Promise((resolve, reject) => { Meteor.connection.setUserId(`${this.meetingID}-${this.userID}`); let computation = null; - let currentUserHandler = null; const validationTimeout = setTimeout(() => { computation.stop(); @@ -212,10 +211,7 @@ class Auth { Tracker.autorun((c) => { computation = c; - - if (!currentUserHandler) { - currentUserHandler = Meteor.subscribe('current-user', this.credentials); - } + Meteor.subscribe('current-user', this.credentials); const selector = { meetingId: this.meetingID, userId: this.userID }; const User = Users.findOne(selector); diff --git a/bigbluebutton-html5/imports/ui/services/user/mapUser.js b/bigbluebutton-html5/imports/ui/services/user/mapUser.js index 435e907a41bcbf11ef84a372b840673ca75204e6..656914ef08f4a2163b59fc75a3d3e160725261b7 100755 --- a/bigbluebutton-html5/imports/ui/services/user/mapUser.js +++ b/bigbluebutton-html5/imports/ui/services/user/mapUser.js @@ -33,6 +33,7 @@ const mapUser = (user) => { loginTime: user.loginTime, effectiveConnectionType: user.effectiveConnectionType, externalUserId: user.extId, + isBreakoutUser: user.breakoutProps.isBreakoutUser, }; mappedUser.isLocked = user.locked && !(mappedUser.isPresenter || mappedUser.isModerator); diff --git a/bigbluebutton-html5/imports/ui/stylesheets/variables/video.scss b/bigbluebutton-html5/imports/ui/stylesheets/variables/video.scss new file mode 100644 index 0000000000000000000000000000000000000000..c524e6ae29984ca6c66fb1949ee06ece67358bf0 --- /dev/null +++ b/bigbluebutton-html5/imports/ui/stylesheets/variables/video.scss @@ -0,0 +1,13 @@ +@import "../../stylesheets/variables/_all"; + +:root { + --video-width: 10vw; + --video-ratio: calc(4 / 3); +} + + +@include mq($small-only) { + :root { + --video-width: 20vw; + } +} \ No newline at end of file diff --git a/bigbluebutton-html5/imports/utils/sdpUtils.js b/bigbluebutton-html5/imports/utils/sdpUtils.js index 454c905ca18536914b6c4449dc9e42b448b550e0..a079f0e8cb837d99d3cf0283ffd69561924a9bcc 100644 --- a/bigbluebutton-html5/imports/utils/sdpUtils.js +++ b/bigbluebutton-html5/imports/utils/sdpUtils.js @@ -1,5 +1,5 @@ -import Interop from '@jitsi/sdp-interop' -import transform from 'sdp-transform' +import Interop from '@jitsi/sdp-interop'; +import transform from 'sdp-transform'; import logger from '/imports/startup/client/logger'; // sdp-interop library for unified-plan <-> plan-b translation @@ -8,9 +8,7 @@ const interop = new Interop.Interop(); // Some heuristics to determine if the input SDP is Unified Plan const isUnifiedPlan = (sdp) => { const parsedSDP = transform.parse(sdp); - if (parsedSDP.media.length <= 3 && parsedSDP.media.every((m) => { - return ['video', 'audio', 'data'].indexOf(m.mid) !== -1; - })) { + if (parsedSDP.media.length <= 3 && parsedSDP.media.every(m => ['video', 'audio', 'data'].indexOf(m.mid) !== -1)) { logger.info({ logCode: 'sdp_utils_not_unified_plan' }, 'SDP does not look like Unified Plan'); return false; } @@ -18,14 +16,12 @@ const isUnifiedPlan = (sdp) => { logger.info({ logCode: 'sdp_utils_is_unified_plan' }, 'SDP looks like Unified Plan'); return true; -} +}; // Some heuristics to determine if the input SDP is Plan B const isPlanB = (sdp) => { const parsedSDP = transform.parse(sdp); - if (parsedSDP.media.length > 3 || !parsedSDP.media.every((m) => { - return ['video', 'audio', 'data'].indexOf(m.mid) !== -1; - })) { + if (parsedSDP.media.length > 3 || !parsedSDP.media.every(m => ['video', 'audio', 'data'].indexOf(m.mid) !== -1)) { logger.info({ logCode: 'sdp_utils_not_plan_b' }, 'SDP does not look like Plan B'); return false; } @@ -33,7 +29,7 @@ const isPlanB = (sdp) => { logger.info({ logCode: 'sdp_utils_is_plan_b' }, 'SDP looks like Plan B'); return true; -} +}; // Specific method for translating FS SDPs from Plan B to Unified Plan (vice-versa) @@ -41,12 +37,32 @@ const toPlanB = (unifiedPlanSDP) => { const planBSDP = interop.toPlanB(unifiedPlanSDP); logger.info({ logCode: 'sdp_utils_unified_plan_to_plan_b' }, `Converted Unified Plan to Plan B ${JSON.stringify(planBSDP)}`); return planBSDP; -} +}; const toUnifiedPlan = (planBSDP) => { const unifiedPlanSDP = interop.toUnifiedPlan(planBSDP); logger.info({ logCode: 'sdp_utils_plan_b_to_unified_plan' }, `Converted Plan B to Unified Plan ${JSON.stringify(unifiedPlanSDP)}`); return unifiedPlanSDP; -} +}; -export { interop, isUnifiedPlan, toPlanB, toUnifiedPlan }; +const stripMDnsCandidates = (sdp) => { + const parsedSDP = transform.parse(sdp); + let strippedCandidates = 0; + parsedSDP.media.forEach((media) => { + media.candidates = media.candidates.filter((candidate) => { + if (candidate.ip && candidate.ip.indexOf('.local') === -1) { + return true; + } + strippedCandidates += 1; + return false; + }); + }); + if (strippedCandidates > 0) { + logger.info({ logCode: 'sdp_utils_mdns_candidate_strip' }, `Stripped ${strippedCandidates} mDNS candidates`); + } + return transform.write(parsedSDP); +}; + +export { + interop, isUnifiedPlan, toPlanB, toUnifiedPlan, stripMDnsCandidates, +}; diff --git a/bigbluebutton-html5/package-lock.json b/bigbluebutton-html5/package-lock.json index d4ddff00407ce4ae3b0a85b9c8df4ac57c15c219..25db4498cf3fc19647d63d3e14871b60d692048d 100644 --- a/bigbluebutton-html5/package-lock.json +++ b/bigbluebutton-html5/package-lock.json @@ -139,7 +139,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -466,6 +466,12 @@ "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -526,19 +532,12 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" }, "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz", + "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==", "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - }, - "dependencies": { - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - } + "follow-redirects": "1.5.10", + "is-buffer": "^2.0.2" } }, "axobject-query": { @@ -653,7 +652,7 @@ }, "bl": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", + "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { @@ -831,7 +830,7 @@ "dependencies": { "callsites": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true } @@ -912,6 +911,24 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, + "chrome-remote-interface": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/chrome-remote-interface/-/chrome-remote-interface-0.25.7.tgz", + "integrity": "sha512-6zI6LbR2IiGmduFZededaerEr9hHXabxT/L+fRrdq65a0CfyLMzpq0BKuZiqN0Upqcacsb6q2POj7fmobwBsEA==", + "dev": true, + "requires": { + "commander": "2.11.x", + "ws": "3.3.x" + }, + "dependencies": { + "commander": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", + "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", + "dev": true + } + } + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -1491,7 +1508,7 @@ }, "enabled": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", + "resolved": "http://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", "requires": { "env-variable": "0.0.x" @@ -2095,7 +2112,7 @@ }, "fecha": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", + "resolved": "http://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, "fibers": { @@ -2196,25 +2213,20 @@ "dev": true }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", "requires": { - "debug": "^3.2.6" + "debug": "=3.1.0" }, "dependencies": { "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "requires": { - "ms": "^2.1.1" + "ms": "2.0.0" } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" } } }, @@ -2412,7 +2424,7 @@ }, "globby": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { @@ -3245,6 +3257,12 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -3266,6 +3284,22 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "jasmine": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.4.0.tgz", + "integrity": "sha512-sR9b4n+fnBFDEd7VS2el2DeHgKcPiMVn44rtKFumq9q7P/t8WrxsVIZPob4UDdgcDNCwyDqwxCt4k9TDRmjPoQ==", + "dev": true, + "requires": { + "glob": "^7.1.3", + "jasmine-core": "~3.4.0" + } + }, + "jasmine-core": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.4.0.tgz", + "integrity": "sha512-HU/YxV4i6GcmiH4duATwAbJQMlE0MsDIR5XmSVxURxKHn3aGAdbY1/ZJFmVRbKtnLwIxxMJD7gYaPsypcbYimg==", + "dev": true + }, "jimp": { "version": "0.2.28", "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.2.28.tgz", @@ -3568,7 +3602,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -4577,6 +4611,15 @@ } } }, + "node-netstat": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-netstat/-/node-netstat-1.6.0.tgz", + "integrity": "sha512-KPDopkvPllhcILoHMWYUxvOO5c+VcPB38LxlOFPiZhZ/hJTMH/GXGCs6nvxu4d6unwsbEfgzJ4pPye3CFv9yTg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, "node-releases": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.1.tgz", @@ -4689,7 +4732,7 @@ }, "npm-install-package": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", + "resolved": "http://registry.npmjs.org/npm-install-package/-/npm-install-package-2.1.0.tgz", "integrity": "sha1-1+/jz816sAYUuJbqUxGdyaslkSU=", "dev": true }, @@ -4872,7 +4915,7 @@ "dependencies": { "minimist": { "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, @@ -5448,6 +5491,15 @@ "scheduler": "^0.13.1" } }, + "react-draggable": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-draggable/-/react-draggable-3.1.1.tgz", + "integrity": "sha512-tqIgDUm4XPSFbxelYpcsnayPU79P26ChnszDl5/RDFKfMuHnRxypS+OFfEyAEO1CtqaB3lrecQ2dyNIE2G0TlQ==", + "requires": { + "classnames": "^2.2.5", + "prop-types": "^15.6.0" + } + }, "react-dropzone": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-7.0.1.tgz", @@ -5913,7 +5965,7 @@ }, "safe-regex": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { @@ -6744,6 +6796,12 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==", + "dev": true + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", @@ -6928,12 +6986,34 @@ "loose-envify": "^1.0.0" } }, + "wdio-devtools-service": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/wdio-devtools-service/-/wdio-devtools-service-0.1.6.tgz", + "integrity": "sha512-6SpiFf7QcBmUINV63ezgahpohH00NG6MpEm5OkWQrtAmqUOkFxQvpAk2pGk/4JdXXoj5s/AeSF6v5ILa8IxLTA==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "chrome-remote-interface": "^0.25.3", + "node-netstat": "^1.4.2" + } + }, "wdio-dot-reporter": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/wdio-dot-reporter/-/wdio-dot-reporter-0.0.10.tgz", "integrity": "sha512-A0TCk2JdZEn3M1DSG9YYbNRcGdx/YRw19lTiRpgwzH4qqWkO/oRDZRmi3Snn4L2j54KKTfPalBhlOtc8fojVgg==", "dev": true }, + "wdio-jasmine-framework": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/wdio-jasmine-framework/-/wdio-jasmine-framework-0.3.8.tgz", + "integrity": "sha512-oOM/h8HcXdmbFEZcm2Cm3rKxaz9o0KDk7pMwJ3Coqk29qDUwaUChZHrF3L1ls1mTxL28o5q8ad+Fbm6d4Kzdvg==", + "dev": true, + "requires": { + "babel-runtime": "6.26.0", + "jasmine": "^3.3.0", + "wdio-sync": "0.7.3" + } + }, "wdio-junit-reporter": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/wdio-junit-reporter/-/wdio-junit-reporter-0.4.4.tgz", @@ -6973,6 +7053,17 @@ "humanize-duration": "~3.15.0" } }, + "wdio-sync": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/wdio-sync/-/wdio-sync-0.7.3.tgz", + "integrity": "sha512-ukASSHOQmOxaz5HTILR0jykqlHBtAPsBpMtwhpiG0aW9uc7SO7PF+E5LhVvTG4ypAh+UGmY3rTjohOsqDr39jw==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "fibers": "^3.0.0", + "object.assign": "^4.0.3" + } + }, "wdio-visual-regression-service": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/wdio-visual-regression-service/-/wdio-visual-regression-service-0.9.0.tgz", @@ -6990,9 +7081,9 @@ } }, "webdriver-manager": { - "version": "12.1.1", - "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.1.tgz", - "integrity": "sha512-L9TEQmZs6JbMMRQI1w60mfps265/NCr0toYJl7p/R2OAk6oXAfwI6jqYP7EWae+d7Ad2S2Aj4+rzxoSjqk3ZuA==", + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/webdriver-manager/-/webdriver-manager-12.1.4.tgz", + "integrity": "sha512-aNUzdimlHSl3EotUTdE2QwP9sBUjZgWPCy8C+m1wMmF9jBDKuO/24nnpr2O25Db8dYtsjvj9drPTpSIGqRrNnQ==", "dev": true, "requires": { "adm-zip": "^0.4.9", @@ -7016,7 +7107,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -7044,7 +7135,7 @@ }, "globby": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "resolved": "http://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", "dev": true, "requires": { @@ -7114,7 +7205,7 @@ }, "external-editor": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", "dev": true, "requires": { @@ -7274,6 +7365,17 @@ "mkdirp": "^0.5.1" } }, + "ws": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz", + "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0", + "ultron": "~1.1.0" + } + }, "xhr": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.5.0.tgz", diff --git a/bigbluebutton-html5/package.json b/bigbluebutton-html5/package.json index 406f8121a9c349e9d0b42c62cb592ae7f1875e79..9d5a95055bb37c3a521e0072ec773c083e611154 100755 --- a/bigbluebutton-html5/package.json +++ b/bigbluebutton-html5/package.json @@ -9,7 +9,7 @@ "generate-refs-visual-regression-desktop": "rm -rf tests/webdriverio/screenshots; npm run test-visual-regression-desktop", "start:prod": "meteor reset && ROOT_URL=http://127.0.0.1/html5client NODE_ENV=production meteor --production", "start:dev": "ROOT_URL=http://127.0.0.1/html5client NODE_ENV=development meteor", - "test": "jest", + "test": "wdio ./tests/webdriverio/wdio.conf.js", "lint": "eslint . --ext .jsx,.js" }, "meteor": { @@ -28,6 +28,7 @@ } }, "dependencies": { + "axios": "^0.19.0", "@babel/runtime": "^7.3.1", "@browser-bunyan/server-stream": "^1.5.0", "autoprefixer": "~9.3.1", @@ -55,6 +56,7 @@ "react-autosize-textarea": "^5.0.1", "react-color": "^2.17.0", "react-dom": "^16.8.1", + "react-draggable": "^3.1.1", "react-dropzone": "^7.0.1", "react-intl": "~2.7.2", "react-modal": "~3.6.1", @@ -72,7 +74,6 @@ "tippy.js": "^3.4.1", "useragent": "^2.3.0", "winston": "^3.2.1", - "axios": "^0.18.0", "yaml": "^1.3.2" }, "devDependencies": { @@ -89,10 +90,12 @@ "postcss-modules-local-by-default": "1.2.0", "postcss-modules-scope": "1.1.0", "postcss-modules-values": "1.3.0", + "wdio-devtools-service": "^0.1.6", + "wdio-jasmine-framework": "^0.3.8", "wdio-junit-reporter": "~0.4.4", "wdio-spec-reporter": "^0.1.5", "wdio-visual-regression-service": "~0.9.0", - "webdriver-manager": "^12.1.1", + "webdriver-manager": "^12.1.4", "webdriverio": "^4.14.2" }, "cssModules": { diff --git a/bigbluebutton-html5/private/config/settings.yml b/bigbluebutton-html5/private/config/settings.yml index 8c45ed80c8d2ccb5f53ace925adf8f85f3862704..9951e506b1782c9ea3b48be3b1bd0b803e6a3e4d 100755 --- a/bigbluebutton-html5/private/config/settings.yml +++ b/bigbluebutton-html5/private/config/settings.yml @@ -358,4 +358,4 @@ private: - browser: safari version: [11, 1] - browser: electron - version: [0, 36] \ No newline at end of file + version: [0, 36] diff --git a/bigbluebutton-html5/private/locales/ar.json b/bigbluebutton-html5/private/locales/ar.json index cb5d3753813ce4ca5ed3ccd84d3a3b9d7e15499f..df6405fb84ffd8d30a5c6026bab9dc326d01bfa7 100644 --- a/bigbluebutton-html5/private/locales/ar.json +++ b/bigbluebutton-html5/private/locales/ar.json @@ -19,6 +19,11 @@ "app.chat.offline": "غير متصل", "app.chat.emptyLogLabel": "سجل دردشة Ùارغة", "app.chat.clearPublicChatMessage": "تم Ù…Ø³Ø ØªØ§Ø±ÙŠØ® الدردشة من قبل المشرÙ", + "app.captions.menu.close": "غلق", + "app.captions.menu.backgroundColor": "لون الخلÙية", + "app.captions.menu.cancelLabel": "إلغاء", + "app.captions.pad.tip": "اضغط المÙØªØ§Ø Esc للتركيز علي شريط أدوات المØرر", + "app.captions.pad.ownership": "التملك", "app.note.title": "ملاØظات مشتركة", "app.note.label": "ملاØظة", "app.note.hideNoteLabel": "إخÙاء الملاØظة", @@ -107,8 +112,7 @@ "app.presentation.presentationToolbar.fitToPage": "المناسبة للصÙØØ©", "app.presentation.presentationToolbar.goToSlide": "شريØØ© {0}", "app.presentationUploder.title": "عرض", - "app.presentationUploder.message": "كمقدم ÙÙŠ BigBlueButton ØŒ لديك القدرة على رÙع أي مستند مكتب أو مل٠PDF. نوصي بتØميل مل٠PDF للØصول على Ø£Ùضل نتائج.", - "app.presentationUploder.confirmLabel": "رÙع", + "app.presentationUploder.uploadLabel": "رÙع", "app.presentationUploder.confirmDesc": "ØÙظ التغييرات وبدء العرض", "app.presentationUploder.dismissLabel": "إلغاء", "app.presentationUploder.dismissDesc": "أغلق الناÙذة الشتراطية وتجاهل التغييرات", @@ -119,7 +123,6 @@ "app.presentationUploder.fileToUpload": "وسيتم رÙعها ...", "app.presentationUploder.currentBadge": "Øالي", "app.presentationUploder.genericError": "عÙوا، Øدث خطأ ما", - "app.presentationUploder.rejectedError": "بعض الملÙات المختارة تم رÙضها. الرجاء التأكد من نوع الملÙ", "app.presentationUploder.upload.progress": "رÙع ({0}Ùª)", "app.presentationUploder.upload.413": "المل٠كبير جدا", "app.presentationUploder.conversion.conversionProcessingSlides": "معالجة الصÙØØ© {0} من {1}", @@ -162,6 +165,15 @@ "app.poll.a3": "Ø£ / ب / ج", "app.poll.a4": "Ø£ / ب / ج / د", "app.poll.a5": "Ø£ / ب / ج / د / Ù‡", + "app.poll.answer.true": "صواب", + "app.poll.answer.false": "خطأ", + "app.poll.answer.yes": "نعم", + "app.poll.answer.no": "لا", + "app.poll.answer.a": "Ø£", + "app.poll.answer.b": "ب", + "app.poll.answer.c": "ج", + "app.poll.answer.d": "د", + "app.poll.answer.e": "Ù‡", "app.poll.liveResult.usersTitle": "المستخدمون", "app.poll.liveResult.responsesTitle": "الإجابة", "app.polling.pollingTitle": "خيارات التصويت", @@ -223,6 +235,7 @@ "app.submenu.application.fontSizeControlLabel": "Øجم الخط", "app.submenu.application.increaseFontBtnLabel": "زيادة Øجم خط التطبيق", "app.submenu.application.decreaseFontBtnLabel": "تقليص Øجم خط التطبيق", + "app.submenu.application.currentSize": "Øاليا {0}", "app.submenu.application.languageLabel": "لغة التطبيق", "app.submenu.application.ariaLanguageLabel": "تغيير لغة التطبيق", "app.submenu.application.languageOptionLabel": "اختيار اللغة", @@ -236,18 +249,6 @@ "app.submenu.video.videoQualityLabel": "جودة الÙيديو", "app.submenu.video.qualityOptionLabel": "اختيار جودة الÙيديو", "app.submenu.video.participantsCamLabel": "عرض كاميرات ويب المشاركين ", - "app.submenu.closedCaptions.closedCaptionsLabel": "التعليقات", - "app.submenu.closedCaptions.takeOwnershipLabel": "التملك", - "app.submenu.closedCaptions.languageLabel": "لغة", - "app.submenu.closedCaptions.localeOptionLabel": "اختيار اللغة", - "app.submenu.closedCaptions.noLocaleOptionLabel": "لا توجد لغات نشطة", - "app.submenu.closedCaptions.fontFamilyLabel": "نوع الخط", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "اختيار نوع الخط", - "app.submenu.closedCaptions.fontSizeLabel": "Øجم الخط", - "app.submenu.closedCaptions.fontSizeOptionLabel": "اختيار Øجم الخط", - "app.submenu.closedCaptions.backgroundColorLabel": "لون الخلÙية", - "app.submenu.closedCaptions.fontColorLabel": "لون الخط", - "app.submenu.closedCaptions.noLocaleSelected": "لم يتم اختيار لغة", "app.submenu.participants.muteAllLabel": "كتم الكل باستثناء المقدم", "app.submenu.participants.lockAllLabel": "اقÙÙ„ جميع المشاهدين", "app.submenu.participants.lockItemLabel": "المشاهدون {0}", @@ -269,7 +270,6 @@ "app.settings.applicationTab.label": "التطبيق", "app.settings.audioTab.label": "الصوت", "app.settings.videoTab.label": "Ùيديو", - "app.settings.closedcaptionTab.label": "التعليقات", "app.settings.usersTab.label": "المشاركون", "app.settings.main.label": "الإعدادات", "app.settings.main.cancel.label": "إلغاء", @@ -339,7 +339,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "تم Ù‚ÙÙ„ صوت المشاهدين، Øيث يتم اتصالك بالاستماع Ùقط", "app.breakoutJoinConfirmation.title": "انضم إلى الغرÙØ© المÙرقة", "app.breakoutJoinConfirmation.message": "هل تود الانضمام", - "app.breakoutJoinConfirmation.confirmLabel": "انضم", "app.breakoutJoinConfirmation.confirmDesc": "انضم إليكم إلى الغرÙØ© المÙرقة", "app.breakoutJoinConfirmation.dismissLabel": "إلغاء", "app.breakoutJoinConfirmation.dismissDesc": "يغلق ويرÙض الانضمام إلى الغرÙØ© المÙرقة", @@ -405,6 +404,7 @@ "app.modal.close": "غلق", "app.modal.close.description": "تجاهل التغييرات Ùˆ غلق الناÙذة", "app.modal.confirm": "تم", + "app.modal.newTab": "(ÙØªØ Ø¹Ù„Ø§Ù…Ø© تبويب جديدة)", "app.modal.confirm.description": "ØÙظ التغييرات وغلق الناÙذة", "app.dropdown.close": "غلق", "app.error.400": "طلب خاطئ", @@ -593,16 +593,21 @@ "app.createBreakoutRoom.freeJoin": "Ø§Ù„Ø³Ù…Ø§Ø Ù„Ù„Ù…Ø³ØªØ®Ø¯Ù…ÙŠÙ† باختيار الغرÙØ© المÙرقة الذين يودون الالتØاق بها", "app.createBreakoutRoom.leastOneWarnBreakout": "يجب وضع مستخدم واØد علي الأقل ÙÙŠ غرÙØ© Ù…Ùرقة.", "app.createBreakoutRoom.modalDesc": "أكمل الخطوات التالية لإنشاء غر٠ÙÙŠ جلستك ØŒ لأضاÙØ© مشاركين إلى غرÙØ©.", + "app.createBreakoutRoom.roomTime": "{0} دقيقة", "app.externalVideo.start": "مشاركة Ùيديو جديد", "app.externalVideo.title": "مشاركة Ùيديو YouTube", "app.externalVideo.input": "رابط الÙيديو YouTube", "app.externalVideo.urlInput": "إضاÙØ© Ùيديو YouTube", "app.externalVideo.urlError": "الرايط ليس Ùيديو YouTube صالØ", "app.externalVideo.close": "غلق", + "app.network.connection.effective.slow": "نلاØظ مشاكل ÙÙŠ الاتصال", + "app.network.connection.effective.slow.help": "كيÙية إصلاØه؟", "app.externalVideo.noteLabel": "ملاØظة: لن تظهر مقاطع Ùيديو YouTube المشتركة ÙÙŠ التسجيل", "app.actionsBar.actionsDropdown.shareExternalVideo": "مشاركة Ùيديو YouTube", "app.actionsBar.actionsDropdown.stopShareExternalVideo": "إيقا٠مشاركة Ùيديو YouTube", "app.iOSWarning.label": "يرجى الترقية إلى iOS 12.2 أو اعلى", "app.legacy.unsupportedBrowser": "يبدو انك تستخدم مستعرضا غير معتمد. الرجاء استخدام {0} أو {1} للØصول علي الدعم الكامل.", "app.legacy.upgradeBrowser": "يبدو انك تستخدم إصدارا قديما من مستعرض معتمد. الرجاء ترقيه المتصÙØ Ù„Ù„Øصول علي الدعم الكامل." + } + diff --git a/bigbluebutton-html5/private/locales/bg_BG.json b/bigbluebutton-html5/private/locales/bg_BG.json index ff8b310b967db17bd3818a29c437bd4924455dfd..cd690caabc554d020079f72302bee2857790eb0c 100644 --- a/bigbluebutton-html5/private/locales/bg_BG.json +++ b/bigbluebutton-html5/private/locales/bg_BG.json @@ -12,6 +12,10 @@ "app.chat.dropdown.save": "Save", "app.chat.label": "Chat", "app.chat.emptyLogLabel": "Chat log empty", + "app.captions.menu.close": "Close", + "app.captions.menu.backgroundColor": "Background color", + "app.captions.menu.cancelLabel": "Cancel", + "app.captions.pad.ownership": "Take ownership", "app.userList.usersTitle": "Потребители", "app.userList.participantsTitle": "Participants", "app.userList.messagesTitle": "СъобщениÑ", @@ -81,14 +85,6 @@ "app.submenu.video.videoOptionLabel": "Choose view source", "app.submenu.video.qualityOptionLabel": "Choose the video quality", "app.submenu.video.participantsCamLabel": "Viewing participants webcams", - "app.submenu.closedCaptions.takeOwnershipLabel": "Take ownership", - "app.submenu.closedCaptions.languageLabel": "Language", - "app.submenu.closedCaptions.localeOptionLabel": "Choose language", - "app.submenu.closedCaptions.noLocaleOptionLabel": "No active locales", - "app.submenu.closedCaptions.fontFamilyLabel": "Font family", - "app.submenu.closedCaptions.fontSizeLabel": "Font size", - "app.submenu.closedCaptions.backgroundColorLabel": "Background color", - "app.submenu.closedCaptions.fontColorLabel": "Font color", "app.submenu.participants.muteAllLabel": "Mute all except the presenter", "app.submenu.participants.lockMicAriaLabel": "Microphone lock", "app.submenu.participants.lockCamAriaLabel": "Webcam lock", @@ -138,7 +134,6 @@ "app.audioNotification.audioFailedMessage": "Your audio connection failed to connect", "app.audioNotification.closeLabel": "Close", "app.breakoutJoinConfirmation.message": "Do you want to join", - "app.breakoutJoinConfirmation.confirmLabel": "Join", "app.breakoutJoinConfirmation.dismissLabel": "Cancel", "app.audioModal.microphoneLabel": "Microphone", "app.audioModal.audioChoiceLabel": "How would you like to join the audio?", diff --git a/bigbluebutton-html5/private/locales/cs_CZ.json b/bigbluebutton-html5/private/locales/cs_CZ.json index 012eaf11f8033326bd41d83fcb6411e9170669e6..b0c68eb82fc48fd31f7145197f660da3125cd303 100644 --- a/bigbluebutton-html5/private/locales/cs_CZ.json +++ b/bigbluebutton-html5/private/locales/cs_CZ.json @@ -18,6 +18,11 @@ "app.chat.label": "Chat", "app.chat.emptyLogLabel": "Log chatu je prázdný", "app.chat.clearPublicChatMessage": "Historie chatu byla smazána moderátorem", + "app.captions.menu.close": "ZavÅ™Ãt", + "app.captions.menu.start": "Start", + "app.captions.menu.backgroundColor": "Barva pozadÃ", + "app.captions.menu.cancelLabel": "ZruÅ¡it", + "app.captions.pad.ownership": "PÅ™evzÃt kontrolu nad titulky", "app.note.title": "SdÃlené poznámky", "app.note.label": "Poznámka", "app.note.hideNoteLabel": "Schovat poznámky", @@ -96,7 +101,6 @@ "app.presentationUploder.fileToUpload": "K nahrávánÃ...", "app.presentationUploder.currentBadge": "AktuálnÃ", "app.presentationUploder.genericError": "O ou, nÄ›co se nepovedlo.", - "app.presentationUploder.rejectedError": "NÄ›které z vybraných souborů byly odmÃtnuty. ProsÃm zkontrolujte typ souborů (mime).", "app.presentationUploder.upload.progress": "Nahrávánà ({0}%)", "app.presentationUploder.conversion.conversionProcessingSlides": "Zpracovávám stránku {0} z {1}", "app.presentationUploder.conversion.genericConversionStatus": "Zpracovánà souboru...", @@ -124,6 +128,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.yes": "Ano, ukonÄit", + "app.poll.answer.no": "Ne", "app.poll.liveResult.usersTitle": "Uživatelé", "app.poll.liveResult.responsesTitle": "OdpovÄ›Ä", "app.polling.pollingTitle": "Možnosti hlasovánÃ", @@ -194,18 +200,6 @@ "app.submenu.video.videoQualityLabel": "Kvalita videa", "app.submenu.video.qualityOptionLabel": "Vyberte kvalitu videa", "app.submenu.video.participantsCamLabel": "Webkamery úÄastnÃků", - "app.submenu.closedCaptions.closedCaptionsLabel": "Titulky", - "app.submenu.closedCaptions.takeOwnershipLabel": "PÅ™evzÃt kontrolu nad titulky", - "app.submenu.closedCaptions.languageLabel": "Jazyk", - "app.submenu.closedCaptions.localeOptionLabel": "Vyberte jazyk", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Žádné jazyky k dispozici", - "app.submenu.closedCaptions.fontFamilyLabel": "PÃsmo", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Zvolte rodinu pÃsma", - "app.submenu.closedCaptions.fontSizeLabel": "Velikost pÃsma", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Zvolte velikost pÃsma", - "app.submenu.closedCaptions.backgroundColorLabel": "Barva pozadÃ", - "app.submenu.closedCaptions.fontColorLabel": "Barva pÃsma", - "app.submenu.closedCaptions.noLocaleSelected": "Nevybrán žádný jazyk", "app.submenu.participants.muteAllLabel": "Ztlumit vÅ¡echny kromÄ› pÅ™ednášejÃcÃho", "app.submenu.participants.lockAllLabel": "Uzamknout vÅ¡echny posluchaÄe", "app.submenu.participants.lockItemLabel": "PosluchaÄi {0}", @@ -227,7 +221,6 @@ "app.settings.applicationTab.label": "Aplikace", "app.settings.audioTab.label": "Audio", "app.settings.videoTab.label": "Video", - "app.settings.closedcaptionTab.label": "Titulky", "app.settings.usersTab.label": "ÚÄastnÃci", "app.settings.main.label": "NastavenÃ", "app.settings.main.cancel.label": "ZruÅ¡it", @@ -292,7 +285,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "Použità mikrofonu pro posluchaÄe je uzamÄeno, jste proto pÅ™ipojováni pouze pro poslech", "app.breakoutJoinConfirmation.title": "PÅ™ipojit se do vedlejÅ¡Ã mÃstnosti", "app.breakoutJoinConfirmation.message": "Chcete se pÅ™ipojit", - "app.breakoutJoinConfirmation.confirmLabel": "PÅ™ipojit", "app.breakoutJoinConfirmation.confirmDesc": "PÅ™ipojit se do vedlejÅ¡Ã mÃstnosti", "app.breakoutJoinConfirmation.dismissLabel": "ZruÅ¡it", "app.breakoutJoinConfirmation.dismissDesc": "ZavÅ™Ãt a nepÅ™ipojovat se do vedlejÅ¡Ã mÃstnosti", diff --git a/bigbluebutton-html5/private/locales/de.json b/bigbluebutton-html5/private/locales/de.json index 0c40ab6f14408c32a894aec385b51fd801663097..5dc5cb731757928975193968b0271f96d573b0ec 100644 --- a/bigbluebutton-html5/private/locales/de.json +++ b/bigbluebutton-html5/private/locales/de.json @@ -16,8 +16,23 @@ "app.chat.dropdown.copy": "Kopieren", "app.chat.dropdown.save": "Speichern", "app.chat.label": "Chat", + "app.chat.offline": "Offline", "app.chat.emptyLogLabel": "Chat-Log ist leer", "app.chat.clearPublicChatMessage": "Der öffentliche Chatverlauf wurde durch einen Moderator gelöscht", + "app.captions.label": "Untertitel", + "app.captions.menu.close": "Schließen", + "app.captions.menu.start": "Start", + "app.captions.menu.select": "Verfügbare Sprache auswählen", + "app.captions.menu.title": "Untertitelmenü", + "app.captions.menu.fontSize": "Größe", + "app.captions.menu.fontColor": "Schriftfarbe", + "app.captions.menu.fontFamily": "Schriftart", + "app.captions.menu.backgroundColor": "Hintergrundfarbe", + "app.captions.menu.previewLabel": "Vorschau", + "app.captions.menu.cancelLabel": "Abbrechen", + "app.captions.pad.hide": "Untertitel verbergen", + "app.captions.pad.tip": "Drücken Sie Esc um die Editorwerkzeugliste auszuwählen", + "app.captions.pad.ownership": "Untertitelkontrolle übernehmen", "app.note.title": "Geteilte Notizen", "app.note.label": "Notiz", "app.note.hideNoteLabel": "Notiz verbergen", @@ -29,6 +44,7 @@ "app.userList.participantsTitle": "Teilnehmer", "app.userList.messagesTitle": "Nachrichten", "app.userList.notesTitle": "Notizen", + "app.userList.captionsTitle": "Untertitel", "app.userList.presenter": "Präsentator", "app.userList.you": "Sie", "app.userList.locked": "Gesperrt", @@ -67,6 +83,12 @@ "app.userList.userOptions.disablePubChat": "Öffentlicher Chat ist deaktiviert", "app.userList.userOptions.disableNote": "Geteilte Notizen sind jetzt gesperrt", "app.userList.userOptions.webcamsOnlyForModerator": "Nur Moderatoren können die Teilnehmerwebcams sehen (wegen eingeschränkter Rechteeinstellungen)", + "app.userList.userOptions.enableCam": "Teilnehmer dürfen ihre Webcam verwenden", + "app.userList.userOptions.enableMic": "Teilnehmer dürfen ihr Mikrofon verwenden", + "app.userList.userOptions.enablePrivChat": "Privater Chat ist erlaubt", + "app.userList.userOptions.enablePubChat": "Öffentlicher Chat ist erlaubt", + "app.userList.userOptions.enableNote": "Geteilte Notizen sind erlaubt", + "app.userList.userOptions.enableOnlyModeratorWebcam": "Sie können Ihre Webcam jetzt freigeben, jeder wird Sie sehen.", "app.media.label": "Media", "app.media.screenshare.start": "Bildschirmfreigabe wurde gestartet", "app.media.screenshare.end": "Bildschirmfreigabe wurde gestoppt", @@ -106,8 +128,9 @@ "app.presentation.presentationToolbar.fitToPage": "An Seite anpassen", "app.presentation.presentationToolbar.goToSlide": "Folie {0}", "app.presentationUploder.title": "Präsentation", - "app.presentationUploder.message": "Als Präsentator in BigBlueButton haben sie die Möglichkeit Office-Dokumente oder PDF-Dateien hochzuladen. PDF-Dateien haben dabei die bessere Qualität.", - "app.presentationUploder.confirmLabel": "Hochladen", + "app.presentationUploder.message": "Als Präsentator in BigBlueButton haben Sie die Möglichkeit Office-Dokumente oder PDF-Dateien hochzuladen. PDF-Dateien haben dabei die bessere Qualität. Bitte stellen Sie sicher, dass eine Präsentation durch das runde Markierungsfeld auf der rechten Seite ausgewählt ist.", + "app.presentationUploder.uploadLabel": "Hochladen", + "app.presentationUploder.confirmLabel": "Bestätigen", "app.presentationUploder.confirmDesc": "Änderungen speichern und Präsentation starten", "app.presentationUploder.dismissLabel": "Abbrechen", "app.presentationUploder.dismissDesc": "Fenster schließen und Änderungen verwerfen", @@ -118,7 +141,7 @@ "app.presentationUploder.fileToUpload": "Wird hochgeladen...", "app.presentationUploder.currentBadge": "Aktuell", "app.presentationUploder.genericError": "Ups, irgendwas ist schief gelaufen", - "app.presentationUploder.rejectedError": "Einige der ausgewählten Dateien wurden zurückgewiesen. Bitte prüfen Sie die Datei-Mime-Typen", + "app.presentationUploder.rejectedError": "Die ausgewählten Dateien wurden zurückgewiesen. Bitte prüfen Sie die zulässigen Dateitypen.", "app.presentationUploder.upload.progress": "Hochladen ({0}%)", "app.presentationUploder.upload.413": "Datei zu groß, Limit von 200 Seiten erreicht", "app.presentationUploder.conversion.conversionProcessingSlides": "Verarbeite Seite {0} von {1}", @@ -161,6 +184,15 @@ "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": "Wahr", + "app.poll.answer.false": "Falsch", + "app.poll.answer.yes": "Ja", + "app.poll.answer.no": "Nein", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Teilnehmer", "app.poll.liveResult.responsesTitle": "Antwort", "app.polling.pollingTitle": "Umfrageoptionen", @@ -222,6 +254,7 @@ "app.submenu.application.fontSizeControlLabel": "Schriftgröße", "app.submenu.application.increaseFontBtnLabel": "Schriftgröße erhöhen", "app.submenu.application.decreaseFontBtnLabel": "Schriftgröße verringern", + "app.submenu.application.currentSize": "aktuell {0}", "app.submenu.application.languageLabel": "Sprache", "app.submenu.application.ariaLanguageLabel": "Applikationssprache ändern", "app.submenu.application.languageOptionLabel": "Sprache auswählen", @@ -235,18 +268,6 @@ "app.submenu.video.videoQualityLabel": "Videoqualität", "app.submenu.video.qualityOptionLabel": "Videoqualität auswählen", "app.submenu.video.participantsCamLabel": "Webcamvideo anderer Teilnehmer darstellen", - "app.submenu.closedCaptions.closedCaptionsLabel": "Untertitel", - "app.submenu.closedCaptions.takeOwnershipLabel": "Untertitelkontrolle übernehmen", - "app.submenu.closedCaptions.languageLabel": "Sprache", - "app.submenu.closedCaptions.localeOptionLabel": "Sprache auswählen", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Keine aktiven Gebietsschemata", - "app.submenu.closedCaptions.fontFamilyLabel": "Schriftart", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Schriftart auswählen", - "app.submenu.closedCaptions.fontSizeLabel": "Schriftgröße", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Schriftgröße auswählen", - "app.submenu.closedCaptions.backgroundColorLabel": "Hintergrundfarbe", - "app.submenu.closedCaptions.fontColorLabel": "Schriftfarbe", - "app.submenu.closedCaptions.noLocaleSelected": "Kleine Locale ausgewählt", "app.submenu.participants.muteAllLabel": "Alle stummschalten außer Präsentator", "app.submenu.participants.lockAllLabel": "Alle Teilnehmer arretieren", "app.submenu.participants.lockItemLabel": "Teilnehmer {0}", @@ -268,7 +289,6 @@ "app.settings.applicationTab.label": "Anwendung", "app.settings.audioTab.label": "Audio", "app.settings.videoTab.label": "Video", - "app.settings.closedcaptionTab.label": "Untertitel", "app.settings.usersTab.label": "Teilnehmer", "app.settings.main.label": "Einstellungen", "app.settings.main.cancel.label": "Abbrechen", @@ -296,6 +316,8 @@ "app.actionsBar.actionsDropdown.saveUserNames": "Teilnehmernamen speichern", "app.actionsBar.actionsDropdown.createBreakoutRoom": "Breakout-Räume erstellen", "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "ermöglicht die aktuelle Konferenz in mehrere Räume aufzuteilen", + "app.actionsBar.actionsDropdown.captionsLabel": "Untertitel schreiben", + "app.actionsBar.actionsDropdown.captionsDesc": "Untertitelfenster umschalten", "app.actionsBar.actionsDropdown.takePresenter": "Zum Präsentator werden", "app.actionsBar.actionsDropdown.takePresenterDesc": "Sich selber zum neuen Präsentator machen", "app.actionsBar.emojiMenu.statusTriggerLabel": "Status setzen", @@ -320,6 +342,8 @@ "app.actionsBar.emojiMenu.thumbsDownLabel": "Daumen runter", "app.actionsBar.emojiMenu.thumbsDownDesc": "Ihren Status auf Daumen runter setzen", "app.actionsBar.currentStatusDesc": "Aktueller Status {0}", + "app.actionsBar.captions.start": "Untertitel starten", + "app.actionsBar.captions.stop": "Untertitel stoppen", "app.audioNotification.audioFailedError1001": "Fehler 1001: Websocket unterbrochen", "app.audioNotification.audioFailedError1002": "Fehler 1002: Websocketverbindung konnte nicht hergestellt werden", "app.audioNotification.audioFailedError1003": "Fehler 1003: Browserversion wird nicht unterstützt", @@ -338,7 +362,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "Mikrofonnutzung wurde für alle Zuschauer gesperrt, Sie werden als reiner Zuhörer verbunden", "app.breakoutJoinConfirmation.title": "Breakout-Raum beitreten", "app.breakoutJoinConfirmation.message": "Möchten Sie beitreten", - "app.breakoutJoinConfirmation.confirmLabel": "Beitreten", "app.breakoutJoinConfirmation.confirmDesc": "Dem Breakout-Raum beitreten", "app.breakoutJoinConfirmation.dismissLabel": "Abbrechen", "app.breakoutJoinConfirmation.dismissDesc": "Schließen und die Teilnahme am Breakout-Raum verweigern", @@ -404,6 +427,7 @@ "app.modal.close": "Schließen", "app.modal.close.description": "Änderungen verwerfen und Dialog schließen", "app.modal.confirm": "Fertig", + "app.modal.newTab": "(Öffnet neuen Tab)", "app.modal.confirm.description": "Änderungen speichern und Dialog schließen", "app.dropdown.close": "Schließen", "app.error.400": "Ungültige Anfrage", @@ -592,12 +616,15 @@ "app.createBreakoutRoom.freeJoin": "Den Teilnehmern erlauben, sich selber einen Breakout-Raum auszusuchen.", "app.createBreakoutRoom.leastOneWarnBreakout": "Jedem Breakout-Raum muss wenigstens ein Teilnehmer zugeordnet sein.", "app.createBreakoutRoom.modalDesc": "Vervollständigen Sie die folgenden Schritte um Breakout-Räume zu erzeugen. Verteilen Sie die Teilnehmer auf die Räume.", + "app.createBreakoutRoom.roomTime": "{0} Minuten", "app.externalVideo.start": "Neues Video teilen", "app.externalVideo.title": "Youtubevideo teilen", "app.externalVideo.input": "URL des YouTube-Videos", "app.externalVideo.urlInput": "Youtube URL hinzufügen", "app.externalVideo.urlError": "Diese URL ist kein gültiges Youtube-Video", "app.externalVideo.close": "Schließen", + "app.network.connection.effective.slow": "Es wurden Verbindungsprobleme beobachtet.", + "app.network.connection.effective.slow.help": "Wie löst man die Probleme?", "app.externalVideo.noteLabel": "Hinweis: Geteile Youtube-Videos werden nicht in der Aufzeichnung sichtbar sein", "app.actionsBar.actionsDropdown.shareExternalVideo": "Youtube-Video teilen", "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Teilen des Youtube-Videos stoppen", diff --git a/bigbluebutton-html5/private/locales/el_GR.json b/bigbluebutton-html5/private/locales/el_GR.json index 3e578ef109cf9ea37323bbc33d8feb72dad5d6ab..0981f1463f469dcbf76e948a3b7389e491635fca 100644 --- a/bigbluebutton-html5/private/locales/el_GR.json +++ b/bigbluebutton-html5/private/locales/el_GR.json @@ -13,6 +13,8 @@ "app.chat.dropdown.copy": "ΑντιγÏαφή", "app.chat.dropdown.save": "Αποθήκευση", "app.chat.label": "Συνομιλία", + "app.captions.menu.start": "Εκκίνηση", + "app.captions.menu.cancelLabel": "ΑκÏÏωση", "app.userList.usersTitle": "ΧÏήστες", "app.userList.messagesTitle": "ΜηνÏματα", "app.userList.presenter": "ΠαÏουσιαστής", @@ -42,9 +44,6 @@ "app.submenu.application.fontSizeControlLabel": "ÎœÎγεθος γÏαμματοσειÏάς", "app.submenu.application.languageOptionLabel": "Επιλογή γλώσσας", "app.submenu.video.videoSourceLabel": "Î Ïοβολή πηγαίου", - "app.submenu.closedCaptions.languageLabel": "Γλώσσα", - "app.submenu.closedCaptions.localeOptionLabel": "Επιλογή γλώσσας", - "app.submenu.closedCaptions.fontSizeLabel": "ÎœÎγεθος γÏαμματοσειÏάς", "app.settings.main.label": "Άνοιγμα Ïυθμίσεων", "app.settings.main.cancel.label": "ΑκÏÏωση", "app.settings.main.save.label": "Αποθήκευση", diff --git a/bigbluebutton-html5/private/locales/en.json b/bigbluebutton-html5/private/locales/en.json index b3835fae80dfef88965b6b6802b7241c94e1fb3b..3ebef4a7888ccdc0e36d0d0b0a2abfebb868e500 100755 --- a/bigbluebutton-html5/private/locales/en.json +++ b/bigbluebutton-html5/private/locales/en.json @@ -83,6 +83,12 @@ "app.userList.userOptions.disablePubChat": "Public chat is disabled", "app.userList.userOptions.disableNote": "Shared notes are now locked", "app.userList.userOptions.webcamsOnlyForModerator": "Only moderators are able to see viewers' webcams (due to lock settings)", + "app.userList.userOptions.enableCam": "Viewers' webcams are enabled", + "app.userList.userOptions.enableMic": "Viewers' microphones are enabled", + "app.userList.userOptions.enablePrivChat": "Private chat is enabled", + "app.userList.userOptions.enablePubChat": "Public chat is enabled", + "app.userList.userOptions.enableNote": "Shared notes are now enabled", + "app.userList.userOptions.enableOnlyModeratorWebcam": "You can enable your webcam now, everyone will see you", "app.media.label": "Media", "app.media.screenshare.start": "Screenshare has started", "app.media.screenshare.end": "Screenshare has ended", @@ -122,8 +128,9 @@ "app.presentation.presentationToolbar.fitToPage": "Fit to page", "app.presentation.presentationToolbar.goToSlide": "Slide {0}", "app.presentationUploder.title": "Presentation", - "app.presentationUploder.message": "As a presenter you have the ability of uploading any office document or PDF file. We recommend PDF file for best results.", - "app.presentationUploder.confirmLabel": "Upload", + "app.presentationUploder.message": "As a presenter you have the ability of uploading 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.uploadLabel": "Upload", + "app.presentationUploder.confirmLabel": "Confirm", "app.presentationUploder.confirmDesc": "Save your changes and start the presentation", "app.presentationUploder.dismissLabel": "Cancel", "app.presentationUploder.dismissDesc": "Close the modal window and discard your changes", diff --git a/bigbluebutton-html5/private/locales/es.json b/bigbluebutton-html5/private/locales/es.json index d4883bc4a278514ddb15a456130286cad757fda9..eafeaaabb0a69c91114e4bcad3cc6227b16ed874 100644 --- a/bigbluebutton-html5/private/locales/es.json +++ b/bigbluebutton-html5/private/locales/es.json @@ -16,15 +16,35 @@ "app.chat.dropdown.copy": "Copiar", "app.chat.dropdown.save": "Guardar", "app.chat.label": "Chat", + "app.chat.offline": "Desconectado", "app.chat.emptyLogLabel": "Registro de chat vacÃo", "app.chat.clearPublicChatMessage": "El chat publico fue borrado por un moderador", + "app.captions.label": "SubtÃtulos", + "app.captions.menu.close": "Cerrar", + "app.captions.menu.start": "Iniciar", + "app.captions.menu.select": "Seleccione idiomas disponibles", + "app.captions.menu.title": "Menú de subtÃtulos", + "app.captions.menu.fontSize": "Tamaño", + "app.captions.menu.fontColor": "Color de texto", + "app.captions.menu.fontFamily": "Fuente", + "app.captions.menu.backgroundColor": "Color de fondo", + "app.captions.menu.previewLabel": "Previsualizar", + "app.captions.menu.cancelLabel": "Cancela", + "app.captions.pad.hide": "Ocultar subtÃtulos", + "app.captions.pad.tip": "Presione Esc para enfocar la barra de herramientas del editor", + "app.captions.pad.ownership": "Tomar el control", "app.note.title": "Notas compartidas", "app.note.label": "Nota", "app.note.hideNoteLabel": "Ocultar nota", + "app.user.activityCheck": "Comprobar actividad del usuario", + "app.user.activityCheck.label": "Comprobar si el usuario continúa en la reunión ({0})", + "app.user.activityCheck.check": "Comprobar", + "app.note.tipLabel": "Presione Esc para enfocar la barra de herramientas del editor", "app.userList.usersTitle": "Usuarios", "app.userList.participantsTitle": "Participantes", "app.userList.messagesTitle": "Mensajes", "app.userList.notesTitle": "Notas", + "app.userList.captionsTitle": "SubtÃtulos", "app.userList.presenter": "Presentador", "app.userList.you": "Tu", "app.userList.locked": "Bloqueado", @@ -34,6 +54,7 @@ "app.userList.menuTitleContext": "Opciones disponibles", "app.userList.chatListItem.unreadSingular": "{0} Nuevo Mensaje", "app.userList.chatListItem.unreadPlural": "{0} Nuevos mensajes", + "app.userList.menu.chat.label": "Iniciar chat privado", "app.userList.menu.clearStatus.label": "Borrar estado", "app.userList.menu.removeUser.label": "Eliminar usuario", "app.userList.menu.muteUserAudio.label": "Deshabilitar audio de usuario", @@ -43,6 +64,7 @@ "app.userList.menu.demoteUser.label": "Degradar a espectador", "app.userList.menu.unlockUser.label": "Desbloquear {0}", "app.userList.menu.lockUser.label": "Bloquear {0}", + "app.userList.menu.directoryLookup.label": "Búsqueda de directorio", "app.userList.menu.makePresenter.label": "Promover a presentador", "app.userList.userOptions.manageUsersLabel": "Manejar usuarios", "app.userList.userOptions.muteAllLabel": "Deshabilitar audio a todos los usuarios", @@ -55,12 +77,34 @@ "app.userList.userOptions.unmuteAllDesc": "Habilitar audio en la sesión", "app.userList.userOptions.lockViewersLabel": "Bloquear espectadores", "app.userList.userOptions.lockViewersDesc": "Bloquear algunas funciones a espectadores", + "app.userList.userOptions.disableCam": "Cámaras web de invitados deshabilitadas", + "app.userList.userOptions.disableMic": "Micrófonos de invitados deshabilitados", + "app.userList.userOptions.disablePrivChat": "Chat privado deshabilitado", + "app.userList.userOptions.disablePubChat": "Chat público deshabilitado", + "app.userList.userOptions.disableNote": "Notas compartidas bloqueadas", + "app.userList.userOptions.webcamsOnlyForModerator": "Solo los moderadores pueden ver las cámaras web de los invitados (debido a la configuración de bloqueo)", + "app.userList.userOptions.enableCam": "Cámaras web de invitados habilitadas", + "app.userList.userOptions.enableMic": "Micrófonos de invitados habilitados", + "app.userList.userOptions.enablePrivChat": "Chat privado habilitado", + "app.userList.userOptions.enablePubChat": "Chat público habilitado", + "app.userList.userOptions.enableNote": "Notas compartidas habilitadas", + "app.userList.userOptions.enableOnlyModeratorWebcam": "Usted puede habilitar su cámara web ahora. Todos podrán verle", "app.media.label": "Media", "app.media.screenshare.start": "Compartir pantalla ha iniciado", "app.media.screenshare.end": "Compartir pantalla ha finalizado", "app.media.screenshare.safariNotSupported": "Compartir pantalla actualmente no es soportada por Safari. Por favor usilize Firefox o Google Chrome.", "app.meeting.ended": "La sesión ha finalizado", + "app.meeting.meetingTimeRemaining": "Tiempo restante de la reunión: {0}", + "app.meeting.meetingTimeHasEnded": "Tiempo finalizado. La reunión se cerrará en breve", "app.meeting.endedMessage": "Serás enviado a la pantalla de inicio.", + "app.meeting.alertMeetingEndsUnderOneMinute": "La reunión se cierra en un minuto", + "app.presentation.hide": "Ocultar presentación", + "app.presentation.notificationLabel": "Presentación actual", + "app.presentation.slideContent": "Contenido de la diapositiva", + "app.presentation.startSlideContent": "Inicio del pase de diapositivas", + "app.presentation.endSlideContent": "Fin del pase de diapositivas", + "app.presentation.emptySlideContent": "Diapositiva actual sin contenido", + "app.presentation.presentationToolbar.selectLabel": "Seleccione diapositiva", "app.presentation.presentationToolbar.prevSlideLabel": "Diapositiva anterior", "app.presentation.presentationToolbar.prevSlideDesc": "Cambiar presentación a diapositiva anterior", "app.presentation.presentationToolbar.nextSlideLabel": "Siguiente diapositiva", @@ -77,9 +121,15 @@ "app.presentation.presentationToolbar.zoomInDesc": "Acercarse en presentación", "app.presentation.presentationToolbar.zoomOutLabel": "Alejarse", "app.presentation.presentationToolbar.zoomOutDesc": "Alejarse en presentación", + "app.presentation.presentationToolbar.zoomReset": "Reiniciar zoom", + "app.presentation.presentationToolbar.zoomIndicator": "Porcentaje actual de zoom", "app.presentation.presentationToolbar.fitToWidth": "Ajustar a lo ancho", + "app.presentation.presentationToolbar.fitToPage": "Ajustar a la página", "app.presentation.presentationToolbar.goToSlide": "Diapositiva {0}", "app.presentationUploder.title": "Presentación", + "app.presentationUploder.message": "Como presentador, tiene la capacidad de cargar cualquier documento de Office o archivo PDF. Recomendamos archivos PDF para obtener los mejores resultados. Asegúrese de seleccionar una presentación utilizando la casilla de verificación en forma de cÃrculo en el lado derecho.", + "app.presentationUploder.uploadLabel": "Cargar", + "app.presentationUploder.confirmLabel": "Confirmar", "app.presentationUploder.confirmDesc": "Grardar los cambios e iniciar la presentación", "app.presentationUploder.dismissLabel": "Cancelar", "app.presentationUploder.dismissDesc": "Cerrar la ventana modal y descartar cambios.", @@ -90,24 +140,41 @@ "app.presentationUploder.fileToUpload": "En proceso de ser cargado ...", "app.presentationUploder.currentBadge": "Acual", "app.presentationUploder.genericError": "Ups, algo salio mal", - "app.presentationUploder.rejectedError": "Algunos de los archivos seleccionados fueron rechazados. Por favor verifique el mime type de los archivo", + "app.presentationUploder.rejectedError": "El(los) archivo(s) seleccionado(s) ha(n) sido rechazado(s). Por favor, revise el(los) tipo(s) de archivo.", "app.presentationUploder.upload.progress": "Cargando ({0}%)", + "app.presentationUploder.upload.413": "Archivo muy grande, se ha alcanzado el máximo de 200 páginas", "app.presentationUploder.conversion.conversionProcessingSlides": "Procesando página {0} de {1}", "app.presentationUploder.conversion.genericConversionStatus": "Convirtiendo archivos ...", "app.presentationUploder.conversion.generatingThumbnail": "Generando miniaturas ...", "app.presentationUploder.conversion.generatedSlides": "Diapositivas han sido generadas ...", "app.presentationUploder.conversion.generatingSvg": "Generando imágenes SVG ...", + "app.presentationUploder.conversion.pageCountExceeded": "Ops, el contador ha excedido el lÃmite de 200 páginas", "app.presentationUploder.conversion.timeout": "La conversión tomó demasiado tiempo ...", + "app.presentationUploder.isDownloadableLabel": "La descarga de la presentación no está permitida", + "app.presentationUploder.isNotDownloadableLabel": "Descarga de presentación permitida", + "app.presentationUploder.removePresentationLabel": "Borrar presentación", + "app.presentationUploder.setAsCurrentPresentation": "Establecer presentación como actual", + "app.presentationUploder.tableHeading.filename": "Nombre de archivo", "app.presentationUploder.tableHeading.options": "Opciones", + "app.presentationUploder.tableHeading.status": "Estado", "app.poll.pollPaneTitle": "Encuesta", + "app.poll.quickPollTitle": "Encuesta rápida", "app.poll.hidePollDesc": "Ocultar el menu de la encuesta", "app.poll.customPollInstruction": "Para crear una encuesta personalizada presiona el botón de abajo e introduce las respuestas.", "app.poll.quickPollInstruction": "Selecciona una de las siguientes opciones para iniciar tu encuesta. ", "app.poll.customPollLabel": "Encuesta personalizada", "app.poll.startCustomLabel": "Iniciar encuesta personalizada", + "app.poll.activePollInstruction": "Deje esta ventana abierta para permitir a otros a responder a la encuesta.\nSeleccionando \"Publicar resultados de la encuesta\" o navegando hacia tras finalizará la encuesta.", + "app.poll.publishLabel": "Publicar resultados de la encuesta", "app.poll.backLabel": "Regresar a las opciones de la encuesta", "app.poll.closeLabel": "Cerrar", + "app.poll.waitingLabel": "Esperando respuestas ({0}/{1})", + "app.poll.ariaInputCount": "Opción de encuesta personalizada {0} de {1}", "app.poll.customPlaceholder": "Agregar respuesta de encuesta", + "app.poll.noPresentationSelected": "¡No se ha seleccionado ninguna presentación! Por favor, seleccione una.", + "app.poll.clickHereToSelect": "'Click' aquà para seleccionar", + "app.poll.t": "Verdadero", + "app.poll.f": "Falso", "app.poll.tf": "Verdadero / Falseo", "app.poll.y": "Si", "app.poll.n": "No", @@ -116,12 +183,22 @@ "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": "Verdadero", + "app.poll.answer.false": "Falso", + "app.poll.answer.yes": "Si", + "app.poll.answer.no": "No", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Usuarios", "app.poll.liveResult.responsesTitle": "Respuesta", "app.polling.pollingTitle": "Opciones de la encuesta", "app.polling.pollAnswerLabel": "Respuesta de encuesta {0}", "app.polling.pollAnswerDesc": "Seleccione esta opcion para responder {0}", "app.failedMessage": "Disculpas, problemas conectando al servidor.", + "app.downloadPresentationButton.label": "Descargar la presentación original", "app.connectingMessage": "Conectandose ...", "app.waitingMessage": "Desconectado. Se realizara un reintento en {0} segundos ...", "app.navBar.settingsDropdown.optionsLabel": "Opciones", @@ -135,7 +212,10 @@ "app.navBar.settingsDropdown.aboutDesc": "Mostrar información acerca del cliente", "app.navBar.settingsDropdown.leaveSessionDesc": "Abandonar la reunión", "app.navBar.settingsDropdown.exitFullscreenDesc": "Salir del modo de pantalla completa", + "app.navBar.settingsDropdown.hotkeysLabel": "Atajos de teclado", + "app.navBar.settingsDropdown.hotkeysDesc": "Listado de atajos de teclado disponibles", "app.navBar.settingsDropdown.helpLabel": "Ayuda", + "app.navBar.settingsDropdown.helpDesc": "Enlaces a videotutoriales (abre una nueva pestaña)", "app.navBar.settingsDropdown.endMeetingDesc": "Finaliza la sesión actual", "app.navBar.settingsDropdown.endMeetingLabel": "Finalizar sesión", "app.navBar.userListToggleBtnLabel": "Alternar lista de usuarios", @@ -165,10 +245,15 @@ "app.actionsBar.label": "Barra de acciones", "app.actionsBar.actionsDropdown.restorePresentationLabel": "Reestablecer presentación", "app.actionsBar.actionsDropdown.restorePresentationDesc": "Restaurar presentación despues de que ha sido cerrada", + "app.screenshare.screenShareLabel" : "Compartir pantalla", "app.submenu.application.applicationSectionTitle": "Aplicación", + "app.submenu.application.animationsLabel": "Animaciones", + "app.submenu.application.audioAlertLabel": "Alertas de sonido para el chat", + "app.submenu.application.pushAlertLabel": "Alertas visuales para el chat", "app.submenu.application.fontSizeControlLabel": "Tamaño de fuente", "app.submenu.application.increaseFontBtnLabel": "Incrementar tamaño de fuente", "app.submenu.application.decreaseFontBtnLabel": "Reducir tamaño de fuente", + "app.submenu.application.currentSize": "actualmente {0}", "app.submenu.application.languageLabel": "Lenguaje de aplicación", "app.submenu.application.ariaLanguageLabel": "Cambiar lenguaje de aplicación", "app.submenu.application.languageOptionLabel": "Seleccionar lenguaje", @@ -179,20 +264,9 @@ "app.submenu.video.title": "Video", "app.submenu.video.videoSourceLabel": "Fuente del video", "app.submenu.video.videoOptionLabel": "Escoger ver fuente", + "app.submenu.video.videoQualityLabel": "Calidad de vÃdeo", "app.submenu.video.qualityOptionLabel": "Escoger calidad del video", "app.submenu.video.participantsCamLabel": "Viendo webcams de participantes", - "app.submenu.closedCaptions.closedCaptionsLabel": "SubtÃtulos", - "app.submenu.closedCaptions.takeOwnershipLabel": "Tomar el control", - "app.submenu.closedCaptions.languageLabel": "Lenguaje", - "app.submenu.closedCaptions.localeOptionLabel": "Seleccionar lenguaje", - "app.submenu.closedCaptions.noLocaleOptionLabel": "No hay locales activos", - "app.submenu.closedCaptions.fontFamilyLabel": "Familia de fuente", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Selecciona tipo de letra", - "app.submenu.closedCaptions.fontSizeLabel": "Tamaño de fuente", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Selecciona tamaño de letra", - "app.submenu.closedCaptions.backgroundColorLabel": "Color de fondo", - "app.submenu.closedCaptions.fontColorLabel": "Color de fuente", - "app.submenu.closedCaptions.noLocaleSelected": "Idioma no seleccionado", "app.submenu.participants.muteAllLabel": "Deshabilitar audio a todos menos al presentador", "app.submenu.participants.lockAllLabel": "Bloquear a todos los usuarios", "app.submenu.participants.lockItemLabel": "Espectadores {0}", @@ -214,7 +288,6 @@ "app.settings.applicationTab.label": "Aplicación", "app.settings.audioTab.label": "Audio", "app.settings.videoTab.label": "Video", - "app.settings.closedcaptionTab.label": "SubtÃtulos", "app.settings.usersTab.label": "Participantes", "app.settings.main.label": "Configuración", "app.settings.main.cancel.label": "Cancela", @@ -225,6 +298,7 @@ "app.settings.dataSavingTab.webcam": "Habilitar webcams", "app.settings.dataSavingTab.screenShare": "Habilitar escritorio compartido", "app.settings.dataSavingTab.description": "Para ahorrar ancho de banda ajusta lo que se se está mostrando", + "app.settings.save-notification.label": "La configuración se ha guardado", "app.switch.onLabel": "Encendido", "app.switch.offLabel": "Apagado", "app.actionsBar.actionsDropdown.actionsLabel": "Acciones", @@ -238,8 +312,12 @@ "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Dejar de compartir tu pantalla con otros", "app.actionsBar.actionsDropdown.pollBtnLabel": "Iniciar una encuesta", "app.actionsBar.actionsDropdown.pollBtnDesc": "Cambia el panel de encuesta", + "app.actionsBar.actionsDropdown.saveUserNames": "Guardar nombres de usuarios", "app.actionsBar.actionsDropdown.createBreakoutRoom": "Crear grupos de trabajo", "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "crear grupos de trabajo para dividir la sesión actual", + "app.actionsBar.actionsDropdown.captionsLabel": "Escribir subtÃtulos", + "app.actionsBar.actionsDropdown.captionsDesc": "Alterna el panel de subtÃtulos", + "app.actionsBar.actionsDropdown.takePresenter": "Tomar rol de presentador", "app.actionsBar.actionsDropdown.takePresenterDesc": "Asignarte a ti mismo el rol de presentador", "app.actionsBar.emojiMenu.statusTriggerLabel": "Establecer estado", "app.actionsBar.emojiMenu.awayLabel": "Ausente", @@ -263,9 +341,12 @@ "app.actionsBar.emojiMenu.thumbsDownLabel": "Señal de desaprobación", "app.actionsBar.emojiMenu.thumbsDownDesc": "Cambia tu estdo a señal de desaprobación", "app.actionsBar.currentStatusDesc": "estado actual {0}", + "app.actionsBar.captions.start": "Comenzar a ver subtÃtulos", + "app.actionsBar.captions.stop": "Dejar de ver subtÃtulos", "app.audioNotification.audioFailedError1001": "Error 1001: WebSocket desconectado", "app.audioNotification.audioFailedError1002": "Error 1002: No puede establecerse conexión de WebSocket", "app.audioNotification.audioFailedError1003": "Error 1003: Versión de navegador no soportado ", + "app.audioNotification.audioFailedError1004": "Error 1004: Fallo en llamada (razón={0})", "app.audioNotification.audioFailedError1005": "Error 1005: La llamada terminó inesperadamente", "app.audioNotification.audioFailedError1006": "Error 1006: Tiempo de espera de llamada agotado", "app.audioNotification.audioFailedError1007": "Error 1007: Fallo de negociación ICE", @@ -273,13 +354,13 @@ "app.audioNotification.audioFailedError1009": "Error 1009: No se pudo obtener información de servidor STUN/TURN", "app.audioNotification.audioFailedError1010": "Error 1010: Se acabó tiempo de negociación ICE ", "app.audioNotification.audioFailedError1011": "Error 1011: Se acabó tiempo recolectando ICE", + "app.audioNotification.audioFailedError1012": "Error 1012: Conexión ICE cerrada", "app.audioNotification.audioFailedMessage": "Tu conexión de audio falló en conectarse", "app.audioNotification.mediaFailedMessage": "getUserMicMedia falló, Solo orÃgenes seguros son admitidos", "app.audioNotification.closeLabel": "Cerrar", "app.audioNotificaion.reconnectingAsListenOnly": "El micrófono ha sido bloqueado para todos los espectadores, tu conexión es en modo \"solo escuchar\"", "app.breakoutJoinConfirmation.title": "Ingresar a un grupo de trabajo", "app.breakoutJoinConfirmation.message": "Quieres unirte", - "app.breakoutJoinConfirmation.confirmLabel": "Unirte", "app.breakoutJoinConfirmation.confirmDesc": "Ingresar a un grupo de trabajo", "app.breakoutJoinConfirmation.dismissLabel": "Cancelar", "app.breakoutJoinConfirmation.dismissDesc": "Cierra y rechaza entrada a grupo de trabajo", @@ -287,6 +368,7 @@ "app.breakoutTimeRemainingMessage": "Tiempo restante en grupo de trabajo: {0}", "app.breakoutWillCloseMessage": "Tiempo transcurrido. Grupo de trabajo se cerrará en breve.", "app.calculatingBreakoutTimeRemaining": "Calculando tiempo restante ...", + "app.audioModal.ariaTitle": "Unirse en modo audio", "app.audioModal.microphoneLabel": "Micrófono", "app.audioModal.listenOnlyLabel": "Solo escuchar", "app.audioModal.audioChoiceLabel": "¿Como quieres unirte al audio?", @@ -294,6 +376,7 @@ "app.audioModal.iOSErrorDescription": "En este momento el audio y video no son soportados en Chrome para iOS.", "app.audioModal.iOSErrorRecommendation": "Te recomendamos utilizar Safari OS.", "app.audioModal.audioChoiceDesc": "Selecciona como unirse al audio en esta reunión", + "app.audioModal.unsupportedBrowserLabel": "Parece que está usando un navegador no totalmente soportado. Por favor, utilice uno de los siguientes {0} ó {1} para una compatibilidad completa. ", "app.audioModal.closeLabel": "Cerrar", "app.audioModal.yes": "Si", "app.audioModal.no": "No", @@ -303,6 +386,9 @@ "app.audioModal.settingsTitle": "Cambia tu configuración de audio", "app.audioModal.helpTitle": "Ocurrió un error con tus dispositivos de medios", "app.audioModal.helpText": "¿Autorizaste el uso de tu micrófono? Ten en cuenta que cuando tratas de ingresar al audio, se te debe mostrar una caja de diálogo en la que se solicita tu autorización. Si no ocurrió intenta cambiar los permisos de tu micrófono en el area de configuración de tu navegador.", + "app.audioModal.audioDialTitle": "Únase usando su teléfono", + "app.audioDial.audioDialDescription": "Marcar", + "app.audioDial.audioDialConfrenceText": "e introduzca el número PIN de la conferencia:", "app.audioModal.connecting": "Conectandose", "app.audioModal.connectingEchoTest": "Conenctandose a prueba de eco", "app.audioManager.joinedAudio": "Has ingresado a la conferencia de audio", @@ -330,25 +416,53 @@ "app.audio.permissionsOverlay.hint": "Necesitamos tu autorización para acceder tus dipositivos de medios para poder ingresar a la conferencia de voz :)", "app.error.removed": "Has sido eliminado de la conferencia", "app.error.meeting.ended": "Haz salido de la conferencia", + "app.meeting.logout.duplicateUserEjectReason": "Usuario duplicado intentando unirse a la reunión", + "app.meeting.logout.permissionEjectReason": "Expulsado por violación de permiso", + "app.meeting.logout.ejectedFromMeeting": "Usted ha sido expulsado/a de la reunión", + "app.meeting.logout.validateTokenFailedEjectReason": "Error al validar el token de autorización", + "app.meeting.logout.userInactivityEjectReason": "Usuario inactivo por mucho tiempo", + "app.meeting-ended.rating.legendLabel": "Calificación de votos", + "app.meeting-ended.rating.starLabel": "Estrella", "app.modal.close": "Cerrar", "app.modal.confirm": "Finalizado", + "app.modal.newTab": "(abre nueva pestaña)", "app.dropdown.close": "Cerrar", "app.error.400": "Solicitud incorrecta", "app.error.401": "No autorizado", + "app.error.403": "Usted ha sido expulsado/a de la reunión", "app.error.404": "No se encontró", + "app.error.410": "La reunión ha finalizado", "app.error.500": "Ups, algo salio mal", "app.error.leaveLabel": "Ingresa de nuevo", + "app.error.fallback.presentation.title": "Ha ocurrido un error", + "app.error.fallback.presentation.description": "Esto se ha registrado. Por favor, intente volver a cargar la página.", + "app.error.fallback.presentation.reloadButton": "Recargar", "app.guest.waiting": "Esperando aprobación para unirse", + "app.userList.guest.waitingUsers": "Usuarios en espera", + "app.userList.guest.waitingUsersTitle": "Gestión de usuarios", + "app.userList.guest.optionTitle": "Revisar de usuarios pendientes", + "app.userList.guest.allowAllAuthenticated": "Permitir todos los autenticados", + "app.userList.guest.allowAllGuests": "Permitir todos los invitados", + "app.userList.guest.allowEveryone": "Permitir a todos", + "app.userList.guest.denyEveryone": "Denegar a todos", + "app.userList.guest.pendingUsers": "{0} Usuarios pendientes", + "app.userList.guest.pendingGuestUsers": "{0} Invitados pendientes", + "app.userList.guest.pendingGuestAlert": "Se ha unido a la sesión y está esperando su aprobación.", + "app.userList.guest.rememberChoice": "Recordar elección", + "app.user-info.title": "Búsqueda de directorio", "app.toast.breakoutRoomEnded": "La sesión de grupo de trabajo ha finalizado. Ingresa al audio nuevamente.", "app.toast.chat.public": "Nuevo mensaje en chat público", "app.toast.chat.private": "Nuevo mensaje en chat privado", "app.toast.chat.system": "Sistema", "app.notification.recordingStart": "La sesión esta siendo grabada", "app.notification.recordingStop": "Se ha dejado de grabar la sesión", + "app.notification.recordingAriaLabel": "Tiempo de grabación", + "app.shortcut-help.title": "Atajos de teclado", "app.shortcut-help.accessKeyNotAvailable": "Teclas de acceso no disponibles", "app.shortcut-help.comboLabel": "Combinación", "app.shortcut-help.functionLabel": "Función", "app.shortcut-help.closeLabel": "Cerrar", + "app.shortcut-help.closeDesc": "Cierra el modo de Atajos de teclado", "app.shortcut-help.openOptions": "Abrir opciones", "app.shortcut-help.toggleUserList": "Cambia lista de usuarios", "app.shortcut-help.toggleMute": "Deshabilitar / Habilitar audio", @@ -357,6 +471,9 @@ "app.shortcut-help.closePrivateChat": "Cerrar chat privado", "app.shortcut-help.openActions": "Abrir menú de acciones", "app.shortcut-help.openStatus": "Abrir el menú de estados", + "app.shortcut-help.togglePan": "Activar herramienta Pan (Presentador)", + "app.shortcut-help.nextSlideDesc": "Diapositiva siguiente (Presentador)", + "app.shortcut-help.previousSlideDesc": "Diapositiva anterior (Presentador)", "app.lock-viewers.title": "Bloquear espectadores", "app.lock-viewers.description": "Estas opciones te permiten restringir el accesso a ciertas funciones disponibles para espectadores, como bloquear la habilidad de utilizar chat privado. (Estas restricciones no aplican a moderadores)", "app.lock-viewers.featuresLable": "Función", @@ -366,11 +483,15 @@ "app.lock-viewers.microphoneLable": "Micrófono", "app.lock-viewers.PublicChatLabel": "Chat público", "app.lock-viewers.PrivateChatLable": "Chat privado", + "app.lock-viewers.notesLabel": "Notas compartidas", "app.lock-viewers.Layout": "Diseño de pantalla", "app.recording.startTitle": "Iniciar grabación", + "app.recording.stopTitle": "Pausar grabación", + "app.recording.resumeTitle": "Continuar grabación", "app.recording.startDescription": "(Puedes hacer click en el icono nuevamente para detener la grabación)", "app.recording.stopDescription": "¿Quieres detener la grabación de la sesión? (Puedes continuar la grabación en cualquier momento haciendo click en el icono de iniciar grabación.)", "app.videoPreview.cameraLabel": "Webcam", + "app.videoPreview.profileLabel": "Calidad", "app.videoPreview.cancelLabel": "Cancelar", "app.videoPreview.closeLabel": "Cerrar", "app.videoPreview.startSharingLabel": "Iniciar compartir", @@ -378,6 +499,7 @@ "app.videoPreview.webcamPreviewLabel": "Vista preliminar de webcam", "app.videoPreview.webcamSettingsTitle": "Configuración de webcam", "app.videoPreview.webcamNotFoundLabel": "Webcam no encontrada", + "app.videoPreview.profileNotFoundLabel": "Perfil de cámara no soportado", "app.video.joinVideo": "Compartir webcam", "app.video.leaveVideo": "Dejar de compartir webcam", "app.video.iceCandidateError": "Error al agregar candidato ICE", @@ -391,6 +513,7 @@ "app.video.mediaFlowTimeout1020": "Error 1020: Medio no llego al servidor", "app.video.swapCam": "Intercambiar", "app.video.swapCamDesc": "intercambiar la dirección de las webcams", + "app.video.videoLocked": "Compartir cámara web bloqueado", "app.video.videoButtonDesc": "Botón de ingresar a video", "app.video.videoMenu": "Menú de video", "app.video.videoMenuDisabled": "Webcam deshabilitada", @@ -410,6 +533,7 @@ "app.video.stats.rtt": "RTT", "app.video.stats.encodeUsagePercent": "Uso de codificador", "app.video.stats.currentDelay": "Demora actual", + "app.fullscreenButton.label": "Hacer {0} pantalla completa", "app.deskshare.iceConnectionStateError": "Error 1108: Conexión ICE fallida al compartir la pantalla", "app.sfu.mediaServerConnectionError2000": "Error 2000: No es posible conectarse al servidor de medios", "app.sfu.mediaServerOffline2001": "Error 2001: Servidor de medios fuera de lÃnea. Por favor intentelo nuevamente.", @@ -421,6 +545,7 @@ "app.sfu.invalidSdp2202":"Error 2202: El client generato un SDP invalido", "app.sfu.noAvailableCodec2203": "Error 2203: El servidor no encontró un Codec apropiado", "app.meeting.endNotification.ok.label": "OK", + "app.whiteboard.annotations.poll": "Resultados de la encuesta compartidos", "app.whiteboard.toolbar.tools": "Herramientas", "app.whiteboard.toolbar.tools.hand": "Panorama", "app.whiteboard.toolbar.tools.pencil": "Lápiz", @@ -462,6 +587,7 @@ "app.invitation.title": "Invitación a grupo de trabajo", "app.invitation.confirm": "Invitar", "app.createBreakoutRoom.title": "Grupos de trabajo", + "app.createBreakoutRoom.ariaTitle": "Ocultar Salas de Descanso", "app.createBreakoutRoom.breakoutRoomLabel": "Grupos de trabajo {0}", "app.createBreakoutRoom.generatingURL": "Generando enlace", "app.createBreakoutRoom.generatedURL": "Generada", @@ -472,6 +598,7 @@ "app.createBreakoutRoom.joinAudio": "Ingresar al audio", "app.createBreakoutRoom.returnAudio": "Regresar al audio", "app.createBreakoutRoom.confirm": "Crear", + "app.createBreakoutRoom.record": "Grabar", "app.createBreakoutRoom.numberOfRooms": "Número de salas", "app.createBreakoutRoom.durationInMinutes": "Duración (minutos)", "app.createBreakoutRoom.randomlyAssign": "Asignado aleatóriamente", @@ -479,15 +606,27 @@ "app.createBreakoutRoom.roomName": "{0} (Sala - {1})", "app.createBreakoutRoom.doneLabel": "Finalizado", "app.createBreakoutRoom.nextLabel": "Siguiente", + "app.createBreakoutRoom.minusRoomTime": "Disminuir tiempo de Sala de Descanso", + "app.createBreakoutRoom.addRoomTime": "Aumentar tiempo de Sala de Descanso", "app.createBreakoutRoom.addParticipantLabel": "+ Agregar participante", "app.createBreakoutRoom.freeJoin": "Permitir a los usuarios seleccionar el grupo de trabajo a ingresar", "app.createBreakoutRoom.leastOneWarnBreakout": "Debes agregar almenos un usuario a cada grupo de trabajo.", "app.createBreakoutRoom.modalDesc": "Completa los siguientes pasos para crear grupos de trabajo en tu sesión y poder agregar participantes", + "app.createBreakoutRoom.roomTime": "{0} minutos", "app.externalVideo.start": "Compartir un nuevo video", "app.externalVideo.title": "Compartir un video de YouTube", "app.externalVideo.input": "Enlace a video de YouTube", + "app.externalVideo.urlInput": "Agregar URL de YouTube", "app.externalVideo.urlError": "Este enlace no es un video de YouTube valido", - "app.externalVideo.close": "Cerrar" + "app.externalVideo.close": "Cerrar", + "app.network.connection.effective.slow": "Estamos detectando problemas de conectividad.", + "app.network.connection.effective.slow.help": "¿Cómo resolverlo?", + "app.externalVideo.noteLabel": "Nota: Los vÃdeos de YouTube compartidos no aparecerán en la grabación ", + "app.actionsBar.actionsDropdown.shareExternalVideo": "Compartir vÃdeo de YouTube", + "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Dejar de compartir vÃdeo de YouTube", + "app.iOSWarning.label": "Por favor, actualice a iOS 12.2 o superior", + "app.legacy.unsupportedBrowser": "Parece que está usando un navegador no totalmente soportado. Por favor, utilice uno de los siguientes {0} ó {1} para una compatibilidad completa.", + "app.legacy.upgradeBrowser": "Parece que está usando una versión antigua del navegador. Por favor, actualice su navegador para una compatibilidad completa." } diff --git a/bigbluebutton-html5/private/locales/es_ES.json b/bigbluebutton-html5/private/locales/es_ES.json index 7bb8e246410686614c7b52c6795708cc698c2574..cc6fbfd9624c230d534a9b7ad287b5872de10a28 100644 --- a/bigbluebutton-html5/private/locales/es_ES.json +++ b/bigbluebutton-html5/private/locales/es_ES.json @@ -14,6 +14,10 @@ "app.chat.dropdown.save": "Guardar", "app.chat.label": "Chat", "app.chat.emptyLogLabel": "Registro de chat vacÃo", + "app.captions.menu.close": "Cerrar", + "app.captions.menu.backgroundColor": "Color de fondo", + "app.captions.menu.cancelLabel": "Cancelar", + "app.captions.pad.ownership": "Tomar el control", "app.userList.usersTitle": "Usuarios", "app.userList.participantsTitle": "Participantes", "app.userList.messagesTitle": "Mensajes", @@ -85,14 +89,6 @@ "app.submenu.video.videoOptionLabel": "Escoger ver fuente", "app.submenu.video.qualityOptionLabel": "Escoger calidad del video", "app.submenu.video.participantsCamLabel": "Viendo webcams de participantes", - "app.submenu.closedCaptions.takeOwnershipLabel": "Tomar el control", - "app.submenu.closedCaptions.languageLabel": "Lenguaje", - "app.submenu.closedCaptions.localeOptionLabel": "Seleccionar lenguaje", - "app.submenu.closedCaptions.noLocaleOptionLabel": "No hay locales activos", - "app.submenu.closedCaptions.fontFamilyLabel": "Familia de fuente", - "app.submenu.closedCaptions.fontSizeLabel": "Tamaño de fuente", - "app.submenu.closedCaptions.backgroundColorLabel": "Color de fondo", - "app.submenu.closedCaptions.fontColorLabel": "Color de fuente", "app.submenu.participants.muteAllLabel": "Silenciar a todos menos al presentador", "app.submenu.participants.lockMicAriaLabel": "Bloquea micrófono", "app.submenu.participants.lockCamAriaLabel": "Bloquea webcam", @@ -152,7 +148,6 @@ "app.audioNotification.audioFailedMessage": "Tu conexión de audio falló en conectarse", "app.audioNotification.closeLabel": "Cerrar", "app.breakoutJoinConfirmation.message": "Quieres unirte", - "app.breakoutJoinConfirmation.confirmLabel": "Unirte", "app.breakoutJoinConfirmation.dismissLabel": "Cancelar", "app.audioModal.microphoneLabel": "Micrófono", "app.audioModal.audioChoiceLabel": "¿Como quieres unirte al audio?", diff --git a/bigbluebutton-html5/private/locales/es_MX.json b/bigbluebutton-html5/private/locales/es_MX.json index de88f503bdff6b7bcf367ae48f2a36472ed8a956..8b47a395cd7f674fd8c50ad6d852da0afd681c47 100644 --- a/bigbluebutton-html5/private/locales/es_MX.json +++ b/bigbluebutton-html5/private/locales/es_MX.json @@ -18,6 +18,12 @@ "app.chat.label": "Chat", "app.chat.emptyLogLabel": "Registro de chat vacÃo", "app.chat.clearPublicChatMessage": "El chat publico fue borrado por un moderador", + "app.captions.menu.close": "Cerrar", + "app.captions.menu.start": "Iniciar", + "app.captions.menu.backgroundColor": "Color de fondo", + "app.captions.menu.cancelLabel": "Cancelar", + "app.captions.pad.tip": "Pulse la tecla Esc para enfocar la barra de herramientas de edición", + "app.captions.pad.ownership": "Tomar el control", "app.note.title": "Notas compartidas", "app.note.label": "Nota", "app.note.hideNoteLabel": "Ocultar nota", @@ -103,8 +109,7 @@ "app.presentation.presentationToolbar.fitToPage": "Ajustar presentación al tamaño de la página", "app.presentation.presentationToolbar.goToSlide": "Diapositiva {0}", "app.presentationUploder.title": "Presentación", - "app.presentationUploder.message": "Como presentador puedes cargar cualquier documento Office o archivo PDF. Se recomienda utilizar PDF para mejores resultados.", - "app.presentationUploder.confirmLabel": "Cargar", + "app.presentationUploder.uploadLabel": "Cargar", "app.presentationUploder.confirmDesc": "Grardar los cambios e iniciar la presentación", "app.presentationUploder.dismissLabel": "Cancelar", "app.presentationUploder.dismissDesc": "Cerrar la ventana modal y descartar cambios.", @@ -115,7 +120,6 @@ "app.presentationUploder.fileToUpload": "En proceso de ser cargado ...", "app.presentationUploder.currentBadge": "Acual", "app.presentationUploder.genericError": "Ups, algo salio mal", - "app.presentationUploder.rejectedError": "Algunos de los archivos seleccionados fueron rechazados. Por favor verifique el mime type de los archivo", "app.presentationUploder.upload.progress": "Cargando ({0}%)", "app.presentationUploder.upload.413": "Archivo demasiado grande pasa el máximo de 200 páginas.", "app.presentationUploder.conversion.conversionProcessingSlides": "Procesando página {0} de {1}", @@ -154,6 +158,10 @@ "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": "Verdadero", + "app.poll.answer.false": "Falso", + "app.poll.answer.yes": "Si", + "app.poll.answer.no": "No", "app.poll.liveResult.usersTitle": "Usuarios", "app.poll.liveResult.responsesTitle": "Respuesta", "app.polling.pollingTitle": "Opciones de la encuesta", @@ -225,18 +233,6 @@ "app.submenu.video.videoQualityLabel": "Calidad de video", "app.submenu.video.qualityOptionLabel": "Escoger calidad del video", "app.submenu.video.participantsCamLabel": "Viendo webcams de participantes", - "app.submenu.closedCaptions.closedCaptionsLabel": "SubtÃtulos", - "app.submenu.closedCaptions.takeOwnershipLabel": "Tomar el control", - "app.submenu.closedCaptions.languageLabel": "Lenguaje", - "app.submenu.closedCaptions.localeOptionLabel": "Seleccionar lenguaje", - "app.submenu.closedCaptions.noLocaleOptionLabel": "No hay locales activos", - "app.submenu.closedCaptions.fontFamilyLabel": "Familia de fuente", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Selecciona tipo de letra", - "app.submenu.closedCaptions.fontSizeLabel": "Tamaño de fuente", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Selecciona tamaño de letra", - "app.submenu.closedCaptions.backgroundColorLabel": "Color de fondo", - "app.submenu.closedCaptions.fontColorLabel": "Color de fuente", - "app.submenu.closedCaptions.noLocaleSelected": "Idioma no seleccionado", "app.submenu.participants.muteAllLabel": "Deshabilitar audio a todos menos al presentador", "app.submenu.participants.lockAllLabel": "Bloquear a todos los usuarios", "app.submenu.participants.lockItemLabel": "Espectadores {0}", @@ -258,7 +254,6 @@ "app.settings.applicationTab.label": "Aplicación", "app.settings.audioTab.label": "Audio", "app.settings.videoTab.label": "Video", - "app.settings.closedcaptionTab.label": "SubtÃtulos", "app.settings.usersTab.label": "Participantes", "app.settings.main.label": "Configuración", "app.settings.main.cancel.label": "Cancela", @@ -327,7 +322,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "El micrófono ha sido bloqueado para todos los espectadores, tu conexión es en modo \"solo escuchar\"", "app.breakoutJoinConfirmation.title": "Ingresar a un grupo de trabajo", "app.breakoutJoinConfirmation.message": "Quieres unirte", - "app.breakoutJoinConfirmation.confirmLabel": "Unirte", "app.breakoutJoinConfirmation.confirmDesc": "Ingresar a un grupo de trabajo", "app.breakoutJoinConfirmation.dismissLabel": "Cancelar", "app.breakoutJoinConfirmation.dismissDesc": "Cierra y rechaza entrada a grupo de trabajo", diff --git a/bigbluebutton-html5/private/locales/eu.json b/bigbluebutton-html5/private/locales/eu.json index fa393049785fe8be00ca6b3ab1e52913d08856cf..9f29792c1a034039a364e0757e5d4d923fd77fdb 100644 --- a/bigbluebutton-html5/private/locales/eu.json +++ b/bigbluebutton-html5/private/locales/eu.json @@ -18,6 +18,11 @@ "app.chat.label": "Txata", "app.chat.emptyLogLabel": "Txataren erregistroa hutsik dago", "app.chat.clearPublicChatMessage": "Moderatzaile batek txat publikoaren historia garbitu du", + "app.captions.menu.close": "Itxi", + "app.captions.menu.backgroundColor": "Atzeko planoaren kolorea", + "app.captions.menu.cancelLabel": "Utzi", + "app.captions.pad.tip": "Sakatu Esc edizioaren tresna-barra fokuratzeko", + "app.captions.pad.ownership": "Hartu jabetza", "app.note.title": "Ohar partekatuak", "app.note.label": "Oharra", "app.note.hideNoteLabel": "Ezkutatu oharra", @@ -103,8 +108,7 @@ "app.presentation.presentationToolbar.fitToPage": "Doitu orrira", "app.presentation.presentationToolbar.goToSlide": "{0}. diapositiba", "app.presentationUploder.title": "Aurkezpena", - "app.presentationUploder.message": "Aurkezle gisa kargatzen ahal dituzu bulegoko dokumentuak edo PDF fitxategiak. Emaitza onenak izateko PDFa kargatzea gomendatzen dugu.", - "app.presentationUploder.confirmLabel": "Kargatu", + "app.presentationUploder.uploadLabel": "Kargatu", "app.presentationUploder.confirmDesc": "Gorde aldaketak eta hasi aurkezpena", "app.presentationUploder.dismissLabel": "Utzi", "app.presentationUploder.dismissDesc": "Itxi leihoa eta baztertu aldaketak", @@ -115,7 +119,6 @@ "app.presentationUploder.fileToUpload": "Kargatzeko ...", "app.presentationUploder.currentBadge": "Unekoa", "app.presentationUploder.genericError": "Ops, zerbait oker joan da", - "app.presentationUploder.rejectedError": "Hautatutako zenbait fitxategi ukatu dira. Begiratu fitxategien luzapenak.", "app.presentationUploder.upload.progress": "Kargatzen (%{0})", "app.presentationUploder.upload.413": "Fitxategi handiegia, 200 orriko maximoa gainditu du", "app.presentationUploder.conversion.conversionProcessingSlides": "{1} orritatik {0} prozesatzen", @@ -155,6 +158,10 @@ "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": "Egia", + "app.poll.answer.false": "Faltsua", + "app.poll.answer.yes": "Bai", + "app.poll.answer.no": "Ez", "app.poll.liveResult.usersTitle": "Erabiltzaileak", "app.poll.liveResult.responsesTitle": "Erantzuna", "app.polling.pollingTitle": "Inkestaren aukerak", @@ -226,18 +233,6 @@ "app.submenu.video.videoQualityLabel": "Bideo kalitatea", "app.submenu.video.qualityOptionLabel": "Aukeratu bideo kalitatea", "app.submenu.video.participantsCamLabel": "Parte-hartzaileen web-kamerak ikustea", - "app.submenu.closedCaptions.closedCaptionsLabel": "Azpitituluak", - "app.submenu.closedCaptions.takeOwnershipLabel": "Hartu jabetza", - "app.submenu.closedCaptions.languageLabel": "Hizkuntza", - "app.submenu.closedCaptions.localeOptionLabel": "Aukeratu hizkuntza", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Gogoko hizkuntza aktibatu gabe dago", - "app.submenu.closedCaptions.fontFamilyLabel": "Letra mota", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Aukeratu letra mota", - "app.submenu.closedCaptions.fontSizeLabel": "Letra tamaina", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Aukeratu letra tamaina", - "app.submenu.closedCaptions.backgroundColorLabel": "Atzeko planoaren kolorea", - "app.submenu.closedCaptions.fontColorLabel": "Letra-kolorea", - "app.submenu.closedCaptions.noLocaleSelected": "Gogoko hizkuntza hautatu gabe dago", "app.submenu.participants.muteAllLabel": "Isilarazi guztiak aurkezlea izan ezik", "app.submenu.participants.lockAllLabel": "Blokeatu ikusle guztiak", "app.submenu.participants.lockItemLabel": "Ikusleak {0}", @@ -259,7 +254,6 @@ "app.settings.applicationTab.label": "Aplikazioa", "app.settings.audioTab.label": "Audioa", "app.settings.videoTab.label": "Bideoa", - "app.settings.closedcaptionTab.label": "Azpitituluak", "app.settings.usersTab.label": "Parte hartzaileak", "app.settings.main.label": "Ezarpenak", "app.settings.main.cancel.label": "Utzi", @@ -328,7 +322,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "Ikusleek mikrofonoak blokeatuta dituzte, soilik entzuteko moduan konektatzen ari zara", "app.breakoutJoinConfirmation.title": "Sartu taldeko gelan", "app.breakoutJoinConfirmation.message": "Sartu nahi duzu", - "app.breakoutJoinConfirmation.confirmLabel": "Sartu", "app.breakoutJoinConfirmation.confirmDesc": "Sartu taldeko gelan", "app.breakoutJoinConfirmation.dismissLabel": "Utzi", "app.breakoutJoinConfirmation.dismissDesc": "Itxi eta uko egiten dio taldeko gelan sartzeari", diff --git a/bigbluebutton-html5/private/locales/fa_IR.json b/bigbluebutton-html5/private/locales/fa_IR.json index 32545680af5f4a10e1f14403050de313be7fa0c3..e08ace74bc73f0f475ba9078c9ec72d9e879e386 100644 --- a/bigbluebutton-html5/private/locales/fa_IR.json +++ b/bigbluebutton-html5/private/locales/fa_IR.json @@ -1,76 +1,199 @@ { + "app.home.greeting": "ارائه شما به زودی آغاز خواهد شد ...", "app.chat.submitLabel": "ارسال پیام", - "app.chat.errorMinMessageLength": "پیام شما {0} کاراکتر(0) است، برای ارسال، کوتاه است.", - "app.chat.errorMaxMessageLength": "پیام شما {0} کارکتر(0) است Ùˆ برای ارسال خیلی طولانیست.", - "app.chat.inputLabel": "ورودی پیام برای چت{0}", - "app.chat.inputPlaceholder": "پیام{0}", + "app.chat.errorMinMessageLength": "پیام {0} کاراکتر(ÛŒ) بسیار کوتاه است", + "app.chat.errorMaxMessageLength": "پیام {0} کاراکتر(ÛŒ) بسیار بلند است", + "app.chat.inputLabel": "ورودی پیام برای چت {0}", + "app.chat.inputPlaceholder": "پیام {0}", "app.chat.titlePublic": "Ú¯Ùتگوی عمومی", - "app.chat.titlePrivate": "Ú¯Ùتگوی خصوصی با{0}", - "app.chat.partnerDisconnected": "{0}کلاس را ترک کرد.", - "app.chat.closeChatLabel": "خروج{0}", - "app.chat.hideChatLabel": "مخÙÛŒ کردن{0}", - "app.chat.moreMessages": "مشاهده ادامه پیام های پایین", + "app.chat.titlePrivate": "Ú¯Ùتگوی خصوصی با {0}", + "app.chat.partnerDisconnected": "{0} جلسه را ترک کرد", + "app.chat.closeChatLabel": "خروج {0}", + "app.chat.hideChatLabel": "پنهان سازی {0}", + "app.chat.moreMessages": "ادامه پیام ها در پایین", "app.chat.dropdown.options": "گزینه های Ú¯Ùتگو", - "app.chat.dropdown.clear": "پاک سازی", - "app.chat.dropdown.copy": "Ú©Ù¾ÛŒ کردن", - "app.chat.dropdown.save": "ذخیره کردن", + "app.chat.dropdown.clear": "پاکسازی", + "app.chat.dropdown.copy": "Ú©Ù¾ÛŒ", + "app.chat.dropdown.save": "ذخیره", "app.chat.label": "Ú¯Ùتگو", + "app.chat.offline": "Ø¢Ùلاین", "app.chat.emptyLogLabel": "پاک کردن سابقه Ú¯Ùتگو", - "app.chat.clearPublicChatMessage": "سابقه Ú¯Ùتگوها توسط مدیر Øذ٠گردید.", - "app.userList.usersTitle": "دانش آموزان", - "app.userList.participantsTitle": "دانش آموزان", + "app.chat.clearPublicChatMessage": "سابقه Ú¯Ùتگوها توسط مدیر Øذ٠گردید", + "app.captions.label": "عناوین", + "app.captions.menu.close": "بستن", + "app.captions.menu.start": "شروع", + "app.captions.menu.select": "انتخاب زبان موجود", + "app.captions.menu.title": "منوی زیرنویس", + "app.captions.menu.fontSize": "اندازه", + "app.captions.menu.fontColor": "زنگ متن", + "app.captions.menu.fontFamily": "قلم", + "app.captions.menu.backgroundColor": "رنگ پس زمینه", + "app.captions.menu.previewLabel": "پیش نمایش", + "app.captions.menu.cancelLabel": "لغو", + "app.captions.pad.hide": "پنهان سازی زیرنویس", + "app.captions.pad.tip": "برای Ùعال کردن ادیتور نوار ابزار Esc را Ùشار دهید", + "app.captions.pad.ownership": "بدست گرÙتن کنترل", + "app.note.title": "یادداشت های اشتراکی", + "app.note.label": "یادداشت", + "app.note.hideNoteLabel": "پنهان کردن یادداشت", + "app.user.activityCheck": "بررسی Ùعالیت کاربر", + "app.user.activityCheck.label": "بررسی کنید آیا کاربر هنوز در جلسه ({0}) Øضور دارد", + "app.user.activityCheck.check": "بررسی", + "app.note.tipLabel": "برای Ùعال کردن ادیتور نوار ابزار Esc را Ùشار دهید", + "app.userList.usersTitle": "کاربران", + "app.userList.participantsTitle": "شرکت کنندگان", "app.userList.messagesTitle": "پیام ها", - "app.userList.presenter": "استاد", + "app.userList.notesTitle": "یاددادشت ها", + "app.userList.captionsTitle": "عناوین", + "app.userList.presenter": "ارائه دهنده", "app.userList.you": "شما", "app.userList.locked": "Ù‚ÙÙ„ شده", - "app.userList.toggleCompactView.label": "مخÙÛŒ کردن نوار ابزار", + "app.userList.label": "لیست کاربر", + "app.userList.toggleCompactView.label": "تغییر در Øالت نمایه Ùشرده", "app.userList.guest": "مهمان", + "app.userList.menuTitleContext": "گزینه های موجود", "app.userList.chatListItem.unreadSingular": "{0} پیام جدید", "app.userList.chatListItem.unreadPlural": "{0} پیام های جدید", + "app.userList.menu.chat.label": "شروع Ú¯Ùتگوی خصوصی", + "app.userList.menu.clearStatus.label": "پاک کردن وضعیت", "app.userList.menu.removeUser.label": "Øذ٠کاربر", "app.userList.menu.muteUserAudio.label": "بستن صدای کاربر", - "app.userList.menu.unmuteUserAudio.label": "Ùعال سازی میکروÙÙ† کاربر", + "app.userList.menu.unmuteUserAudio.label": "Ùعال سازی صدای کاربر", "app.userList.userAriaLabel": "{0} {1} {2} وضعیت {3}", "app.userList.menu.promoteUser.label": "ارتقا نقش به مدیر", - "app.userList.menu.demoteUser.label": "تبدیل به دانش آموز", - "app.media.label": "مدیا", + "app.userList.menu.demoteUser.label": "تبدیل به کاربر عادی", + "app.userList.menu.unlockUser.label": "باز کردن {0}", + "app.userList.menu.lockUser.label": "Ù‚ÙÙ„ کردن {0}", + "app.userList.menu.directoryLookup.label": "جستجوی دایرکتوری", + "app.userList.menu.makePresenter.label": "تغییر نقش به ارائه دهنده", + "app.userList.userOptions.manageUsersLabel": "مدیریت کاربران", + "app.userList.userOptions.muteAllLabel": "بستن صدای همه کاربران", + "app.userList.userOptions.muteAllDesc": "بستن صدای همه کاربران جاضر در جلسه", + "app.userList.userOptions.clearAllLabel": "پاک کردن آیکون همه وضعیت ها", + "app.userList.userOptions.clearAllDesc": "پاک کردن همه آیکون های وضعیت کاربران", + "app.userList.userOptions.muteAllExceptPresenterLabel": "بستن صدای همه کاربران به جز ارائه دهنده", + "app.userList.userOptions.muteAllExceptPresenterDesc": "بستن صدای همه کاربران در جلسه به جز ارائه دهنده", + "app.userList.userOptions.unmuteAllLabel": "غیرÙعال کردن امکان بستن صدای جلسه", + "app.userList.userOptions.unmuteAllDesc": "صدای جلسه را باز میکند", + "app.userList.userOptions.lockViewersLabel": "Ù‚ÙÙ„ کردن کاربران", + "app.userList.userOptions.lockViewersDesc": "غیرÙعال کردن امکانات خاص برای شرکت کنندگان در جلسه", + "app.userList.userOptions.disableCam": "اشتراک گذاری دوربین کاربران غیر Ùعال شده است", + "app.userList.userOptions.disableMic": "استÙاده از امکان صدا برای کاربران غیر Ùعال شده است", + "app.userList.userOptions.disablePrivChat": "Ú¯Ùتگوی خصوصی غیر Ùعال شده است", + "app.userList.userOptions.disablePubChat": "Ú¯Ùتگوی عمومی غیر Ùعال شده است", + "app.userList.userOptions.disableNote": "یادداشت اشتراکی در Øال Øاضر Ù‚ÙÙ„ شده است", + "app.userList.userOptions.webcamsOnlyForModerator": "تنها مدیران امکان مشاهده دوربین های کاربران را دارند (به دلیل تنظیمات Ù‚ÙÙ„)", + "app.media.label": "صدا Ùˆ تصویر", "app.media.screenshare.start": "اشتراک صÙØÙ‡ نمایش شروع شد", "app.media.screenshare.end": "اشتراک صÙØÙ‡ نمایش به پایان رسید.", - "app.media.screenshare.safariNotSupported": "در Øال Øاضر اشتراک صÙØÙ‡ نمایش در مرورگر ساÙاری پشتیبانی نمیشد، لطÙا از کروم یا ÙایرÙاکس استÙاده کنید.", + "app.media.screenshare.safariNotSupported": "در Øال Øاضر اشتراک صÙØÙ‡ نمایش در مرورگر ساÙاری پشتیبانی نمیشود، لطÙا از کروم یا ÙایرÙاکس استÙاده کنید.", "app.meeting.ended": "جلسه پایان یاÙت", - "app.meeting.endedMessage": "شما در Øال انتقال به صÙØÙ‡ اصلی هستید.", + "app.meeting.meetingTimeRemaining": "زمان باقی مانده از جلسه: {0}", + "app.meeting.meetingTimeHasEnded": "زمان جلسه به اتمام رسید. جلسه در اسرع وقت بسته خواهد شد", + "app.meeting.endedMessage": "شما در Øال انتقال به صÙØÙ‡ اصلی هستید", + "app.meeting.alertMeetingEndsUnderOneMinute": "جلسه ظر٠یک دقیقه آینده بسته خواهد شد.", + "app.meeting.alertBreakoutEndsUnderOneMinute": "جلسه ظر٠یک دقیقه آینده به اتمام خواهد رسید.", + "app.presentation.hide": "پنهان سازی ارائه", + "app.presentation.notificationLabel": "ارائه کنونی", + "app.presentation.slideContent": "Ù…Øتوای اسلاید", + "app.presentation.startSlideContent": "شروع Ù…Øتوای اسلاید", + "app.presentation.endSlideContent": "انتهای Ù…Øتوای اسلاید", + "app.presentation.emptySlideContent": "Ù…Øتوایی برای اسلاید کنونی وجود ندارد", + "app.presentation.presentationToolbar.selectLabel": "انتخاب اسلاید", "app.presentation.presentationToolbar.prevSlideLabel": "اسلاید قبلی", "app.presentation.presentationToolbar.prevSlideDesc": "تغییر ارائه به اسلاید قبلی", "app.presentation.presentationToolbar.nextSlideLabel": "اسلاید بعدی", "app.presentation.presentationToolbar.nextSlideDesc": "تغییر ارائه به اسلاید بعدی", - "app.presentation.presentationToolbar.skipSlideLabel": "بیرون رÙتن از اسلاید", + "app.presentation.presentationToolbar.skipSlideLabel": "رد کردن اسلاید", "app.presentation.presentationToolbar.skipSlideDesc": "تغییر ارائه به یک اسلاید خاص", - "app.presentation.presentationToolbar.fitWidthLabel": "اندازه تصویر را متناسب با عرض صÙØÙ‡ Ú©Ù†.", + "app.presentation.presentationToolbar.fitWidthLabel": "اندازه تصویر را متناسب با عرض صÙØÙ‡ Ú©Ù†", "app.presentation.presentationToolbar.fitWidthDesc": "کلیه عرض اسلاید را نمایش بده", "app.presentation.presentationToolbar.fitScreenLabel": "ابعاد را به اندازه تمام صÙØÙ‡ Ú©Ù†", "app.presentation.presentationToolbar.fitScreenDesc": "Ú©Ù„ اسلاید را نمایش بده", "app.presentation.presentationToolbar.zoomLabel": "بزرگ نمایی", "app.presentation.presentationToolbar.zoomDesc": "تغییر مقدار زوم ارائه", - "app.presentation.presentationToolbar.fitToWidth": "اندازه تصویر را متناسب با عرض صÙØÙ‡ Ú©Ù†.", + "app.presentation.presentationToolbar.zoomInLabel": "اÙزایش بزرگنمایی", + "app.presentation.presentationToolbar.zoomInDesc": "اÙزایش بزرگ نمایی ارائه", + "app.presentation.presentationToolbar.zoomOutLabel": "کاهش بزرگ نمایی", + "app.presentation.presentationToolbar.zoomOutDesc": "کاهش بزرگ نمایی ارائه", + "app.presentation.presentationToolbar.zoomReset": "بازنشانی بزرگ نمایی", + "app.presentation.presentationToolbar.zoomIndicator": "درصد بزرگ نمایی کنونی", + "app.presentation.presentationToolbar.fitToWidth": "اندازه تصویر را متناسب با عرض ارائه Ú©Ù†", + "app.presentation.presentationToolbar.fitToPage": "اندازه تصویر را متناسب با عرض صÙØÙ‡ Ú©Ù†", "app.presentation.presentationToolbar.goToSlide": "اسلاید {0}", "app.presentationUploder.title": "ارائه", + "app.presentationUploder.uploadLabel": "بارگزاری", "app.presentationUploder.confirmDesc": "تغییرات خود را ذخیره کنید Ùˆ ارائه را آغاز نمایید.", - "app.presentationUploder.dismissLabel": "کنسل", + "app.presentationUploder.dismissLabel": "لغو", "app.presentationUploder.dismissDesc": "بستن پنجره Ùˆ Øذ٠تغییرات شما", - "app.presentationUploder.dropzoneLabel": "Ùایل های خود را برای آپلود به اینجا بکشید.", + "app.presentationUploder.dropzoneLabel": "Ùایل های خود را برای آپلود کشیده Ùˆ در اینجا رها کنید", + "app.presentationUploder.dropzoneImagesLabel": "تصاویر را به منظور بارگزاری اینجا رها کنید", "app.presentationUploder.browseFilesLabel": "یا برای انتخاب Ùایل کلیک کنید.", - "app.presentationUploder.currentBadge": "جاری", - "app.presentationUploder.genericError": "اشتباهی اتÙاق اÙتاد.", - "app.presentationUploder.upload.progress": "در Øال آپلود ({0}%)", + "app.presentationUploder.browseImagesLabel": "یا عکس ها را بروز/بگیر", + "app.presentationUploder.fileToUpload": "به منظور بارگزاری ...", + "app.presentationUploder.currentBadge": "کنونی", + "app.presentationUploder.genericError": "اوپس، خطایی رخ داد", + "app.presentationUploder.rejectedError": "Ùایل(های) انتخاب شده رد شدند. لطÙا نوع Ùایل(ها) را بررسی کنید", + "app.presentationUploder.upload.progress": "در Øال بارگزاری ({0}%)", + "app.presentationUploder.upload.413": "اندازه Ùایل بسیار بزرگ است، به ماکسیمم تعداد 200 صÙØÙ‡ رسید", "app.presentationUploder.conversion.conversionProcessingSlides": "در Øال پردازش صÙØÙ‡ {0} از {1}", + "app.presentationUploder.conversion.genericConversionStatus": "در Øال تبدیل Ùایل ...", + "app.presentationUploder.conversion.generatingThumbnail": "در Øال تولید تصاویر Ú©ÙˆÚ†Ú© ...", + "app.presentationUploder.conversion.generatedSlides": "اسلاید ها تولید شدند ...", + "app.presentationUploder.conversion.generatingSvg": "در Øال تولید تصاویر SVG ...", + "app.presentationUploder.conversion.pageCountExceeded": "اوپس، تعداد Øداکثر صÙØات از 200 صÙØÙ‡ بیشتر شده است", + "app.presentationUploder.conversion.timeout": "اوپس، عملیات تبدیل خیلی طول کشید", + "app.presentationUploder.isDownloadableLabel": "مجوز دانلود ارائه را نده", + "app.presentationUploder.isNotDownloadableLabel": "مجوز دانلود ارائه را بده", + "app.presentationUploder.removePresentationLabel": "Øذ٠ارائه", + "app.presentationUploder.setAsCurrentPresentation": "انتخاب ارائه به عنوان ارائه Ùعال", + "app.presentationUploder.tableHeading.filename": "نام Ùایل", "app.presentationUploder.tableHeading.options": "گزینه ها", + "app.presentationUploder.tableHeading.status": "وضعیت", + "app.poll.pollPaneTitle": "نظرسنجی", + "app.poll.quickPollTitle": "نظرسنجی سریع", + "app.poll.hidePollDesc": "پنهان سازی منوی نظرسنجی", + "app.poll.customPollInstruction": "برای ایجاد نظرسنجی شخصی، دگمه زیر را انتخاب کرده Ùˆ گزینه های خود را وارد کنید.", + "app.poll.quickPollInstruction": "برای شروع نظرسنجی خود گزینه زیر را انتخاب کنید", + "app.poll.customPollLabel": "نظرسنجی شخصی", + "app.poll.startCustomLabel": "آغاز نظرسنجی شخصی", + "app.poll.activePollInstruction": "این پنجره را باز بگذارید تا بقیه امکان پاسخگویی به نظرسنجی را داشته باشند. با انتخاب 'انتشار نتایج نظرسنجی' یا برگشت به منوی قبل نظرسنجی پایان خواهد یاÙت", + "app.poll.publishLabel": "انتشار نتایج نظرسنجی", + "app.poll.backLabel": "بازگشت به گزینه های نظرسنجی", "app.poll.closeLabel": "بستن", + "app.poll.waitingLabel": "در انتظار پاسخ ها ({0}/{1})", + "app.poll.ariaInputCount": "گزینه نظرسنجی شخصی {0} از {1}", + "app.poll.customPlaceholder": "اÙزودن گزینه نظرسنجی", + "app.poll.noPresentationSelected": "هیچ ارائه ای انتخاب نشده است! لطÙا یکی را انتخاب کنید", + "app.poll.clickHereToSelect": "برای انتخاب اینجا را کلیک Ú©Ù†", + "app.poll.t": "درست", + "app.poll.f": "نادرست", + "app.poll.tf": "درست/نادرست", "app.poll.y": "بله", "app.poll.n": "خیر", - "app.poll.liveResult.usersTitle": "دانش آموزان", + "app.poll.yn": "اری/نه", + "app.poll.a2": "A / B", + "app.poll.a3": "A / B / C", + "app.poll.a4": "A / B / C / D", + "app.poll.a5": "A / B / C / D", + "app.poll.answer.true": "درست", + "app.poll.answer.false": "نادرست", + "app.poll.answer.yes": "بله", + "app.poll.answer.no": "خیر", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", + "app.poll.liveResult.usersTitle": "کاربران", + "app.poll.liveResult.responsesTitle": "پاسخ", + "app.polling.pollingTitle": "امکانات نظرسنجی", "app.polling.pollAnswerLabel": "پاسخ نظرسنجی {0}", "app.polling.pollAnswerDesc": "این گزینه را برای رای دادن به {0} انتخاب کنید.", - "app.failedMessage": "عذر خواهی میکنیم. مشکلی در ارتباط با سرور وجود دارد.", + "app.failedMessage": "عذر خواهی، مشکلی در اتصال به سرور به وجود آمده است.", + "app.downloadPresentationButton.label": "دانلود Ùایل اصلی ارائه", + "app.connectingMessage": "در Øال اتصال ...", + "app.waitingMessage": "ارتباط قطع شد. در Øال تلاش مجدد در {0} ثانیه ...", "app.navBar.settingsDropdown.optionsLabel": "گزینه ها", "app.navBar.settingsDropdown.fullscreenLabel": "تمام صÙØÙ‡", "app.navBar.settingsDropdown.settingsLabel": "تنظیمات", @@ -78,52 +201,73 @@ "app.navBar.settingsDropdown.leaveSessionLabel": "خروج", "app.navBar.settingsDropdown.exitFullscreenLabel": "بستن Øالت تمام صÙØÙ‡", "app.navBar.settingsDropdown.fullscreenDesc": "منوی تنظیمات را تمام صÙØÙ‡ Ú©Ù†", - "app.navBar.settingsDropdown.settingsDesc": "تغییر تنظیمات معمول", - "app.navBar.settingsDropdown.aboutDesc": "نمایش اطلاعات دانش آموز", + "app.navBar.settingsDropdown.settingsDesc": "تغییر تنظیمات عمومی", + "app.navBar.settingsDropdown.aboutDesc": "نمایش اطلاعات مربوط به کاربران", "app.navBar.settingsDropdown.leaveSessionDesc": "ترک جلسه", "app.navBar.settingsDropdown.exitFullscreenDesc": "خروج از Øالت تمام صÙØÙ‡", - "app.navBar.userListToggleBtnLabel": "نمایش لیست کاربران", - "app.navBar.toggleUserList.newMessages": "با اعلان پیام جدید", - "app.navBar.recording": "جلسه در Øال ضبط شدن است.", + "app.navBar.settingsDropdown.hotkeysLabel": "میانبرهای صÙØÙ‡ کلید", + "app.navBar.settingsDropdown.hotkeysDesc": "لیست کردن میانبرهای موجود صÙØÙ‡ کلید", + "app.navBar.settingsDropdown.helpLabel": "راهنما", + "app.navBar.settingsDropdown.helpDesc": "کاربر را به آموزش های ویدئویی متصل میکند (یک تب جدید باز میکند)", + "app.navBar.settingsDropdown.endMeetingDesc": "جلسه کنونی را خاتمه میدهد", + "app.navBar.settingsDropdown.endMeetingLabel": "اتمام جلسه", + "app.navBar.userListToggleBtnLabel": "تغییر وضعیت نمایش لیست کاربران", + "app.navBar.toggleUserList.ariaLabel": "تغییر وضعیت نمایش کاربران Ùˆ پیام ها", + "app.navBar.toggleUserList.newMessages": "اعلان با پیام جدید", + "app.navBar.recording": "جلسه در Øال ضبط شدن است", "app.navBar.recording.on": "در Øال ضبط", - "app.navBar.recording.off": "ضبط نمیشود.", + "app.navBar.recording.off": "ضبط نمیشود", "app.leaveConfirmation.confirmLabel": "ترک", - "app.leaveConfirmation.confirmDesc": "پیام های شما بیرون از جلسه", + "app.leaveConfirmation.confirmDesc": "شما را از جلسه خارج میکند", + "app.endMeeting.title": "اتمام جلسه", + "app.endMeeting.description": "آیا مطمئنید Ú©Ù‡ میخواهید این جلسه را به اتمام برسانید؟", "app.endMeeting.yesLabel": "بله", "app.endMeeting.noLabel": "خیر", "app.about.title": "درباره", - "app.about.copyright": "Ú©Ù¾ÛŒ رایت", + "app.about.version": "نسخه کاربر:", + "app.about.copyright": "ØÙ‚ نشر", "app.about.confirmLabel": "تایید", "app.about.confirmDesc": "تایید", - "app.about.dismissLabel": "کنسل", - "app.about.dismissDesc": "بستن قسمت درباره کاربر", + "app.about.dismissLabel": "لغو", + "app.about.dismissDesc": "بستن قسمت اطلاعات کاربر", + "app.actionsBar.changeStatusLabel": "تغییر وضعیت", "app.actionsBar.muteLabel": "Øالت بی صدا", "app.actionsBar.unmuteLabel": "Ùعال سازی صدا", + "app.actionsBar.camOffLabel": "خاموش کردن دوربین", "app.actionsBar.raiseLabel": "اجازه گرÙتن از استاد", - "app.submenu.application.applicationSectionTitle": "نرم اÙزار", + "app.actionsBar.label": "نوار Ùعالیت ها", + "app.actionsBar.actionsDropdown.restorePresentationLabel": "بازیابی ارائه", + "app.actionsBar.actionsDropdown.restorePresentationDesc": "دگمه بازیابی ارائه بعد از اینکه بسته شد", + "app.screenshare.screenShareLabel" : "اشتراک صÙØÙ‡", + "app.submenu.application.applicationSectionTitle": "برنامه", + "app.submenu.application.animationsLabel": "انیمیشن ها", + "app.submenu.application.audioAlertLabel": "اعلان های صوتی برای Ú¯Ùتگو", + "app.submenu.application.pushAlertLabel": "اعلان های پاپ اپ برای Ú¯Ùتگو", "app.submenu.application.fontSizeControlLabel": "اندازه متن", - "app.submenu.application.increaseFontBtnLabel": "اÙزایش اندازه متن نرم اÙزار", - "app.submenu.application.decreaseFontBtnLabel": "کاهش اندازه متن نرم اÙزار", - "app.submenu.application.languageLabel": "زبان نرم اÙزار", + "app.submenu.application.increaseFontBtnLabel": "اÙزایش اندازه متن برنامه", + "app.submenu.application.decreaseFontBtnLabel": "کاهش اندازه متن برنامه", + "app.submenu.application.currentSize": "در Øال Øاضر {0}", + "app.submenu.application.languageLabel": "زبان برنامه", + "app.submenu.application.ariaLanguageLabel": "تغییر زبان برنامه", "app.submenu.application.languageOptionLabel": "انتخاب زبان", "app.submenu.application.noLocaleOptionLabel": "هیچ زبان Ùعالی وجود ندارد", "app.submenu.audio.micSourceLabel": "ورودی صدای میکروÙÙ†", - "app.submenu.audio.speakerSourceLabel": "صدای خروجی", - "app.submenu.audio.streamVolumeLabel": "ولوم صدای میکروÙÙ† شما", - "app.submenu.video.title": "تصویر کلاس", + "app.submenu.audio.speakerSourceLabel": "ورودی صدای بلندگو", + "app.submenu.audio.streamVolumeLabel": "بلندی صدای میکروÙÙ† شما", + "app.submenu.video.title": "ویدئو", "app.submenu.video.videoSourceLabel": "منبع تصویر", "app.submenu.video.videoOptionLabel": "انتخاب منبع تصویر", + "app.submenu.video.videoQualityLabel": "Ú©ÛŒÙیت ویدئو", "app.submenu.video.qualityOptionLabel": "انتخاب Ú©ÛŒÙیت تصویر", - "app.submenu.video.participantsCamLabel": "مشاهده دوربین کاربران", - "app.submenu.closedCaptions.takeOwnershipLabel": "بدست گرÙتن کنترل", - "app.submenu.closedCaptions.languageLabel": "زبان", - "app.submenu.closedCaptions.localeOptionLabel": "انتخاب زبان", - "app.submenu.closedCaptions.noLocaleOptionLabel": "هیچ زبان Ùعالی وجود ندارد.", - "app.submenu.closedCaptions.fontFamilyLabel": "Ùونت", - "app.submenu.closedCaptions.fontSizeLabel": "اندازه Ùونت", - "app.submenu.closedCaptions.backgroundColorLabel": "رنگ پس زمینه", - "app.submenu.closedCaptions.fontColorLabel": "رنگ متن", + "app.submenu.video.participantsCamLabel": "مشاهده دوربین شرکت کنندگان", "app.submenu.participants.muteAllLabel": "غیر Ùعال سازی صدای کاربران به جز اساتید", + "app.submenu.participants.lockAllLabel": "Ù‚ÙÙ„ کردن همه کاربران", + "app.submenu.participants.lockItemLabel": "کاربران {0}", + "app.submenu.participants.lockMicDesc": "غیرÙعال کردن میکروÙون برای تمامی کاربران Ù‚ÙÙ„ شده", + "app.submenu.participants.lockCamDesc": "غیرÙعال کردن دوربین برای تمامی کاربران Ù‚ÙÙ„ شده", + "app.submenu.participants.lockPublicChatDesc": "غیرÙعال کردن Ú¯Ùتگوی عمومی برای همه کاربران Ù‚ÙÙ„ شده", + "app.submenu.participants.lockPrivateChatDesc": "غیرÙعال سازی Ú¯Ùتگوی خصوصی برای تمام کابران Ù‚ÙÙ„ شده", + "app.submenu.participants.lockLayoutDesc": "Ù‚ÙÙ„ کردن چینش صÙØÙ‡ برای همه کاربران Ù‚ÙÙ„ شده", "app.submenu.participants.lockMicAriaLabel": "Ù‚ÙÙ„ کردن میکروÙÙ†", "app.submenu.participants.lockCamAriaLabel": "Ù‚ÙÙ„ کردن دوربین", "app.submenu.participants.lockPublicChatAriaLabel": "Ù‚ÙÙ„ کردن Ú¯Ùتگوی عمومی", @@ -131,135 +275,249 @@ "app.submenu.participants.lockLayoutAriaLabel": "Ù‚ÙÙ„ کردن چینش تصویر", "app.submenu.participants.lockMicLabel": "میکروÙÙ†", "app.submenu.participants.lockCamLabel": "دوربین", + "app.submenu.participants.lockPublicChatLabel": "Ú¯Ùتگوی عمومی", + "app.submenu.participants.lockPrivateChatLabel": "Ú¯Ùتگوی خصوصی", "app.submenu.participants.lockLayoutLabel": "چینش تصویر", "app.settings.applicationTab.label": "نرم اÙزار", "app.settings.audioTab.label": "صدا", - "app.settings.videoTab.label": "تصویر کلاس", - "app.settings.usersTab.label": "شرکت کنندگان در کلاس", + "app.settings.videoTab.label": "ویدئو", + "app.settings.usersTab.label": "شرکت کنندگان", "app.settings.main.label": "تنظیمات", - "app.settings.main.cancel.label": "کنسل", - "app.settings.main.cancel.label.description": "Øذ٠تغییرات Ùˆ بستن منوی تنظیمات", + "app.settings.main.cancel.label": "لغو", + "app.settings.main.cancel.label.description": "تغییرات را ØØ°Ù Ùˆ منوی تنظیمات را Ù…ÛŒ بندد", "app.settings.main.save.label": "ذخیره", - "app.settings.main.save.label.description": "ذخیره تغییرات Ùˆ بستن منوی تنظیمات", - "app.settings.dataSavingTab.description": "برای صرÙÙ‡ جویی در مصر٠اینترنت آیتم هایی Ú©Ù‡ باید نمایش داده شوند را انتخاب کنید.", + "app.settings.main.save.label.description": "تغییرات را ذخیره Ùˆ منوی تنظیمات را میبندد", + "app.settings.dataSavingTab.label": "صرÙÙ‡ جویی در مصرÙ", + "app.settings.dataSavingTab.webcam": "Ùعال سازی دوربین ها", + "app.settings.dataSavingTab.screenShare": "Ùعال سازی اشتراک گذاری صÙØÙ‡", + "app.settings.dataSavingTab.description": "برای صرÙÙ‡ جویی در مصر٠پهنای باند اینترنت آیتم هایی Ú©Ù‡ باید نمایش داده شوند را انتخاب کنید.", + "app.settings.save-notification.label": "تنظیمات ذخیره شدند", "app.switch.onLabel": "روشن", "app.switch.offLabel": "خاموش", "app.actionsBar.actionsDropdown.actionsLabel": "Ùعالیت ها", - "app.actionsBar.actionsDropdown.presentationLabel": "آپلود Ùایل ارائه", + "app.actionsBar.actionsDropdown.presentationLabel": "بارگزاری Ùایل ارائه", "app.actionsBar.actionsDropdown.initPollLabel": "ایجاد نظرسنجی", - "app.actionsBar.actionsDropdown.desktopShareLabel": "اشتراک صÙØÙ‡ نمایش شما", - "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "متوق٠کردن اشتراک گذاری دسکتاپ شما", + "app.actionsBar.actionsDropdown.desktopShareLabel": "اشتراک صÙØÙ‡ نمایش", + "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "متوق٠کردن اشتراک گذاری میز کار", "app.actionsBar.actionsDropdown.presentationDesc": "آپلود Ùایل ارائه شما", "app.actionsBar.actionsDropdown.initPollDesc": "ایجاد نظرسنجی", - "app.actionsBar.actionsDropdown.desktopShareDesc": "اشتراک گذاری تصویر کامپیوتر شما با دیگران", - "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "توق٠اشتراک گذاری تصویر کامپیوتر شما با دیگران", - "app.actionsBar.emojiMenu.awayLabel": "عدم Øضور در کلاس", - "app.actionsBar.emojiMenu.awayDesc": "تغییر وضعیت شما به عدم Øضور در کلاس", + "app.actionsBar.actionsDropdown.desktopShareDesc": "اشتراک گذاری تصویر میز کار با دیگران", + "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "توق٠اشتراک گذاری تصویر میز کار با دیگران", + "app.actionsBar.actionsDropdown.pollBtnLabel": "آغاز یک نظرسنجی", + "app.actionsBar.actionsDropdown.pollBtnDesc": "تغییر وضعیت نمایش کادر نظرسنجی", + "app.actionsBar.actionsDropdown.saveUserNames": "ذخیره نام های کاربری", + "app.actionsBar.actionsDropdown.createBreakoutRoom": "ایجاد اتاق زیرمجموعه جلسه اصلی", + "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "ایجاد اتاق های زیرمجموعه به منظور چند تکه کردن جلسه کنونی", + "app.actionsBar.actionsDropdown.captionsLabel": "نوشتن زیرنویس", + "app.actionsBar.actionsDropdown.captionsDesc": "تغییر وضعیت نمایش منوی عناویر", + "app.actionsBar.actionsDropdown.takePresenter": "گرÙتن نقش ارائه دهنده", + "app.actionsBar.actionsDropdown.takePresenterDesc": "تغییر نقش خود به ارائه دهنده", + "app.actionsBar.emojiMenu.statusTriggerLabel": "اعمال وضعیت", + "app.actionsBar.emojiMenu.awayLabel": "عدم Øضور در جلسه", + "app.actionsBar.emojiMenu.awayDesc": "تغییر وضعیت خود به عدم Øضور در جلسه", "app.actionsBar.emojiMenu.raiseHandLabel": "اجازه گرÙتن از استاد", - "app.actionsBar.emojiMenu.raiseHandDesc": "دست خود را بالا ببرید تا از استاد سوال بپرسید", + "app.actionsBar.emojiMenu.raiseHandDesc": "دست خود را بالا برده تا از استاد درخواست سوال کنید", "app.actionsBar.emojiMenu.neutralLabel": "تصمیم گیری نشده", - "app.actionsBar.emojiMenu.neutralDesc": "تغییر وضعیت شما به تصمیم گیری نشده", - "app.actionsBar.emojiMenu.confusedLabel": "کامل Ù†Ùهمیدم", - "app.actionsBar.emojiMenu.confusedDesc": "تغییر وضعیت شما به وضعیت کامل Ù†Ùهمیدم", + "app.actionsBar.emojiMenu.neutralDesc": "تغییر وضعیت خود به تصمیم گیری نشده", + "app.actionsBar.emojiMenu.confusedLabel": "گیج شدم", + "app.actionsBar.emojiMenu.confusedDesc": "تغییر وضعیت خود به گیج شدم", "app.actionsBar.emojiMenu.sadLabel": "ناراØت", - "app.actionsBar.emojiMenu.sadDesc": "تغییر Øالت شما به ناراØت", + "app.actionsBar.emojiMenu.sadDesc": "تغییر وضعیت خود به ناراØت", "app.actionsBar.emojiMenu.happyLabel": "شاد", - "app.actionsBar.emojiMenu.happyDesc": "تغییر وضعیت شما به خوشØال", + "app.actionsBar.emojiMenu.happyDesc": "تغییر وضعیت خود به خوشØال", "app.actionsBar.emojiMenu.noneLabel": "پاک کردن وضعیت", - "app.actionsBar.emojiMenu.noneDesc": "پاک کردن وضعیت شما", - "app.actionsBar.emojiMenu.applauseLabel": "تØسین کردن.", - "app.actionsBar.emojiMenu.applauseDesc": "تغییر وضعیت شما به تØسین کردن", + "app.actionsBar.emojiMenu.noneDesc": "پاک کردن وضعیت خود", + "app.actionsBar.emojiMenu.applauseLabel": "تØسین", + "app.actionsBar.emojiMenu.applauseDesc": "تغییر وضعیت خود به تØسین", "app.actionsBar.emojiMenu.thumbsUpLabel": "عالی", - "app.actionsBar.emojiMenu.thumbsUpDesc": "تغییر وضعیت شما به عالی", + "app.actionsBar.emojiMenu.thumbsUpDesc": "تغییر وضعیت خود به عالی", "app.actionsBar.emojiMenu.thumbsDownLabel": "نه چندان خوب", - "app.actionsBar.emojiMenu.thumbsDownDesc": "تغییر وضعیت شما به نه چندان خوب", - "app.actionsBar.currentStatusDesc": "وضعیت Ùعلی شما{0}", - "app.audioNotification.audioFailedError1001": "خطای 1001: سوکت شما قطع شد", - "app.audioNotification.audioFailedError1002": "خطای 1002: امکان ارتباط با سوکت برای شما Ùراهم نیست، وضعیت نت خود را بررسی کنید یا آن را تغییر دهید.", - "app.audioNotification.audioFailedError1003": "خطای 1003: نسخه مرورگر شما برای کلاس مناسب نیست.", - "app.audioNotification.audioFailedError1005": "خطای 1005: تماس به صورت نامشخصی قطع شد", - "app.audioNotification.audioFailedError1006": "خطای 1006: تماس بسیار طولانی شد", - "app.audioNotification.audioFailedError1007": "خطای 1007: خطای ارتباط ice", - "app.audioNotification.audioFailedError1008": "خطای 1008: انتقال میسر نشد", - "app.audioNotification.audioFailedError1009": "خطای 1009: امکان پیدا کردن STUN/TURN وجود ندارد.", - "app.audioNotification.audioFailedError1010": "خطای 1010: ICE برقرار نشد اینترنت خود را Ú†Ú© کنید.", - "app.audioNotification.audioFailedError1011": "خطای 1011: ICE برقرار نشد", - "app.audioNotification.audioFailedMessage": "امکان اتصال صدای شما Ùراهم نیست.", + "app.actionsBar.emojiMenu.thumbsDownDesc": "تغییر وضعیت خود به نه چندان خوب", + "app.actionsBar.currentStatusDesc": "وضعیت کنونی {0}", + "app.actionsBar.captions.start": "آغار مشاهده زیرنویس ها", + "app.actionsBar.captions.stop": "توق٠مشاهده زیرنویس ها", + "app.audioNotification.audioFailedError1001": "خطای 1001: ارتباط وب سوکت قطع شد", + "app.audioNotification.audioFailedError1002": "خطای 1002: امکان ایجاد ارتباط وب سوکت Ùراهم نیست", + "app.audioNotification.audioFailedError1003": "خطای 1003: از نسخه مرورگر شما پشتیبانی نمیشود", + "app.audioNotification.audioFailedError1004": "خطای 1004: خطا در تماس (دلیل = {0})", + "app.audioNotification.audioFailedError1005": "خطای 1005: تماس به دلیل نامشخصی قطع شد", + "app.audioNotification.audioFailedError1006": "خطای 1006: تماس با خطای تایم اوت مواجه شد", + "app.audioNotification.audioFailedError1007": "خطای 1007: مذاکره برای ICE با خطا مواجه شد", + "app.audioNotification.audioFailedError1008": "خطای 1008: انتقال با خطا مواجه شد", + "app.audioNotification.audioFailedError1009": "خطای 1009: امکان دریاÙت اطلاعات STUN/TURN وجود ندارد", + "app.audioNotification.audioFailedError1010": "خطای 1010: مذاکره برای ICE با خطای تایم اوت مواجه شد", + "app.audioNotification.audioFailedError1011": "خطای 1011: گردآوری اطلاعات از ICE با خطا مواجه شد", + "app.audioNotification.audioFailedError1012": "خطا 1012: اتصال ICE بسته شد", + "app.audioNotification.audioFailedMessage": "اتصال صدای شما با خطا موجه شد", + "app.audioNotification.mediaFailedMessage": "متد getUserMicMedia به دلیل اینکه اتصال تنها از طریق لینک امن امکان پذیر است، با خطا مواجه شد", "app.audioNotification.closeLabel": "بستن", - "app.breakoutJoinConfirmation.message": "آیا میخواهید وارد شوید", - "app.breakoutJoinConfirmation.confirmLabel": "پیوستن", - "app.breakoutJoinConfirmation.dismissLabel": "کنسل", - "app.audioModal.microphoneLabel": "گوینده هم باشم.", - "app.audioModal.audioChoiceLabel": "چگونه میخواهید صدا را دریاÙت کنید.", - "app.audioModal.iOSErrorDescription": "در Øال Øاضر صدا Ùˆ تصویر در کروم iOS پشتیبانی نمیشود.", - "app.audioModal.iOSErrorRecommendation": "پیشنهاد ما استÙاده از ساÙاری است.", - "app.audioModal.audioChoiceDesc": "انتخاب کنید چگونه صدا را در این جلسه میخواهید دریاÙت کنید", + "app.audioNotificaion.reconnectingAsListenOnly": "میکرÙون برای کاربران غیر Ùعال شده است، شما به عنوان شنونده به جلسه اضاÙÙ‡ شده اید.", + "app.breakoutJoinConfirmation.title": "ملØÙ‚ شدن به اتاق زیرمجموعه", + "app.breakoutJoinConfirmation.message": "آیا مایل به پیوستن هستید", + "app.breakoutJoinConfirmation.confirmDesc": "انتقال شما به اتاق زیرمجموعه", + "app.breakoutJoinConfirmation.dismissLabel": "لغو", + "app.breakoutJoinConfirmation.dismissDesc": "امکان ملØÙ‚ شدن به اتاق زیرمجموعه را بسته Ùˆ رد میکند", + "app.breakoutJoinConfirmation.freeJoinMessage": "یک اتاق مجموعه را برای ملØÙ‚ شدن انتخاب کنید", + "app.breakoutTimeRemainingMessage": "زمان باقی مانده از اتاق زیرمجموعه: {0}", + "app.breakoutWillCloseMessage": "زمان به اتمام رسید. اتاق زیرمجموعه به زودی بسته خواهد شد", + "app.calculatingBreakoutTimeRemaining": "در Øال Ù…Øاسبه زمان باقی مانده ...", + "app.audioModal.ariaTitle": "ملØÙ‚ شدن به مدال صدا", + "app.audioModal.microphoneLabel": "میکروÙون", + "app.audioModal.listenOnlyLabel": "تنها شنوده", + "app.audioModal.audioChoiceLabel": "مایلید با Ú†Ù‡ روشی به بخش صدا وارید شوید؟", + "app.audioModal.iOSBrowser": "صدا/تصویر پیشتیبانی نمیشود", + "app.audioModal.iOSErrorDescription": "در Øال Øاضر صدا Ùˆ تصویر در مرورگر کروم iOS پشتیبانی نمیشود", + "app.audioModal.iOSErrorRecommendation": "پیشنهاد ما استÙاده از ساÙاری در IOS است", + "app.audioModal.audioChoiceDesc": "Ù†Øوه اتصال به صدا در این جلسه را انتخاب کنید", + "app.audioModal.unsupportedBrowserLabel": "به نظر میرسد شما از مرورگری استÙاده میکنید Ú©Ù‡ به صورت کامل پشتیبانی نمیشود. لطÙا برای پشتیبانی کامل از {0} یا {1} استÙاده کنید", "app.audioModal.closeLabel": "بستن", "app.audioModal.yes": "بله", "app.audioModal.no": "خیر", "app.audioModal.yes.arialabel" : "اکو شنیده میشود", "app.audioModal.no.arialabel" : "اکو شنیده نمیشود", + "app.audioModal.echoTestTitle": "این آزمایش اکوی صدای شخصی است. چند کلمه صØبت کنید. ایا صدا را Ù…ÛŒ شنوید؟", "app.audioModal.settingsTitle": "تغییر تنظیمات صدا", - "app.audioModal.helpTitle": "یک مشکلی در سخت اÙزار شما وجود دارد", - "app.audioModal.connecting": "در Øال اتصال...", - "app.audioModal.connectingEchoTest": "اتصال به تست اکو", + "app.audioModal.helpTitle": "مشکلی در سخت اÙزار صوت Ùˆ تصویر شما وجود دارد", + "app.audioModal.helpText": "آیا شما مجوز استÙاده از میکروÙون خود را داده اید؟ شایان ذکر است Ú©Ù‡ هنگام اتصال به بخش صدا یک کادر میبایست باز شود Ú©Ù‡ از شما مجوز دسترسی به بخش مدیا را درخواست کند، لطÙا آن را برای اتصال به بخش صدا قبول کنید. اگر مشکل این نیست، تنظیمات مجوزات میکروÙون در مرورگر خود را تغییر دهید.", + "app.audioModal.audioDialTitle": "پیوستن به بخش صوتی با استÙاده از تلÙÙ† خود", + "app.audioDial.audioDialDescription": "شماره گیری", + "app.audioDial.audioDialConfrenceText": "Ùˆ عدد پین Ú©Ù†Ùرانس را وارد کنید:", + "app.audioModal.connecting": "در Øال اتصال", + "app.audioModal.connectingEchoTest": "در Øال اتصال به آزمایش اÙÚ©Ùˆ", "app.audioManager.joinedAudio": "شما به جلسه صوتی وارد شده اید", "app.audioManager.joinedEcho": "شما به تست اکو پیوسته اید", "app.audioManager.leftAudio": "شما جلسه صوتی را ترک کرده اید", - "app.audioManager.genericError": "خطا: مشکلی پیش آمده است لطÙا مجدد سعی کنید.", + "app.audioManager.genericError": "خطا: مشکلی پیش آمده است، لطÙا مجدد سعی کنید.", "app.audioManager.connectionError": "خطا: خطای ارتباط", - "app.audioManager.requestTimeout": "خطا: خطای طول کشیدن بیش از اندازه در درخواست.", - "app.audioManager.invalidTarget": "خطا: تلاش برای درخواست چیزی غیر صØÛŒØ", - "app.audioManager.mediaError": "خطا: مشکلی در اتصال سخت اÙزار شما با کلاس موجود است.", + "app.audioManager.requestTimeout": "خطا: خطای طول کشیدن بیش از اندازه درخواست.", + "app.audioManager.invalidTarget": "خطا: تلاش برای درخواست چیزی برای هد٠نامعتبر", + "app.audioManager.mediaError": "خطا: مشکلی در اتصال به سخت اÙزار صوتی/تصویری شما پیش آمده است", "app.audio.joinAudio": "پیوستن به صدا", "app.audio.leaveAudio": "ترک صدا", + "app.audio.enterSessionLabel": "ورود به جلسه", + "app.audio.playSoundLabel": "پخش صدا", "app.audio.backLabel": "بازگشت", "app.audio.audioSettings.titleLabel": "انتخاب تنظیمات صدای شما", - "app.audio.audioSettings.descriptionLabel": "لطÙا توجه کنید، یک پیام در مرورگر شما ظاهر میشود Ùˆ از شما میخواهد اجازه اشتراک میکروÙÙ† خود را بدهید.", + "app.audio.audioSettings.descriptionLabel": "لطÙا توجه کنید، یک پیام در مرورگر شما ظاهر میشود، Ú©Ù‡ از شما میخواهد اجازه اشتراک میکروÙÙ† خود را بدهید.", "app.audio.audioSettings.microphoneSourceLabel": "منبع ورودی میکروÙÙ†", "app.audio.audioSettings.speakerSourceLabel": "منبع خروجی صدا", - "app.audio.audioSettings.microphoneStreamLabel": "ولوم صدای میکروÙÙ† شما", + "app.audio.audioSettings.microphoneStreamLabel": "بلندی صدای میکروÙÙ† شما", "app.audio.audioSettings.retryLabel": "تلاش مجدد", "app.audio.listenOnly.backLabel": "بازگشت", "app.audio.listenOnly.closeLabel": "بستن", - "app.audio.permissionsOverlay.title": "اجازه دهید کلاس به میکروÙÙ† شما دسترسی داشته باشد.", - "app.error.removed": "شما از Ú©Ù†Ùرانس کنار گذاشته شده اید.", + "app.audio.permissionsOverlay.title": "اجازه دهید دسترسی به میکروÙÙ† شما وجود داشته باشد.", + "app.audio.permissionsOverlay.hint": "ما برای متصل کردن شما به Ú©Ù†Ùرانس صوتی نیازمند داشتن مجوز دسترسی به دستگاه های صوتی شما هستیم :)", + "app.error.removed": "شما از Ú©Ù†Ùرانس Øذ٠شده اید", "app.error.meeting.ended": "شما از Ú©Ù†Ùرانس خارج شده اید", + "app.meeting.logout.duplicateUserEjectReason": "کاربر تکراری در Øال تلاش برای پیوستن به جلسه است", + "app.meeting.logout.permissionEjectReason": "خارج شده به دلیل نقض مجوزات", + "app.meeting.logout.ejectedFromMeeting": "شما از جلسه Øذ٠شدید", + "app.meeting.logout.validateTokenFailedEjectReason": "خطا در اعتبارسنجی توکن اØراز هویت", + "app.meeting.logout.userInactivityEjectReason": "کاربر برای مدت طولانی غیر Ùعال است", + "app.meeting-ended.rating.legendLabel": "رتبه بندی بازخورد", + "app.meeting-ended.rating.starLabel": "ستاره", "app.modal.close": "بستن", + "app.modal.close.description": "Øذ٠تغییرات Ùˆ بستن مدال", + "app.modal.confirm": "انجام شد", + "app.modal.newTab": "(تب جدید باز میشود)", + "app.modal.confirm.description": "ذخیره تغییرات Ùˆ بستن مدال", "app.dropdown.close": "بستن", - "app.error.401": "شناسایی نشد", + "app.error.400": "درخواست اشتباه", + "app.error.401": "اØراز هویت نشده", + "app.error.403": "شما از جلسه Øذ٠شدید", "app.error.404": "پیدا نشد", - "app.error.500": "خطای پیش آمده است.", - "app.error.leaveLabel": "ورود مجدد", - "app.guest.waiting": "منتظر تایید جهت پیوستن", + "app.error.410": "جلسه پایان یاÙت", + "app.error.500": "اوپس، خطای پیش آمده است", + "app.error.leaveLabel": "دوباره وارد شوید", + "app.error.fallback.presentation.title": "یک خطا رخ داده است", + "app.error.fallback.presentation.description": "این مورد لاگ شد. لطÙا صÙØÙ‡ را دوباره سازی کنید.", + "app.error.fallback.presentation.reloadButton": "دوباره سازی", + "app.guest.waiting": "منتظر تایید به منظور ورود", + "app.userList.guest.waitingUsers": "کاربران در Øال انتظار", + "app.userList.guest.waitingUsersTitle": "مدیرت کاربران", + "app.userList.guest.optionTitle": "بررسی کاربران در انتظار تایید", + "app.userList.guest.allowAllAuthenticated": "اجازه ورود به همه کاربران اØراز هویت شده", + "app.userList.guest.allowAllGuests": "اجازه ورود به همه مهمانان", + "app.userList.guest.allowEveryone": "اجازه ورود به همه", + "app.userList.guest.denyEveryone": "رد همه", + "app.userList.guest.pendingUsers": "{0} کاربران در انتظار تایید", + "app.userList.guest.pendingGuestUsers": "{0} کاربر مهمان در انتظار تایید", + "app.userList.guest.pendingGuestAlert": "به جلسه ملØÙ‚ شد Ùˆ منتظر تایید شماست", + "app.userList.guest.rememberChoice": "به یاد داشتن انتخاب", + "app.user-info.title": "جستجوی دایرکتوری", + "app.toast.breakoutRoomEnded": "اتاق زیرمجموعه بسته شد، لطÙا دوباره به بخش صدا وارد شوید.", "app.toast.chat.public": "پیام جدید در Ú¯Ùتگوی عمومی", "app.toast.chat.private": "پیام جدید در Ú¯Ùتگوی خصوصی", "app.toast.chat.system": "سیستم", "app.notification.recordingStart": "جلسه در Øال ضبط شدن است", - "app.notification.recordingStop": "جلسه دیگر ضبط نمیشود.", - "app.shortcut-help.comboLabel": "کمبو", + "app.notification.recordingStop": "جلسه دیگر ضبط نمیشود", + "app.notification.recordingAriaLabel": "زمان رکورد شده", + "app.shortcut-help.title": "میانبرهای صÙØÙ‡ کلید", + "app.shortcut-help.accessKeyNotAvailable": "کلید های دسترسی موجود نیست", + "app.shortcut-help.comboLabel": "ترکیبی", "app.shortcut-help.functionLabel": "تابع", "app.shortcut-help.closeLabel": "بستن", + "app.shortcut-help.closeDesc": "بستن کادر میانبرهای صÙØÙ‡ کلید", "app.shortcut-help.openOptions": "باز کردن گزینه ها", - "app.shortcut-help.toggleUserList": "مشاهده لیست دانش آموزان", - "app.shortcut-help.toggleMute": "Øالت بی صدا/با صدا", + "app.shortcut-help.toggleUserList": "تغییر وضعیت نمایش لیست دانش آموزان", + "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.togglePan": "Ùعالسازی ابزار Pan (ارائه دهنده)", + "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.otherViewersWebcamLabel": "مشاهده دوربین سایر کاربران", "app.lock-viewers.microphoneLable": "میکروÙÙ†", - "app.lock-viewers.Layout": "چینش تصویر", - "app.videoPreview.cancelLabel": "کنسل", + "app.lock-viewers.PublicChatLabel": "Ú¯Ùتگوی عمومی", + "app.lock-viewers.PrivateChatLable": "Ú¯Ùتگوی خصوصی", + "app.lock-viewers.notesLabel": "یادداشت های اشتراکی", + "app.lock-viewers.Layout": "چینش صÙØÙ‡", + "app.lock-viewers.ariaTitle": "Ù‚ÙÙ„ کردن کادر کاربران", + "app.recording.startTitle": "شروع ضبط", + "app.recording.stopTitle": "متوق٠کردن ضبط", + "app.recording.resumeTitle": "از سر گرÙتن ضبط", + "app.recording.startDescription": "(شما دوباره در ادامه میتوانید دگمه رکورد را برای متوق٠کردن ضبط جلسه استÙاده کنید)", + "app.recording.stopDescription": "آیا مطمئنید Ú©Ù‡ میخواهید ضبط را متوق٠کنید؟ (شما میتوانید Ùرایند ضبط را بوسیله انتخاب مجدد دگمه ضبط از سر بگیرید)", + "app.videoPreview.cameraLabel": "دوربین", + "app.videoPreview.profileLabel": "Ú©ÛŒÙیت", + "app.videoPreview.cancelLabel": "لغو", "app.videoPreview.closeLabel": "بستن", + "app.videoPreview.startSharingLabel": "آغاز اشتراک گذاری", + "app.videoPreview.webcamOptionLabel": "انتخاب دوربین", + "app.videoPreview.webcamPreviewLabel": "پیش نمایش دوربین", + "app.videoPreview.webcamSettingsTitle": "تنظیمات دوربین", + "app.videoPreview.webcamNotFoundLabel": "دوربین یاÙت نشد", + "app.videoPreview.profileNotFoundLabel": "پروÙایل دوربین پیشتیبانی نمیشود", + "app.video.joinVideo": "اشتراک گذاری دوربین", + "app.video.leaveVideo": "متوق٠کردن اشتراک گذاری دوربین", + "app.video.iceCandidateError": "خطا در اÙزودن کاندید ICE", + "app.video.iceConnectionStateError": "خطای 1107: مذاکره برای ICE با شکست مواجه شد", + "app.video.permissionError": "خطا در اشتراک گذاری دوربین. لطÙا مجوزات دسترسی را بررسی کنید", "app.video.sharingError": "خطا در اشتراک دوربین", - "app.video.notFoundError": "دوربین یاÙت نشد. لطÙا مطمئن شوید Ú©Ù‡ دوربین متصل است.", - "app.video.notAllowed": "اجازه دسترسی مرورگر به دوربین داده نشده است. لطÙا دسترسی های مرورگر را Ú†Ú© کنید.", - "app.video.notSupportedError": "مطمئن شوید SSL Ùعال است.", - "app.video.notReadableError": "عدم امکان دسترسی به داده های دوربین، مطمئن شوید دوربین شما جای دیگری درگیر نیست.", + "app.video.notFoundError": "دوربین یاÙت نشد. لطÙا مطمئن شوید Ú©Ù‡ دوربین وصل است", + "app.video.notAllowed": "اجازه دسترسی مرورگر به دوربین داده نشده است. لطÙا دسترسی های مرورگر را بررسی کنید.", + "app.video.notSupportedError": "تنها امکان اشتراک ویدئو از منابع امن امکان پذیر است، مطمئن شوید گواهی SSL تان معتبر است", + "app.video.notReadableError": "عدم امکان دسترسی به دوربین، مطمئن شوید دوربین شما توسط برنامه دیگری در Øال استÙاده نیست", + "app.video.mediaFlowTimeout1020": "خطای 1020: اتصال با سرور برقرار نشد", "app.video.swapCam": "جابجا کردن", - "app.video.swapCamDesc": "جابجا کردن موقعیت تصویر دوربین ها", + "app.video.swapCamDesc": "جابجا کردن جهت تصویر دوربین ها", + "app.video.videoLocked": "اشتراک گذاری دوبین Ù‚ÙÙ„ شده است", + "app.video.videoButtonDesc": "دگمه اتصال به ویدئو", "app.video.videoMenu": "منوی دوربین", - "app.video.videoMenuDesc": "منوی تنظیمات دوربین", - "app.video.chromeExtensionError": "شما باید نصب کنید.", - "app.video.stats.title": "وضعیت اتصال", - "app.video.stats.packetsReceived": "بسته های دریاÙت شده.", + "app.video.videoMenuDisabled": "منوی دوربین در تنظیمات غیرÙعال شده است", + "app.video.videoMenuDesc": "باز کردن منوی تنظیمات دوربین", + "app.video.chromeExtensionError": "شما باید نصب کنید", + "app.video.chromeExtensionErrorLink": "این اÙزونه کروم", + "app.video.stats.title": "آمار اتصال", + "app.video.stats.packetsReceived": "بسته های دریاÙت شده", "app.video.stats.packetsSent": "بسته های ارسال شده", "app.video.stats.packetsLost": "بسته های از دست رÙته", "app.video.stats.bitrate": "بیت ریت", @@ -269,49 +527,102 @@ "app.video.stats.codec": "کدک", "app.video.stats.decodeDelay": "تاخیر بازگشایی", "app.video.stats.rtt": "RTT", - "app.video.stats.encodeUsagePercent": "استÙاده ENCOD", + "app.video.stats.encodeUsagePercent": "میزان استÙاده از انکود", "app.video.stats.currentDelay": "تاخیر جاری", - "app.sfu.mediaServerConnectionError2000": "خطای 2000: عدم امکان ارتباط با سرور", - "app.sfu.mediaServerOffline2001": "خطای 2001: سرور مدیا اینترنت ندارد. لطÙا بعدا Ú†Ú© کنید.", - "app.sfu.mediaServerNoResources2002": "خطای 2002: سرور مدیا منابع قابل دسترسی ندارد.", - "app.sfu.mediaServerRequestTimeout2003": "خطای 2003: درخواست های سرور مدیا TIMEOUT میشود", - "app.sfu.serverIceGatheringFailed2021": "خطای 2021: سرور مدیا ICE ندارد.", - "app.sfu.serverIceGatheringFailed2022": "خطای 2022: سرور مدیا اتصال ICE ندارد.", - "app.sfu.invalidSdp2202":"خطای 2202: کاربر SDP اشتباه ایجاد کرده است.", - "app.sfu.noAvailableCodec2203": "خطای 2203: سرور کدک متناسب را پیدا نمیکند", - "app.meeting.endNotification.ok.label": "باشه", + "app.fullscreenButton.label": "تغییر {0} به تمام صÙØÙ‡", + "app.deskshare.iceConnectionStateError": "خطای 1108: اتصال ICE هنگام اشتراک گذاری صÙØÙ‡ با خطا مواجه شد", + "app.sfu.mediaServerConnectionError2000": "خطای 2000: عدم امکان ارتباط با سرور مدیا", + "app.sfu.mediaServerOffline2001": "خطای 2001: سرور مدیا در دسترس نیست. لطÙا بعدا تلاش کنید.", + "app.sfu.mediaServerNoResources2002": "خطای 2002: سرور مدیا منابع کاÙÛŒ ندارد", + "app.sfu.mediaServerRequestTimeout2003": "خطای 2003: درخواست های سرور مدیا با تایم اون مواجه میشود", + "app.sfu.serverIceGatheringFailed2021": "خطای 2021: سرور مدیا امکان جمع آوری داوطلب های ICE را ندارد", + "app.sfu.serverIceGatheringFailed2022": "خطای 2022: اتصال ICE به سرور مدیا با شکست مواجه شد", + "app.sfu.mediaGenericError2200": "خطای 2200: سرور مدیا در هنگام پردازش درخواست با مشکل مواجه شد", + "app.sfu.invalidSdp2202":"خطای 2202: کاربر SDP نادرست ایجاد کرده است", + "app.sfu.noAvailableCodec2203": "خطای 2203: سرور کدک مناسب را پیدا نکرد", + "app.meeting.endNotification.ok.label": "تایید", + "app.whiteboard.annotations.poll": "نتایج نظرسنجی منتشر شده است", "app.whiteboard.toolbar.tools": "ابزارها", + "app.whiteboard.toolbar.tools.hand": "پن", "app.whiteboard.toolbar.tools.pencil": "مداد", "app.whiteboard.toolbar.tools.rectangle": "چهارگوش", "app.whiteboard.toolbar.tools.triangle": "سه گوش", "app.whiteboard.toolbar.tools.ellipse": "بیضی", "app.whiteboard.toolbar.tools.line": "خط", "app.whiteboard.toolbar.tools.text": "متن", + "app.whiteboard.toolbar.thickness": "ضخامت نوشته", + "app.whiteboard.toolbar.thicknessDisabled": "ضخیم سازی نوشته غیر Ùعال شده است", "app.whiteboard.toolbar.color": "رنگ ها", + "app.whiteboard.toolbar.colorDisabled": "رنگ ها غیرÙعال شده است", "app.whiteboard.toolbar.color.black": "مشکی", "app.whiteboard.toolbar.color.white": "سÙید", "app.whiteboard.toolbar.color.red": "قرمز", "app.whiteboard.toolbar.color.orange": "نارنجی", + "app.whiteboard.toolbar.color.eletricLime": "سبز ÙسÙری", "app.whiteboard.toolbar.color.lime": "لیمویی", "app.whiteboard.toolbar.color.cyan": "آبی روشن", + "app.whiteboard.toolbar.color.dodgerBlue": "آبی تیره", "app.whiteboard.toolbar.color.blue": "آبی", "app.whiteboard.toolbar.color.violet": "بنÙØ´", "app.whiteboard.toolbar.color.magenta": "قرمز", "app.whiteboard.toolbar.color.silver": "نقره ای", - "app.whiteboard.toolbar.undo": "دوباره سازی Øاشیه نویسی", + "app.whiteboard.toolbar.undo": "لغو Øاشیه نویسی", "app.whiteboard.toolbar.clear": "پاک کردن همه Øاشیه نویسی ها", - "app.whiteboard.toolbar.multiUserOn": "Ùعال کردن Øالت چند کابره", - "app.whiteboard.toolbar.multiUserOff": "خاموش کردن Øالت چند کاربره", - "app.feedback.title": "شما از Ú©Ù†Ùرانس بیرون رÙته اید", - "app.feedback.subtitle": "بسیار ممنون میشویم نظر خود را در خصوص کلاس بÙرمایید(نظر شما)", - "app.feedback.textarea": "چگونه میتوان کلاس را بهتر کرد؟", - "app.feedback.sendFeedback": "ارسال پیشنهاد Ùˆ انتقاد", + "app.whiteboard.toolbar.multiUserOn": "Ùعال کردن Øالت چند کابره تخته سیاه", + "app.whiteboard.toolbar.multiUserOff": "غیر Ùعال کردن Øالت چند کاربره تخته سیاه", + "app.whiteboard.toolbar.fontSize": "لیست اندازه قلم", + "app.feedback.title": "شما از Ú©Ù†Ùرانس خارج شده اید", + "app.feedback.subtitle": "بسیار ممنون میشویم نظر خود را در خصوص استÙاده از برنامه بیگ بلو باتن بÙرمایید (اختیاری)", + "app.feedback.textarea": "چگونه میتوانیم برنامه بیگ بلو باتن را بهبود دهیم؟", + "app.feedback.sendFeedback": "ارسال بازخورد", + "app.feedback.sendFeedbackDesc": "ارسال بازخورد Ùˆ ترک جلسه", "app.videoDock.webcamFocusLabel": "تمرکز", - "app.videoDock.webcamFocusDesc": "تمرکز در دوربین انتخاب شده", + "app.videoDock.webcamFocusDesc": "تمرکز روی دوربین انتخاب شده", "app.videoDock.webcamUnfocusLabel": "خروج از Øالت تمرکز", - "app.videoDock.webcamUnfocusDesc": "خروج از Øالت تمرکز در دوربین انتخاب شده", + "app.videoDock.webcamUnfocusDesc": "خروج از Øالت تمرکز روی دوربین انتخاب شده", + "app.invitation.title": "دعوت به اتاق زیرمجموعه", + "app.invitation.confirm": "دعوت", + "app.createBreakoutRoom.title": "اتاق های زیرمجموعه", + "app.createBreakoutRoom.ariaTitle": "پنهان سازی اتاق های زیرمجموعه", + "app.createBreakoutRoom.breakoutRoomLabel": "اتاق های زیرمجموعه {0}", + "app.createBreakoutRoom.generatingURL": "در Øال تولید ادرس", + "app.createBreakoutRoom.generatedURL": "تولید شده", + "app.createBreakoutRoom.duration": "طول {0}", + "app.createBreakoutRoom.room": "اتاق {0}", + "app.createBreakoutRoom.notAssigned": "واگذار نشده ({0})", + "app.createBreakoutRoom.join": "پیوستن به اتاق", "app.createBreakoutRoom.joinAudio": "پیوستن به صدا", - "app.externalVideo.close": "بستن" + "app.createBreakoutRoom.returnAudio": "صدای بازگشتی", + "app.createBreakoutRoom.confirm": "ایجاد کردن", + "app.createBreakoutRoom.record": "ضبط کردن", + "app.createBreakoutRoom.numberOfRooms": "تعداد اتاق ها", + "app.createBreakoutRoom.durationInMinutes": "زمان (دقیقه)", + "app.createBreakoutRoom.randomlyAssign": "به صورت تصادÙÛŒ واگذار شده", + "app.createBreakoutRoom.endAllBreakouts": "پایان تمام اتاق های زیرمجموعه", + "app.createBreakoutRoom.roomName": "{0} (اتاق -{1})", + "app.createBreakoutRoom.doneLabel": "انجام شد", + "app.createBreakoutRoom.nextLabel": "بعد", + "app.createBreakoutRoom.minusRoomTime": "کاهش زمان اتاق زیرمجموعه", + "app.createBreakoutRoom.addRoomTime": "اÙزایش زمان اتاق زیرمجموعه", + "app.createBreakoutRoom.addParticipantLabel": "+ اÙزودن شرکت کننده", + "app.createBreakoutRoom.freeJoin": "ارائه امکان انتخاب اتاق زیرمجموعه به کاربران برای ملØÙ‚ شدن", + "app.createBreakoutRoom.leastOneWarnBreakout": "شما میبایست Øداقل یک کاربر را در هر اتاق زیرمجموعه قرار دهید.", + "app.createBreakoutRoom.modalDesc": "مراØÙ„ زیر را برای ایجاد اتاق ها در جلسه خود به منظور اÙزودن شرکت کننده به آن، کامل کنید", + "app.createBreakoutRoom.roomTime": "{0} دقیقه", + "app.externalVideo.start": "به اشتراک گذاری ویدئو جدید", + "app.externalVideo.title": "اشتراک گذاری ویدئوی یوتیوب", + "app.externalVideo.input": "ادرس ویدئوی یوتیوب", + "app.externalVideo.urlInput": "اÙزودن ادرس ویدئو یوتیوب", + "app.externalVideo.urlError": "این آدرس یک ویدئو معتبر یوتیوب نیست", + "app.externalVideo.close": "بستن", + "app.network.connection.effective.slow": "ما مشکلاتی در اتصال مشاهده میکنیم", + "app.network.connection.effective.slow.help": "چگونه درست شود؟", + "app.externalVideo.noteLabel": "نکته: ویدئوهای به اشتراک گذاشته شده در بازپخش ضبط نمایش داده نخواهند شد", + "app.actionsBar.actionsDropdown.shareExternalVideo": "اشتراک ویدئو یوتیوب", + "app.actionsBar.actionsDropdown.stopShareExternalVideo": "متوق٠کردن اشتراک ویدئو یوتیوب", + "app.iOSWarning.label": "لطÙا به IOS نسخه 12.2 یا بالاتر ارتقا دهید", + "app.legacy.unsupportedBrowser": "به نظر میرسد شما از مرورگری استÙاده میکنید Ú©Ù‡ پشتیبانی نمیشود. لطÙا برای پشتیبانی کامل از {0} یا {1} استÙاده کنید", + "app.legacy.upgradeBrowser": "به نظر میرسد شما از نسخه قدیمی یک مرورگر پشتیبانی شده استÙاده میکنید. لطÙا به منظور پشتیبانی کامل مرورگر خود را به روز رسانی کنید." } diff --git a/bigbluebutton-html5/private/locales/fr.json b/bigbluebutton-html5/private/locales/fr.json index fb1eb690824ec70773f09afca3eb38816f29fa80..dbb9cbe40dde466b40e5a01bcd9271c5c16904db 100644 --- a/bigbluebutton-html5/private/locales/fr.json +++ b/bigbluebutton-html5/private/locales/fr.json @@ -1,5 +1,5 @@ { - "app.home.greeting": "Votre présentation commencera dans quelques instants ...", + "app.home.greeting": "Votre présentation commencera dans quelques instants...", "app.chat.submitLabel": "Envoyer message", "app.chat.errorMinMessageLength": "Le message est {0} caractère(s) trop court", "app.chat.errorMaxMessageLength": "Le message est {0} caractère(s) trop long", @@ -16,8 +16,21 @@ "app.chat.dropdown.copy": "Copier", "app.chat.dropdown.save": "Sauvegarder", "app.chat.label": "Discussion", + "app.chat.offline": "Déconnecté", "app.chat.emptyLogLabel": "Journal de discussion vide", "app.chat.clearPublicChatMessage": "L'historique des discussions publiques a été effacé par un modérateur", + "app.captions.label": "Sous-titre", + "app.captions.menu.close": "Fermer", + "app.captions.menu.start": "Débuter", + "app.captions.menu.select": "Sélectionnez une langue disponible", + "app.captions.menu.fontSize": "Taille", + "app.captions.menu.fontColor": "Couleur du texte", + "app.captions.menu.fontFamily": "Police d'écriture", + "app.captions.menu.backgroundColor": "Couleur du fond", + "app.captions.menu.previewLabel": "Prévisualiser", + "app.captions.menu.cancelLabel": "Annuler", + "app.captions.pad.tip": "Appuyez sur Echap pour centrer sur la barre d'outils de l'éditeur.", + "app.captions.pad.ownership": "S'approprier", "app.note.title": "Notes Partagées", "app.note.label": "Note", "app.note.hideNoteLabel": "Masquer la note", @@ -29,6 +42,7 @@ "app.userList.participantsTitle": "Participants", "app.userList.messagesTitle": "Messages", "app.userList.notesTitle": "Notes", + "app.userList.captionsTitle": "Sous-titre", "app.userList.presenter": "Présentateur", "app.userList.you": "Vous", "app.userList.locked": "Verrouillé", @@ -49,14 +63,14 @@ "app.userList.menu.unlockUser.label": "Débloquer {0}", "app.userList.menu.lockUser.label": "Bloquer {0}", "app.userList.menu.directoryLookup.label": "Recherche dans l'annuaire", - "app.userList.menu.makePresenter.label": "Rendre comme présentateur", + "app.userList.menu.makePresenter.label": "Définir comme présentateur", "app.userList.userOptions.manageUsersLabel": "Gérer les utilisateurs", "app.userList.userOptions.muteAllLabel": "Mettre en sourdine tous les utilisateurs", "app.userList.userOptions.muteAllDesc": "Met en sourdine tous les utilisateurs de la réunion", - "app.userList.userOptions.clearAllLabel": "Effacer toutes les icônes de status", - "app.userList.userOptions.clearAllDesc": "Effacer toutes les icônes de status des utilisateurs", + "app.userList.userOptions.clearAllLabel": "Effacer toutes les icônes de statut", + "app.userList.userOptions.clearAllDesc": "Effacer toutes les icônes de statut des utilisateurs", "app.userList.userOptions.muteAllExceptPresenterLabel": "Mettre en sourdine tous les utilisateurs sauf le présentateur", - "app.userList.userOptions.muteAllExceptPresenterDesc": "Mettre en sourdines tous les utilisateurs de la réunion sauf le présentateur", + "app.userList.userOptions.muteAllExceptPresenterDesc": "Mettre en sourdine tous les utilisateurs de la réunion sauf le présentateur", "app.userList.userOptions.unmuteAllLabel": "Désactiver la sourdine", "app.userList.userOptions.unmuteAllDesc": "Désactiver la sourdine pour la réunion", "app.userList.userOptions.lockViewersLabel": "Verrouiller les participants", @@ -65,17 +79,20 @@ "app.userList.userOptions.disableMic": "Les microphones des participants sont désactivés", "app.userList.userOptions.disablePrivChat": "Le chat privé est désactivé", "app.userList.userOptions.disablePubChat": "Le chat public est désactivé", + "app.userList.userOptions.disableNote": "Les notes partagées sont maintenant verrouillées", + "app.userList.userOptions.webcamsOnlyForModerator": "Seuls les modérateurs peuvent voir les webcams des participants (selon les paramètres de verrouillage)", "app.media.label": "Média", "app.media.screenshare.start": "Le Partage d'écran à commencé", "app.media.screenshare.end": "Le Partage d'écran s'est terminé", "app.media.screenshare.safariNotSupported": "Le Partage d'écran n'est pour le moment pas supporté par Safari. Veuillez utiliser Firefox ou Google Chrome.", "app.meeting.ended": "Cette session s'est terminée", - "app.meeting.meetingTimeRemaining": "Temps de réunion restant: {0}", + "app.meeting.meetingTimeRemaining": "Temps de réunion restant : {0}", "app.meeting.meetingTimeHasEnded": "Le temps s'est écoulé. La réunion sera bientôt close", "app.meeting.endedMessage": "Vous serez redirigé vers l'écran d'accueil", "app.meeting.alertMeetingEndsUnderOneMinute": "La réunion se termine dans une minute.", "app.meeting.alertBreakoutEndsUnderOneMinute": "La réunion privée se ferme dans une minute.", "app.presentation.hide": "Masquer la présentation", + "app.presentation.notificationLabel": "Présentation courante", "app.presentation.slideContent": "Contenu de la diapositive", "app.presentation.startSlideContent": "Début du contenu de la diapositive", "app.presentation.endSlideContent": "Fin du contenu de la diapositive", @@ -99,50 +116,52 @@ "app.presentation.presentationToolbar.zoomOutDesc": "Dézoomer de la présentation", "app.presentation.presentationToolbar.zoomReset": "Réinitialiser le zoom", "app.presentation.presentationToolbar.zoomIndicator": "Pourcentage de zoom actuel", - "app.presentation.presentationToolbar.fitToWidth": "Adapté à la largeur", + "app.presentation.presentationToolbar.fitToWidth": "Adapter à la largeur", "app.presentation.presentationToolbar.fitToPage": "Ajuster à la page", "app.presentation.presentationToolbar.goToSlide": "Diapositive {0}", "app.presentationUploder.title": "Présentation", - "app.presentationUploder.message": "En tant que présentateur, vous avez la possibilité de télécharger n'importe quel document Office ou fichier PDF. Nous recommandons le fichier PDF pour de meilleurs résultats.", - "app.presentationUploder.confirmLabel": "Télécharger", + "app.presentationUploder.uploadLabel": "Télécharger", "app.presentationUploder.confirmDesc": "Sauvegardez vos modifications et lancez la présentation", "app.presentationUploder.dismissLabel": "Annuler", "app.presentationUploder.dismissDesc": "Ferme la fenêtre d'option et supprime vos modifications", "app.presentationUploder.dropzoneLabel": "Faites glisser les fichiers ici pour les charger", - "app.presentationUploder.dropzoneImagesLabel": "Faites glisser les images ici pour charger", + "app.presentationUploder.dropzoneImagesLabel": "Faites glisser les images ici pour les charger", "app.presentationUploder.browseFilesLabel": "ou parcourez pour trouver des fichiers", "app.presentationUploder.browseImagesLabel": "ou parcourir/capturer des images", - "app.presentationUploder.fileToUpload": "Pour être chargé ...", + "app.presentationUploder.fileToUpload": "Pour être chargé...", "app.presentationUploder.currentBadge": "En cours", "app.presentationUploder.genericError": "Oups, quelque chose s'est mal passé", - "app.presentationUploder.rejectedError": "Certains des fichiers sélectionnés sont rejetés. Veuillez vérifier les types de fichiers MIME.", "app.presentationUploder.upload.progress": "Chargement ({0}%)", "app.presentationUploder.upload.413": "Le fichier est trop volumineux, 200 pages maximum atteintes", "app.presentationUploder.conversion.conversionProcessingSlides": "Traitement de la page {0} sur {1}", - "app.presentationUploder.conversion.genericConversionStatus": "Conversion de fichier ...", - "app.presentationUploder.conversion.generatingThumbnail": "Générer des vignettes ...", - "app.presentationUploder.conversion.generatedSlides": "Diapositives générées ...", - "app.presentationUploder.conversion.generatingSvg": "Générer des images SVG ...", + "app.presentationUploder.conversion.genericConversionStatus": "Conversion de fichier...", + "app.presentationUploder.conversion.generatingThumbnail": "Génération des vignettes...", + "app.presentationUploder.conversion.generatedSlides": "Diapositives générées...", + "app.presentationUploder.conversion.generatingSvg": "Génération des images SVG...", "app.presentationUploder.conversion.pageCountExceeded": "Oops, le nombre de pages a dépassé la limite de 200 pages", "app.presentationUploder.conversion.timeout": "Oops, la conversion a pris trop de temps", "app.presentationUploder.isDownloadableLabel": "Ne pas autoriser le téléchargement de la présentation", "app.presentationUploder.isNotDownloadableLabel": "Autoriser le téléchargement de la présentation", "app.presentationUploder.removePresentationLabel": "Supprimer la présentation", "app.presentationUploder.setAsCurrentPresentation": "Définir la présentation comme courante", + "app.presentationUploder.tableHeading.filename": "Nom de fichier", "app.presentationUploder.tableHeading.options": "Options", + "app.presentationUploder.tableHeading.status": "Statut", "app.poll.pollPaneTitle": "Sondage", "app.poll.quickPollTitle": "Sondage Rapide", "app.poll.hidePollDesc": "Masque le volet du menu du sondage", "app.poll.customPollInstruction": "Pour créer un sondage personnalisé, sélectionnez le bouton ci-dessous et entrez vos options.", "app.poll.quickPollInstruction": "Sélectionnez une option ci-dessous pour démarrer votre sondage.", "app.poll.customPollLabel": "Sondage personnalisé", - "app.poll.startCustomLabel": "Start custom poll", - "app.poll.activePollInstruction": "Laissez cette fenêtre ouverte pour permettre aux autres de répondre au sondage. Sélectionner \"Publier les résultats de l'interrogation\" ou revenir en arrière met fin à l'interrogation.", + "app.poll.startCustomLabel": "Démarrez un sondage personnalisé", + "app.poll.activePollInstruction": "Laissez cette fenêtre ouverte pour permettre aux autres de répondre au sondage. Sélectionner \"Publier les résultats du sondage\" ou revenir en arrière met fin au sondage.", "app.poll.publishLabel": "Publier les résultats du sondage", - "app.poll.backLabel": "Retour aux options de vote", + "app.poll.backLabel": "Retour aux options de sondage", "app.poll.closeLabel": "Fermer", + "app.poll.waitingLabel": "En attente des réponses ({0}/{1})", + "app.poll.ariaInputCount": "Option de sondage personnalisé {0} de {1} ", "app.poll.customPlaceholder": "Ajouter une option de sondage", - "app.poll.noPresentationSelected": "Aucune présentation sélectionnée! SVP, sélectionnez en une.", + "app.poll.noPresentationSelected": "Aucune présentation sélectionnée ! Veuillez en sélectionner une.", "app.poll.clickHereToSelect": "Cliquez ici pour sélectionner", "app.poll.t": "Vrai", "app.poll.f": "Faux", @@ -154,6 +173,15 @@ "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": "Vrai", + "app.poll.answer.false": "Faux", + "app.poll.answer.yes": "Oui", + "app.poll.answer.no": "Non", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Utilisateurs", "app.poll.liveResult.responsesTitle": "Réponse", "app.polling.pollingTitle": "Options de sondage", @@ -161,8 +189,8 @@ "app.polling.pollAnswerDesc": "Choisir cette option pour voter pour {0}", "app.failedMessage": "Problème de connexion au serveur, toutes nos excuses.", "app.downloadPresentationButton.label": "Télécharger la présentation originale", - "app.connectingMessage": "Connexion ...", - "app.waitingMessage": "Déconnecté. Essayez de vous reconnecter en {0} secondes ...", + "app.connectingMessage": "Connexion...", + "app.waitingMessage": "Déconnecté. Essayez de vous reconnecter dans {0} secondes...", "app.navBar.settingsDropdown.optionsLabel": "Options", "app.navBar.settingsDropdown.fullscreenLabel": "Plein écran", "app.navBar.settingsDropdown.settingsLabel": "Ouvrir les paramètres", @@ -174,11 +202,14 @@ "app.navBar.settingsDropdown.aboutDesc": "Afficher les informations du client", "app.navBar.settingsDropdown.leaveSessionDesc": "Quitter la conférence", "app.navBar.settingsDropdown.exitFullscreenDesc": "Quitter le mode plein écran", + "app.navBar.settingsDropdown.hotkeysLabel": "Raccourcis clavier", + "app.navBar.settingsDropdown.hotkeysDesc": "Liste des raccourcis clavier disponibles", "app.navBar.settingsDropdown.helpLabel": "Aide", + "app.navBar.settingsDropdown.helpDesc": "Lien utilisateur vers les tutoriels vidéo (ouvre un nouvel onglet)", "app.navBar.settingsDropdown.endMeetingDesc": "Termine la réunion en cours", "app.navBar.settingsDropdown.endMeetingLabel": "Mettre fin à la réunion", - "app.navBar.userListToggleBtnLabel": "Basculer l'affichage de la Liste des Utilisateurs", - "app.navBar.toggleUserList.ariaLabel": "Les utilisateurs et les messages bascule", + "app.navBar.userListToggleBtnLabel": "Basculer l'affichage sur la Liste des Utilisateurs", + "app.navBar.toggleUserList.ariaLabel": "Basculer sur les utilisateurs et les messages", "app.navBar.toggleUserList.newMessages": "avec notification des nouveaux messages", "app.navBar.recording": "Cette session est enregistrée", "app.navBar.recording.on": "Enregistrement en cours", @@ -186,17 +217,17 @@ "app.leaveConfirmation.confirmLabel": "Quitter", "app.leaveConfirmation.confirmDesc": "Vous déconnecte de la conférence", "app.endMeeting.title": "Mettre fin à la réunion", - "app.endMeeting.description": "Êtes-vous sûr de vouloir terminer cette session?", + "app.endMeeting.description": "Êtes-vous sûr de vouloir terminer cette session ?", "app.endMeeting.yesLabel": "Oui", "app.endMeeting.noLabel": "Non", "app.about.title": "À propos", - "app.about.version": "Client build:", + "app.about.version": "Version du client :", "app.about.copyright": "Copyright :", "app.about.confirmLabel": "OK", "app.about.confirmDesc": "OK", "app.about.dismissLabel": "Annuler", "app.about.dismissDesc": "Fermer l'information client", - "app.actionsBar.changeStatusLabel": "Changer status", + "app.actionsBar.changeStatusLabel": "Changer statut", "app.actionsBar.muteLabel": "Rendre silencieux", "app.actionsBar.unmuteLabel": "Autoriser à parler", "app.actionsBar.camOffLabel": "Caméra éteinte", @@ -212,6 +243,7 @@ "app.submenu.application.fontSizeControlLabel": "Taille des caractères", "app.submenu.application.increaseFontBtnLabel": "Augmenter la Taille de la Police", "app.submenu.application.decreaseFontBtnLabel": "Diminuer la Taille de la Police", + "app.submenu.application.currentSize": "actuellement {0}", "app.submenu.application.languageLabel": "Langue de l'application", "app.submenu.application.ariaLanguageLabel": "Changer la langue de l'application", "app.submenu.application.languageOptionLabel": "Choisir la langue", @@ -220,23 +252,11 @@ "app.submenu.audio.speakerSourceLabel": "Source du haut-parleur", "app.submenu.audio.streamVolumeLabel": "Volume de votre flux audio", "app.submenu.video.title": "Vidéo", - "app.submenu.video.videoSourceLabel": "Voir la source", + "app.submenu.video.videoSourceLabel": "Source de la vue", "app.submenu.video.videoOptionLabel": "Choisir la source de la vue", "app.submenu.video.videoQualityLabel": "Qualité vidéo", "app.submenu.video.qualityOptionLabel": "Choisissez la qualité vidéo", "app.submenu.video.participantsCamLabel": "Voir les webcams des participants", - "app.submenu.closedCaptions.closedCaptionsLabel": "Sous-titres", - "app.submenu.closedCaptions.takeOwnershipLabel": "S'approprier", - "app.submenu.closedCaptions.languageLabel": "Langue", - "app.submenu.closedCaptions.localeOptionLabel": "Choisir la langue", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Pas de lieux actifs", - "app.submenu.closedCaptions.fontFamilyLabel": "Famille de police", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Choisir la famille de police", - "app.submenu.closedCaptions.fontSizeLabel": "Taille des caractères", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Choisissez la taille de la police", - "app.submenu.closedCaptions.backgroundColorLabel": "Couleur du fond", - "app.submenu.closedCaptions.fontColorLabel": "Couleur des caractères", - "app.submenu.closedCaptions.noLocaleSelected": "La localization n'est pas sélectionnée", "app.submenu.participants.muteAllLabel": "Couper le son, excepté pour le présentateur", "app.submenu.participants.lockAllLabel": "Verrouiller tous les participants", "app.submenu.participants.lockItemLabel": "Participants {0}", @@ -258,7 +278,6 @@ "app.settings.applicationTab.label": "Application", "app.settings.audioTab.label": "Audio", "app.settings.videoTab.label": "Vidéo", - "app.settings.closedcaptionTab.label": "Sous-titres", "app.settings.usersTab.label": "Participants", "app.settings.main.label": "Paramètres", "app.settings.main.cancel.label": "Annuler", @@ -269,6 +288,7 @@ "app.settings.dataSavingTab.webcam": "Activer les webcams", "app.settings.dataSavingTab.screenShare": "Activer le partage de bureau", "app.settings.dataSavingTab.description": "Pour économiser votre bande passante, ajustez ce qui est actuellement affiché.", + "app.settings.save-notification.label": "Les paramètres ont été enregistrés", "app.switch.onLabel": "ON", "app.switch.offLabel": "OFF", "app.actionsBar.actionsDropdown.actionsLabel": "Actions", @@ -286,7 +306,7 @@ "app.actionsBar.actionsDropdown.createBreakoutRoom": "Créer des réunions privées", "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "Créer des réunions privées pour scinder la réunion en cours", "app.actionsBar.actionsDropdown.takePresenter": "Devenir présentateur", - "app.actionsBar.actionsDropdown.takePresenterDesc": "Assigne-toi comme nouveau présentateur", + "app.actionsBar.actionsDropdown.takePresenterDesc": "S'assigner comme nouveau présentateur", "app.actionsBar.emojiMenu.statusTriggerLabel": "Définir le statut", "app.actionsBar.emojiMenu.awayLabel": "Éloigné", "app.actionsBar.emojiMenu.awayDesc": "Passer votre état à éloigné", @@ -302,7 +322,7 @@ "app.actionsBar.emojiMenu.happyDesc": "Passer votre état à ravi", "app.actionsBar.emojiMenu.noneLabel": "Effacer votre état", "app.actionsBar.emojiMenu.noneDesc": "Effacer votre statut", - "app.actionsBar.emojiMenu.applauseLabel": "Approuver", + "app.actionsBar.emojiMenu.applauseLabel": "Applaudissements", "app.actionsBar.emojiMenu.applauseDesc": "Passer votre état à applaudissements", "app.actionsBar.emojiMenu.thumbsUpLabel": "Favorable", "app.actionsBar.emojiMenu.thumbsUpDesc": "Passer votre statut à favorable", @@ -312,7 +332,7 @@ "app.audioNotification.audioFailedError1001": "Erreur 1001 : WebSocket déconnecté", "app.audioNotification.audioFailedError1002": "Erreur 1002 : impossible d'établir une connexion WebSocket.", "app.audioNotification.audioFailedError1003": "Erreur 1003 : version de navigateur non supportée", - "app.audioNotification.audioFailedError1004": "Erreur 1004: Échec de l'appel (raison = {0})", + "app.audioNotification.audioFailedError1004": "Erreur 1004 : échec de l'appel (raison = {0})", "app.audioNotification.audioFailedError1005": "Erreur 1005 : l'appel s'est terminé inopinément", "app.audioNotification.audioFailedError1006": "Erreur 1006 : délai d'appel dépassé", "app.audioNotification.audioFailedError1007": "Erreur 1007 : la négociation ICE a échoué", @@ -320,21 +340,21 @@ "app.audioNotification.audioFailedError1009": "Erreur 1009 : impossible de récupérer les informations du serveur STUN/TURN.", "app.audioNotification.audioFailedError1010": "Erreur 1010 : délai dépassé durant la négociation ICE", "app.audioNotification.audioFailedError1011": "Erreur 1011 : délai d'attente dépassé pour ICE", - "app.audioNotification.audioFailedError1012": "Erreur 1012: connexion ICE fermée", + "app.audioNotification.audioFailedError1012": "Erreur 1012 : connexion ICE fermée", "app.audioNotification.audioFailedMessage": "Votre connexion audio à échoué", "app.audioNotification.mediaFailedMessage": "getUserMicMedia a échoué car seules les origines sécurisées sont autorisées", "app.audioNotification.closeLabel": "Fermer", "app.audioNotificaion.reconnectingAsListenOnly": "Le microphone est verrouillé pour les participants, vous êtes connecté en mode écoute uniquement.", "app.breakoutJoinConfirmation.title": "Rejoindre la salle de groupe", "app.breakoutJoinConfirmation.message": "Voulez-vous rejoindre", - "app.breakoutJoinConfirmation.confirmLabel": "Rejoindre", "app.breakoutJoinConfirmation.confirmDesc": "Rejoignez la réunion privée", "app.breakoutJoinConfirmation.dismissLabel": "Annuler", "app.breakoutJoinConfirmation.dismissDesc": "Fermer et refuser d'entrer dans la réunion privée", "app.breakoutJoinConfirmation.freeJoinMessage": "Choisissez une réunion privée à rejoindre", - "app.breakoutTimeRemainingMessage": "Temps restant dans la réunion privée: {0}", + "app.breakoutTimeRemainingMessage": "Temps restant dans la réunion privée : {0}", "app.breakoutWillCloseMessage": "Le temps s'est écoulé. La réunion privée fermera bientôt", - "app.calculatingBreakoutTimeRemaining": "Calcul du temps restant ...", + "app.calculatingBreakoutTimeRemaining": "Calcul du temps restant...", + "app.audioModal.ariaTitle": "Fenêtre modale pour joindre en audio", "app.audioModal.microphoneLabel": "Microphone", "app.audioModal.listenOnlyLabel": "Écoute seule", "app.audioModal.audioChoiceLabel": "Voulez-vous rejoindre l'audio ?", @@ -348,10 +368,13 @@ "app.audioModal.no": "Non", "app.audioModal.yes.arialabel" : "Écho activé", "app.audioModal.no.arialabel" : "Écho désactivé", - "app.audioModal.echoTestTitle": "Ceci est un test d'écho privé. Parlez quelques mots. Avez-vous entendu de l'audio?", + "app.audioModal.echoTestTitle": "Ceci est un test d'écho privé. Prononcez quelques mots. Avez-vous entendu de l'audio ?", "app.audioModal.settingsTitle": "Modifier vos paramètres audio", "app.audioModal.helpTitle": "Il y a un problème avec vos périphériques", - "app.audioModal.helpText": "Avez-vous donné la permission d'accéder à votre microphone? Notez qu'une boîte de dialogue doit apparaître lorsque vous essayez de rejoindre l'audio, demandant les autorisations de votre périphérique multimédia. Veuillez l'accepter pour rejoindre la conférence audio. Si ce n'est pas le cas, essayez de modifier les autorisations de votre microphone dans les paramètres de votre navigateur.", + "app.audioModal.helpText": "Avez-vous donné la permission d'accéder à votre microphone ? Notez qu'une boîte de dialogue doit apparaître lorsque vous essayez de rejoindre l'audio, demandant les autorisations de votre périphérique multimédia. Veuillez l'accepter pour rejoindre la conférence audio. Si ce n'est pas le cas, essayez de modifier les autorisations de votre microphone dans les paramètres de votre navigateur.", + "app.audioModal.audioDialTitle": "Joindre avec votre téléphone", + "app.audioDial.audioDialDescription": "Composer", + "app.audioDial.audioDialConfrenceText": "et saisir le numéro PIN de la conférence :", "app.audioModal.connecting": "Connexion en cours", "app.audioModal.connectingEchoTest": "Connexion au test d'écho", "app.audioManager.joinedAudio": "Vous avez rejoint la conférence audio", @@ -384,15 +407,22 @@ "app.meeting.logout.ejectedFromMeeting": "Vous avez été éjecté de la réunion", "app.meeting.logout.validateTokenFailedEjectReason": "Échec de la validation du jeton d'autorisation", "app.meeting.logout.userInactivityEjectReason": "Utilisateur inactif trop longtemps", + "app.meeting-ended.rating.legendLabel": "Évaluation", + "app.meeting-ended.rating.starLabel": "Favori", "app.modal.close": "Fermer", + "app.modal.close.description": "Annule les changements et ferme la fenêtre modale", "app.modal.confirm": "Terminé", + "app.modal.newTab": "(ouvre un nouvel onglet)", + "app.modal.confirm.description": "Sauvegarde les changements et ferme la fenêtre modale", "app.dropdown.close": "Fermer", "app.error.400": "Mauvaise Requête", "app.error.401": "Non autorisé", "app.error.403": "Vous avez été éjecté de la réunion", "app.error.404": "Non trouvé", + "app.error.410": "La conférence est terminée", "app.error.500": "Oups, quelque chose s'est mal passé", "app.error.leaveLabel": "Connectez-vous à nouveau", + "app.error.fallback.presentation.title": "Une erreur s'est produite", "app.error.fallback.presentation.description": "Il a été connecté. Essayez de recharger la page.", "app.error.fallback.presentation.reloadButton": "Recharger", "app.guest.waiting": "En attente de l'approbation d'adhésion", @@ -408,17 +438,19 @@ "app.userList.guest.pendingGuestAlert": "A rejoint la session et attend votre approbation.", "app.userList.guest.rememberChoice": "Se rappeler du choix", "app.user-info.title": "Recherche dans l'annuaire", - "app.toast.breakoutRoomEnded": "La réunion privée s'est terminée. S'il vous plaît rejoindre dans l'audio.", + "app.toast.breakoutRoomEnded": "La réunion privée s'est terminée. Veuillez rejoindre l'audio.", "app.toast.chat.public": "Nouveau message de discussion publique", "app.toast.chat.private": "Nouveau message de discussion privée", "app.toast.chat.system": "Système", "app.notification.recordingStart": "Cette session est maintenant enregistrée", "app.notification.recordingStop": "Cette session n'est maintenant plus enregistrée", "app.notification.recordingAriaLabel": "Temps enregistré", + "app.shortcut-help.title": "Raccourcis clavier", "app.shortcut-help.accessKeyNotAvailable": "Clés d'accès non disponibles", "app.shortcut-help.comboLabel": "Combo", "app.shortcut-help.functionLabel": "Fonction", "app.shortcut-help.closeLabel": "Fermer", + "app.shortcut-help.closeDesc": "Ferme la fenêtre modale des raccourcis clavier", "app.shortcut-help.openOptions": "Ouvrir les options", "app.shortcut-help.toggleUserList": "Basculer la liste d'utilisateurs", "app.shortcut-help.toggleMute": "Assourdir / Activer", @@ -426,9 +458,11 @@ "app.shortcut-help.hidePrivateChat": "Masquer la discussion privée", "app.shortcut-help.closePrivateChat": "Fermer la discussion privée", "app.shortcut-help.openActions": "Ouvrir le menu des actions", - "app.shortcut-help.openStatus": "Ouvrir le menu de status", + "app.shortcut-help.openStatus": "Ouvrir le menu de statut", "app.shortcut-help.togglePan": "Activer l'outil Panoramique (Présentateur)", - "app.lock-viewers.title": "Verrouiller les téléspectateurs", + "app.shortcut-help.nextSlideDesc": "Diapositive suivante (Présentateur)", + "app.shortcut-help.previousSlideDesc": "Diapositive précédente (Présentateur)", + "app.lock-viewers.title": "Verrouiller les spectateurs", "app.lock-viewers.description": "Ces options vous permettent d'empêcher les participants d'utiliser des fonctionnalités spécifiques. (Ces paramètres de verrouillage ne s'appliquent pas aux modérateurs.)", "app.lock-viewers.featuresLable": "Fonctionnalité", "app.lock-viewers.lockStatusLabel": "Statut verrouillé", @@ -437,13 +471,16 @@ "app.lock-viewers.microphoneLable": "Microphone", "app.lock-viewers.PublicChatLabel": "Discussion publique", "app.lock-viewers.PrivateChatLable": "Discussion privée", + "app.lock-viewers.notesLabel": "Notes partagées", "app.lock-viewers.Layout": "Disposition", + "app.lock-viewers.ariaTitle": "Verrouille la fenêtre modale des participants", "app.recording.startTitle": "Commencer l'enregistrement", "app.recording.stopTitle": "Enregistrement en pause", "app.recording.resumeTitle": "Reprendre l'enregistrement", "app.recording.startDescription": "(Vous pouvez sélectionner le bouton d'enregistrement ultérieurement pour mettre l'enregistrement en pause.)", - "app.recording.stopDescription": "Êtes-vous sûr de vouloir mettre l'enregistrement en pause? (Vous pouvez reprendre en sélectionnant à nouveau le bouton d'enregistrement.)", + "app.recording.stopDescription": "Êtes-vous sûr de vouloir mettre l'enregistrement en pause ? (Vous pouvez reprendre en sélectionnant à nouveau le bouton d'enregistrement.)", "app.videoPreview.cameraLabel": "Caméra", + "app.videoPreview.profileLabel": "Qualité", "app.videoPreview.cancelLabel": "Annuler", "app.videoPreview.closeLabel": "Fermer", "app.videoPreview.startSharingLabel": "Commencer à partager", @@ -451,23 +488,24 @@ "app.videoPreview.webcamPreviewLabel": "Aperçu de la webcam", "app.videoPreview.webcamSettingsTitle": "Paramètres de la webcam", "app.videoPreview.webcamNotFoundLabel": "Webcam introuvable", + "app.videoPreview.profileNotFoundLabel": "Profil de caméra non supporté", "app.video.joinVideo": "Partager webcam", "app.video.leaveVideo": "Arrêtez le partage de la webcam", "app.video.iceCandidateError": "Erreur lors de l'ajout du candidat ICE", "app.video.iceConnectionStateError": "Erreur 1107 : négociation ICE échouée", - "app.video.permissionError": "Erreur lors du partage de la webcam. S'il vous plaît vérifier les permissions", + "app.video.permissionError": "Erreur lors du partage de la webcam. Veuillez vérifier les permissions", "app.video.sharingError": "Erreur lors du partage de la Webcam", "app.video.notFoundError": "Webcam introuvable. Assurez-vous qu'elle soit bien connectée", "app.video.notAllowed": "Permission manquante pour partager la Webcam. Veuillez vérifier les permissions dans votre navigateur", "app.video.notSupportedError": "La vidéo de la webcam peut uniquement être partagée avec des sources sûres ; assurez-vous que votre certificat SSL est valide", "app.video.notReadableError": "Impossible d'obtenir la vidéo de la webcam. Assurez-vous qu'aucun autre programme n'utilise la webcam", - "app.video.mediaFlowTimeout1020": "Erreur 1020: le média n'a pas pu atteindre le serveur", + "app.video.mediaFlowTimeout1020": "Erreur 1020 : le média n'a pas pu atteindre le serveur", "app.video.swapCam": "Échanger", "app.video.swapCamDesc": "Permuter les Webcams", - "app.video.videoLocked": "Partage webcam vérouillé", - "app.video.videoButtonDesc": "le bouton Rejoindre la vidéo", + "app.video.videoLocked": "Partage webcam verrouillé", + "app.video.videoButtonDesc": "Bouton Rejoindre la vidéo", "app.video.videoMenu": "Menu Vidéo", - "app.video.videoMenuDisabled": "le menu vidéo de la webcam est désactivée dans les paramètres", + "app.video.videoMenuDisabled": "Le menu vidéo de la webcam est désactivé dans les paramètres", "app.video.videoMenuDesc": "Ouvrir le menu déroulant de la vidéo", "app.video.chromeExtensionError": "Vous devez installer ", "app.video.chromeExtensionErrorLink": "cette extension Chrome", @@ -492,10 +530,11 @@ "app.sfu.mediaServerRequestTimeout2003": "Erreur 2003 : les demandes du serveur multimédia expirent", "app.sfu.serverIceGatheringFailed2021": "Erreur 2021 : le serveur multimédia ne peut pas rassembler de candidats ICE", "app.sfu.serverIceGatheringFailed2022": "Erreur 2022 : la connexion ICE au serveur de médias a échoué", - "app.sfu.mediaGenericError2200": "Erreur 2200: le serveur de médias n'a pas pu traiter la demande", + "app.sfu.mediaGenericError2200": "Erreur 2200 : le serveur de médias n'a pas pu traiter la demande", "app.sfu.invalidSdp2202":"Erreur 2202 : le client a généré un SDP non valide", "app.sfu.noAvailableCodec2203": "Erreur 2203 : le serveur n'a pas trouvé de codec approprié", "app.meeting.endNotification.ok.label": "OK", + "app.whiteboard.annotations.poll": "Les résultats du sondage ont été publiés", "app.whiteboard.toolbar.tools": "Outils", "app.whiteboard.toolbar.tools.hand": "Pan", "app.whiteboard.toolbar.tools.pencil": "Crayon", @@ -512,7 +551,7 @@ "app.whiteboard.toolbar.color.white": "Blanc", "app.whiteboard.toolbar.color.red": "Rouge", "app.whiteboard.toolbar.color.orange": "Orange", - "app.whiteboard.toolbar.color.eletricLime": "Chaux électrique", + "app.whiteboard.toolbar.color.eletricLime": "Vert électrique", "app.whiteboard.toolbar.color.lime": "Vert", "app.whiteboard.toolbar.color.cyan": "Cyan", "app.whiteboard.toolbar.color.dodgerBlue": "Dodger bleu", @@ -529,7 +568,7 @@ "app.feedback.subtitle": "Nous aimerions connaitre votre expérience avec BigBlueButton (optionnel)", "app.feedback.textarea": "Comment pouvons nous améliorer BigBlueButton ?", "app.feedback.sendFeedback": "Envoyer l'avis", - "app.feedback.sendFeedbackDesc": "Envoyez un feedback et quittez la réunion", + "app.feedback.sendFeedbackDesc": "Envoyer une évaluation et quitter la réunion", "app.videoDock.webcamFocusLabel": "Focus", "app.videoDock.webcamFocusDesc": "Focus sur la webcam sélectionnée", "app.videoDock.webcamUnfocusLabel": "Arrêt du focus", @@ -548,7 +587,8 @@ "app.createBreakoutRoom.joinAudio": "Rejoindre l'Audio", "app.createBreakoutRoom.returnAudio": "Retour audio", "app.createBreakoutRoom.confirm": "Créer", - "app.createBreakoutRoom.numberOfRooms": "Nombre de rénuions", + "app.createBreakoutRoom.record": "Enregistre", + "app.createBreakoutRoom.numberOfRooms": "Nombre de réunions", "app.createBreakoutRoom.durationInMinutes": "Durée (minutes)", "app.createBreakoutRoom.randomlyAssign": "Assigner au hasard", "app.createBreakoutRoom.endAllBreakouts": "Terminer toutes les réunions privées", @@ -559,17 +599,23 @@ "app.createBreakoutRoom.addRoomTime": "Augmenter la durée d'une réunion privée", "app.createBreakoutRoom.addParticipantLabel": "+ Ajouter participant", "app.createBreakoutRoom.freeJoin": "Autoriser les participants à choisir une salle de réunion à rejoindre", - "app.createBreakoutRoom.leastOneWarnBreakout": "Vous devez placer au moins un participants dans une réunion privée.", + "app.createBreakoutRoom.leastOneWarnBreakout": "Vous devez placer au moins un participant dans une réunion privée.", "app.createBreakoutRoom.modalDesc": "Suivez les étapes ci-dessous pour créer des réunions dans votre session. Pour ajouter des participants à une réunion.", + "app.createBreakoutRoom.roomTime": "{0} minutes", "app.externalVideo.start": "Partager une nouvelle vidéo", "app.externalVideo.title": "Partager une vidéo YouTube", "app.externalVideo.input": "URL de la vidéo YouTube", "app.externalVideo.urlInput": "Ajouter une URL YouTube", "app.externalVideo.urlError": "Cette URL n'est pas une vidéo YouTube valide.", "app.externalVideo.close": "Fermer", - "app.externalVideo.noteLabel": "Remarque: les vidéos YouTube partagées n'apparaîtront pas dans l'enregistrement.", + "app.network.connection.effective.slow": "Nous remarquons des problèmes de connectivité.", + "app.network.connection.effective.slow.help": "Comment corriger cela ?", + "app.externalVideo.noteLabel": "Remarque : les vidéos YouTube partagées n'apparaîtront pas dans l'enregistrement.", "app.actionsBar.actionsDropdown.shareExternalVideo": "Partage de vidéo YouTube", - "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Arrêtez le partage vidéo YouTube" + "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Arrêtez le partage vidéo YouTube", + "app.iOSWarning.label": "Veuillez mettre à jour vers iOS 12.2 ou supérieur", + "app.legacy.unsupportedBrowser": "Il semblerait que vous utilisiez un navigateur qui n'est pas supporté. Veuillez utiliser {0} or {1} pour un support complet.", + "app.legacy.upgradeBrowser": "Il semblerait que vous utilisiez une ancienne version d'un navigateur supporté. Veuillez mettre à jour votre navigateur pour un support complet." } diff --git a/bigbluebutton-html5/private/locales/he.json b/bigbluebutton-html5/private/locales/he.json index c4a86a7d2c6600a069bfd46c7bb90bdb17f988e3..816197a2a61eb387b8971b987899ad688fde8266 100644 --- a/bigbluebutton-html5/private/locales/he.json +++ b/bigbluebutton-html5/private/locales/he.json @@ -12,6 +12,7 @@ "app.chat.dropdown.copy": "העתק", "app.chat.dropdown.save": "שמור", "app.chat.label": "צ'×ט", + "app.captions.menu.cancelLabel": "בטל", "app.note.title": "×¤× ×§×¡ משותף", "app.userList.usersTitle": "משתתפי×", "app.userList.notesTitle": "הערות", @@ -33,6 +34,8 @@ "app.presentationUploder.dismissLabel": "בטל", "app.poll.y": "כן", "app.poll.n": "ל×", + "app.poll.answer.yes": "כן", + "app.poll.answer.no": "ל×", "app.poll.liveResult.usersTitle": "משתתפי×", "app.connectingMessage": "מתחבר ...", "app.navBar.settingsDropdown.aboutLabel": "×ודות", @@ -42,7 +45,6 @@ "app.endMeeting.noLabel": "ל×", "app.about.title": "×ודות", "app.about.dismissLabel": "בטל", - "app.submenu.closedCaptions.languageLabel": "שפה", "app.submenu.participants.lockPublicChatLabel": "צ'×ט ציבורי", "app.submenu.participants.lockPrivateChatLabel": "צ'×ט פרטי", "app.settings.main.cancel.label": "בטל", diff --git a/bigbluebutton-html5/private/locales/hi_IN.json b/bigbluebutton-html5/private/locales/hi_IN.json index d67e590e1d6d8573bfb2f7f3df5a66a3365ba8da..486a5ac4952069cf7ca7d0f7595258e8e7407825 100644 --- a/bigbluebutton-html5/private/locales/hi_IN.json +++ b/bigbluebutton-html5/private/locales/hi_IN.json @@ -18,6 +18,11 @@ "app.chat.label": "बातचीत", "app.chat.emptyLogLabel": "चैट लॉग खाली है", "app.chat.clearPublicChatMessage": "सारà¥à¤µà¤œà¤¨à¤¿à¤• चैट इतिहास à¤à¤• मॉडरेटर दà¥à¤µà¤¾à¤°à¤¾ साफ़ किया गया था", + "app.captions.menu.close": "बंद करे", + "app.captions.menu.backgroundColor": "पीछे का रंग", + "app.captions.menu.cancelLabel": "रदà¥à¤¦ करना", + "app.captions.pad.tip": "संपादक टूलबार पर धà¥à¤¯à¤¾à¤¨ केंदà¥à¤°à¤¿à¤¤ करने के लिठEsc दबाà¤à¤‚", + "app.captions.pad.ownership": "सà¥à¤µà¤¾à¤®à¤¿à¤¤à¥à¤µ लेने", "app.note.title": "साà¤à¤¾ किठगठनोटà¥à¤¸", "app.note.label": "धà¥à¤¯à¤¾à¤¨ दें", "app.note.hideNoteLabel": "नोट छिपाà¤à¤‚", @@ -104,8 +109,7 @@ "app.presentation.presentationToolbar.fitToPage": "पेज के लिठफिट", "app.presentation.presentationToolbar.goToSlide": "सà¥à¤²à¤¾à¤‡à¤¡ {0}", "app.presentationUploder.title": "पà¥à¤°à¤¦à¤°à¥à¤¶à¤¨", - "app.presentationUploder.message": "पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤•à¤°à¥à¤¤à¤¾ के रूप में आपके पास किसी à¤à¥€ कारà¥à¤¯à¤¾à¤²à¤¯ दसà¥à¤¤à¤¾à¤µà¥‡à¤œà¤¼ या पीडीà¤à¤« फाइल को अपलोड करने की कà¥à¤·à¤®à¤¤à¤¾ है। हम सरà¥à¤µà¥‹à¤¤à¥à¤¤à¤® परिणामों के लिठपीडीà¤à¤« फाइल की सलाह देते हैं।", - "app.presentationUploder.confirmLabel": "अपलोड", + "app.presentationUploder.uploadLabel": "अपलोड", "app.presentationUploder.confirmDesc": "अपने परिवरà¥à¤¤à¤¨ सहेजें और पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤¿ शà¥à¤°à¥‚ करें", "app.presentationUploder.dismissLabel": "रदà¥à¤¦ करना", "app.presentationUploder.dismissDesc": "मोडल विंडो बंद करें और अपने परिवरà¥à¤¤à¤¨à¥‹à¤‚ को तà¥à¤¯à¤¾à¤—ें", @@ -116,7 +120,6 @@ "app.presentationUploder.fileToUpload": "अपलोड किया जाना है ...", "app.presentationUploder.currentBadge": "वरà¥à¤¤à¤®à¤¾à¤¨", "app.presentationUploder.genericError": "ओह! कà¥à¤› गलत हो गया है", - "app.presentationUploder.rejectedError": "चयनित फ़ाइलों में से कà¥à¤› को असà¥à¤µà¥€à¤•à¤¾à¤° कर दिया जाता है। कृपया फ़ाइल माइम पà¥à¤°à¤•à¤¾à¤° की जाà¤à¤š करें।", "app.presentationUploder.upload.progress": "अपलोड करना ({0}%)", "app.presentationUploder.upload.413": "फ़ाइल बहà¥à¤¤ बड़ी है, अधिकतम 200 पृषà¥à¤ पहà¥à¤‚च गठहैं", "app.presentationUploder.conversion.conversionProcessingSlides": "पà¥à¤°à¥‹à¤¸à¥‡à¤¸à¤¿à¤‚ग पेज {0} का {1}", @@ -156,6 +159,10 @@ "app.poll.a3": "ठ/ बी / सी", "app.poll.a4": "à¤/ बी /सी /डी", "app.poll.a5": "ठ/ बी / सी / डी / ई", + "app.poll.answer.true": "सच", + "app.poll.answer.false": "असतà¥à¤¯", + "app.poll.answer.yes": "हाà¤", + "app.poll.answer.no": "नहीं", "app.poll.liveResult.usersTitle": "उपयोगकरà¥à¤¤à¤¾à¤“ं", "app.poll.liveResult.responsesTitle": "पà¥à¤°à¤¤à¤¿à¤•à¥à¤°à¤¿à¤¯à¤¾", "app.polling.pollingTitle": "मतदान के विकलà¥à¤ª", @@ -227,18 +234,6 @@ "app.submenu.video.videoQualityLabel": "वीडियो की गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾", "app.submenu.video.qualityOptionLabel": "वीडियो की गà¥à¤£à¤µà¤¤à¥à¤¤à¤¾ चà¥à¤¨à¥‡à¤‚", "app.submenu.video.participantsCamLabel": "पà¥à¤°à¤¤à¤¿à¤à¤¾à¤—ियों को वेबकैम देखना", - "app.submenu.closedCaptions.closedCaptionsLabel": "बंद शीरà¥à¤·à¤•", - "app.submenu.closedCaptions.takeOwnershipLabel": "सà¥à¤µà¤¾à¤®à¤¿à¤¤à¥à¤µ लेने", - "app.submenu.closedCaptions.languageLabel": "à¤à¤¾à¤·à¤¾", - "app.submenu.closedCaptions.localeOptionLabel": "à¤à¤¾à¤·à¤¾ चà¥à¤¨à¥‡à¤‚", - "app.submenu.closedCaptions.noLocaleOptionLabel": "कोई सकà¥à¤°à¤¿à¤¯ सà¥à¤¥à¤¾à¤¨ नहीं", - "app.submenu.closedCaptions.fontFamilyLabel": "फ़ॉनà¥à¤Ÿ परिवार", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "फ़ॉनà¥à¤Ÿ-परिवार चà¥à¤¨à¥‡à¤‚", - "app.submenu.closedCaptions.fontSizeLabel": "फ़ॉनà¥à¤Ÿ आकार", - "app.submenu.closedCaptions.fontSizeOptionLabel": "फ़ॉनà¥à¤Ÿ आकार चà¥à¤¨à¥‡à¤‚", - "app.submenu.closedCaptions.backgroundColorLabel": "पीछे का रंग", - "app.submenu.closedCaptions.fontColorLabel": "लिपि का रंग", - "app.submenu.closedCaptions.noLocaleSelected": "लोकेल का चयन नहीं किया गया है", "app.submenu.participants.muteAllLabel": "पà¥à¤°à¤¸à¥à¤¤à¥à¤¤à¤•à¤°à¥à¤¤à¤¾ को छोड़कर सà¤à¥€ को मà¥à¤¯à¥‚ट करें", "app.submenu.participants.lockAllLabel": "सà¤à¥€ दरà¥à¤¶à¤•à¥‹à¤‚ को लॉक करें", "app.submenu.participants.lockItemLabel": "दरà¥à¤¶à¤• {0}", @@ -260,7 +255,6 @@ "app.settings.applicationTab.label": "आवेदन", "app.settings.audioTab.label": "ऑडियो", "app.settings.videoTab.label": "Video", - "app.settings.closedcaptionTab.label": "बंद शीरà¥à¤·à¤•", "app.settings.usersTab.label": "पà¥à¤°à¤¤à¤¿à¤à¤¾à¤—ियों", "app.settings.main.label": "सेटिंगà¥à¤¸", "app.settings.main.cancel.label": "रदà¥à¤¦ करना", @@ -329,7 +323,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "दरà¥à¤¶à¤•à¥‹à¤‚ के लिठमाइकà¥à¤°à¥‹à¤«à¤¼à¥‹à¤¨ लॉक कर दिया गया है, आपको केवल सà¥à¤¨à¤¨à¥‡ के रूप में जोड़ा जा रहा है", "app.breakoutJoinConfirmation.title": "बà¥à¤°à¥‡à¤•à¤†à¤‰à¤Ÿ रूम में शामिल हों", "app.breakoutJoinConfirmation.message": "कà¥à¤¯à¤¾ तà¥à¤® शामिल होना चाहते हो", - "app.breakoutJoinConfirmation.confirmLabel": "शामिल हों", "app.breakoutJoinConfirmation.confirmDesc": "आप बà¥à¤°à¥‡à¤•à¤†à¤‰à¤Ÿ रूम में शामिल हों", "app.breakoutJoinConfirmation.dismissLabel": "रदà¥à¤¦ करना", "app.breakoutJoinConfirmation.dismissDesc": "बà¥à¤°à¥‡à¤•à¤†à¤‰à¤Ÿ रूम में शामिल होने के लिठबंद और असà¥à¤µà¥€à¤•à¤¾à¤° करता है", diff --git a/bigbluebutton-html5/private/locales/hu_HU.json b/bigbluebutton-html5/private/locales/hu_HU.json new file mode 100644 index 0000000000000000000000000000000000000000..6db0c2dff90c2f0d25ecb532bdfa6d4839e07d20 --- /dev/null +++ b/bigbluebutton-html5/private/locales/hu_HU.json @@ -0,0 +1,636 @@ +{ + "app.home.greeting": "A prezentáció hamarosan elindul ...", + "app.chat.submitLabel": "Ãœzenet küldése", + "app.chat.errorMinMessageLength": "Az üzenet {0} karakterrel túl rövid", + "app.chat.errorMaxMessageLength": "Az üzenet {0} karakterrel túl hosszú", + "app.chat.inputLabel": "{0}: üzenet érkezett", + "app.chat.inputPlaceholder": "{0} üzenete", + "app.chat.titlePublic": "Nyilvános üzenetek", + "app.chat.titlePrivate": "Privát üzenetek {0} felhasználóval", + "app.chat.partnerDisconnected": "{0} kilépett", + "app.chat.closeChatLabel": "{0} bezárása", + "app.chat.hideChatLabel": "{0} elrejtése", + "app.chat.moreMessages": "További üzenetek lejjebb", + "app.chat.dropdown.options": "Ãœzenetek beállÃtásai", + "app.chat.dropdown.clear": "Törlés", + "app.chat.dropdown.copy": "Másolás", + "app.chat.dropdown.save": "Mentés", + "app.chat.label": "Ãœzenetek", + "app.chat.offline": "Offline", + "app.chat.emptyLogLabel": "Az üzenetek naplója üres", + "app.chat.clearPublicChatMessage": "A nyilvános beszélgetés elÅ‘zményeit csak moderátor törölheti", + "app.captions.label": "Feliratok", + "app.captions.menu.close": "Bezárás", + "app.captions.menu.start": "IndÃtás", + "app.captions.menu.select": "Válassz nyelvet", + "app.captions.menu.title": "Feliratmenü", + "app.captions.menu.fontSize": "Méret", + "app.captions.menu.fontColor": "BetűszÃn", + "app.captions.menu.fontFamily": "Betű", + "app.captions.menu.backgroundColor": "HáttérszÃn", + "app.captions.menu.previewLabel": "ElÅ‘nézet", + "app.captions.menu.cancelLabel": "Mégsem", + "app.captions.pad.hide": "Felirat elrejtése", + "app.captions.pad.tip": "Nyomj Esc-et a szerkesztÅ‘ eszköztárra fokuszálásához", + "app.captions.pad.ownership": "Tulajdonos cseréje", + "app.note.title": "Megosztott jegyzetek", + "app.note.label": "Jegyzetek", + "app.note.hideNoteLabel": "Jegyzet elrejtése", + "app.user.activityCheck": "Felhasználói aktivitás ellenÅ‘rzése", + "app.user.activityCheck.label": "EllenÅ‘rzi, hogy a felhasználó még az elÅ‘adás résztvevÅ‘je-e ({0})", + "app.user.activityCheck.check": "EllenÅ‘rzés", + "app.note.tipLabel": "Nyomj Esc-et a szerkesztÅ‘ eszköztárra fokuszálásához", + "app.userList.usersTitle": "Felhasználók", + "app.userList.participantsTitle": "RésztvevÅ‘k", + "app.userList.messagesTitle": "Ãœzenetek", + "app.userList.notesTitle": "Jegyetek", + "app.userList.captionsTitle": "Feliratok", + "app.userList.presenter": "ElÅ‘adó", + "app.userList.you": "Én", + "app.userList.locked": "Zárolt", + "app.userList.label": "Felhasználók", + "app.userList.toggleCompactView.label": "Kompakt nézet be-, kikapcsolása", + "app.userList.guest": "Vendég", + "app.userList.menuTitleContext": "ElérhetÅ‘ beállÃtások", + "app.userList.chatListItem.unreadSingular": "{0} új úzenet", + "app.userList.chatListItem.unreadPlural": "{0} új úzenet", + "app.userList.menu.chat.label": "Privát üzenetek indÃtása", + "app.userList.menu.clearStatus.label": "Ãllapot törlése", + "app.userList.menu.removeUser.label": "Felhasználó eltávolÃtása", + "app.userList.menu.muteUserAudio.label": "Felhasználó némÃtása", + "app.userList.menu.unmuteUserAudio.label": "Felhasználó hangosÃtása", + "app.userList.userAriaLabel": "{0} {1} {2} állapot {3}", + "app.userList.menu.promoteUser.label": "ElÅ‘léptetés moderátorrá", + "app.userList.menu.demoteUser.label": "Lefokozás résztvevÅ‘vé", + "app.userList.menu.unlockUser.label": "{0} zárolásának feloldása", + "app.userList.menu.lockUser.label": "{0} zárolása", + "app.userList.menu.directoryLookup.label": "CÃmtárkeresés", + "app.userList.menu.makePresenter.label": "Legyen az elÅ‘adó", + "app.userList.userOptions.manageUsersLabel": "Felhasználók kezelése", + "app.userList.userOptions.muteAllLabel": "Összes felhasználó némÃtása", + "app.userList.userOptions.muteAllDesc": "ElÅ‘adás összes felhasználójának némÃtása", + "app.userList.userOptions.clearAllLabel": "Összes állapotikon törlése", + "app.userList.userOptions.clearAllDesc": "Összes felhasználó állapotikonjának törlése", + "app.userList.userOptions.muteAllExceptPresenterLabel": "Összes felhasználó némÃtása, az elÅ‘adó kivételével", + "app.userList.userOptions.muteAllExceptPresenterDesc": "ElÅ‘adás összes felhasználójának némÃtása, az elÅ‘adó kivételével", + "app.userList.userOptions.unmuteAllLabel": "Mindenki hangosÃtása", + "app.userList.userOptions.unmuteAllDesc": "Az elÅ‘adás hangosÃtása", + "app.userList.userOptions.lockViewersLabel": "RésztvevÅ‘k zárolása", + "app.userList.userOptions.lockViewersDesc": "Az elÅ‘adás résztvevÅ‘inek számos funkció zárolása", + "app.userList.userOptions.disableCam": "A résztvevÅ‘k webkamerája le van tiltva", + "app.userList.userOptions.disableMic": "A résztvevÅ‘k mikrofonja le van tiltva", + "app.userList.userOptions.disablePrivChat": "A privát üzenetek le van tiltva", + "app.userList.userOptions.disablePubChat": "A nyilvános üzenetek le van tiltva", + "app.userList.userOptions.disableNote": "A megosztott jegyzetek zárolva vannak", + "app.userList.userOptions.webcamsOnlyForModerator": "Csak a moderátorok láthatják a résztvevÅ‘k webkaméráját (zárolási beállÃtások miatt)", + "app.userList.userOptions.enableCam": " A résztvevÅ‘k webkamerája engedélyezve van", + "app.userList.userOptions.enableMic": "A résztvevÅ‘k mikrofonja engedélyezve van", + "app.userList.userOptions.enablePrivChat": "A privát üzenetek engedélyezve van", + "app.userList.userOptions.enablePubChat": "A nyilvános üzenetek engedélyezve van", + "app.userList.userOptions.enableNote": "A megosztott jegyzet engedélyezve van", + "app.userList.userOptions.enableOnlyModeratorWebcam": "A webkamerád engedélyezve van, Ãgy a többiek láthatnak", + "app.media.label": "Média", + "app.media.screenshare.start": "A képernyÅ‘megosztás elindult", + "app.media.screenshare.end": "A képernyÅ‘megosztás befejezÅ‘dött", + "app.media.screenshare.safariNotSupported": "A képernyÅ‘megosztás jelenleg nem működik Safari alatt. Javasoljuk Firefox, illetve Google Chrome használatát.", + "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.endedMessage": "VisszairányÃtunk a kezdÅ‘képernyÅ‘re", + "app.meeting.alertMeetingEndsUnderOneMinute": "Az elÅ‘adás egy perc múlva bezárul.", + "app.meeting.alertBreakoutEndsUnderOneMinute": "A csapatszoba egy perc múlva bezárul.", + "app.presentation.hide": "Prezentáció elrejtése", + "app.presentation.notificationLabel": "Jelenlegi prezentáció", + "app.presentation.slideContent": "Diatartalom", + "app.presentation.startSlideContent": "Diatartalom indÃtása", + "app.presentation.endSlideContent": "Diatartalom befejezése", + "app.presentation.emptySlideContent": "A jelenlegi diának nincs tartalma", + "app.presentation.presentationToolbar.selectLabel": "Dia választása", + "app.presentation.presentationToolbar.prevSlideLabel": "ElÅ‘zÅ‘ dia", + "app.presentation.presentationToolbar.prevSlideDesc": "A prezentáció az elÅ‘zÅ‘ diára ugrik", + "app.presentation.presentationToolbar.nextSlideLabel": "KövetkezÅ‘ dia", + "app.presentation.presentationToolbar.nextSlideDesc": "A prezentáció a következÅ‘ diára ugrik", + "app.presentation.presentationToolbar.skipSlideLabel": "Dia kihagyása", + "app.presentation.presentationToolbar.skipSlideDesc": "A prezentáció egy megadott diára ugrik", + "app.presentation.presentationToolbar.fitWidthLabel": "A szélességhez illeszkedjen", + "app.presentation.presentationToolbar.fitWidthDesc": "A dia teljes szélességének megjelenÃtése", + "app.presentation.presentationToolbar.fitScreenLabel": "A képernyÅ‘höz illeszkedjen", + "app.presentation.presentationToolbar.fitScreenDesc": "A teljes dia megjelenÃtése", + "app.presentation.presentationToolbar.zoomLabel": "NagyÃtás", + "app.presentation.presentationToolbar.zoomDesc": "A prezentáció nagyÃtási szintjének módosÃtása", + "app.presentation.presentationToolbar.zoomInLabel": "NagyÃtás", + "app.presentation.presentationToolbar.zoomInDesc": "A prezentációra nagyÃtás", + "app.presentation.presentationToolbar.zoomOutLabel": "KicsinyÃtése", + "app.presentation.presentationToolbar.zoomOutDesc": "A prezentációról kicsinyÃtés", + "app.presentation.presentationToolbar.zoomReset": "NagyÃtás szint visszaállÃtása", + "app.presentation.presentationToolbar.zoomIndicator": "Jelenlegi nagyÃtás százaléka", + "app.presentation.presentationToolbar.fitToWidth": "A szélességhez illeszkedjen", + "app.presentation.presentationToolbar.fitToPage": "Az oldalhoz illeszkedjen", + "app.presentation.presentationToolbar.goToSlide": "{0}. dia", + "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Å‘rizze, hogy egy prezentációt kiválasztott a jobb oldalon lévÅ‘ jelölÅ‘vel.", + "app.presentationUploder.uploadLabel": "Feltöltés", + "app.presentationUploder.confirmLabel": "Jóváhagyás", + "app.presentationUploder.confirmDesc": "Mentsd a módosÃtásaidat és indÃtsd a prezentációt", + "app.presentationUploder.dismissLabel": "Mégsem", + "app.presentationUploder.dismissDesc": "Az ablak bezárása és a módosÃtások elvetése", + "app.presentationUploder.dropzoneLabel": "A feltöltéshez dobj ide fájlokat", + "app.presentationUploder.dropzoneImagesLabel": "A feltöltéshez dobj ide képeket", + "app.presentationUploder.browseFilesLabel": "vagy tallózz fájlokat", + "app.presentationUploder.browseImagesLabel": "vagy tallózz/metsz képeket", + "app.presentationUploder.fileToUpload": "FeltöltendÅ‘ ...", + "app.presentationUploder.currentBadge": "Jelenlegi", + "app.presentationUploder.genericError": "Sajnáljuk, hiba történt", + "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, az maximum 200 oldalt tartalmazhat", + "app.presentationUploder.conversion.conversionProcessingSlides": "{0} / {1} oldal folyamatban", + "app.presentationUploder.conversion.genericConversionStatus": "Fájl átalakÃtása ...", + "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": "Sajnáljuk, a oldalszámláló elérte a maximális 200 oldalt", + "app.presentationUploder.conversion.timeout": "Sajnáljuk, az átalakÃtás túl sokáig tartott", + "app.presentationUploder.isDownloadableLabel": "A prezentáció letöltésének tiltása", + "app.presentationUploder.isNotDownloadableLabel": "A prezentáció letöltésének engedélyezése", + "app.presentationUploder.removePresentationLabel": "Prezentáció törlése", + "app.presentationUploder.setAsCurrentPresentation": "Prezentáció beállÃtása jelenlegire", + "app.presentationUploder.tableHeading.filename": "Fájlnév", + "app.presentationUploder.tableHeading.options": "BeállÃtások", + "app.presentationUploder.tableHeading.status": "Ãllapot", + "app.poll.pollPaneTitle": "Szavazás", + "app.poll.quickPollTitle": "Gyorsszavazás", + "app.poll.hidePollDesc": "Szavazásmenü-panel elrejtése", + "app.poll.customPollInstruction": "Egyéni szavazás létrehozásához válaszd a lenti gombot és add meg a válaszlehetÅ‘ségeket.", + "app.poll.quickPollInstruction": "Válassz egy beállÃtást a szavazás indÃtásához", + "app.poll.customPollLabel": "Egyéni szavazás", + "app.poll.startCustomLabel": "Egyéni szavazás indÃtása", + "app.poll.activePollInstruction": "Ne zárd be az ablakot, hogy a többiek szavazhassanak. A 'Szavazás eredményének közzététele', illetve a visszatérés véget vet a szavazásnak.", + "app.poll.publishLabel": "Szavazás eredményének közzététele", + "app.poll.backLabel": "Vissza a szavazás beállÃtásaihoz", + "app.poll.closeLabel": "Bezárás", + "app.poll.waitingLabel": "Várakozás a válaszokra ({0}/{1})", + "app.poll.ariaInputCount": " {0} / {1} egyéni válaszlehetÅ‘ség", + "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.t": "Igaz", + "app.poll.f": "Hamis", + "app.poll.tf": "Igaz / Hamis", + "app.poll.y": "Igen", + "app.poll.n": "Nem", + "app.poll.yn": "Igen / Nem", + "app.poll.a2": "A / B", + "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": "Igaz", + "app.poll.answer.false": "Hamis", + "app.poll.answer.yes": "Igen", + "app.poll.answer.no": "Nem", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", + "app.poll.liveResult.usersTitle": "Felhasználók", + "app.poll.liveResult.responsesTitle": "Válasz", + "app.polling.pollingTitle": "VálaszlehetÅ‘ségek", + "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", + "app.downloadPresentationButton.label": "Az eredeti prezentáció letöltése", + "app.connectingMessage": "Kapcsolódás ...", + "app.waitingMessage": "Szétkapcsolódtunk. {0} másodperc múlva próbálunk újra csatlakozni ...", + "app.navBar.settingsDropdown.optionsLabel": "BeállÃtások", + "app.navBar.settingsDropdown.fullscreenLabel": "Teljes képernyÅ‘", + "app.navBar.settingsDropdown.settingsLabel": "BeállÃtások", + "app.navBar.settingsDropdown.aboutLabel": "Névjegy", + "app.navBar.settingsDropdown.leaveSessionLabel": "Kijelentkezés", + "app.navBar.settingsDropdown.exitFullscreenLabel": "Teljes képernyÅ‘ bezárása", + "app.navBar.settingsDropdown.fullscreenDesc": "BeállÃtások menü megjelenÃtése teljes képernyÅ‘s módban", + "app.navBar.settingsDropdown.settingsDesc": "Ãltalános beállÃtások módosÃtása", + "app.navBar.settingsDropdown.aboutDesc": "Információk megjelenÃtése a kliensrÅ‘l", + "app.navBar.settingsDropdown.leaveSessionDesc": "Kilépés az elÅ‘adásból", + "app.navBar.settingsDropdown.exitFullscreenDesc": "Teljes képernyÅ‘s mód bezárása", + "app.navBar.settingsDropdown.hotkeysLabel": "Gyorsbillentyűk", + "app.navBar.settingsDropdown.hotkeysDesc": "Gyorsbillentyűk listája", + "app.navBar.settingsDropdown.helpLabel": "Súgó", + "app.navBar.settingsDropdown.helpDesc": "Megnyitja a videó útmutatókat (új ablakban nyÃlik meg)", + "app.navBar.settingsDropdown.endMeetingDesc": "A jelenlegi találkozót megszakÃtja", + "app.navBar.settingsDropdown.endMeetingLabel": "ElÅ‘adás befejezése", + "app.navBar.userListToggleBtnLabel": "Felhasználók ablak be-, kikapcsolása", + "app.navBar.toggleUserList.ariaLabel": "Felhasználók és Ãœzentek felcserélése", + "app.navBar.toggleUserList.newMessages": "új üzenetértesÃtéssel", + "app.navBar.recording": "Ezt a munkamenetet rögzÃtjük", + "app.navBar.recording.on": "Felvétel", + "app.navBar.recording.off": "Nem készül felvétel", + "app.leaveConfirmation.confirmLabel": "Kilépés", + "app.leaveConfirmation.confirmDesc": "Kiléptél az elÅ‘adásból", + "app.endMeeting.title": "ElÅ‘adás befejezése", + "app.endMeeting.description": "Biztos, hogy bezárja ezt a munkamenetet?", + "app.endMeeting.yesLabel": "Igen", + "app.endMeeting.noLabel": "Nem", + "app.about.title": "Névjegy", + "app.about.version": "Kliens buildszáma:", + "app.about.copyright": "Copyright:", + "app.about.confirmLabel": "OK", + "app.about.confirmDesc": "OK", + "app.about.dismissLabel": "Mégsem", + "app.about.dismissDesc": "Kliensinformációk bezárása", + "app.actionsBar.changeStatusLabel": "Ãllapot módosÃtása", + "app.actionsBar.muteLabel": "NémÃtás", + "app.actionsBar.unmuteLabel": "HangosÃtás", + "app.actionsBar.camOffLabel": "Kamera kikapcsolása", + "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": "Gomb a prezentáció visszaállÃtására annak bezárása után", + "app.screenshare.screenShareLabel" : "KépernyÅ‘megosztás", + "app.submenu.application.applicationSectionTitle": "Alkalmazás", + "app.submenu.application.animationsLabel": "Animációk", + "app.submenu.application.audioAlertLabel": "ÉrtesÃtési hang", + "app.submenu.application.pushAlertLabel": "Felugró értesÃtés", + "app.submenu.application.fontSizeControlLabel": "Betűméter", + "app.submenu.application.increaseFontBtnLabel": "Az alkalmazás betűméretének csökkentése", + "app.submenu.application.decreaseFontBtnLabel": "Az alkalmazás betűméretének növelése", + "app.submenu.application.currentSize": "{0} jelenleg", + "app.submenu.application.languageLabel": "Az alkalmazás nyelve", + "app.submenu.application.ariaLanguageLabel": "Az alkalmazás nyelvének módosÃtása", + "app.submenu.application.languageOptionLabel": "Válassz nyelvet", + "app.submenu.application.noLocaleOptionLabel": "Egy aktÃv fordÃtás sincs", + "app.submenu.audio.micSourceLabel": "Mikrofon forrása", + "app.submenu.audio.speakerSourceLabel": "Hangszóró forrása", + "app.submenu.audio.streamVolumeLabel": "A hangstream hangerÅ‘d", + "app.submenu.video.title": "Videó", + "app.submenu.video.videoSourceLabel": "Forrás megjelenÃtése", + "app.submenu.video.videoOptionLabel": "Forrásnézet bezárása", + "app.submenu.video.videoQualityLabel": "Videó minÅ‘sége", + "app.submenu.video.qualityOptionLabel": "Válaszd ki a videó minÅ‘ségét ", + "app.submenu.video.participantsCamLabel": "RésztvevÅ‘k webkamerájának megtekintése", + "app.submenu.participants.muteAllLabel": "Mindenki némÃtása, az elÅ‘adó kivételével", + "app.submenu.participants.lockAllLabel": "Összes résztvevÅ‘ zárolása", + "app.submenu.participants.lockItemLabel": "{0} résztvevÅ‘", + "app.submenu.participants.lockMicDesc": "Az összes zárolt felhasználó mikrofonját letiltja", + "app.submenu.participants.lockCamDesc": "Az összes zárolt felhasználó webkameráját letiltja", + "app.submenu.participants.lockPublicChatDesc": "A nyilvános üzenetek tiltása az összes zárolt felhasználónál", + "app.submenu.participants.lockPrivateChatDesc": "A privát üzenetek tiltása az összes zárolt felhasználónál", + "app.submenu.participants.lockLayoutDesc": "Az összes zárolt résztvevÅ‘ lerendezésének zárolása", + "app.submenu.participants.lockMicAriaLabel": "Mikorofon zárolása", + "app.submenu.participants.lockCamAriaLabel": "Webkamera zárolása", + "app.submenu.participants.lockPublicChatAriaLabel": "Nyilvános üzenetek zárolása", + "app.submenu.participants.lockPrivateChatAriaLabel": "Privát üzenetek zárolása", + "app.submenu.participants.lockLayoutAriaLabel": "Elrendezés zárolása", + "app.submenu.participants.lockMicLabel": "Mikrofon", + "app.submenu.participants.lockCamLabel": "Webkamera", + "app.submenu.participants.lockPublicChatLabel": "Nyilvános üzenetek", + "app.submenu.participants.lockPrivateChatLabel": "Privát üzenetek", + "app.submenu.participants.lockLayoutLabel": "Elrendezés", + "app.settings.applicationTab.label": "Alkalmazás", + "app.settings.audioTab.label": "Hang", + "app.settings.videoTab.label": "Videó", + "app.settings.usersTab.label": "RésztvevÅ‘k", + "app.settings.main.label": "BeállÃtások", + "app.settings.main.cancel.label": "Mégsem", + "app.settings.main.cancel.label.description": "MódosÃtások elvetése és a beállÃtások menü bezárása", + "app.settings.main.save.label": "Mentés", + "app.settings.main.save.label.description": "MódosÃtások mentése és a beállÃtások menü bezárása", + "app.settings.dataSavingTab.label": "AdatmegtakarÃtás", + "app.settings.dataSavingTab.webcam": "Webkamerák engedélyezése", + "app.settings.dataSavingTab.screenShare": "KépernyÅ‘megosztás engedélyezése", + "app.settings.dataSavingTab.description": "IgazÃtsd a sávszélességedhez, hogy mi jelenhessen meg a képernyÅ‘dön.", + "app.settings.save-notification.label": "A beállÃtásokat mentettük", + "app.switch.onLabel": "BE", + "app.switch.offLabel": "KI", + "app.actionsBar.actionsDropdown.actionsLabel": "Műveletek", + "app.actionsBar.actionsDropdown.presentationLabel": "Prezentáció feltöltése", + "app.actionsBar.actionsDropdown.initPollLabel": "MeghÃvás szavazásra", + "app.actionsBar.actionsDropdown.desktopShareLabel": "KépernyÅ‘m megosztása", + "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "KépernyÅ‘m megosztásának befejezése", + "app.actionsBar.actionsDropdown.presentationDesc": "Prezentációd feltöltése", + "app.actionsBar.actionsDropdown.initPollDesc": "MeghÃvás szavazásra", + "app.actionsBar.actionsDropdown.desktopShareDesc": "KépernyÅ‘m megosztás másokkal", + "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "KépernyÅ‘m megosztásának befejezése vele:", + "app.actionsBar.actionsDropdown.pollBtnLabel": "Szavazás indÃtása", + "app.actionsBar.actionsDropdown.pollBtnDesc": "Szavazásmenü-panel be-, kikapcsolása", + "app.actionsBar.actionsDropdown.saveUserNames": "Felhasználók neveinek mentése", + "app.actionsBar.actionsDropdown.createBreakoutRoom": "Csapatszobák létrehozása", + "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "Csapatszobák létrehozása a jelenlegi találkozó felosztására", + "app.actionsBar.actionsDropdown.captionsLabel": "Feliratok Ãrása", + "app.actionsBar.actionsDropdown.captionsDesc": "Feliratok panel be-, kikapcsolása ", + "app.actionsBar.actionsDropdown.takePresenter": "Legyen az elÅ‘adó", + "app.actionsBar.actionsDropdown.takePresenterDesc": "Legyek én az új elÅ‘adó", + "app.actionsBar.emojiMenu.statusTriggerLabel": "Ãllapot beállÃtása", + "app.actionsBar.emojiMenu.awayLabel": "Nem vagyok a gépnél", + "app.actionsBar.emojiMenu.awayDesc": "Az állapotot 'Nem vagyok a gépnél'-re módosÃtja", + "app.actionsBar.emojiMenu.raiseHandLabel": "Kézfeltartás", + "app.actionsBar.emojiMenu.raiseHandDesc": "Jelentkezz, hogy kérdezhess", + "app.actionsBar.emojiMenu.neutralLabel": "Bizonytalan", + "app.actionsBar.emojiMenu.neutralDesc": "Az állapotot 'Bizonytalan'-ra módosÃtja", + "app.actionsBar.emojiMenu.confusedLabel": "Összezavarodott", + "app.actionsBar.emojiMenu.confusedDesc": "Az állapotot 'Összezavarodott'-ra módosÃtja", + "app.actionsBar.emojiMenu.sadLabel": "Szomorú", + "app.actionsBar.emojiMenu.sadDesc": "Az állapotot 'Szomorú'-ra módosÃtja", + "app.actionsBar.emojiMenu.happyLabel": "Vidám", + "app.actionsBar.emojiMenu.happyDesc": "Az állapotot 'Vidám'-ra módosÃtja", + "app.actionsBar.emojiMenu.noneLabel": "Ãllapot törlése", + "app.actionsBar.emojiMenu.noneDesc": "Ãllapotom törlése", + "app.actionsBar.emojiMenu.applauseLabel": "Taps", + "app.actionsBar.emojiMenu.applauseDesc": "Az állapotot 'Taps'-ra módosÃtja", + "app.actionsBar.emojiMenu.thumbsUpLabel": "Tetszik", + "app.actionsBar.emojiMenu.thumbsUpDesc": "Az állapotot 'Tetszik'-re módosÃtja", + "app.actionsBar.emojiMenu.thumbsDownLabel": "Nem tetszik", + "app.actionsBar.emojiMenu.thumbsDownDesc": "Az állapotot 'Nem tetszik'-re módosÃtja", + "app.actionsBar.currentStatusDesc": "{0} jelenlegi állapot", + "app.actionsBar.captions.start": "Feliratok megtekintésének indÃtása", + "app.actionsBar.captions.stop": "Feliratok megtekintésének befejezése", + "app.audioNotification.audioFailedError1001": "Hiba 1001: WebSocket kapcsolat megszakadt", + "app.audioNotification.audioFailedError1002": "Hiba 1002: Websocket kapcsolat nem jött létre", + "app.audioNotification.audioFailedError1003": "Hiba 1003: Nem támogatott böngészÅ‘verzió", + "app.audioNotification.audioFailedError1004": "Hiba 1004: Hiba a hÃváskor (ok={0})", + "app.audioNotification.audioFailedError1005": "Hiba 1005: HÃvás váratlanul véget ért", + "app.audioNotification.audioFailedError1006": "Hiba 1006: HÃvás idÅ‘túllépése", + "app.audioNotification.audioFailedError1007": "Hiba 1007: ICE egyezkedés sikertelen", + "app.audioNotification.audioFailedError1008": "Hiba 1008: Ãtvitel sikertelen", + "app.audioNotification.audioFailedError1009": "Hiba 1009: Nem sikerült hozzájutni a STUN/TURN szerverinformációhoz", + "app.audioNotification.audioFailedError1010": "Hiba 1010: ICE egyezkedési idÅ‘túllépés", + "app.audioNotification.audioFailedError1011": "Hiba 1011: ICE gyűjtési idÅ‘túllépés", + "app.audioNotification.audioFailedError1012": "Hiba 1012: ICE kapcsolat lezárult", + "app.audioNotification.audioFailedMessage": "A hangcsatlakozásod sikertelen", + "app.audioNotification.mediaFailedMessage": "getUserMicMedia sikertelen, mivel csak biztonságos eredet engedélyezett", + "app.audioNotification.closeLabel": "Bezárás", + "app.audioNotificaion.reconnectingAsListenOnly": "A résztvevÅ‘k mikrofonját zároltuk, csak hallgathat", + "app.breakoutJoinConfirmation.title": "Belépés csapatszobához", + "app.breakoutJoinConfirmation.message": " Csatlakozik ide:", + "app.breakoutJoinConfirmation.confirmDesc": "Belépek egy csapatszobába", + "app.breakoutJoinConfirmation.dismissLabel": "Mégsem", + "app.breakoutJoinConfirmation.dismissDesc": "A csapatszoba bezárása és a csatlakozási kérelmek visszautasÃtása", + "app.breakoutJoinConfirmation.freeJoinMessage": "Csapatszoba választása", + "app.breakoutTimeRemainingMessage": "Csapatszoba hátralévÅ‘ ideje: {0}", + "app.breakoutWillCloseMessage": "Az idÅ‘ lejárt. A csapatszoba hamarosan bezárul", + "app.calculatingBreakoutTimeRemaining": "HátralévÅ‘ idÅ‘ számÃtása ...", + "app.audioModal.ariaTitle": "Csatlakozás hangablak", + "app.audioModal.microphoneLabel": "Mikrofon", + "app.audioModal.listenOnlyLabel": "Csak hallgatok", + "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.", + "app.audioModal.iOSErrorRecommendation": "Javasoljuk iOS Safari használatát.", + "app.audioModal.audioChoiceDesc": "Válassz, hogyan csatlakozol hanggal ehhez az elÅ‘adáshoz", + "app.audioModal.unsupportedBrowserLabel": "Úgy néz ki, hogy a böngészÅ‘d nem teljesen támogatott. Kérjük, használj {0} vagy {1} böngészÅ‘t a teljes támogatás érdekében.", + "app.audioModal.closeLabel": "Bezárás", + "app.audioModal.yes": "Igen", + "app.audioModal.no": "Nem", + "app.audioModal.yes.arialabel" : "A visszhang hallható", + "app.audioModal.no.arialabel" : "A visszhang nem hallható", + "app.audioModal.echoTestTitle": "Ez a te hangteszted, más nem hallja. Mondj néhány szót. Hallod a hangot?", + "app.audioModal.settingsTitle": "HangbeállÃtásaim módosÃtása", + "app.audioModal.helpTitle": "Hiba történt a médiaeszközöddel", + "app.audioModal.helpText": "Adtál engedélyt a mikrofonod eléréséhez? Amikor csatlakozol egy beszélgetéshez, egy felugró ablak jelenik meg, melyben engedélyt tudsz adni a médiaeszközöd használatához. Kérjük, engedélyezd, hogy csatlakozhass a beszélgetéshez. Amennyiben nincs ilyen ablak, a böngészÅ‘d beállÃtásaiban módosÃtsd a mikrofonod használatához az engedélyt.", + "app.audioModal.audioDialTitle": "Csatlakozás telefon használatával", + "app.audioDial.audioDialDescription": "Tárcsázás", + "app.audioDial.audioDialConfrenceText": "és add meg a megbeszélés PIN számát: ", + "app.audioModal.connecting": "Kapcsolódás", + "app.audioModal.connectingEchoTest": "Kapcsolódás a hangteszthez", + "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", + "app.audioManager.genericError": "Hiba: Hiba lépett fel, kérem, próbálja újra.", + "app.audioManager.connectionError": "Hiba: Kapcsolódási hiba", + "app.audioManager.requestTimeout": "Hiba: IdÅ‘túllépés a kérésben", + "app.audioManager.invalidTarget": "Hiba: Egy érvénytelen célnak próbáltak valamit küldeni", + "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.enterSessionLabel": "Belépés a munkamenetbe", + "app.audio.playSoundLabel": "Hang lejátszása", + "app.audio.backLabel": "Vissza", + "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", + "app.audio.audioSettings.speakerSourceLabel": "Hangszóró forrása", + "app.audio.audioSettings.microphoneStreamLabel": "A hangstream hangerÅ‘d", + "app.audio.audioSettings.retryLabel": "Újra", + "app.audio.listenOnly.backLabel": "Vissza", + "app.audio.listenOnly.closeLabel": "Bezárás", + "app.audio.permissionsOverlay.title": "Engedélyezd, hogy használhassuk a mikrofonod", + "app.audio.permissionsOverlay.hint": "A médiaeszközöd használatához az engedélyedre van szükségünk :)", + "app.error.removed": "EltávolÃtottak a beszélgetésbÅ‘l", + "app.error.meeting.ended": "Kiléptél a beszélgetésbÅ‘l", + "app.meeting.logout.duplicateUserEjectReason": "Egy felhasználó többször próbál csatlakozni az elÅ‘adáshoz", + "app.meeting.logout.permissionEjectReason": "Engedély megsértése miatt kidobtunk", + "app.meeting.logout.ejectedFromMeeting": "EltávolÃtottak a megbeszélésbÅ‘l", + "app.meeting.logout.validateTokenFailedEjectReason": "HitelesÃtési token érvényesÃtése sikertelen", + "app.meeting.logout.userInactivityEjectReason": "A felhasználó túl sokáig volt inaktÃv", + "app.meeting-ended.rating.legendLabel": "Visszajelzési értékelés", + "app.meeting-ended.rating.starLabel": "Csillag", + "app.modal.close": "Bezárás", + "app.modal.close.description": "MódosÃtások elvetése és az ablak bezárása ", + "app.modal.confirm": "Kész", + "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.dropdown.close": "Bezárás", + "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.410": "A találkozó véget ért", + "app.error.500": "Sajnáljuk, hiba történt", + "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.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", + "app.userList.guest.allowAllAuthenticated": "Összes hitelesÃtett felhasználó engedélyezése ", + "app.userList.guest.allowAllGuests": "Összes vendég engedélyezése ", + "app.userList.guest.allowEveryone": "Mindenki engedélyezése", + "app.userList.guest.denyEveryone": "Mindenki tiltása", + "app.userList.guest.pendingUsers": "{0} várakozó felhasználó", + "app.userList.guest.pendingGuestUsers": "{0} várakozó vendégfelhasználó", + "app.userList.guest.pendingGuestAlert": "csatlakozott a munkamenethez és várakozik a jóváhagyásodra.", + "app.userList.guest.rememberChoice": "Választás megjegyzése", + "app.user-info.title": "CÃmtárkeresés", + "app.toast.breakoutRoomEnded": "A csapatszoba bezárult. Csatlakozz újra a találkozóhoz.", + "app.toast.chat.public": "Új nyilvános üzenet", + "app.toast.chat.private": "Új privát üzenet", + "app.toast.chat.system": "Rendszer", + "app.notification.recordingStart": "Ezt a munkamenetet rögzÃtjük", + "app.notification.recordingStop": "Ezt a munkamenetet nem rögzÃtjük tovább", + "app.notification.recordingAriaLabel": "Felvétel hossza", + "app.shortcut-help.title": "Gyorsbillentyűk", + "app.shortcut-help.accessKeyNotAvailable": "A hozzáférési kulcsok nem érhetÅ‘ek el", + "app.shortcut-help.comboLabel": "Kombó", + "app.shortcut-help.functionLabel": "Funkció", + "app.shortcut-help.closeLabel": "Bezárás", + "app.shortcut-help.closeDesc": "Bezárja a gyorsbillentyűk ablakot", + "app.shortcut-help.openOptions": "BeállÃtások megnyitása", + "app.shortcut-help.toggleUserList": "Felhasználók ablak be-, kikapcsolása", + "app.shortcut-help.toggleMute": "NémÃt / HangosÃt", + "app.shortcut-help.togglePublicChat": "Nyilvános üzenetek be-, kikapcsolása (a Felhasználók ablaknak nyitva kell lennie)", + "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.openStatus": "Ãllapotok menü megnyitása", + "app.shortcut-help.togglePan": "Mozgató eszköz bekapcsolása (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", + "app.lock-viewers.description": "Ezek az opciókkal letilthatod, hogy a résztvevÅ‘k néhány funkciót használhassanak. (Ezek a tiltások nem érintik a moderátorokat.)", + "app.lock-viewers.featuresLable": "Tulajdonság", + "app.lock-viewers.lockStatusLabel": "Zárolt állapot", + "app.lock-viewers.webcamLabel": "Webkamera", + "app.lock-viewers.otherViewersWebcamLabel": "A többiek webkamrájának megtekintése", + "app.lock-viewers.microphoneLable": "Mikrofon", + "app.lock-viewers.PublicChatLabel": "Nyilvános üzenetek", + "app.lock-viewers.PrivateChatLable": "Privát üzenetek", + "app.lock-viewers.notesLabel": "Megosztott jegyzetek", + "app.lock-viewers.Layout": "Elrendezés", + "app.lock-viewers.ariaTitle": "Zárolt felhasználók ablaka", + "app.recording.startTitle": "Felvétel indÃtása", + "app.recording.stopTitle": "Felvétel szüneteltetése", + "app.recording.resumeTitle": "Felvétel folytatása", + "app.recording.startDescription": "(A felvétel szüneteltetéséhez használd a felvétel gombot.)", + "app.recording.stopDescription": "Biztos, hogy szünetelteted a felvételt? (A gomb újbóli megnyomásával folytatható a felvétel.)", + "app.videoPreview.cameraLabel": "Kamera", + "app.videoPreview.profileLabel": "MinÅ‘ség", + "app.videoPreview.cancelLabel": "Mégsem", + "app.videoPreview.closeLabel": "Bezárás", + "app.videoPreview.startSharingLabel": "Megosztás indÃtása", + "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.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.leaveVideo": "Webkamerám megosztásának befejezése", + "app.video.iceCandidateError": "Hiba az ICE-jelölt hozzáadásakor", + "app.video.iceConnectionStateError": "Hiba 1107: Az ICE-tárgyalások sikertelenek", + "app.video.permissionError": "Hiba a webkamera megosztásakor. Kérjük, ellenÅ‘rizze az jogosultságokat, engedélyeket", + "app.video.sharingError": "Hiba a webkamera megosztásakor", + "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.mediaFlowTimeout1020": "Hiba 1020: A média nem éri el a szervert", + "app.video.swapCam": "MegfordÃtás", + "app.video.swapCamDesc": "Webkamera irányának megfordÃtása", + "app.video.videoLocked": "Webkamera megosztása zárolva", + "app.video.videoButtonDesc": "Csatlakozás videó gomb", + "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.chromeExtensionError": "Szükséges telepÃtenie", + "app.video.chromeExtensionErrorLink": "ez a Chrome bÅ‘vÃtmény", + "app.video.stats.title": "Kapcsolódási statisztikák", + "app.video.stats.packetsReceived": "Megérkezett csomagok", + "app.video.stats.packetsSent": "Elküldött csomagok", + "app.video.stats.packetsLost": "Elveszett csomagok", + "app.video.stats.bitrate": "Bitráta", + "app.video.stats.lostPercentage": "Összes veszteség százalékban", + "app.video.stats.lostRecentPercentage": "Jelenlegi veszteség százalékban", + "app.video.stats.dimensions": "Méretek", + "app.video.stats.codec": "Kodek", + "app.video.stats.decodeDelay": "Dekódolás késleltetése", + "app.video.stats.rtt": "RTT", + "app.video.stats.encodeUsagePercent": "Kódolás használata", + "app.video.stats.currentDelay": "Jelenlegi elcsúszás", + "app.fullscreenButton.label": "{0} teljes képernyÅ‘s módra állÃtása", + "app.deskshare.iceConnectionStateError": "Hiba 1108: ICE kapcsolódási hiba a képernyÅ‘megosztáskor", + "app.sfu.mediaServerConnectionError2000": "Hiba 2000: Nem sikerült csatlakozni a médiaszerverhez", + "app.sfu.mediaServerOffline2001": "Hiba 2001: A médiaszerver ki van kapcsolva. Kérjük, próbálja késÅ‘bb.", + "app.sfu.mediaServerNoResources2002": "Hiba 2002: A médiaszervernek nincs elérhetÅ‘ erÅ‘forrása", + "app.sfu.mediaServerRequestTimeout2003": "Hiba: 2003: IdÅ‘túllépés a médiaszerver kéréseivel", + "app.sfu.serverIceGatheringFailed2021": "Hiba 2021: A médiaszerver nem tud ICE jelölteket gyűjteni", + "app.sfu.serverIceGatheringFailed2022": "Hiba 2022: Médiaszerver ICE kapcsolódási hiba", + "app.sfu.mediaGenericError2200": "Hiba 2200: A médiaszerver nem tudja kiszolgálni a kérést", + "app.sfu.invalidSdp2202":"Hiba 2202: A kliens nem valós SDP-t hozott létre", + "app.sfu.noAvailableCodec2203": "Hiba 2203: A szerver nem találja a megfelelÅ‘ kodeket", + "app.meeting.endNotification.ok.label": "OK", + "app.whiteboard.annotations.poll": "A szavazás eredményeit sikeresen közzétetted", + "app.whiteboard.toolbar.tools": "Eszközök", + "app.whiteboard.toolbar.tools.hand": "Mozgatás", + "app.whiteboard.toolbar.tools.pencil": "Ceruza", + "app.whiteboard.toolbar.tools.rectangle": "Téglalap", + "app.whiteboard.toolbar.tools.triangle": "Háromszög", + "app.whiteboard.toolbar.tools.ellipse": "Ellipszis", + "app.whiteboard.toolbar.tools.line": "Vonal", + "app.whiteboard.toolbar.tools.text": "Szöveg", + "app.whiteboard.toolbar.thickness": "Rajzolás vastagsága", + "app.whiteboard.toolbar.thicknessDisabled": "A rajzolás vastagsága ki van kapcsolva", + "app.whiteboard.toolbar.color": "SzÃnek", + "app.whiteboard.toolbar.colorDisabled": "A szÃnek le van tiltva", + "app.whiteboard.toolbar.color.black": "Fekete", + "app.whiteboard.toolbar.color.white": "Fehér", + "app.whiteboard.toolbar.color.red": "Piros", + "app.whiteboard.toolbar.color.orange": "Narancs", + "app.whiteboard.toolbar.color.eletricLime": "Elektromos zöldcitrom", + "app.whiteboard.toolbar.color.lime": "Zöldcitrom", + "app.whiteboard.toolbar.color.cyan": "Cián", + "app.whiteboard.toolbar.color.dodgerBlue": "Vagánykék", + "app.whiteboard.toolbar.color.blue": "Kék", + "app.whiteboard.toolbar.color.violet": "Ibolya", + "app.whiteboard.toolbar.color.magenta": "Magenta", + "app.whiteboard.toolbar.color.silver": "Ezüst", + "app.whiteboard.toolbar.undo": "Rajzolás visszavonása", + "app.whiteboard.toolbar.clear": "Összes rajzolás törlése", + "app.whiteboard.toolbar.multiUserOn": "Többfelhasználós rajztábla bekapcsolása", + "app.whiteboard.toolbar.multiUserOff": "Többfelhasználós rajztábla kikapcsolása", + "app.whiteboard.toolbar.fontSize": "Betűméretek", + "app.feedback.title": "Kiléptél a beszélgetésbÅ‘l", + "app.feedback.subtitle": "Örömmel vesszük, ha Ãrsz néhány szót a BigBlueButton használatának tapasztalatairól (nem kötelezÅ‘)", + "app.feedback.textarea": "Hogyan tennéd jobbá a BigBlueButton-t?", + "app.feedback.sendFeedback": "Visszajelzés küldése", + "app.feedback.sendFeedbackDesc": "Visszajelzés küldése és kilépés a találkozóból", + "app.videoDock.webcamFocusLabel": "Fókusz", + "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.invitation.title": "MeghÃvás csapatszobába", + "app.invitation.confirm": "MeghÃvás", + "app.createBreakoutRoom.title": "Csapatszobák", + "app.createBreakoutRoom.ariaTitle": "Csapatszobák elrejtése", + "app.createBreakoutRoom.breakoutRoomLabel": "{0} csapatszoba", + "app.createBreakoutRoom.generatingURL": "URL létrehozása", + "app.createBreakoutRoom.generatedURL": "Generált", + "app.createBreakoutRoom.duration": "{0} idÅ‘tartam", + "app.createBreakoutRoom.room": "{0} szoba", + "app.createBreakoutRoom.notAssigned": "({0}) nincs hozzárendelve", + "app.createBreakoutRoom.join": "Belépés szobába", + "app.createBreakoutRoom.joinAudio": "Hang bekapcsolása", + "app.createBreakoutRoom.returnAudio": "Vissza a beszélgetéshez", + "app.createBreakoutRoom.confirm": "Létrehozás", + "app.createBreakoutRoom.record": "RögzÃtés", + "app.createBreakoutRoom.numberOfRooms": "Szobák száma", + "app.createBreakoutRoom.durationInMinutes": "IdÅ‘tartam (percben)", + "app.createBreakoutRoom.randomlyAssign": "Véletlenszerű hozzárendelés", + "app.createBreakoutRoom.endAllBreakouts": "Összes csapatszoba bezárása", + "app.createBreakoutRoom.roomName": "{0} (Szoba - {1})", + "app.createBreakoutRoom.doneLabel": "Kész", + "app.createBreakoutRoom.nextLabel": "KövetkezÅ‘", + "app.createBreakoutRoom.minusRoomTime": "Csapatszoba idejének csökkentése", + "app.createBreakoutRoom.addRoomTime": "Csapatszoba idejének növelése", + "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.modalDesc": "Hajtsd végre az alábbi lépéseket, hogy szobákat hozz létre és felhasználókat rendelj a szobákhoz.", + "app.createBreakoutRoom.roomTime": "{0} perc", + "app.externalVideo.start": "Egy új videó megosztása", + "app.externalVideo.title": "Egy YouTube videó megosztása", + "app.externalVideo.input": "YouTube videó URL-je", + "app.externalVideo.urlInput": "YouTube URL hozzáadása", + "app.externalVideo.urlError": "Ez nem YouTube videó URL-je", + "app.externalVideo.close": "Bezárás", + "app.network.connection.effective.slow": "Kapcsolódási problémát érzékeltünk.", + "app.network.connection.effective.slow.help": "Hogyan javÃtsam meg?", + "app.externalVideo.noteLabel": "Megjegyzés: A megosztott YouTube videókat nem rögzÃtjük", + "app.actionsBar.actionsDropdown.shareExternalVideo": "YouTube videó megosztása", + "app.actionsBar.actionsDropdown.stopShareExternalVideo": "YouTube videó megosztásának leállÃtása", + "app.iOSWarning.label": "FrissÃts iOS 12.2-re vagy újabbra", + "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." + +} + diff --git a/bigbluebutton-html5/private/locales/id.json b/bigbluebutton-html5/private/locales/id.json index 1c930ae2c9a88a736a13c5693f25e3678a8bc728..b40613cb57780addeffdca9e56f699fc1ad39f70 100644 --- a/bigbluebutton-html5/private/locales/id.json +++ b/bigbluebutton-html5/private/locales/id.json @@ -16,6 +16,11 @@ "app.chat.dropdown.save": "Simpan", "app.chat.label": "Chat", "app.chat.emptyLogLabel": "Log Chatting kosong", + "app.captions.menu.close": "Tutup", + "app.captions.menu.start": "Mulai", + "app.captions.menu.backgroundColor": "Warna latar", + "app.captions.menu.cancelLabel": "Batalkan", + "app.captions.pad.ownership": "Ambil kepemilikan", "app.userList.usersTitle": "Pengguna", "app.userList.participantsTitle": "Peserta", "app.userList.messagesTitle": "Pesan", @@ -97,14 +102,6 @@ "app.submenu.video.videoOptionLabel": "Pilih Lihat Sumber", "app.submenu.video.qualityOptionLabel": "Pilih kualitas video", "app.submenu.video.participantsCamLabel": "Melihat Web Kamera Peserta", - "app.submenu.closedCaptions.takeOwnershipLabel": "Ambil kepemilikan", - "app.submenu.closedCaptions.languageLabel": "Bahasa", - "app.submenu.closedCaptions.localeOptionLabel": "Pilih Bahasa", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Tidaki ada lokalisasi yang aktif", - "app.submenu.closedCaptions.fontFamilyLabel": "Jenis Huruf", - "app.submenu.closedCaptions.fontSizeLabel": "Ukuran Huruf", - "app.submenu.closedCaptions.backgroundColorLabel": "Warna latar", - "app.submenu.closedCaptions.fontColorLabel": "Warna Huruf", "app.submenu.participants.muteAllLabel": "Diamkan semua kecuali pemateri", "app.submenu.participants.lockMicAriaLabel": "Kunci Mikropon", "app.submenu.participants.lockCamAriaLabel": "Kunci Web Kamera.", @@ -154,7 +151,6 @@ "app.audioNotification.audioFailedMessage": "Koneksi audio anda gagal terhubung", "app.audioNotification.closeLabel": "Tutup", "app.breakoutJoinConfirmation.message": "Anda ingin bergabung ?", - "app.breakoutJoinConfirmation.confirmLabel": "Bergabung", "app.breakoutJoinConfirmation.dismissLabel": "Batalkan", "app.audioModal.microphoneLabel": "MIkropon", "app.audioModal.audioChoiceLabel": "Bagaimana anda akan terhubung dengan audio?", diff --git a/bigbluebutton-html5/private/locales/it_IT.json b/bigbluebutton-html5/private/locales/it_IT.json index eade0ba936087845f921ee5dd13d14ce7482ef18..f817807a2037df41f2d9aa52f681dc04c28ece5a 100644 --- a/bigbluebutton-html5/private/locales/it_IT.json +++ b/bigbluebutton-html5/private/locales/it_IT.json @@ -16,8 +16,14 @@ "app.chat.dropdown.copy": "Copia", "app.chat.dropdown.save": "Salva", "app.chat.label": "Chat", + "app.chat.offline": "Disconnesso", "app.chat.emptyLogLabel": "Il registro chat è vuoto", "app.chat.clearPublicChatMessage": "Il registro della Chat pubblica è stato cancellato da un moderatore", + "app.captions.menu.close": "Chiudi", + "app.captions.menu.backgroundColor": "Colore di sfondo", + "app.captions.menu.cancelLabel": "Annulla", + "app.captions.pad.tip": "Premi ESC per utilizzare la barra degli strumenti", + "app.captions.pad.ownership": "Prendi il controllo", "app.note.title": "Note condivise", "app.note.label": "Note", "app.note.hideNoteLabel": "Nascondi nota", @@ -106,8 +112,7 @@ "app.presentation.presentationToolbar.fitToPage": "Adatta alla pagina", "app.presentation.presentationToolbar.goToSlide": "Slide {0}", "app.presentationUploder.title": "Presentazione", - "app.presentationUploder.message": "Come presentatore hai la possibilità di caricare qualsiasi documento o PDF. Il formato PDF è consigliato per un risultato ottimale", - "app.presentationUploder.confirmLabel": "Carica", + "app.presentationUploder.uploadLabel": "Carica", "app.presentationUploder.confirmDesc": "Salva modifiche e avvia presentazione", "app.presentationUploder.dismissLabel": "Annulla", "app.presentationUploder.dismissDesc": "Chiudi la finestra e annulla le modifiche", @@ -118,7 +123,6 @@ "app.presentationUploder.fileToUpload": "Da caricare...", "app.presentationUploder.currentBadge": "Attuale", "app.presentationUploder.genericError": "Dannazione, qualcosa è andato storto", - "app.presentationUploder.rejectedError": "Alcuni dei file selezionati sono stati rifiutati. Per favore controllare il tipo di file.", "app.presentationUploder.upload.progress": "Caricamento ({0}%)", "app.presentationUploder.upload.413": "Il file è troppo grande, il numero massimo di 200 pagine è stato raggiunto", "app.presentationUploder.conversion.conversionProcessingSlides": "Elaborazione pagina {0} di {1}", @@ -161,6 +165,15 @@ "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": "Vero", + "app.poll.answer.false": "Falso", + "app.poll.answer.yes": "Si", + "app.poll.answer.no": "No", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Utenti", "app.poll.liveResult.responsesTitle": "Risposta", "app.polling.pollingTitle": "Opzioni sondaggio", @@ -222,6 +235,7 @@ "app.submenu.application.fontSizeControlLabel": "Dimensione carattere", "app.submenu.application.increaseFontBtnLabel": "Aumenta dimensione carattere", "app.submenu.application.decreaseFontBtnLabel": "Diminuisci dimensione carattere", + "app.submenu.application.currentSize": "attualmente {0}", "app.submenu.application.languageLabel": "Lingua dell'interfaccia", "app.submenu.application.ariaLanguageLabel": "Cambia lingua applicazione", "app.submenu.application.languageOptionLabel": "Scegli linguaggio", @@ -235,18 +249,6 @@ "app.submenu.video.videoQualityLabel": "Qualità Video ", "app.submenu.video.qualityOptionLabel": "Seleziona la qualità video", "app.submenu.video.participantsCamLabel": "Visualizza webcam partecipanti", - "app.submenu.closedCaptions.closedCaptionsLabel": "Sottotitoli", - "app.submenu.closedCaptions.takeOwnershipLabel": "Prendi il controllo", - "app.submenu.closedCaptions.languageLabel": "Lingua", - "app.submenu.closedCaptions.localeOptionLabel": "Scegli linguaggio", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Non ci sono localizzazioni attive", - "app.submenu.closedCaptions.fontFamilyLabel": "Carattere", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Seleziona carattere", - "app.submenu.closedCaptions.fontSizeLabel": "Dimensione carattere", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Seleziona dimensione carattere", - "app.submenu.closedCaptions.backgroundColorLabel": "Colore di sfondo", - "app.submenu.closedCaptions.fontColorLabel": "Colore testo", - "app.submenu.closedCaptions.noLocaleSelected": "Localizzazione non selezionata", "app.submenu.participants.muteAllLabel": "Silenzia tutti eccetto il presentatore", "app.submenu.participants.lockAllLabel": "Blocca tutti gli spettatori", "app.submenu.participants.lockItemLabel": "Spettatori {0}", @@ -268,7 +270,6 @@ "app.settings.applicationTab.label": "Applicazione", "app.settings.audioTab.label": "Audio", "app.settings.videoTab.label": "Video", - "app.settings.closedcaptionTab.label": "Sottotitoli", "app.settings.usersTab.label": "Partecipanti", "app.settings.main.label": "Impostazioni", "app.settings.main.cancel.label": "Annulla", @@ -338,7 +339,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "Il microfono è stato bloccato per gli spettatori, puoi collegarti solo come ascoltatore", "app.breakoutJoinConfirmation.title": "Entra nella Stanza Separata ", "app.breakoutJoinConfirmation.message": "Vuoi partecipare", - "app.breakoutJoinConfirmation.confirmLabel": "Pertecipa", "app.breakoutJoinConfirmation.confirmDesc": "Partecipa con te nella Stanza Separata", "app.breakoutJoinConfirmation.dismissLabel": "Annulla", "app.breakoutJoinConfirmation.dismissDesc": "Chiudi e non accettare ingressi nella Stanza Separata", @@ -404,6 +404,7 @@ "app.modal.close": "Chiudi", "app.modal.close.description": "Annula le modifiche e chiudi la finestra", "app.modal.confirm": "Fatto", + "app.modal.newTab": "(apre una nuova scheda)", "app.modal.confirm.description": "Salva le modifiche e chiudi la finestra", "app.dropdown.close": "Chiudi", "app.error.400": "Richiesta Errata", @@ -592,12 +593,15 @@ "app.createBreakoutRoom.freeJoin": "Permetti agli utenti di entrare in una Stanza Separata", "app.createBreakoutRoom.leastOneWarnBreakout": "Devi posizionare almeno un utente nella Stanza Separata", "app.createBreakoutRoom.modalDesc": "Completa i passaggi seguenti per creare Stanze nella tua sessione e aggiungere partecipanti ad esse.", + "app.createBreakoutRoom.roomTime": "{0} minuti", "app.externalVideo.start": "Condividi un nuovo video", "app.externalVideo.title": "Condividi un video da YouTube", "app.externalVideo.input": "Indirizzo video YouTube ", "app.externalVideo.urlInput": "Aggiungi un indirizzo da YouTube", "app.externalVideo.urlError": "Questo indirizzo non è un video YouTube valido", "app.externalVideo.close": "Chiudi", + "app.network.connection.effective.slow": "Stiamo rilevando problemi di connessione", + "app.network.connection.effective.slow.help": "Come risolvere?", "app.externalVideo.noteLabel": "Nota: I video condivisi da YouTube non appariranno nella registrazione", "app.actionsBar.actionsDropdown.shareExternalVideo": "Condividi un video da YouTube", "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Interrompi condivisione video da YouTube", diff --git a/bigbluebutton-html5/private/locales/ja.json b/bigbluebutton-html5/private/locales/ja.json index 8cd672994b2bb133e8118835aeeac51cacd8c9d6..3315d9689984e7c5d5c824b2a151ab1e89385834 100644 --- a/bigbluebutton-html5/private/locales/ja.json +++ b/bigbluebutton-html5/private/locales/ja.json @@ -18,6 +18,12 @@ "app.chat.label": "ãƒãƒ£ãƒƒãƒˆ", "app.chat.emptyLogLabel": "ãƒãƒ£ãƒƒãƒˆãƒã‚°ã¯ç©ºã§ã™", "app.chat.clearPublicChatMessage": "ãƒãƒ£ãƒƒãƒˆå±¥æ´ã¯ãƒ¢ãƒ‡ãƒ¬ãƒ¼ã‚¿ãƒ¼ã«ã‚ˆã‚Šæ¶ˆåŽ»ã•ã‚Œã¾ã—ãŸ", + "app.captions.menu.close": "é–‰ã˜ã‚‹", + "app.captions.menu.start": "開始", + "app.captions.menu.backgroundColor": "背景色", + "app.captions.menu.cancelLabel": "ã‚ャンセル", + "app.captions.pad.tip": "Escを押ã—ã¦ã‚¨ãƒ‡ã‚£ã‚¿ãƒ¼ãƒ„ールãƒãƒ¼ã«ãƒ•ã‚©ãƒ¼ã‚«ã‚¹ã™ã‚‹", + "app.captions.pad.ownership": "所有権をã¨ã‚‹", "app.note.title": "共有メモ", "app.note.label": "メモ", "app.note.hideNoteLabel": "ãƒ¡ãƒ¢ã‚’éš ã™", @@ -97,7 +103,6 @@ "app.presentation.presentationToolbar.fitToPage": "ページã«åˆã‚ã›ã‚‹", "app.presentation.presentationToolbar.goToSlide": "スライド {0}", "app.presentationUploder.title": "プレゼンテーション", - "app.presentationUploder.message": "プレゼンターã¯ãƒ‰ã‚ュメントをアップãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŠå‹§ã‚ã®ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ã¯PDFファイルã§ã™ã€‚", "app.presentationUploder.confirmDesc": "変更をä¿å˜ã—ã¦ãƒ—レゼンテーションを開始ã™ã‚‹", "app.presentationUploder.dismissLabel": "ã‚ャンセル", "app.presentationUploder.dismissDesc": "変更をä¿å˜ã›ãšã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹", @@ -108,7 +113,6 @@ "app.presentationUploder.fileToUpload": "アップãƒãƒ¼ãƒ‰ã•ã‚Œã¾ã™â€¦", "app.presentationUploder.currentBadge": "ç¾åœ¨", "app.presentationUploder.genericError": "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ", - "app.presentationUploder.rejectedError": "ã„ãã¤ã‹ã®é¸æŠžãƒ•ã‚¡ã‚¤ãƒ«ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ファイルã®MIMEタイプを確èªã—ã¦ãã ã•ã„。", "app.presentationUploder.upload.progress": "アップãƒãƒ¼ãƒ‰ä¸({0}%)", "app.presentationUploder.conversion.conversionProcessingSlides": "{1}ページä¸{0}ページ目を処ç†ä¸", "app.presentationUploder.conversion.genericConversionStatus": "ファイル変æ›ä¸â€¦", @@ -145,6 +149,10 @@ "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.yes": "ã¯ã„", + "app.poll.answer.no": "ã„ã„ãˆ", "app.poll.liveResult.usersTitle": "ユーザー", "app.poll.liveResult.responsesTitle": "回ç”", "app.polling.pollingTitle": "投票オプション", @@ -216,18 +224,6 @@ "app.submenu.video.videoQualityLabel": "ビデオå“質", "app.submenu.video.qualityOptionLabel": "ビデオå“質をé¸æŠž", "app.submenu.video.participantsCamLabel": "å‚åŠ è€…ã®ã‚¦ã‚§ãƒ–カメラを見ã¦ã„ã¾ã™", - "app.submenu.closedCaptions.closedCaptionsLabel": "å—幕", - "app.submenu.closedCaptions.takeOwnershipLabel": "所有権をã¨ã‚‹", - "app.submenu.closedCaptions.languageLabel": "言語", - "app.submenu.closedCaptions.localeOptionLabel": "言語をé¸æŠž", - "app.submenu.closedCaptions.noLocaleOptionLabel": "アクティブãªãƒã‚±ãƒ¼ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“", - "app.submenu.closedCaptions.fontFamilyLabel": "フォントファミリー", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "フォントファミリーをé¸æŠž", - "app.submenu.closedCaptions.fontSizeLabel": "フォントサイズ", - "app.submenu.closedCaptions.fontSizeOptionLabel": "フォントサイズ", - "app.submenu.closedCaptions.backgroundColorLabel": "背景色", - "app.submenu.closedCaptions.fontColorLabel": "フォント色", - "app.submenu.closedCaptions.noLocaleSelected": "ãƒã‚±ãƒ¼ãƒ«ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“", "app.submenu.participants.muteAllLabel": "プレゼンター以外ã®å…¨å“¡ã‚’ミュート", "app.submenu.participants.lockAllLabel": "全ビューアーをãƒãƒƒã‚¯ã™ã‚‹", "app.submenu.participants.lockItemLabel": "ビューアー {0}", @@ -249,7 +245,6 @@ "app.settings.applicationTab.label": "アプリケーション", "app.settings.audioTab.label": "音声", "app.settings.videoTab.label": "ビデオ", - "app.settings.closedcaptionTab.label": "å—幕", "app.settings.usersTab.label": "å‚åŠ è€…", "app.settings.main.label": "è¨å®š", "app.settings.main.cancel.label": "ã‚ャンセル", @@ -316,7 +311,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "ビューアーã®ãƒžã‚¤ã‚¯ãŒãƒãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æŽ¥ç¶šã¯ã€Œè´è¬›ã®ã¿ã€ã§ã™ã€‚", "app.breakoutJoinConfirmation.title": "ブレイクアウトルームã«å‚åŠ ã™ã‚‹", "app.breakoutJoinConfirmation.message": "å‚åŠ ã—ã¾ã™ã‹", - "app.breakoutJoinConfirmation.confirmLabel": "å‚åŠ ", "app.breakoutJoinConfirmation.confirmDesc": "ブレイクアウトルームã«å‚åŠ ã—ã¾ã—ãŸ", "app.breakoutJoinConfirmation.dismissLabel": "ã‚ャンセル", "app.breakoutJoinConfirmation.dismissDesc": "ブレイクアウトルームã«å‚åŠ ã—ãªã„ã§ç”»é¢ã‚’é–‰ã˜ã‚‹", diff --git a/bigbluebutton-html5/private/locales/ja_JP.json b/bigbluebutton-html5/private/locales/ja_JP.json index e2642d8164cfa19858b3a3685407b222d33a4c4b..a7553d7b0d685d9942e4587df6c321122d64dd1a 100644 --- a/bigbluebutton-html5/private/locales/ja_JP.json +++ b/bigbluebutton-html5/private/locales/ja_JP.json @@ -18,6 +18,12 @@ "app.chat.label": "ãƒãƒ£ãƒƒãƒˆ", "app.chat.emptyLogLabel": "ãƒãƒ£ãƒƒãƒˆãƒã‚°ã¯ç©ºã§ã™", "app.chat.clearPublicChatMessage": "グループãƒãƒ£ãƒƒãƒˆå±¥æ´ã¯ãƒ¢ãƒ‡ãƒ¬ãƒ¼ã‚¿ãƒ¼ã«ã‚ˆã‚Šæ¶ˆåŽ»ã•ã‚Œã¾ã—ãŸ", + "app.captions.menu.close": "é–‰ã˜ã‚‹", + "app.captions.menu.start": "開始", + "app.captions.menu.backgroundColor": "背景色", + "app.captions.menu.cancelLabel": "ã‚ャンセル", + "app.captions.pad.tip": "Escを押ã—ã¦ã‚¨ãƒ‡ã‚£ã‚¿ãƒ„ールãƒãƒ¼ã«ãƒ•ã‚©ãƒ¼ã‚«ã‚¹ã™ã‚‹", + "app.captions.pad.ownership": "所有権をã¨ã‚‹", "app.note.title": "共有メモ", "app.note.label": "メモ", "app.note.hideNoteLabel": "ãƒ¡ãƒ¢ã‚’éš ã™", @@ -97,7 +103,6 @@ "app.presentation.presentationToolbar.fitToPage": "ページã«åˆã‚ã›ã‚‹", "app.presentation.presentationToolbar.goToSlide": "スライド {0}", "app.presentationUploder.title": "プレゼンテーション", - "app.presentationUploder.message": "プレゼンターã¯ãƒ‰ã‚ュメントをアップãƒãƒ¼ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ãŠå‹§ã‚ã®ãƒ•ã‚¡ã‚¤ãƒ«å½¢å¼ã¯PDFファイルã§ã™ã€‚", "app.presentationUploder.confirmDesc": "変更をä¿å˜ã—ã¦ãƒ—レゼンテーションを開始ã™ã‚‹", "app.presentationUploder.dismissLabel": "ã‚ャンセル", "app.presentationUploder.dismissDesc": "変更をä¿å˜ã›ãšã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã‚‹", @@ -108,7 +113,6 @@ "app.presentationUploder.fileToUpload": "アップãƒãƒ¼ãƒ‰ã™ã‚‹...", "app.presentationUploder.currentBadge": "ç¾åœ¨", "app.presentationUploder.genericError": "エラーãŒç™ºç”Ÿã—ã¾ã—ãŸ", - "app.presentationUploder.rejectedError": "ã„ãã¤ã‹ã®é¸æŠžãƒ•ã‚¡ã‚¤ãƒ«ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ファイルã®MIMEタイプを確èªã—ã¦ãã ã•ã„。", "app.presentationUploder.upload.progress": "アップãƒãƒ¼ãƒ‰ä¸ ({0}%)", "app.presentationUploder.conversion.conversionProcessingSlides": "{1}ページä¸{0}ページ目を処ç†ä¸", "app.presentationUploder.conversion.genericConversionStatus": "ファイル変æ›ä¸â€¦", @@ -145,6 +149,10 @@ "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.yes": "ã¯ã„", + "app.poll.answer.no": "ã„ã„ãˆ", "app.poll.liveResult.usersTitle": "ユーザー", "app.poll.liveResult.responsesTitle": "回ç”", "app.polling.pollingTitle": "投票オプション", @@ -216,18 +224,6 @@ "app.submenu.video.videoQualityLabel": "ビデオå“質", "app.submenu.video.qualityOptionLabel": "ビデオå“質をé¸æŠž", "app.submenu.video.participantsCamLabel": "å‚åŠ è€…ã®ã‚¦ã‚§ãƒ–カメラを見ã¦ã„ã¾ã™", - "app.submenu.closedCaptions.closedCaptionsLabel": "å—幕", - "app.submenu.closedCaptions.takeOwnershipLabel": "所有権をã¨ã‚‹", - "app.submenu.closedCaptions.languageLabel": "言語", - "app.submenu.closedCaptions.localeOptionLabel": "言語をé¸æŠž", - "app.submenu.closedCaptions.noLocaleOptionLabel": "アクティブãªãƒã‚±ãƒ¼ãƒ«ãŒã‚ã‚Šã¾ã›ã‚“", - "app.submenu.closedCaptions.fontFamilyLabel": "フォントファミリー", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "フォントファミリーをé¸æŠž", - "app.submenu.closedCaptions.fontSizeLabel": "フォントサイズ", - "app.submenu.closedCaptions.fontSizeOptionLabel": "フォントサイズをé¸æŠž", - "app.submenu.closedCaptions.backgroundColorLabel": "背景色", - "app.submenu.closedCaptions.fontColorLabel": "フォント色", - "app.submenu.closedCaptions.noLocaleSelected": "ãƒã‚±ãƒ¼ãƒ«ãŒé¸æŠžã•ã‚Œã¦ã„ã¾ã›ã‚“", "app.submenu.participants.muteAllLabel": "プレゼンター以外ã®å…¨å“¡ã‚’ミュート", "app.submenu.participants.lockAllLabel": "全ビューアーをãƒãƒƒã‚¯ã™ã‚‹", "app.submenu.participants.lockItemLabel": "ビューアー {0}", @@ -249,7 +245,6 @@ "app.settings.applicationTab.label": "アプリケーション", "app.settings.audioTab.label": "音声", "app.settings.videoTab.label": "ビデオ", - "app.settings.closedcaptionTab.label": "å—幕", "app.settings.usersTab.label": "å‚åŠ è€…", "app.settings.main.label": "è¨å®š", "app.settings.main.cancel.label": "ã‚ャンセル", @@ -316,7 +311,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "ビューアーã®ãƒžã‚¤ã‚¯ãŒãƒãƒƒã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®æŽ¥ç¶šã¯ã€Œè´è¬›ã®ã¿ã€ã§ã™ã€‚", "app.breakoutJoinConfirmation.title": "ブレイクアウトルームã«å‚åŠ ã™ã‚‹", "app.breakoutJoinConfirmation.message": "å‚åŠ ã—ã¾ã™ã‹", - "app.breakoutJoinConfirmation.confirmLabel": "å‚åŠ ", "app.breakoutJoinConfirmation.confirmDesc": "ブレイクアウトルームã«å‚åŠ ã—ã¾ã—ãŸ", "app.breakoutJoinConfirmation.dismissLabel": "ã‚ャンセル", "app.breakoutJoinConfirmation.dismissDesc": "ブレイクアウトルームã«å‚åŠ ã—ãªã„ã§ç”»é¢ã‚’é–‰ã˜ã‚‹", diff --git a/bigbluebutton-html5/private/locales/km.json b/bigbluebutton-html5/private/locales/km.json index 9c6367e379d16a432b201f8951790328cce84871..84b9a3a0fb3a8cfb4a42d25d0d2ddb34fa48c950 100644 --- a/bigbluebutton-html5/private/locales/km.json +++ b/bigbluebutton-html5/private/locales/km.json @@ -1,5 +1,5 @@ { - "app.home.greeting": "បទ​បង្ហាញ​របស់​អ្នក​នឹង​ចាប់ផ្ážáž¾áž˜â€‹áž”ន្ážáž·áž…​ទៀážâ€‹áž“áŸáŸ‡", + "app.home.greeting": "បទ​បង្ហាញ​របស់​អ្នក​នឹង​ចាប់ផ្ážáž¾áž˜â€‹áž”ន្ážáž·áž…​ទៀážâ€‹áž“áŸáŸ‡ ...", "app.chat.submitLabel": "ផ្ញើ​សារ", "app.chat.errorMinMessageLength": "សារ​នáŸáŸ‡â€‹áž“ៅ​ážáŸ’វះ {0} ážáž½â€‹áž¢áž€áŸ’សរ​ទៀáž", "app.chat.errorMaxMessageLength": "សារ​នáŸáŸ‡â€‹áž›áž¾ážŸ {0} ážáž½â€‹áž¢áž€áŸ’សរ", @@ -16,26 +16,80 @@ "app.chat.dropdown.copy": "ចម្លង", "app.chat.dropdown.save": "រក្សាទុក", "app.chat.label": "ការជជែក", + "app.chat.offline": "ក្រៅបណ្ážáž¶áž‰", "app.chat.emptyLogLabel": "កំណážáŸ‹ážáŸ’រា​ការ​ជជែក​ទទáŸ", + "app.chat.clearPublicChatMessage": "ប្រវážáŸ’ážáž·áž“ៃការជជែកសាធារណៈážáŸ’រូវបានសម្អាážážŠáŸ„យអ្នកសម្របសម្រួល", + "app.captions.menu.close": "បិទ", + "app.captions.menu.backgroundColor": "ពណ៌​ផ្ទៃ​ážáž¶áž„​ក្រោយ", + "app.captions.menu.cancelLabel": "បោះបង់", + "app.captions.pad.tip": "ចុច Esc ដើម្បីផ្ážáŸ„ážáž‘ៅលើរបារឧបករណáŸážŸáž˜áŸ’រាប់កម្មវិធីសរសáŸážš", + "app.captions.pad.ownership": "យក​ធ្វើ​ជា​របស់​ážáŸ’លួន​ឯង", "app.note.title": "ចំណាំរួមគ្នា", "app.note.label": "ចំណាំ", "app.note.hideNoteLabel": "លាក់ចំណាំ", "app.user.activityCheck": "ការពិនិážáŸ’យសកម្មភាពអ្នកប្រើ", "app.user.activityCheck.label": "áž–áž·áž“áž·ážáŸ’áž™ážáž¶ážáž¾áž¢áŸ’នកប្រើនៅក្នុងការប្រជុំទៀážáž‘០({0})", "app.user.activityCheck.check": "áž–áž·áž“áž·ážáŸ’áž™", - "app.userList.usersTitle": "អ្នកប្រើប្រាស់", + "app.note.tipLabel": "ចុច Esc ដើម្បីផ្ážáŸ„ážáž‘ៅលើរបារឧបករណáŸážŸáž˜áŸ’រាប់កម្មវិធីសរសáŸážš", + "app.userList.usersTitle": "អ្នកប្រើ", "app.userList.participantsTitle": "អ្នកចូលរួម", "app.userList.messagesTitle": "សារ", - "app.userList.presenter": "អ្នក​ធ្វើ​បទ​បង្ហាញ", + "app.userList.notesTitle": "ចំណាំ", + "app.userList.presenter": "អ្នក​បង្ហាញ", "app.userList.you": "អ្នក", "app.userList.locked": "បាន​បិទ", + "app.userList.label": "បញ្ជីអ្នកប្រើ", "app.userList.toggleCompactView.label": "បិទបើករបៀបមើលបង្រួម", "app.userList.guest": "ភ្ញៀវ", + "app.userList.menuTitleContext": "ជម្រើសដែលមាន", "app.userList.chatListItem.unreadSingular": "សារ​ážáŸ’មី {0}", "app.userList.chatListItem.unreadPlural": "សារ​ážáŸ’មី {0}", - "app.userList.menu.muteUserAudio.label": "បិទសម្លáŸáž„អ្នកប្រើប្រាស់", - "app.userList.menu.unmuteUserAudio.label": "ឈប់បិទសម្លáŸáž„អ្នកប្រើប្រាស់", + "app.userList.menu.chat.label": "ចាប់ផ្ážáž¾áž˜áž€áž¶ážšáž‡áž‡áŸ‚កឯកជន", + "app.userList.menu.clearStatus.label": "សម្អាážážŸáŸ’ážáž¶áž“ភាព", + "app.userList.menu.removeUser.label": "ដកអ្នកប្រើចáŸáž‰", + "app.userList.menu.muteUserAudio.label": "បិទសម្លáŸáž„អ្នកប្រើ", + "app.userList.menu.unmuteUserAudio.label": "ឈប់បិទសម្លáŸáž„អ្នកប្រើ", + "app.userList.userAriaLabel": "{0} {1} {2} ស្ážáž¶áž“ភាព {3}", + "app.userList.menu.promoteUser.label": "ឲ្យធ្វើជាអ្នកសម្របសម្រួល", + "app.userList.menu.demoteUser.label": "ឲ្យធ្វើជាអ្នកមើល", + "app.userList.menu.unlockUser.label": "បើក {0}", + "app.userList.menu.lockUser.label": "បិទ {0}", + "app.userList.menu.directoryLookup.label": "ការរកមើលក្នុងបញ្ជីឈ្មោះ", + "app.userList.menu.makePresenter.label": "ឲ្យធ្វើជាអ្នកបង្ហាញ", + "app.userList.userOptions.manageUsersLabel": "គ្រប់គ្រងអ្នកប្រើ", + "app.userList.userOptions.muteAllLabel": "បិទសម្លáŸáž„អ្នកប្រើទាំងអស់", + "app.userList.userOptions.muteAllDesc": "បិទសម្លáŸáž„អ្នកប្រើទាំងអស់ក្នុងការប្រជុំ", + "app.userList.userOptions.clearAllLabel": "សម្អាážážšáž¼áž”ážáŸ†ážŽáž¶áž„ស្ážáž¶áž“ភាពទាំងអស់", + "app.userList.userOptions.clearAllDesc": "សម្អាážážšáž¼áž”ážáŸ†ážŽáž¶áž„ស្ážáž¶áž“ភាពទាំងអស់ពីអ្នកប្រើ", + "app.userList.userOptions.muteAllExceptPresenterLabel": "បិទសម្លáŸáž„អ្នកប្រើទាំងអស់ក្រៅពីអ្នកបង្ហាញ", + "app.userList.userOptions.muteAllExceptPresenterDesc": "បិទសម្លáŸáž„អ្នកប្រើទាំងអស់ក្នុងការប្រជុំលើកលែងážáŸ‚អ្នកបង្ហាញ", + "app.userList.userOptions.unmuteAllLabel": "ឈប់បិទសម្លáŸáž„ក្នុងការប្រជុំ", + "app.userList.userOptions.unmuteAllDesc": "ឈប់បិទសម្លáŸáž„ក្នុងការប្រជុំ", + "app.userList.userOptions.lockViewersLabel": "បិទអ្នកមើល", + "app.userList.userOptions.lockViewersDesc": "បិទមុážáž„ារមួយចំនួនសម្រាប់អ្នកចូលរួមក្នុងការប្រជុំ", + "app.userList.userOptions.disableCam": "កាមáŸážšáŸ‰áž¶ážšáž”ស់អ្នកមើលážáŸ’រូវបានបិទ", + "app.userList.userOptions.disableMic": "ម៉ៃក្រូហ្វូនអ្នកមើលážáŸ’រូវបានបិទ", + "app.userList.userOptions.disablePrivChat": "ការជជែកឯកជនážáŸ’រូវបានបិទ", + "app.userList.userOptions.disablePubChat": "ការជជែកសាធារណៈážáŸ’រូវបានបិទ", + "app.userList.userOptions.disableNote": "ចំណាំរួមគ្នាážáŸ’រូវបានបិទ", + "app.userList.userOptions.webcamsOnlyForModerator": "មានážáŸ‚អ្នកសម្របសម្រួលទáŸáž‘ើបអាចមើលកាមáŸážšáŸ‰áž¶ážšáž”ស់អ្នកមើលបាន (ដោយសារážáŸ‚ការកំណážáŸ‹ážŸáž˜áŸ’រាប់បិទ)", "app.media.label": "មáŸážŒáŸ€", + "app.media.screenshare.start": "ការចែករំលែកអáŸáž€áŸ’រង់បានចាប់ផ្ážáž¾áž»áž˜", + "app.media.screenshare.end": "ការចែករំលែកអáŸáž€áŸ’រង់បានបញ្ចប់", + "app.media.screenshare.safariNotSupported": "មុážáž„ារចែករំលែកអáŸáž€áŸ’រង់មិនទាន់ប្រើបានលើ Safari áž‘áŸáŸ” សូមប្រើ​ Firefox ឬ Google Chrome។", + "app.meeting.ended": "ការប្រជុំážáŸ’រូវបានបញ្ចប់", + "app.meeting.meetingTimeRemaining": "áž–áŸáž›áž”្រជុំនៅសល់៖ {0}", + "app.meeting.meetingTimeHasEnded": "ដល់ពáŸáž›áž€áŸ†ážŽážáŸ‹áŸ” ការប្រជុំនឹងបញ្ចប់បន្ážáž·áž…ទៀážáž“áŸáŸ‡áŸ”", + "app.meeting.endedMessage": "អ្នកនឹងážáŸ’រូវនាំទៅកាន់ទំពáŸážšážŠáž¾áž˜", + "app.meeting.alertMeetingEndsUnderOneMinute": "ការប្រជុំនឹងបិទនៅពáŸáž›áž”ន្ážáž·áž…ទៀáž", + "app.meeting.alertBreakoutEndsUnderOneMinute": "បន្ទប់បំបែកនឹងបិទនាពáŸáž›áž”ន្ážáž·áž…ទៀáž", + "app.presentation.hide": "លាក់បទបង្ហាញ", + "app.presentation.notificationLabel": "បទបង្ហាញបច្ចុប្បន្ន", + "app.presentation.slideContent": "ážáŸ’លឹមសារក្នុងស្លាយ", + "app.presentation.startSlideContent": "ážáŸ’លឹមសារក្នុងស្លាយចាប់ផ្ážáž¾áž˜", + "app.presentation.endSlideContent": "ážáŸ’លឹមសារក្នុងស្លាយបញ្ចប់", + "app.presentation.emptySlideContent": "មិនមានážáŸ’លឹមសារសម្រាប់ស្លាយបច្ចុប្បន្នទáŸ", + "app.presentation.presentationToolbar.selectLabel": "ជ្រើសស្លាយ", "app.presentation.presentationToolbar.prevSlideLabel": "ស្លាយ​មុន", "app.presentation.presentationToolbar.prevSlideDesc": "ប្ážáž¼ážšâ€‹áž”ទ​បង្ហាញ​ទៅ​ស្លាយ​មុន", "app.presentation.presentationToolbar.nextSlideLabel": "ស្លាយ​បន្ទាប់", @@ -48,18 +102,90 @@ "app.presentation.presentationToolbar.fitScreenDesc": "បង្ហាញ​ស្លាយ​ទាំង​មូល", "app.presentation.presentationToolbar.zoomLabel": "ពង្រីក/បង្រួម", "app.presentation.presentationToolbar.zoomDesc": "ប្ážáž¼ážšâ€‹áž€áž˜áŸ’ážšáž·ážâ€‹áž–ង្រីក​របស់​បទ​បង្ហាញ", + "app.presentation.presentationToolbar.zoomInLabel": "ពង្រីក", + "app.presentation.presentationToolbar.zoomInDesc": "ពង្រីកបទបង្ហាញ", + "app.presentation.presentationToolbar.zoomOutLabel": "បង្រួម", + "app.presentation.presentationToolbar.zoomOutDesc": "បង្រួមបទបង្ហាញ", + "app.presentation.presentationToolbar.zoomReset": "កំណážáŸ‹áž–ង្រីកបង្រួមឡើងវិញ", + "app.presentation.presentationToolbar.zoomIndicator": "កម្រិážáž–ង្រីកបង្រួមបច្ចុប្បន្ន", "app.presentation.presentationToolbar.fitToWidth": "ទំហំ​សម​នឹង​ប្រវែង​ទទឹង", + "app.presentation.presentationToolbar.fitToPage": "ទំហំសមនឹងទំពáŸážšážŸáŸ’លាយ", + "app.presentation.presentationToolbar.goToSlide": "ស្លាយ {0}", + "app.presentationUploder.title": "បទបង្ហាញ", + "app.presentationUploder.uploadLabel": "ផ្ទុកឡើង", + "app.presentationUploder.confirmDesc": "រក្សាទុកការកែប្រែ ហើយចាប់ផ្ážáž¾áž˜áž”ទបង្ហាញ", "app.presentationUploder.dismissLabel": "បោះបង់", + "app.presentationUploder.dismissDesc": "បិទផ្ទាំង ហើយបោះបង់ការកែប្រែទាំងឡាយ", + "app.presentationUploder.dropzoneLabel": "អូសឯកសារមកទីនáŸáŸ‡ážŠáž¾áž˜áŸ’បីផ្ទុកឡើង", + "app.presentationUploder.dropzoneImagesLabel": "អូសរូបភាពមកទីនáŸáŸ‡ážŠáž¾áž˜áŸ’បីផ្ទុកឡើង", + "app.presentationUploder.browseFilesLabel": "ឬកáŸážŸáŸ’វែងរកឯកសារ", + "app.presentationUploder.browseImagesLabel": "ឫកáŸážŸáŸ’វែងរក/ážážážšáž¼áž”", + "app.presentationUploder.fileToUpload": "នឹងážáŸ’រូវផ្ទុកឡើង...", + "app.presentationUploder.currentBadge": "បច្ចុប្បន្ន", "app.presentationUploder.genericError": "អុញ! មាន​បញ្ហា​អ្វី​មួយ​ហើយ", + "app.presentationUploder.upload.progress": "កំពុងផ្ទុកឡើង ({0}%)", + "app.presentationUploder.upload.413": "ឯកសារធំពáŸáž€ ដល់កម្រិážáž‘ំពáŸážš ២០០", + "app.presentationUploder.conversion.conversionProcessingSlides": "កំពុងពិនិážáŸ’យទំពáŸážš {0} ក្នុងចំណោម {1}", + "app.presentationUploder.conversion.genericConversionStatus": "កំពុងបម្លែងឯកសារ ...", + "app.presentationUploder.conversion.generatingThumbnail": "កំពុងបង្កើážážšáž¼áž”ភាពážáž¼áž… ...", + "app.presentationUploder.conversion.generatedSlides": "ស្លាយážáŸ’រូវបានបង្កើហ...", + "app.presentationUploder.conversion.generatingSvg": "កំពុងបង្កើážážšáž¼áž”ភាព SVG ...", + "app.presentationUploder.conversion.pageCountExceeded": "អុញ ចំនួនទំពáŸážšáž›áž¾ážŸáž–ីចំនួនកំណážáŸ‹ ២០០ហើយ", + "app.presentationUploder.conversion.timeout": "អុញ ការបម្លែងចំណាយពáŸáž›áž…្រើនហួស", + "app.presentationUploder.isDownloadableLabel": "មិនឲ្យទាញយកបទបង្ហាញ", + "app.presentationUploder.isNotDownloadableLabel": "ឲ្យទាញយកបទបង្ហាញ", + "app.presentationUploder.removePresentationLabel": "លុបបទបង្ហាញ", + "app.presentationUploder.setAsCurrentPresentation": "ដាក់ជាបទបង្ហាញបច្ចុប្បន្ន", + "app.presentationUploder.tableHeading.filename": "ឈ្មោះឯកសារ", "app.presentationUploder.tableHeading.options": "ជម្រើស", + "app.presentationUploder.tableHeading.status": "ស្ážáž¶áž“ភាព", + "app.poll.pollPaneTitle": "ការស្ទង់មážáž·", + "app.poll.quickPollTitle": "ស្ទង់មážáž·ážšáž áŸážŸ", + "app.poll.hidePollDesc": "បិទផ្ទាំងម៉ឺនុយស្ទង់មážáž·", + "app.poll.customPollInstruction": "ដើម្បីបង្កើážáž€áž¶ážšážŸáŸ’ទង់មážáž·ážŠáŸ‚លគ្មានស្រាប់ សូមចុចប៊ូážáž»áž„ážáž¶áž„ក្រោម ហើយបញ្ចូលជម្រើសរបស់អ្នក។", + "app.poll.quickPollInstruction": "ជ្រើសជម្រើសážáž¶áž„ក្រោមដើម្បីចាប់ផ្ážáž¾áž˜áž€áž¶ážšážŸáŸ’ទង់មážáž·áŸ”", + "app.poll.customPollLabel": "ការស្ទង់មážáž·ážáŸ’មី", + "app.poll.startCustomLabel": "ចាប់ផ្ážáž¾áž˜áž€áž¶ážšážŸáŸ’ទង់មážáž·ážáŸ’មី", + "app.poll.activePollInstruction": "ទុកឲ្យផ្ទាំងនáŸáŸ‡áž”ើក ដើម្បីឲ្យអ្នកដទៃអាចឆ្លើយទៅនឹងសំណួរស្ទង់មážáž·áŸ” ចុចលើ \"ប្រកាសលទ្ធផលស្ទង់មážáž·\" ឬ ចុចទៅក្រោយវិញនឹងបញ្ចប់ការស្ទង់មážáž·áž“áŸáŸ‡áŸ”", + "app.poll.publishLabel": "ប្រកាសលទ្ធផលស្ទង់មážáž·", + "app.poll.backLabel": "ážáŸ’រឡប់ទៅជម្រើសក្នុងការស្ទង់មážáž·ážœáž·áž‰", "app.poll.closeLabel": "បិទ", + "app.poll.waitingLabel": "រង់ចាំចម្លើយ ({0}/{1})", + "app.poll.ariaInputCount": "ជម្រើស {0} នៃ {1} ក្នុងការស្ទង់មážáž·ážáŸ’មី", + "app.poll.customPlaceholder": "បន្ážáŸ‚មជម្រើសស្ទង់មážáž·", + "app.poll.noPresentationSelected": "មិនមានបទបង្ហាញážáŸ’រូវបានជ្រើសរើសទáŸ! សូមជ្រើសរើសមួយ!", + "app.poll.clickHereToSelect": "ចុចដើម្បីជ្រើសរើស", + "app.poll.t": "áž–áž·áž", + "app.poll.f": "មិនពិáž", + "app.poll.tf": "áž–áž·áž / មិនពិáž", "app.poll.y": "បាទ/ចាស", "app.poll.n": "áž‘áŸ", - "app.poll.liveResult.usersTitle": "អ្នកប្រើប្រាស់", + "app.poll.yn": "បាទ / áž‘áŸ", + "app.poll.a2": "A / B", + "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.yes": "បាទ/ចាស", + "app.poll.answer.no": "áž‘áŸ", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", + "app.poll.liveResult.usersTitle": "អ្នកប្រើ", + "app.poll.liveResult.responsesTitle": "ចម្លើយ", + "app.polling.pollingTitle": "ជម្រើសស្ទង់មážáž·", + "app.polling.pollAnswerLabel": "ចម្លើយសម្រាប់ការស្ទង់មážáž· {0}", + "app.polling.pollAnswerDesc": "ជ្រើសជម្រើសនáŸáŸ‡ážŠáž¾áž˜áŸ’បីបោះឆ្នោážáž²áŸ’áž™ {0}", "app.failedMessage": "សូមទោស! មាន​បញ្ហា​ក្នុង​ការ​ភ្ជាប់​ទៅ​កាន់​ម៉ាស៊ីន​បម្រើ", + "app.downloadPresentationButton.label": "ទាញយកបទបង្ហាញដើម", + "app.connectingMessage": "កំពុងភ្ជាប់...", + "app.waitingMessage": "ដាច់បាážáŸ‹áŸ” នឹងសាកល្បងភ្ជាប់ម្ážáž„ទៀážáž€áŸ’នុងពáŸáž› {0} វិនាទី...", "app.navBar.settingsDropdown.optionsLabel": "ជម្រើស", "app.navBar.settingsDropdown.fullscreenLabel": "បើក​ពáŸáž‰â€‹áž¢áŸáž€áŸ’រង់", - "app.navBar.settingsDropdown.settingsLabel": "បើក​ការ​កំណážáŸ‹", + "app.navBar.settingsDropdown.settingsLabel": "ការ​កំណážáŸ‹", "app.navBar.settingsDropdown.aboutLabel": "អំពី", "app.navBar.settingsDropdown.leaveSessionLabel": "ចាកចáŸáž‰", "app.navBar.settingsDropdown.exitFullscreenLabel": "ចាកចáŸáž‰â€‹áž–ី​អáŸáž€áŸ’រង់​ពáŸáž‰", @@ -68,45 +194,69 @@ "app.navBar.settingsDropdown.aboutDesc": "បង្ហាញ​ពáŸážáŸŒáž˜áž¶áž“​ពី​ម៉ាស៊ីន​ភ្ញៀវ", "app.navBar.settingsDropdown.leaveSessionDesc": "ចាកចáŸáž‰â€‹áž–ី​ការ​ប្រជុំ", "app.navBar.settingsDropdown.exitFullscreenDesc": "ចាកចáŸáž‰â€‹áž–ី​អáŸáž€áŸ’រង់​ពáŸáž‰", + "app.navBar.settingsDropdown.hotkeysLabel": "ផ្លូវកាážáŸ‹ážáž¶áž˜áž€áŸ’ážáž¶ážšáž…ុច", + "app.navBar.settingsDropdown.hotkeysDesc": "បញ្ជីនៃផ្លូវកាážáŸ‹ážáž¶áž˜áž€áŸ’ážáž¶ážšáž…ុចដែលអាចប្រើបាន", + "app.navBar.settingsDropdown.helpLabel": "ជំនួយ", + "app.navBar.settingsDropdown.helpDesc": "ភ្ជាប់អ្នកប្រើទៅកាន់វីដáŸáž¢áž¼áž”ង្រៀន (បើកក្នុងផ្ទាំងážáŸ’មី)", + "app.navBar.settingsDropdown.endMeetingDesc": "បិទការប្រជុំបច្ចុប្បន្ន", + "app.navBar.settingsDropdown.endMeetingLabel": "បញ្ចប់ការប្រជុំ", "app.navBar.userListToggleBtnLabel": "បិទ​បើក​បញ្ជី​អ្នកប្រើប្រាស់", + "app.navBar.toggleUserList.ariaLabel": "បិទបើកអ្នកប្រើ និងសារ", "app.navBar.toggleUserList.newMessages": "ជាមួយ​ការ​ជូន​ដំណឹង​ពី​សារ​ážáŸ’មី", + "app.navBar.recording": "ការប្រជុំនáŸáŸ‡áž€áŸ†áž–ុងážáŸ’រូវបានážážáž‘ុក", + "app.navBar.recording.on": "កំពុងážáž", + "app.navBar.recording.off": "មិនážážáž‘áŸ", "app.leaveConfirmation.confirmLabel": "ចាកចáŸáž‰", "app.leaveConfirmation.confirmDesc": "ដក​អ្នក​ចáŸáž‰â€‹áž–ី​ការ​ប្រជុំ", + "app.endMeeting.title": "បញ្ចប់ការប្រជុំ", + "app.endMeeting.description": "ážáž¾áž¢áŸ’នកពិážáž‡áž¶áž…ង់បញ្ចប់ការប្រជុំនáŸáŸ‡áž˜áŸ‚áž“áž‘áŸ?", "app.endMeeting.yesLabel": "បាទ/ចាស", "app.endMeeting.noLabel": "áž‘áŸ", "app.about.title": "អំពី", - "app.about.copyright": "សិទ្ធិ​អ្នកនិពន្ធ ៖", + "app.about.version": "ជំនាន់របស់ម៉ាស៊ីនភ្ញៀវ៖", + "app.about.copyright": "រក្សាសិទ្ធ៖", "app.about.confirmLabel": "យល់ព្រម", "app.about.confirmDesc": "យល់ព្រម", "app.about.dismissLabel": "បោះបង់", "app.about.dismissDesc": "បិទ​ពáŸážáŸŒáž˜áž¶áž“​ពី​ម៉ាស៊ីន​ភ្ញៀវ", + "app.actionsBar.changeStatusLabel": "ប្ážáž¼ážšážŸáŸ’ážáž¶áž“ភាព", "app.actionsBar.muteLabel": "បិទ​សម្លáŸáž„", - "app.actionsBar.unmuteLabel": "បើក​សម្លáŸáž„", + "app.actionsBar.unmuteLabel": "ឈប់បិទ​សម្លáŸáž„", + "app.actionsBar.camOffLabel": "បិទកាមáŸážšáŸ‰áž¶", "app.actionsBar.raiseLabel": "លើកដៃ", + "app.actionsBar.label": "របារសកម្មភាព", + "app.actionsBar.actionsDropdown.restorePresentationLabel": "ស្ážáž¶ážšáž”ទបង្ហាញវិញ", + "app.actionsBar.actionsDropdown.restorePresentationDesc": "ប៊ូážáž»áž„សម្រាប់ស្ážáž¶ážšáž”ទបង្ហាញបន្ទាប់ពីវាážáŸ’រូវបានបិទ", + "app.screenshare.screenShareLabel" : "ចែករំលែកអáŸáž€áŸ’រង់", "app.submenu.application.applicationSectionTitle": "កម្មវិធី", + "app.submenu.application.animationsLabel": "ចលនា", + "app.submenu.application.audioAlertLabel": "ដំណឹងជាសម្លáŸáž„សម្រាប់ការជជែក", + "app.submenu.application.pushAlertLabel": "ដំណឹងជាផ្ទាំងលោážážŸáž˜áŸ’រាប់ការជជែក", "app.submenu.application.fontSizeControlLabel": "ទំហំ​អក្សរ​", "app.submenu.application.increaseFontBtnLabel": "បង្កើន​ទំហំ​អក្សរ​ក្នុង​កម្មវិធី", "app.submenu.application.decreaseFontBtnLabel": "បន្ážáž™â€‹áž‘ំហំ​អក្សរ​ក្នុង​កម្មវិធី", + "app.submenu.application.currentSize": "បច្ចុប្បន្ន {0}", "app.submenu.application.languageLabel": "ភាសា​របស់​កម្មវិធី", + "app.submenu.application.ariaLanguageLabel": "ប្ážáž¼ážšáž—ាសាក្នុងកម្មវិធី", "app.submenu.application.languageOptionLabel": "ជ្រើសរើស​ភាសា", "app.submenu.application.noLocaleOptionLabel": "មិន​មាន​ភាសា​ទáŸ", "app.submenu.audio.micSourceLabel": "ប្រភព​មីក្រូហ្វូន", "app.submenu.audio.speakerSourceLabel": "ប្រភព​ឧបករណáŸâ€‹áž”ញ្ចáŸáž‰â€‹ážŸáž˜áŸ’áž›áŸáž„", "app.submenu.audio.streamVolumeLabel": "កម្រិážâ€‹ážŸáž˜áŸ’áž›áŸáž„", "app.submenu.video.title": "វីដáŸáž¢áž¼", - "app.submenu.video.videoSourceLabel": "បង្ហាញ​ប្រភព", - "app.submenu.video.videoOptionLabel": "ជ្រើសរើស​បង្ហាញ​ប្រភព", + "app.submenu.video.videoSourceLabel": "ប្រភពបង្ហាញ​", + "app.submenu.video.videoOptionLabel": "ជ្រើសរើស​​ប្រភពបង្ហាញ", + "app.submenu.video.videoQualityLabel": "កម្រិážâ€‹áž‚ុណភាព​វីដáŸáž¢áž¼", "app.submenu.video.qualityOptionLabel": "ជ្រើសរើស​គុណភាព​វីដáŸáž¢áž¼", "app.submenu.video.participantsCamLabel": "កំពុង​បង្ហាញ​វáŸáž”ážáŸáž˜â€‹ážšáž”ស់​អ្នក​ចូលរួម", - "app.submenu.closedCaptions.takeOwnershipLabel": "យក​ធ្វើ​ជា​របស់​ážáŸ’លួន​ឯង", - "app.submenu.closedCaptions.languageLabel": "ភាសា", - "app.submenu.closedCaptions.localeOptionLabel": "ជ្រើសរើស​ភាសា", - "app.submenu.closedCaptions.noLocaleOptionLabel": "មិន​មាន​ភាសា", - "app.submenu.closedCaptions.fontFamilyLabel": "ពុម្ព​អក្សរ", - "app.submenu.closedCaptions.fontSizeLabel": "ទំហំ​អក្សរ", - "app.submenu.closedCaptions.backgroundColorLabel": "ពណ៌​ផ្ទៃ​ážáž¶áž„​ក្រោយ", - "app.submenu.closedCaptions.fontColorLabel": "ពណ៌​អក្សរ​", "app.submenu.participants.muteAllLabel": "បិទ​សម្លáŸáž„​ទាំងអស់​លើក​លែង​ážáŸ‚​អ្នក​ធ្វើ​បទ​បង្ហាញ", + "app.submenu.participants.lockAllLabel": "បិទអ្នកមើលទាំងអស់", + "app.submenu.participants.lockItemLabel": "អ្នកមើល {0}", + "app.submenu.participants.lockMicDesc": "បិទ​មីក្រូហ្វូន​សម្រាប់​អ្នកមើល​ដែល​បាន​បិទ​ទាំងអស់", + "app.submenu.participants.lockCamDesc": "បិទ​វáŸáž”ážáŸáž˜â€‹ážŸáž˜áŸ’រាប់​អ្នកមើលដែល​បាន​បិទ​ទាំងអស់", + "app.submenu.participants.lockPublicChatDesc": "បិទ​ការ​ជជែក​សាធារណៈ​សម្រាប់​អ្នកមើលដែល​បាន​បិទ​ទាំងអស់", + "app.submenu.participants.lockPrivateChatDesc": "បិទ​ការ​ជជែក​ឯកជន​សម្រាប់​អ្នកមើល​ដែល​បាន​បិទ​ទាំងអស់", + "app.submenu.participants.lockLayoutDesc": "បិទ​ទម្រង់​សម្រាប់​អ្នកមើល​ដែល​បាន​បិទ​ទាំងអស់", "app.submenu.participants.lockMicAriaLabel": "ការ​បិទ​មីក្រូហ្វូន", "app.submenu.participants.lockCamAriaLabel": "ការ​បិទ​វáŸáž”ážáŸáž˜", "app.submenu.participants.lockPublicChatAriaLabel": "ការ​បិទ​ការ​ជជែក​សាធារណៈ", @@ -114,6 +264,8 @@ "app.submenu.participants.lockLayoutAriaLabel": "ការ​បិទ​ទម្រង់", "app.submenu.participants.lockMicLabel": "មីក្រូហ្វូន", "app.submenu.participants.lockCamLabel": "ážœáŸáž”ážáŸáž˜", + "app.submenu.participants.lockPublicChatLabel": "ជជែក​សាធារណៈ", + "app.submenu.participants.lockPrivateChatLabel": "ជជែក​ឯកជន", "app.submenu.participants.lockLayoutLabel": "ទម្រង់", "app.settings.applicationTab.label": "កម្មវិធី", "app.settings.audioTab.label": "សម្លáŸáž„", @@ -124,13 +276,30 @@ "app.settings.main.cancel.label.description": "បោះបង់​ការ​ផ្លាស់ប្ដូរ​ និង​បិទ​ម៉ឺនុយ​សម្រាប់​ការ​កំណážáŸ‹", "app.settings.main.save.label": "រក្សាទុក", "app.settings.main.save.label.description": "រក្សា​ការ​ផ្លាស់​ប្ážáž¼ážš និង​បិទ​ម៉ឺនុយ​សម្រាប់​ការ​កំណážáŸ‹", + "app.settings.dataSavingTab.label": "ការសន្សំទិន្ននáŸáž™", + "app.settings.dataSavingTab.webcam": "បើកវáŸáž”ážáŸáž˜", + "app.settings.dataSavingTab.screenShare": "បើកការចែករំលែកអáŸáž€áŸ’រង់", + "app.settings.dataSavingTab.description": "ដើម្បីសន្សំបែនវីហសូមលៃលកអ្វីដែលអ្នកកំពុងបង្ហាញ។", + "app.settings.save-notification.label": "ការកំណážáŸ‹ážáŸ’រូវបានរក្សាទុក", + "app.switch.onLabel": "បើក", + "app.switch.offLabel": "បិទ", "app.actionsBar.actionsDropdown.actionsLabel": "សកម្មភាព", "app.actionsBar.actionsDropdown.presentationLabel": "ផ្ទុក​ឡើង​បទ​បង្ហាញ", "app.actionsBar.actionsDropdown.initPollLabel": "ចាប់ផ្ážáž¾áž˜â€‹áž€áž¶ážšâ€‹ážŸáŸ’ទង់​មážáž·", "app.actionsBar.actionsDropdown.desktopShareLabel": "ចែក​រំលែក​អáŸáž€áŸ’រង់​របស់​អ្នក", + "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "ឈប់ចែករំលែកអáŸáž€áŸ’រង់", "app.actionsBar.actionsDropdown.presentationDesc": "ផ្ទុក​ឡើង​បទ​បង្ហាញ​របស់​អ្នក", "app.actionsBar.actionsDropdown.initPollDesc": "ចាប់​ផ្ážáž¾áž˜â€‹áž€áž¶ážšâ€‹ážŸáŸ’ទង់មážáž·", "app.actionsBar.actionsDropdown.desktopShareDesc": "ចែក​រំលែក​អáŸáž€áŸ’រង់​របស់​អ្នក​ជាមួយ​អ្នក​ដទៃ", + "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "ឈប់ចែករំលែកអáŸáž€áŸ’រង់ជាមួយនឹង", + "app.actionsBar.actionsDropdown.pollBtnLabel": "ចាប់ផ្ážáž¾áž˜áž€áž¶ážšážŸáŸ’ទង់មážáž·", + "app.actionsBar.actionsDropdown.pollBtnDesc": "បិទបើកផ្ទាំងស្ទង់មážáž·", + "app.actionsBar.actionsDropdown.saveUserNames": "រក្សាទុកឈ្មោះអ្នកប្រើ", + "app.actionsBar.actionsDropdown.createBreakoutRoom": "បង្កើážáž”ន្ទប់បំបែក", + "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "បង្កើážáž”ន្ទប់បំបែកសម្រាប់ញែកអ្នកចូលរួមក្នុងការប្រជុំបច្ចុប្បន្ន", + "app.actionsBar.actionsDropdown.takePresenter": "យកអ្នកបង្ហាញ", + "app.actionsBar.actionsDropdown.takePresenterDesc": "ឲ្យážáŸ’លួនឯងជាអ្នកបង្ហាញážáŸ’មី", + "app.actionsBar.emojiMenu.statusTriggerLabel": "ដាក់ស្ážáž¶áž“ភាព", "app.actionsBar.emojiMenu.awayLabel": "នៅ​ឆ្ងាយ", "app.actionsBar.emojiMenu.awayDesc": "ប្ážáž¼ážšâ€‹ážŸáŸ’ážáž¶áž“ភាព​របស់​អ្នក​ទៅ \\\"នៅឆ្ងាយ\\\"", "app.actionsBar.emojiMenu.raiseHandLabel": "លើកដៃ", @@ -155,6 +324,7 @@ "app.audioNotification.audioFailedError1001": "កំហុស 1001: WebSocket មិនបានភ្ជាប់", "app.audioNotification.audioFailedError1002": "កំហុស 1002: មិនអាចធ្វើការážáž—្ជាប់ WebSocket បាន", "app.audioNotification.audioFailedError1003": "កំហុស 1003: កំណែកម្មវិធីរុករកមិនážáŸ’រូវបានគាំទ្រទáŸ", + "app.audioNotification.audioFailedError1004": "កំហុស 1004: បរាជáŸáž™áž€áŸ’នុងការហៅ (មូលហáŸážáž»={0})", "app.audioNotification.audioFailedError1005": "កំហុស 1005: ការហៅបានបញ្ចប់ដោយមិនបានរំពឹងទុក", "app.audioNotification.audioFailedError1006": "កំហុស 1006: ការហៅបានអស់ពáŸáž›", "app.audioNotification.audioFailedError1007": "កំហុស 1007: ការចរចា ICE បរាជáŸáž™", @@ -162,10 +332,11 @@ "app.audioNotification.audioFailedError1009": "កំហុស 1009: មិនអាចទៅយកពážáŸŒáž˜áž¶áž“របស់ម៉ាស៊ីនបម្រើ STUN / TURN", "app.audioNotification.audioFailedError1010": "កំហុស 1010: អស់ពáŸáž›áž…រចា ICE", "app.audioNotification.audioFailedError1011": "កំហុស 1011: អស់ពáŸáž›áž”្រមូលផ្ážáž»áŸ† ICE", + "app.audioNotification.audioFailedError1012": "កំហុស 1012: ការភ្ជាប់ទៅកាន់ ICE ážáŸ’រូវបានបិទ", "app.audioNotification.audioFailedMessage": "ការ​ážáž—្ជាប់​សម្លáŸáž„​របស់​អ្នក​មិន​បាន​ជោគជáŸáž™", + "app.audioNotification.mediaFailedMessage": "getUserMicMedia មិន​បាន​ជោគជáŸáž™áŸ” មាន​ážáŸ‚​ប្រភព​ដើម​ដែល​មាន​សុវážáŸ’ážáž·áž—ាព​ទáŸâ€‹áž‘ើប​ážáŸ’រូវ​បាន​អនុញ្ញាážáŸ”", "app.audioNotification.closeLabel": "បិទ", "app.breakoutJoinConfirmation.message": "ážáž¾â€‹áž¢áŸ’នក​ចង់​ចូល​រួម", - "app.breakoutJoinConfirmation.confirmLabel": "ចូលរួម", "app.breakoutJoinConfirmation.dismissLabel": "បោះបង់", "app.audioModal.microphoneLabel": "មីក្រូហ្វូន", "app.audioModal.audioChoiceLabel": "ážáž¾â€‹áž¢áŸ’នក​ចង់​ចូលរួម​ដោយ​ប្រើ​សម្លáŸáž„​របៀប​ណា?", @@ -202,17 +373,29 @@ "app.error.500": "អុញ! មាន​បញ្ហា​អ្វី​មួយ​ហើយ", "app.error.leaveLabel": "ចូល​ម្ážáž„​ទៀáž", "app.guest.waiting": "កំពុងរង់ចាំការយល់ព្រមដើម្បីចូលរួម", + "app.userList.guest.waitingUsers": "កំពុងចាំអ្នកប្រើ", + "app.userList.guest.waitingUsersTitle": "ការគ្រប់គ្រងអ្នកប្រើ", + "app.userList.guest.optionTitle": "áž–áž·áž“áž·ážáŸ’យអ្នកប្រើដែលនៅរង់ចាំ", + "app.userList.guest.pendingUsers": "អ្នករង់ចាំ {0} ", + "app.userList.guest.pendingGuestUsers": "អ្នករង់ចាំជាភ្ញៀវ {0} ", + "app.user-info.title": "ការរកមើលក្នុងបញ្ជីឈ្មោះ", "app.notification.recordingStart": "វគ្គនáŸáŸ‡áž€áŸ†áž–ុងážáŸ’រូវបានážážáž‘ុក", "app.notification.recordingStop": "វគ្គនáŸáŸ‡áž˜áž·áž“កំពុងážáŸ’រូវបានážážáž‘ុកទៀážáž‘áŸ", + "app.shortcut-help.title": "ផ្លូវកាážáŸ‹ážáž¶áž˜áž€áŸ’ážáž¶ážšáž…ុច", "app.shortcut-help.closeLabel": "បិទ", + "app.lock-viewers.title": "បិទអ្នកមើល", "app.lock-viewers.webcamLabel": "ážœáŸáž”ážáŸáž˜", "app.lock-viewers.microphoneLable": "មីក្រូហ្វូន", + "app.lock-viewers.PublicChatLabel": "ជជែក​សាធារណៈ", + "app.lock-viewers.PrivateChatLable": "ជជែក​ឯកជន", "app.lock-viewers.Layout": "ទម្រង់", "app.videoPreview.cancelLabel": "បោះបង់", "app.videoPreview.closeLabel": "បិទ", "app.meeting.endNotification.ok.label": "យល់ព្រម", + "app.whiteboard.annotations.poll": "លទ្ធផលស្ទង់មážáž·ážáŸ’រូវបានប្រកាស", "app.feedback.title": "អ្នកបានចាកចáŸáž‰áž–ីសន្និសិáž", "app.createBreakoutRoom.joinAudio": "ប្រើ​សម្លáŸáž„", + "app.createBreakoutRoom.freeJoin": "អនុញ្ញាážáž²áŸ’យអ្នកប្រើជ្រើសបន្ទប់បំបែកដែលចង់ចូល", "app.externalVideo.close": "បិទ" } diff --git a/bigbluebutton-html5/private/locales/pl_PL.json b/bigbluebutton-html5/private/locales/pl_PL.json index 0c3959ffd13f323bcc3ef367c5bd349724969a91..e94bbf8a55d83c45239f974e6367f30a1deafc87 100644 --- a/bigbluebutton-html5/private/locales/pl_PL.json +++ b/bigbluebutton-html5/private/locales/pl_PL.json @@ -8,6 +8,7 @@ "app.chat.dropdown.copy": "Kopiuj", "app.chat.dropdown.save": "Zapisz", "app.chat.label": "Czat", + "app.captions.menu.close": "Zamknij", "app.note.title": "UdostÄ™pnione notatki", "app.note.label": "Notatka", "app.note.hideNoteLabel": "Ukryj notatkÄ™", diff --git a/bigbluebutton-html5/private/locales/pt.json b/bigbluebutton-html5/private/locales/pt.json index e5d30d1c3bd93f2d38104aad3d0a76c99e4d41bd..9bca29aea39dbe29735c1fc9f0d806587d8b6887 100644 --- a/bigbluebutton-html5/private/locales/pt.json +++ b/bigbluebutton-html5/private/locales/pt.json @@ -1,5 +1,5 @@ { - "app.home.greeting": "A sua apresentação vai iniciar em breve ...", + "app.home.greeting": "A sessão vai iniciar em breve ...", "app.chat.submitLabel": "Enviar mensagem", "app.chat.errorMinMessageLength": "Mensagem menor do que {0} caracter(es)", "app.chat.errorMaxMessageLength": "Mensagem maior do que {0} caracter(es)", @@ -16,8 +16,23 @@ "app.chat.dropdown.copy": "Copiar", "app.chat.dropdown.save": "Guardar", "app.chat.label": "Chat", - "app.chat.emptyLogLabel": "Registo do chat vazio", + "app.chat.offline": "Offline", + "app.chat.emptyLogLabel": "Registo do chat está vazio", "app.chat.clearPublicChatMessage": "O histórico do chat público foi apagado por um moderador", + "app.captions.label": "Legendas", + "app.captions.menu.close": "Fechar", + "app.captions.menu.start": "Iniciar", + "app.captions.menu.select": "Selecione um idioma disponÃvel", + "app.captions.menu.title": "Menu das legendas", + "app.captions.menu.fontSize": "Tamanho", + "app.captions.menu.fontColor": "Cor do texto", + "app.captions.menu.fontFamily": "Tipo de letra", + "app.captions.menu.backgroundColor": "Cor de fundo", + "app.captions.menu.previewLabel": "Pré-visualizar", + "app.captions.menu.cancelLabel": "Cancelar", + "app.captions.pad.hide": "Esconder legendas", + "app.captions.pad.tip": "Prima Esc para barra voltar à barra de ferramentas do editor", + "app.captions.pad.ownership": "Assumir o controle", "app.note.title": "Notas Partilhadas", "app.note.label": "Nota", "app.note.hideNoteLabel": "Ocultar nota", @@ -29,20 +44,21 @@ "app.userList.participantsTitle": "Participantes", "app.userList.messagesTitle": "Mensagens", "app.userList.notesTitle": "Notas", + "app.userList.captionsTitle": "Legendas", "app.userList.presenter": "Apresentador", - "app.userList.you": "Você", + "app.userList.you": "Eu", "app.userList.locked": "Bloqueado", "app.userList.label": "Lista de utilizadores", "app.userList.toggleCompactView.label": "Alternar para o modo de exibição compacto", "app.userList.guest": "Convidado", "app.userList.menuTitleContext": "Opções disponÃveis", - "app.userList.chatListItem.unreadSingular": "{0} Nova mensagem", + "app.userList.chatListItem.unreadSingular": "{0} Nova Mensagem", "app.userList.chatListItem.unreadPlural": "{0} Novas Mensagens", "app.userList.menu.chat.label": "Iniciar chat privado", "app.userList.menu.clearStatus.label": "Limpar estado", "app.userList.menu.removeUser.label": "Remover utilizador", "app.userList.menu.muteUserAudio.label": "Silenciar utilizador", - "app.userList.menu.unmuteUserAudio.label": "Desbloquear microfone do utilizador", + "app.userList.menu.unmuteUserAudio.label": "Ativar microfone do utilizador", "app.userList.userAriaLabel": "{0} {1} {2} Estado {3}", "app.userList.menu.promoteUser.label": "Promover a moderador", "app.userList.menu.demoteUser.label": "Despromover a participante", @@ -57,16 +73,16 @@ "app.userList.userOptions.clearAllDesc": "Limpa o Ãcone de estado de todos os utilizadores", "app.userList.userOptions.muteAllExceptPresenterLabel": "Silenciar todos os utilizadores exceto o apresentador", "app.userList.userOptions.muteAllExceptPresenterDesc": "Silencia todos os utilizadores na sessão, exceto o apresentador", - "app.userList.userOptions.unmuteAllLabel": "Desligar o silêncio da sessão", - "app.userList.userOptions.unmuteAllDesc": "Anula o silêncio da sessão", - "app.userList.userOptions.lockViewersLabel": "Restringir participantes", - "app.userList.userOptions.lockViewersDesc": "Restringir acesso a algumas funcionalidades por participantes da sala", - "app.userList.userOptions.disableCam": "Webcams dos espetadores estão desativadas", - "app.userList.userOptions.disableMic": "Microfones dos espetadores estão desativados", - "app.userList.userOptions.disablePrivChat": "Chat privado está desativado", - "app.userList.userOptions.disablePubChat": "Chat público está desativado", + "app.userList.userOptions.unmuteAllLabel": "Desligar o modo silêncio da sessão", + "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.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", + "app.userList.userOptions.disablePubChat": "O chat público está desativado", "app.userList.userOptions.disableNote": "As notas partilhadas estão bloqueadas", - "app.userList.userOptions.webcamsOnlyForModerator": "Apenas moderadores podem ver as webcams dos participantes (devido à s configurações de restrição)", + "app.userList.userOptions.webcamsOnlyForModerator": "Apenas moderadores podem ver as webcams dos participantes (devido à s configurações de bloqueio)", "app.media.label": "Media", "app.media.screenshare.start": "A partilha do ecrã iniciou", "app.media.screenshare.end": "A partilha do ecrã terminou", @@ -78,6 +94,7 @@ "app.meeting.alertMeetingEndsUnderOneMinute": "Sessão vai terminar dentro de 1 minuto", "app.meeting.alertBreakoutEndsUnderOneMinute": "Sala de grupo vai terminar dentro de 1 minuto", "app.presentation.hide": "Ocultar a apresentação", + "app.presentation.notificationLabel": "Apresentação atual", "app.presentation.slideContent": "Conteúdo de slide", "app.presentation.startSlideContent": "InÃcio do conteúdo de slide", "app.presentation.endSlideContent": "Fim do conteúdo de slide", @@ -105,8 +122,7 @@ "app.presentation.presentationToolbar.fitToPage": "Ajustar à página", "app.presentation.presentationToolbar.goToSlide": "Slide {0}", "app.presentationUploder.title": "Apresentação", - "app.presentationUploder.message": "Como apresentador, tem permissão para carregar qualquer documento do office ou um ficheiro PDF. Recomendamos um ficheiro PDF para melhores resultados.", - "app.presentationUploder.confirmLabel": "Carregar", + "app.presentationUploder.uploadLabel": "Carregar", "app.presentationUploder.confirmDesc": "Guardar as alterações e iniciar a apresentação", "app.presentationUploder.dismissLabel": "Cancelar", "app.presentationUploder.dismissDesc": "Fechar a janela e não guardar as alterações", @@ -117,7 +133,7 @@ "app.presentationUploder.fileToUpload": "Para carregar ...", "app.presentationUploder.currentBadge": "Atual", "app.presentationUploder.genericError": "Ops, ocorreu um erro", - "app.presentationUploder.rejectedError": "Alguns dos ficheiros selecionados foram rejeitados. Por favor, verifique o tipo de ficheiro.", + "app.presentationUploder.rejectedError": "O(s) ficheiro(s) selecionados foram rejeitados.\nVerifique por favor os tipos de ficheiro.", "app.presentationUploder.upload.progress": "A carregar ({0}%)", "app.presentationUploder.upload.413": "O ficheiro é demasiado grande. Foi atingido o limite de 200 páginas", "app.presentationUploder.conversion.conversionProcessingSlides": "A processar a página {0} de {1}", @@ -131,7 +147,9 @@ "app.presentationUploder.isNotDownloadableLabel": "Permitir que a apresentação seja descarregada", "app.presentationUploder.removePresentationLabel": "Eliminar apresentação", "app.presentationUploder.setAsCurrentPresentation": "Definir apresentação como atual", + "app.presentationUploder.tableHeading.filename": "Nome do ficheiro", "app.presentationUploder.tableHeading.options": "Opções", + "app.presentationUploder.tableHeading.status": "Estado", "app.poll.pollPaneTitle": "Sondagem", "app.poll.quickPollTitle": "Sondagem rápida", "app.poll.hidePollDesc": "Ocultar menu de sondagem", @@ -146,7 +164,7 @@ "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": "Nenhuma apresentação foi selecionada! Por favor selecione uma.", + "app.poll.noPresentationSelected": "Não foi selecionada nenhuma apresentação! Por favor selecione uma.", "app.poll.clickHereToSelect": "Clique aqui para selecionar", "app.poll.t": "Verdadeiro", "app.poll.f": "Falso", @@ -158,13 +176,22 @@ "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": "Verdadeiro", + "app.poll.answer.false": "Falso", + "app.poll.answer.yes": "Sim", + "app.poll.answer.no": "Não", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Utilizadores", "app.poll.liveResult.responsesTitle": "Respostas", "app.polling.pollingTitle": "Opções da sondagem", "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", - "app.downloadPresentationButton.label": "Descarregue a apresentação original", + "app.downloadPresentationButton.label": "Descarregar a apresentação original", "app.connectingMessage": "A ligar ...", "app.waitingMessage": "Desligado. A tentar ligar novamente em {0} segundos ...\n", "app.navBar.settingsDropdown.optionsLabel": "Opções", @@ -181,6 +208,7 @@ "app.navBar.settingsDropdown.hotkeysLabel": "Atalhos do teclado", "app.navBar.settingsDropdown.hotkeysDesc": "Lista de atalhos de teclado disponÃveis", "app.navBar.settingsDropdown.helpLabel": "Ajuda", + "app.navBar.settingsDropdown.helpDesc": "Links para tutoriais vÃdeo (abre num novo separador)", "app.navBar.settingsDropdown.endMeetingDesc": "Termina a sessão atual", "app.navBar.settingsDropdown.endMeetingLabel": "Terminar sessão", "app.navBar.userListToggleBtnLabel": "Alternar lista de utilizadores", @@ -218,6 +246,7 @@ "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", + "app.submenu.application.currentSize": "de momento {0}", "app.submenu.application.languageLabel": "Idioma da aplicação", "app.submenu.application.ariaLanguageLabel": "Alterar idioma da aplicação", "app.submenu.application.languageOptionLabel": "Escolha o idioma", @@ -231,18 +260,6 @@ "app.submenu.video.videoQualityLabel": "Qualidade do vÃdeo", "app.submenu.video.qualityOptionLabel": "Escolha a qualidade do vÃdeo", "app.submenu.video.participantsCamLabel": "Visualizar webcams dos participantes", - "app.submenu.closedCaptions.closedCaptionsLabel": "Legendas", - "app.submenu.closedCaptions.takeOwnershipLabel": "Assumir o controle", - "app.submenu.closedCaptions.languageLabel": "Idioma", - "app.submenu.closedCaptions.localeOptionLabel": "Escolha o idioma", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Nenhum esquema de idioma ativo", - "app.submenu.closedCaptions.fontFamilyLabel": "Tipo de letra", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Escolha o tipo de letra", - "app.submenu.closedCaptions.fontSizeLabel": "Tamanho da fonte", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Escolher tamanho da letra", - "app.submenu.closedCaptions.backgroundColorLabel": "Cor de fundo", - "app.submenu.closedCaptions.fontColorLabel": "Cor da letra", - "app.submenu.closedCaptions.noLocaleSelected": "Idioma não selecionado", "app.submenu.participants.muteAllLabel": "Silenciar todos exceto o apresentador", "app.submenu.participants.lockAllLabel": "Bloquear todos os participantes", "app.submenu.participants.lockItemLabel": "Participantes {0}", @@ -264,7 +281,6 @@ "app.settings.applicationTab.label": "Aplicação", "app.settings.audioTab.label": "Ãudio", "app.settings.videoTab.label": "VÃdeo", - "app.settings.closedcaptionTab.label": "Legendas", "app.settings.usersTab.label": "Participantes", "app.settings.main.label": "Configurações", "app.settings.main.cancel.label": "Cancelar", @@ -275,6 +291,7 @@ "app.settings.dataSavingTab.webcam": "Permitir webcams", "app.settings.dataSavingTab.screenShare": "Permitir partilha de ecrã", "app.settings.dataSavingTab.description": "Para otimizar o volume de transferência de dados, ajuste o que está a ser exibido atualmente.", + "app.settings.save-notification.label": "As configurações foram guardadas", "app.switch.onLabel": "Ligar", "app.switch.offLabel": "Desligar", "app.actionsBar.actionsDropdown.actionsLabel": "Ações", @@ -291,6 +308,8 @@ "app.actionsBar.actionsDropdown.saveUserNames": "Guardar os nomes de utilizador", "app.actionsBar.actionsDropdown.createBreakoutRoom": "Criar salas de grupo", "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "Cria salas de grupo para dividir a sessão atual", + "app.actionsBar.actionsDropdown.captionsLabel": "Introduzir legenda", + "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.emojiMenu.statusTriggerLabel": "Definir estado", @@ -315,6 +334,8 @@ "app.actionsBar.emojiMenu.thumbsDownLabel": "Polegar para baixo", "app.actionsBar.emojiMenu.thumbsDownDesc": "Mudar o seu estado para polegar para baixo", "app.actionsBar.currentStatusDesc": "estado atual {0}", + "app.actionsBar.captions.start": "Iniciar visualização das legendas", + "app.actionsBar.captions.stop": "Terminar visualização das legendas", "app.audioNotification.audioFailedError1001": "Erro 1001: Ligação ao WebSocket terminada", "app.audioNotification.audioFailedError1002": "Erro 1002: Não foi possÃvel estabelecer a ligação WebSocket", "app.audioNotification.audioFailedError1003": "Erro 1003: Versão do navegador não suportada", @@ -333,7 +354,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "O microfone foi bloqueado para os participantes, vai entrar no modo ouvir apenas", "app.breakoutJoinConfirmation.title": "Entrar na sessão de grupo", "app.breakoutJoinConfirmation.message": "Pretende entrar", - "app.breakoutJoinConfirmation.confirmLabel": "Entrar", "app.breakoutJoinConfirmation.confirmDesc": "Entrar na sessão de grupo", "app.breakoutJoinConfirmation.dismissLabel": "Cancelar", "app.breakoutJoinConfirmation.dismissDesc": "Fecha e rejeita a entrada na sessão de grupo", @@ -394,8 +414,13 @@ "app.meeting.logout.ejectedFromMeeting": "Foi removido da sessão", "app.meeting.logout.validateTokenFailedEjectReason": "A validação do token de autorização falhou", "app.meeting.logout.userInactivityEjectReason": "Utilizador inativo por demasiado tempo", + "app.meeting-ended.rating.legendLabel": "Avaliação", + "app.meeting-ended.rating.starLabel": "Estrelas", "app.modal.close": "Fechar", + "app.modal.close.description": "Ignora alterações e fecha a janela modal", "app.modal.confirm": "Terminado", + "app.modal.newTab": "(abre novo separador)", + "app.modal.confirm.description": "Guarda as alterações e fecha a janela modal", "app.dropdown.close": "Fechar", "app.error.400": "400 Pedido incorreto", "app.error.401": "Não autorizado", @@ -435,7 +460,7 @@ "app.shortcut-help.closeDesc": "Fecha a modal de atalhos do teclado", "app.shortcut-help.openOptions": "Abrir Configurações", "app.shortcut-help.toggleUserList": "Alternar a lista de utilizadores", - "app.shortcut-help.toggleMute": "Silênciar/ Falar", + "app.shortcut-help.toggleMute": "Silênciar/ Ativar", "app.shortcut-help.togglePublicChat": "Alternar Chat Públioco (A lista de utilizadores deve estar aberta)", "app.shortcut-help.hidePrivateChat": "Esconder o chat privado", "app.shortcut-help.closePrivateChat": "Fechar o chat privado", @@ -444,8 +469,8 @@ "app.shortcut-help.togglePan": "Ativar a ferramenta Pan (apresentador)", "app.shortcut-help.nextSlideDesc": "Slide seguinte (apresentador)", "app.shortcut-help.previousSlideDesc": "Slide anterior (apresentador)", - "app.lock-viewers.title": "Restringir participantes", - "app.lock-viewers.description": "Estas opções permitem restringir as funcionalidades disponÃveis para os participantes. (Estas configurações não se aplicam aos moderadores.)", + "app.lock-viewers.title": "Bloquear participantes", + "app.lock-viewers.description": "Estas opções permitem bloquear as funcionalidades disponÃveis para os participantes. (Estas configurações não se aplicam aos moderadores.)", "app.lock-viewers.featuresLable": "Funcionalidade", "app.lock-viewers.lockStatusLabel": "Estado de bloqueio", "app.lock-viewers.webcamLabel": "Webcam", @@ -545,7 +570,7 @@ "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.fontSize": "Lista de tamanhos de fonte", + "app.whiteboard.toolbar.fontSize": "Lista de tamanhos de letra", "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?", @@ -583,12 +608,15 @@ "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.modalDesc": "Siga os passos seguintes para criar salas de grupo na sessão", + "app.createBreakoutRoom.roomTime": "{0} minutos", "app.externalVideo.start": "Partilhar novo vÃdeo", "app.externalVideo.title": "Partilhar vÃdeo YouTube", "app.externalVideo.input": "URL do vÃdeo YouTube", "app.externalVideo.urlInput": "Adicionar vÃdeo YouTube ", "app.externalVideo.urlError": "O URL não é um vÃdeo YouTube válido", "app.externalVideo.close": "Fechar", + "app.network.connection.effective.slow": "Estão a ocorrer problemas na ligação", + "app.network.connection.effective.slow.help": "Como resolver?", "app.externalVideo.noteLabel": "Nota: VÃdeos YouTube partilhados não aparecerão na gravação", "app.actionsBar.actionsDropdown.shareExternalVideo": "Partilhar vÃdeo YouTube", "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Terminar partilha de vÃdeo YouTube", diff --git a/bigbluebutton-html5/private/locales/pt_BR.json b/bigbluebutton-html5/private/locales/pt_BR.json index cf954e7ec084e79201ee35d888745f743d967805..29c3335dc4024152df9bcfed9bd437bcd2023465 100644 --- a/bigbluebutton-html5/private/locales/pt_BR.json +++ b/bigbluebutton-html5/private/locales/pt_BR.json @@ -16,8 +16,15 @@ "app.chat.dropdown.copy": "Copiar", "app.chat.dropdown.save": "Salvar", "app.chat.label": "Bate-papo", + "app.chat.offline": "Offline", "app.chat.emptyLogLabel": "Registro do bate-papo vazio", "app.chat.clearPublicChatMessage": "O histórico do bate-papo público foi apagado por um moderador", + "app.captions.menu.close": "Fechar", + "app.captions.menu.start": "Iniciar", + "app.captions.menu.backgroundColor": "Cor de fundo", + "app.captions.menu.cancelLabel": "Cancelar", + "app.captions.pad.tip": "Pressione Esc para focar na barra de ferramentas do editor", + "app.captions.pad.ownership": "Assumir o controle", "app.note.title": "Notas compartilhadas", "app.note.label": "Nota", "app.note.hideNoteLabel": "Ocultar nota", @@ -106,8 +113,7 @@ "app.presentation.presentationToolbar.fitToPage": "Ajustar à página", "app.presentation.presentationToolbar.goToSlide": "Slide {0}", "app.presentationUploder.title": "Apresentação", - "app.presentationUploder.message": "Como apresentador, você pode enviar qualquer documento do Office ou arquivo PDF. Para melhores resultados, recomendamos que se carregue arquivos em PDF.", - "app.presentationUploder.confirmLabel": "Enviar", + "app.presentationUploder.uploadLabel": "Enviar", "app.presentationUploder.confirmDesc": "Salvar as alterações e inicie a apresentação", "app.presentationUploder.dismissLabel": "Cancelar", "app.presentationUploder.dismissDesc": "Feche a janela e descarte as alterações", @@ -118,7 +124,6 @@ "app.presentationUploder.fileToUpload": "Carregar arquivo...", "app.presentationUploder.currentBadge": "Atual", "app.presentationUploder.genericError": "Ops, algo deu errado", - "app.presentationUploder.rejectedError": "Algum dos arquivos selecionados foi rejeitado. Por favor, verifique o tipo de arquivo.", "app.presentationUploder.upload.progress": "Carregando ({0}%)", "app.presentationUploder.upload.413": "O arquivo é muito grande, número máximo de 200 páginas foi atingido", "app.presentationUploder.conversion.conversionProcessingSlides": "Processando página {0} de {1}", @@ -161,6 +166,15 @@ "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": "Verdadeiro", + "app.poll.answer.false": "Falso", + "app.poll.answer.yes": "Sim", + "app.poll.answer.no": "Não", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Usuários", "app.poll.liveResult.responsesTitle": "Respostas", "app.polling.pollingTitle": "Opções da enquete", @@ -222,6 +236,7 @@ "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", + "app.submenu.application.currentSize": "atualmente {0}", "app.submenu.application.languageLabel": "Idioma da aplicação", "app.submenu.application.ariaLanguageLabel": "Alterar idioma da aplicação", "app.submenu.application.languageOptionLabel": "Escolha o idioma", @@ -235,18 +250,6 @@ "app.submenu.video.videoQualityLabel": "Qualidade do vÃdeo", "app.submenu.video.qualityOptionLabel": "Escolha a qualidade do vÃdeo", "app.submenu.video.participantsCamLabel": "Visualizando webcams dos participantes", - "app.submenu.closedCaptions.closedCaptionsLabel": "Legendas", - "app.submenu.closedCaptions.takeOwnershipLabel": "Assumir o controle", - "app.submenu.closedCaptions.languageLabel": "Idioma", - "app.submenu.closedCaptions.localeOptionLabel": "Escolha o idioma", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Nenhum esquema de idioma ativo", - "app.submenu.closedCaptions.fontFamilyLabel": "FamÃlia da fonte", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Selecionar famÃlia da fonte", - "app.submenu.closedCaptions.fontSizeLabel": "Tamanho da fonte", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Escolha o tamanho da fonte", - "app.submenu.closedCaptions.backgroundColorLabel": "Cor de fundo", - "app.submenu.closedCaptions.fontColorLabel": "Cor da fonte", - "app.submenu.closedCaptions.noLocaleSelected": "Idioma não selecionado", "app.submenu.participants.muteAllLabel": "Silenciar todos exceto o apresentador", "app.submenu.participants.lockAllLabel": "Restringir todos os participantes", "app.submenu.participants.lockItemLabel": "Participantes {0}", @@ -268,7 +271,6 @@ "app.settings.applicationTab.label": "Aplicação", "app.settings.audioTab.label": "Ãudio", "app.settings.videoTab.label": "VÃdeo", - "app.settings.closedcaptionTab.label": "Legendas", "app.settings.usersTab.label": "Participantes", "app.settings.main.label": "Configurações", "app.settings.main.cancel.label": "Cancelar", @@ -338,7 +340,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "O microfone foi bloqueado para participantes, você está sendo conectado como ouvinte", "app.breakoutJoinConfirmation.title": "Entrar na sala de apoio", "app.breakoutJoinConfirmation.message": "Gostaria de participar", - "app.breakoutJoinConfirmation.confirmLabel": "Entrar", "app.breakoutJoinConfirmation.confirmDesc": "Entrar na sala de apoio", "app.breakoutJoinConfirmation.dismissLabel": "Cancelar", "app.breakoutJoinConfirmation.dismissDesc": "Fechar e rejeitar o convite a sala de apoio", @@ -404,6 +405,7 @@ "app.modal.close": "Fechar", "app.modal.close.description": "Descartar alterações e fechar janela", "app.modal.confirm": "Confirmar", + "app.modal.newTab": "(abre nova aba)", "app.modal.confirm.description": "Salvar alterações e fechar janela", "app.dropdown.close": "Fechar", "app.error.400": "400 Solicitação incorreta", @@ -592,12 +594,15 @@ "app.createBreakoutRoom.freeJoin": "Permitir que os usuários escolham uma sala de apoio para entrar", "app.createBreakoutRoom.leastOneWarnBreakout": "Você precisa atribuir pelo menos um usuário a uma sala de apoio", "app.createBreakoutRoom.modalDesc": "Complete os passos abaixo para criar salas de apoio na sessão", + "app.createBreakoutRoom.roomTime": "{0} minutos", "app.externalVideo.start": "Compartilhar vÃdeo", "app.externalVideo.title": "Compartilhar um vÃdeo do YouTube", "app.externalVideo.input": "URL do vÃdeo no YouTube", "app.externalVideo.urlInput": "Adicione uma URL do YouTube", "app.externalVideo.urlError": "Esta não é uma URL válida para um vÃdeo no YouTube", "app.externalVideo.close": "Fechar", + "app.network.connection.effective.slow": "Estamos percebendo problemas de conectividade.", + "app.network.connection.effective.slow.help": "Como corrigi-lo?", "app.externalVideo.noteLabel": "Nota: VÃdeos compartilhados do YouTube não serão exibidos na gravação", "app.actionsBar.actionsDropdown.shareExternalVideo": "Compartilhar um vÃdeo do YouTube", "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Parar de compartilhar o vÃdeo do Youtube", diff --git a/bigbluebutton-html5/private/locales/ru_RU.json b/bigbluebutton-html5/private/locales/ru_RU.json index ee67a9272a4ac3d550464c47e274fdbe978bd0b8..fdfd9c8a95422bdd7e608abd2fee194ee370f357 100644 --- a/bigbluebutton-html5/private/locales/ru_RU.json +++ b/bigbluebutton-html5/private/locales/ru_RU.json @@ -16,34 +16,90 @@ "app.chat.dropdown.copy": "Копировать", "app.chat.dropdown.save": "Сохранить", "app.chat.label": "Чат", + "app.chat.offline": "Ðе в Ñети", "app.chat.emptyLogLabel": "Журнал чата пуÑÑ‚", "app.chat.clearPublicChatMessage": "Журнал общего чата был очищен модератором", + "app.captions.label": "Субтитры", + "app.captions.menu.close": "Закрыть", + "app.captions.menu.start": "Ðачать", + "app.captions.menu.select": "Выбрать доÑтупный Ñзык", + "app.captions.menu.title": "Меню Ñкрытых Ñубтитров", + "app.captions.menu.fontSize": "Размер", + "app.captions.menu.fontColor": "Цвет текÑта", + "app.captions.menu.fontFamily": "Шрифт", + "app.captions.menu.backgroundColor": "Цвет фона", + "app.captions.menu.previewLabel": "Предварительный проÑмотр", + "app.captions.menu.cancelLabel": "Отмена", + "app.captions.pad.hide": "СпрÑтать Ñкрытые Ñубтитры", + "app.captions.pad.tip": "Ðажмите Esc, чтобы ÑфокуÑировать панель инÑтрументов редактора", + "app.captions.pad.ownership": "Перехватить", "app.note.title": "Общие заметки", "app.note.label": "Заметка", "app.note.hideNoteLabel": "СпрÑтать заметку", + "app.user.activityCheck": "Проверка активноÑти пользователÑ", + "app.user.activityCheck.label": "Проверить находитÑÑ Ð»Ð¸ пользователь в конференции ({0})", + "app.user.activityCheck.check": "Проверка", + "app.note.tipLabel": "Ðажмите Esc, чтобы ÑфокуÑировать панель инÑтрументов редактора", "app.userList.usersTitle": "Пользователи", "app.userList.participantsTitle": "УчаÑтники", "app.userList.messagesTitle": "СообщениÑ", "app.userList.notesTitle": "Заметки", + "app.userList.captionsTitle": "Субтитры", "app.userList.presenter": "Ведущий", "app.userList.you": "Ð’Ñ‹", "app.userList.locked": "Заблокировано", + "app.userList.label": "СпиÑок пользователей", "app.userList.toggleCompactView.label": "Включить/выключить компактный вид", "app.userList.guest": "ГоÑÑ‚ÑŒ", + "app.userList.menuTitleContext": "ДоÑтупные опции", "app.userList.chatListItem.unreadSingular": "{0} новое Ñообщение", "app.userList.chatListItem.unreadPlural": "{0} новых Ñообщений", + "app.userList.menu.chat.label": "Ðачать приватный чат", + "app.userList.menu.clearStatus.label": "ОчиÑтить ÑтатуÑ", "app.userList.menu.removeUser.label": "ИÑключить пользователÑ", "app.userList.menu.muteUserAudio.label": "Выключить микрофон пользователÑ", "app.userList.menu.unmuteUserAudio.label": "Включить микрофон пользователÑ", "app.userList.userAriaLabel": "{0} {1} {2} Ð¡Ñ‚Ð°Ñ‚ÑƒÑ {3}", "app.userList.menu.promoteUser.label": "ПовыÑить до модератора", "app.userList.menu.demoteUser.label": "Понизить до зрителÑ", + "app.userList.menu.unlockUser.label": "Разблокировать {0}", + "app.userList.menu.lockUser.label": "Заблокировать {0}", + "app.userList.menu.directoryLookup.label": "ПоиÑк в каталоге", + "app.userList.menu.makePresenter.label": "Сделать ведущим", + "app.userList.userOptions.manageUsersLabel": "Управление пользователÑми", + "app.userList.userOptions.muteAllLabel": "Выключить микрофон вÑем пользователÑм", + "app.userList.userOptions.muteAllDesc": "Выключить микрофоны у вÑех пользователей в конференции", + "app.userList.userOptions.clearAllLabel": "Убрать вÑе иконки ÑтатуÑа", + "app.userList.userOptions.clearAllDesc": "Убрать вÑе иконки ÑтатуÑа Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹", + "app.userList.userOptions.muteAllExceptPresenterLabel": "Выключить микрофоны у вÑех кроме ведущего", + "app.userList.userOptions.muteAllExceptPresenterDesc": "Выключить микрофоны у вÑех кроме ведущего", + "app.userList.userOptions.unmuteAllDesc": "СнÑÑ‚ÑŒ блокировку микрофонов в конференции", + "app.userList.userOptions.lockViewersDesc": "Заблокировать определенные функции Ð´Ð»Ñ ÑƒÑ‡Ð°Ñтников конференции", + "app.userList.userOptions.disableCam": "Ð’Ñб-камеры зрителей отключены", + "app.userList.userOptions.disableMic": "Микрофоны зрителей отключены", + "app.userList.userOptions.disablePrivChat": "Приватный чат отключен", + "app.userList.userOptions.disablePubChat": "Общий чат отключен", + "app.userList.userOptions.disableNote": "Общие заметки теперь заблокированы", + "app.userList.userOptions.webcamsOnlyForModerator": "Только модераторы могут видеть веб-камеры зрителей (из-за наÑтроек блокировки)", + "app.userList.userOptions.enableCam": "Ð’Ñб-камеры зрителей включены", + "app.userList.userOptions.enableMic": "Микрофоны зрителей включены", + "app.userList.userOptions.enablePrivChat": "Приватный чат включен", + "app.userList.userOptions.enablePubChat": "Общий чат включен", + "app.userList.userOptions.enableNote": "Общие заметки теперь включены", + "app.userList.userOptions.enableOnlyModeratorWebcam": "Теперь вы можете включить вашу вÑб-камеру, и вÑе Ð²Ð°Ñ ÑƒÐ²Ð¸Ð´ÑÑ‚", "app.media.label": "Медиа", "app.media.screenshare.start": "ДемонÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñкрана началаÑÑŒ", "app.media.screenshare.end": "ДемонÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñкрана закончилаÑÑŒ", "app.media.screenshare.safariNotSupported": "ДемонÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñкрана на данный момент не поддерживаетÑÑ Safari. ПожалуйÑта, иÑпользуйте Firefox или Google Chrome.", "app.meeting.ended": "Ð¡ÐµÐ°Ð½Ñ Ð¾ÐºÐ¾Ð½Ñ‡ÐµÐ½", + "app.meeting.meetingTimeRemaining": "До Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸ оÑталоÑÑŒ: {0}", + "app.meeting.meetingTimeHasEnded": "Ð’Ñ€ÐµÐ¼Ñ Ð²Ñ‹ÑˆÐ»Ð¾. ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ Ñкоро закроетÑÑ.", "app.meeting.endedMessage": "Ð’Ñ‹ будете перенаправлены назад на главный Ñкран", + "app.meeting.alertMeetingEndsUnderOneMinute": "ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ Ð·Ð°ÐºÑ€Ð¾ÐµÑ‚ÑÑ Ñ‡ÐµÑ€ÐµÐ· 1 минуту", + "app.presentation.hide": "Скрыть презентацию", + "app.presentation.notificationLabel": "Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ", + "app.presentation.emptySlideContent": "Текущий Ñлайд не Ñодержит никакой информации", + "app.presentation.presentationToolbar.selectLabel": "Выбрать Ñлайд", "app.presentation.presentationToolbar.prevSlideLabel": "Предыдущий Ñлайд", "app.presentation.presentationToolbar.prevSlideDesc": "Переключить презентацию на предыдущий Ñлайд", "app.presentation.presentationToolbar.nextSlideLabel": "Следующий Ñлайд", @@ -56,26 +112,90 @@ "app.presentation.presentationToolbar.fitScreenDesc": "УмеÑтить Ñлайд целиком", "app.presentation.presentationToolbar.zoomLabel": "МаÑштаб", "app.presentation.presentationToolbar.zoomDesc": "Изменить маÑштаб презетации", + "app.presentation.presentationToolbar.zoomInLabel": "Увеличить", + "app.presentation.presentationToolbar.zoomInDesc": "Увеличить презентацию", + "app.presentation.presentationToolbar.zoomOutLabel": "Уменьшить", + "app.presentation.presentationToolbar.zoomOutDesc": "Уменьшить презентацию", + "app.presentation.presentationToolbar.zoomReset": "СброÑить увеличение или уменьшение", + "app.presentation.presentationToolbar.zoomIndicator": "Текущий процент ÑƒÐ²ÐµÐ»Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ уменьшениÑ", "app.presentation.presentationToolbar.fitToWidth": "Подогнать по ширине", + "app.presentation.presentationToolbar.fitToPage": "Подогнать по размеру Ñтраницы", "app.presentation.presentationToolbar.goToSlide": "Слайд {0}", "app.presentationUploder.title": "ПрезентациÑ", + "app.presentationUploder.message": "Как ведущий, вы можете загрузить любой офиÑный документ или файл PDF. Ð”Ð»Ñ Ð»ÑƒÑ‡ÑˆÐµÐ³Ð¾ результата, мы рекомендуем загружать PDF.\nПожалуйÑта убедитеÑÑŒ, что Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð° Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ круглого флажка Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¹ Ñтороны.", + "app.presentationUploder.uploadLabel": "Загрузить", + "app.presentationUploder.confirmLabel": "Подтвердить", "app.presentationUploder.confirmDesc": "Сохранить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ начать презентацию", "app.presentationUploder.dismissLabel": "Отменить", "app.presentationUploder.dismissDesc": "Закрыть окно Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð¸ отменить изменениÑ", "app.presentationUploder.dropzoneLabel": "Перетащите Ñюда файлы, чтобы загрузить их", + "app.presentationUploder.dropzoneImagesLabel": "Перетащите Ñюда Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ¸", "app.presentationUploder.browseFilesLabel": "или выберите файл", + "app.presentationUploder.browseImagesLabel": "или выберите/захватите картинку", + "app.presentationUploder.fileToUpload": "чтобы ее загрузить", "app.presentationUploder.currentBadge": "Текущий", "app.presentationUploder.genericError": "Ой, что-то пошло не так", + "app.presentationUploder.rejectedError": "Загрузка выбранных файлов была отклонена. ПожалуйÑта проверьте тип файла (файлов)", "app.presentationUploder.upload.progress": "Загрузка ({0}%)", + "app.presentationUploder.upload.413": "Файл Ñлишком большой, превышен лимит в 200 Ñтраниц", "app.presentationUploder.conversion.conversionProcessingSlides": "Обработка Ñтраницы {0} из {1}", + "app.presentationUploder.conversion.genericConversionStatus": "Файл конвертируетÑÑ...", + "app.presentationUploder.conversion.generatingThumbnail": "СоздаютÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð²Ð°Ñ€Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð³Ð¾ проÑмотра...", + "app.presentationUploder.conversion.generatedSlides": "СоздаютÑÑ Ñлайды...", + "app.presentationUploder.conversion.generatingSvg": "СоздаютÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ SVG...", + "app.presentationUploder.conversion.pageCountExceeded": "Ой, доÑтигнут лимит количеÑтва Ñтраниц (200)", + "app.presentationUploder.conversion.timeout": "Ой, ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ð¸Ñ Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ‚ Ñлишком много времени...", + "app.presentationUploder.isDownloadableLabel": "Ðе разрешать Ñкачивание презентации", + "app.presentationUploder.isNotDownloadableLabel": "Разрешить Ñкачивание презентации", + "app.presentationUploder.removePresentationLabel": "Удалить презентацию", + "app.presentationUploder.setAsCurrentPresentation": "Сделать презентацию текущей", + "app.presentationUploder.tableHeading.filename": "Ð˜Ð¼Ñ Ñ„Ð°Ð¹Ð»Ð°", "app.presentationUploder.tableHeading.options": "Опции", + "app.presentationUploder.tableHeading.status": "СтатуÑ", + "app.poll.pollPaneTitle": "ГолоÑование", + "app.poll.quickPollTitle": "БыÑтрое голоÑование", + "app.poll.hidePollDesc": "Скрыть панель меню голоÑованиÑ", + "app.poll.customPollInstruction": "Чтобы Ñоздать Ñвой вариант голоÑованиÑ, нажмите на кнопку ниже и введите Ñвои параметры", + "app.poll.quickPollInstruction": "Выберите опцию ниже, чтобы начать голоÑование", + "app.poll.customPollLabel": "Свой вариант голоÑованиÑ", + "app.poll.startCustomLabel": "Ðачать Ñвой вариант голоÑованиÑ", + "app.poll.activePollInstruction": "Чтобы пользователи могли проголоÑовать, оÑтавьте Ñто окно открытым. ЕÑли вы нажмете на \"Опубликовать результаты голоÑованиÑ\" или вернетеÑÑŒ назад, то голоÑование завершитÑÑ.", + "app.poll.publishLabel": "Опубликовать результаты голоÑованиÑ", + "app.poll.backLabel": "Ðазад к вариантам голоÑованиÑ", "app.poll.closeLabel": "Закрыть", + "app.poll.waitingLabel": "Ожидание ответов ({0} / {1})", + "app.poll.ariaInputCount": "ПользовательÑкий параметр опроÑа {0} из {1}", + "app.poll.customPlaceholder": "Добавить опцию", + "app.poll.noPresentationSelected": "ÐŸÑ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð½Ðµ выбрана! ПожалуйÑта, выберите претензацию.", + "app.poll.clickHereToSelect": "Ðажмите здеÑÑŒ, чтобы выбрать", + "app.poll.t": "Правда", + "app.poll.f": "Ðеправда", + "app.poll.tf": "Правда / Ðеправда", "app.poll.y": "Да", "app.poll.n": "Ðет", + "app.poll.yn": "Да / Ðет", + "app.poll.a2": "A / B", + "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.yes": "Да", + "app.poll.answer.no": "Ðет", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "Пользователи", + "app.poll.liveResult.responsesTitle": "Ответ", + "app.polling.pollingTitle": "Варианты голоÑованиÑ", "app.polling.pollAnswerLabel": "Результат опроÑа {0}", "app.polling.pollAnswerDesc": "Выберите Ñтот вариант, чтобы проголоÑовать за {0}", "app.failedMessage": "Извините, проблемы Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸ÐµÐ¼ к Ñерверу.", + "app.downloadPresentationButton.label": "Скачать оригинальную презентацию", + "app.connectingMessage": "Подключение...", + "app.waitingMessage": "Соединение потерÑно. Попытка Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‡ÐµÑ€ÐµÐ· {0} Ñекунд...", "app.navBar.settingsDropdown.optionsLabel": "Опции", "app.navBar.settingsDropdown.fullscreenLabel": "Перейти в полноÑкранный режим", "app.navBar.settingsDropdown.settingsLabel": "Открыть наÑтройки", @@ -87,32 +207,49 @@ "app.navBar.settingsDropdown.aboutDesc": "Показать информацию о клиенте", "app.navBar.settingsDropdown.leaveSessionDesc": "Покинуть конференцию", "app.navBar.settingsDropdown.exitFullscreenDesc": "Выйти из полноÑкранного режима", + "app.navBar.settingsDropdown.hotkeysLabel": "Клавиши быÑтрого доÑтупа", + "app.navBar.settingsDropdown.hotkeysDesc": "СпиÑок доÑтупных клавиш быÑтрого доÑтупа", "app.navBar.settingsDropdown.helpLabel": "Помощь", + "app.navBar.settingsDropdown.endMeetingDesc": "Прервать текущую конференцию", + "app.navBar.settingsDropdown.endMeetingLabel": "Закончить конференцию", "app.navBar.userListToggleBtnLabel": "Включить/выключить ÑпиÑок пользователей", + "app.navBar.toggleUserList.ariaLabel": "Включить/выключить Пользователей и СообщениÑ", "app.navBar.toggleUserList.newMessages": "Ñ ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸ÐµÐ¼ о новых ÑообщениÑÑ…", "app.navBar.recording": "Ðтот ÑÐµÐ°Ð½Ñ Ð·Ð°Ð¿Ð¸ÑываетÑÑ", "app.navBar.recording.on": "ЗапиÑываетÑÑ", "app.navBar.recording.off": "Ðе запиÑываетÑÑ", "app.leaveConfirmation.confirmLabel": "Выйти", "app.leaveConfirmation.confirmDesc": "Выйти из конференции", + "app.endMeeting.title": "Закончить конференцию", + "app.endMeeting.description": "Ð’Ñ‹ уверены, что хотите закончить Ñтот ÑеанÑ?", "app.endMeeting.yesLabel": "Да", "app.endMeeting.noLabel": "Ðет", "app.about.title": "О программе", + "app.about.version": "Сборка клиента:", "app.about.copyright": "ÐвторÑкие права:", "app.about.confirmLabel": "ОК", "app.about.confirmDesc": "ОК", "app.about.dismissLabel": "Отмена", "app.about.dismissDesc": "Закрыть информацию о клиента", + "app.actionsBar.changeStatusLabel": "Изменить ÑтатуÑ", "app.actionsBar.muteLabel": "Выключить микрофон", "app.actionsBar.unmuteLabel": "Включить микрофон", + "app.actionsBar.camOffLabel": "Выключить камеру", "app.actionsBar.raiseLabel": "ПоднÑÑ‚ÑŒ", + "app.actionsBar.label": "Панель дейÑтвий", + "app.actionsBar.actionsDropdown.restorePresentationLabel": "ВоÑÑтановить презентацию", + "app.actionsBar.actionsDropdown.restorePresentationDesc": "Кнопка Ð´Ð»Ñ Ð²Ð¾ÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ·ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ð¸ поÑле ее закрытиÑ", + "app.screenshare.screenShareLabel" : "Показ Ñкрана", "app.submenu.application.applicationSectionTitle": "Приложение", + "app.submenu.application.animationsLabel": "ÐнимациÑ", "app.submenu.application.audioAlertLabel": "Звуковые Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ð°", "app.submenu.application.pushAlertLabel": "Ð’Ñплывающие Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñ‡Ð°Ñ‚Ð°", "app.submenu.application.fontSizeControlLabel": "Размер шрифта", "app.submenu.application.increaseFontBtnLabel": "Увеличить шрифт приложениÑ", "app.submenu.application.decreaseFontBtnLabel": "Уменьшить шрифт приложениÑ", + "app.submenu.application.currentSize": "текущее {0}", "app.submenu.application.languageLabel": "Язык приложениÑ", + "app.submenu.application.ariaLanguageLabel": "Изменить Ñзык приложениÑ", "app.submenu.application.languageOptionLabel": "Выберите Ñзык", "app.submenu.application.noLocaleOptionLabel": "Ðет доÑтупных переводов", "app.submenu.audio.micSourceLabel": "ИÑточник микрофона", @@ -121,17 +258,17 @@ "app.submenu.video.title": "Видео", "app.submenu.video.videoSourceLabel": "Видео-иÑточник", "app.submenu.video.videoOptionLabel": "Выбрать видео-иÑточник", + "app.submenu.video.videoQualityLabel": "КачеÑтво видео", "app.submenu.video.qualityOptionLabel": "Выберите качеÑтво видео", "app.submenu.video.participantsCamLabel": "ПроÑмотр веб-камер учаÑтников", - "app.submenu.closedCaptions.takeOwnershipLabel": "Перехватить", - "app.submenu.closedCaptions.languageLabel": "Язык", - "app.submenu.closedCaptions.localeOptionLabel": "Выберите Ñзык", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Ðет доÑтупных переводов", - "app.submenu.closedCaptions.fontFamilyLabel": "Шрифт", - "app.submenu.closedCaptions.fontSizeLabel": "Размер шрифта", - "app.submenu.closedCaptions.backgroundColorLabel": "Цвет фона", - "app.submenu.closedCaptions.fontColorLabel": "Цвет шрифта", "app.submenu.participants.muteAllLabel": "Выключить микрофоны у вÑех кроме ведущего", + "app.submenu.participants.lockAllLabel": "Заблокировать вÑех зрителей", + "app.submenu.participants.lockItemLabel": "Зрители {0}", + "app.submenu.participants.lockMicDesc": "Отключить микрофон у вÑех заблокированных зрителей", + "app.submenu.participants.lockCamDesc": "Отключить веб-камеру у вÑех заблокированных зрителей", + "app.submenu.participants.lockPublicChatDesc": "Отключить общий чат Ð´Ð»Ñ Ð²Ñех заблокированных зрителей", + "app.submenu.participants.lockPrivateChatDesc": "Отключить приватный чат Ð´Ð»Ñ Ð²Ñех заблокированных зрителей", + "app.submenu.participants.lockLayoutDesc": "Заблокировать раÑположение окон Ð´Ð»Ñ Ð²Ñех заблокированных зрителей", "app.submenu.participants.lockMicAriaLabel": "Заблокировать микрофон", "app.submenu.participants.lockCamAriaLabel": "Заблокировать веб-камеру", "app.submenu.participants.lockPublicChatAriaLabel": "Заблокировать общий чат", @@ -139,6 +276,8 @@ "app.submenu.participants.lockLayoutAriaLabel": "Заблокировать раÑположение окон", "app.submenu.participants.lockMicLabel": "Микрофон", "app.submenu.participants.lockCamLabel": "Веб-камера", + "app.submenu.participants.lockPublicChatLabel": "Общий чат", + "app.submenu.participants.lockPrivateChatLabel": "Приватный чат", "app.submenu.participants.lockLayoutLabel": "РаÑположение окон", "app.settings.applicationTab.label": "Приложение", "app.settings.audioTab.label": "Ðудио", @@ -149,7 +288,11 @@ "app.settings.main.cancel.label.description": "СбраÑывает Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ закрывает меню наÑтроек", "app.settings.main.save.label": "Сохранить", "app.settings.main.save.label.description": "СохранÑет Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸ закрывает меню наÑтроек", + "app.settings.dataSavingTab.label": "Сохранение данных", + "app.settings.dataSavingTab.webcam": "Включить веб камеры", + "app.settings.dataSavingTab.screenShare": "Включить демонÑтрацию рабочего Ñтола", "app.settings.dataSavingTab.description": "Чтобы Ñохранить уÑтойчивую ÑкороÑÑ‚ÑŒ ÑоединениÑ, выберите, что будет отображатьÑÑ", + "app.settings.save-notification.label": "ÐаÑтройки Ñохранены", "app.switch.onLabel": "ВКЛ", "app.switch.offLabel": "ВЫКЛ", "app.actionsBar.actionsDropdown.actionsLabel": "ДейÑтвиÑ", @@ -161,6 +304,12 @@ "app.actionsBar.actionsDropdown.initPollDesc": "Ðачать опроÑ", "app.actionsBar.actionsDropdown.desktopShareDesc": "ДемонÑтрировать ваш Ñкран другим учаÑтникам", "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "ОÑтановить демонÑтрацию Ñкрана ", + "app.actionsBar.actionsDropdown.pollBtnLabel": "Ðачать голоÑование", + "app.actionsBar.actionsDropdown.pollBtnDesc": "Переключить панель опроÑа", + "app.actionsBar.actionsDropdown.saveUserNames": "Сохранить имена пользователей", + "app.actionsBar.actionsDropdown.createBreakoutRoom": "Создать комнаты Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ работы", + "app.actionsBar.actionsDropdown.takePresenterDesc": "Ðазначить ÑÐµÐ±Ñ Ð½Ð¾Ð²Ñ‹Ð¼ ведущим", + "app.actionsBar.emojiMenu.statusTriggerLabel": "УÑтановить ÑтатуÑ", "app.actionsBar.emojiMenu.awayLabel": "Отошел", "app.actionsBar.emojiMenu.awayDesc": "ИзменÑет ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° \\\"Отошел\\\"", "app.actionsBar.emojiMenu.raiseHandLabel": "ПоднÑÑ‚ÑŒ руку", @@ -182,9 +331,12 @@ "app.actionsBar.emojiMenu.thumbsDownLabel": "Ðе нравитÑÑ", "app.actionsBar.emojiMenu.thumbsDownDesc": "ИзменÑет ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° \\\"Ðе нравитÑÑ\\\"", "app.actionsBar.currentStatusDesc": "текущий ÑÑ‚Ð°Ñ‚ÑƒÑ {0}", + "app.actionsBar.captions.start": "Ðачать проÑмотр Ñкрытых Ñубтитров", + "app.actionsBar.captions.stop": "Прекратить проÑмотр Ñкрытых Ñубтитров", "app.audioNotification.audioFailedError1001": "Ошибка 1001: WebSocket отключен", "app.audioNotification.audioFailedError1002": "Ошибка 1002: Ðе удалоÑÑŒ уÑтановить Ñоединение WebSocket", "app.audioNotification.audioFailedError1003": "Ошибка 1003: ВерÑÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° не поддерживаетÑÑ", + "app.audioNotification.audioFailedError1004": "Ошибка 1004: Сбой вызова (reason={0})", "app.audioNotification.audioFailedError1005": "Ошибка 1005: Вызов внезапно прервалÑÑ", "app.audioNotification.audioFailedError1006": "Ошибка 1006: Ð’Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° иÑтекло", "app.audioNotification.audioFailedError1007": "Ошибка 1007: СоглаÑование ICE не ÑоÑтоÑлоÑÑŒ", @@ -192,22 +344,30 @@ "app.audioNotification.audioFailedError1009": "Ошибка 1009: не удалоÑÑŒ получить информацию STUN/TURN Ñервера", "app.audioNotification.audioFailedError1010": "Ошибка 1010: Ð’Ñ€ÐµÐ¼Ñ ÑоглаÑÐ¾Ð²Ð°Ð½Ð¸Ñ ICE иÑтекло ", "app.audioNotification.audioFailedError1011": "Ошибка 1011: Превышено Ð²Ñ€ÐµÐ¼Ñ Ñбора ICE", + "app.audioNotification.audioFailedError1012": "Ошибка 1012: Ñоединение ICE закрыто", "app.audioNotification.audioFailedMessage": "Ðе удалоÑÑŒ уÑтановить аудио-Ñоединение", + "app.audioNotification.mediaFailedMessage": "Ошибка getUserMicMedia, разрешены только безопаÑные иÑточники", "app.audioNotification.closeLabel": "Закрыть", + "app.audioNotificaion.reconnectingAsListenOnly": "Микрофон был заблокирован Ð´Ð»Ñ Ð·Ñ€Ð¸Ñ‚ÐµÐ»ÐµÐ¹, вы приÑоединилиÑÑŒ в режиме проÑлушиваниÑ", + "app.breakoutJoinConfirmation.title": "ПриÑоединитьÑÑ Ðº комнате групповой работы", "app.breakoutJoinConfirmation.message": "Ð’Ñ‹ хотите приÑоединитьÑÑ Ðº ", - "app.breakoutJoinConfirmation.confirmLabel": "ПриÑоединитьÑÑ", + "app.breakoutJoinConfirmation.confirmDesc": "ПриÑоединÑет Ð²Ð°Ñ Ð² комнату Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¾Ð²Ð¾Ð¹ работы", "app.breakoutJoinConfirmation.dismissLabel": "Отмена", + "app.calculatingBreakoutTimeRemaining": "ПодÑчёт оÑтавшегоÑÑ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸...", "app.audioModal.microphoneLabel": "Микрофон", "app.audioModal.listenOnlyLabel": "Только Ñлушать", "app.audioModal.audioChoiceLabel": "Как вы хотите войти в аудио-конференцию?", + "app.audioModal.iOSBrowser": "Ðудио/Видео не поддерживаетÑÑ", "app.audioModal.iOSErrorDescription": "Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð°ÑƒÐ´Ð¸Ð¾ и видео не поддерживаютÑÑ Ð² Chrome Ð´Ð»Ñ iOS.", "app.audioModal.iOSErrorRecommendation": "Мы рекомендуем иÑпользовать Safari Ð´Ð»Ñ iOS.", "app.audioModal.audioChoiceDesc": "Выберите, как учаÑтвовать в аудио-конференции", + "app.audioModal.unsupportedBrowserLabel": "Похоже, вы иÑпользуете браузер, который не полноÑтью подедрживаетÑÑ. ПожалуйÑта, иÑпользуйте {0} или {1} Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ поддержки.", "app.audioModal.closeLabel": "Закрыть", "app.audioModal.yes": "Да", "app.audioModal.no": "Ðет", "app.audioModal.yes.arialabel" : "Звучит Ñхо", "app.audioModal.no.arialabel" : "Ðхо не звучит", + "app.audioModal.echoTestTitle": "Ðто теÑтирование звука, его Ñлышите только вы. Скажите неÑколько Ñлов в микрофон. Слышите ли вы ÑебÑ?", "app.audioModal.settingsTitle": "Изменить наÑтройки звука", "app.audioModal.helpTitle": "Возникли проблемы Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ аудио-уÑтройÑтвами", "app.audioModal.connecting": "Подключение", @@ -241,19 +401,28 @@ "app.error.500": "УпÑ, что-то пошло не так", "app.error.leaveLabel": "Зайдите Ñнова", "app.guest.waiting": "Ожидание Ð¾Ð´Ð¾Ð±Ñ€ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð°", + "app.user-info.title": "ПоиÑк в каталоге", "app.toast.chat.public": "Ðовое Ñообщение в публичном чате", "app.toast.chat.private": "Ðовое Ñообщение в приватном чате", "app.toast.chat.system": "СиÑтема", "app.notification.recordingStart": "Ðтот ÑÐµÐ°Ð½Ñ Ð·Ð°Ð¿Ð¸ÑываетÑÑ", "app.notification.recordingStop": "Ðтот ÑÐµÐ°Ð½Ñ Ð±Ð¾Ð»ÑŒÑˆÐµ не будет запиÑан", + "app.shortcut-help.title": "Клавиши быÑтрого доÑтупа", "app.shortcut-help.comboLabel": "Комбо", "app.shortcut-help.functionLabel": "ФункциÑ", "app.shortcut-help.closeLabel": "Закрыть", "app.shortcut-help.openOptions": "Открывает параметры", "app.shortcut-help.toggleUserList": "Включает ÑпиÑок пользователей", "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.lock-viewers.webcamLabel": "Веб-камера", "app.lock-viewers.microphoneLable": "Микрофон", + "app.lock-viewers.PublicChatLabel": "Общий чат", + "app.lock-viewers.PrivateChatLable": "Приватный чат", "app.lock-viewers.Layout": "РаÑположение окон", "app.videoPreview.cancelLabel": "Отмена", "app.videoPreview.closeLabel": "Закрыть", diff --git a/bigbluebutton-html5/private/locales/tr_TR.json b/bigbluebutton-html5/private/locales/tr_TR.json index 399b86787be523a3ab6e62e5572e92007a65e04c..341e94020589948be514ba600eb7e3564c01c431 100644 --- a/bigbluebutton-html5/private/locales/tr_TR.json +++ b/bigbluebutton-html5/private/locales/tr_TR.json @@ -17,6 +17,11 @@ "app.chat.label": "Sohbet", "app.chat.emptyLogLabel": "Sohbet sistem kayıtları boÅŸ", "app.chat.clearPublicChatMessage": "Genel sohbet geçmiÅŸi moderatör tarafından temizlendi", + "app.captions.menu.close": "Kapat", + "app.captions.menu.start": "BaÅŸlat", + "app.captions.menu.backgroundColor": "Arkalan rengi", + "app.captions.menu.cancelLabel": "Vazgeç", + "app.captions.pad.ownership": "Sahiplik al", "app.userList.usersTitle": "Kullanıcılar", "app.userList.participantsTitle": "Katılımcılar", "app.userList.messagesTitle": "Mesajlar", @@ -66,6 +71,8 @@ "app.poll.closeLabel": "Kapat", "app.poll.y": "Evet", "app.poll.n": "Hayır", + "app.poll.answer.yes": "Evet", + "app.poll.answer.no": "Hayır", "app.poll.liveResult.usersTitle": "Kullanıcılar", "app.polling.pollAnswerLabel": "{0} Oylamasını cevapla", "app.polling.pollAnswerDesc": "{0} Oylaması için bu seçeneÄŸi seç", @@ -117,14 +124,6 @@ "app.submenu.video.videoOptionLabel": "Görüntü kaynağını seç", "app.submenu.video.qualityOptionLabel": "Video kalitesini seç", "app.submenu.video.participantsCamLabel": "Katılımcıların web kameraları görüntüleniyor", - "app.submenu.closedCaptions.takeOwnershipLabel": "Sahiplik al", - "app.submenu.closedCaptions.languageLabel": "Dil", - "app.submenu.closedCaptions.localeOptionLabel": "Dil seçin", - "app.submenu.closedCaptions.noLocaleOptionLabel": "Aktif yerel ayar bulunamadı", - "app.submenu.closedCaptions.fontFamilyLabel": "Yazı tipi", - "app.submenu.closedCaptions.fontSizeLabel": "Yazı büyüklüğü", - "app.submenu.closedCaptions.backgroundColorLabel": "Arkalan rengi", - "app.submenu.closedCaptions.fontColorLabel": "Yazı rengi", "app.submenu.participants.muteAllLabel": "Sunucu hariç tümünü sustur", "app.submenu.participants.lockMicAriaLabel": "Mikrofon kilidi", "app.submenu.participants.lockCamAriaLabel": "Web kamera kilidi", @@ -189,7 +188,6 @@ "app.audioNotification.audioFailedMessage": "Ses baÄŸlantınız saÄŸlanamadı", "app.audioNotification.closeLabel": "Kapat", "app.breakoutJoinConfirmation.message": "Katılmak istiyor musunuz?", - "app.breakoutJoinConfirmation.confirmLabel": "Katıl", "app.breakoutJoinConfirmation.dismissLabel": "Vazgeç", "app.audioModal.microphoneLabel": "Mikrofon", "app.audioModal.audioChoiceLabel": "Sesli katılımınızı nasıl yapmak istersiniz?", diff --git a/bigbluebutton-html5/private/locales/uk_UA.json b/bigbluebutton-html5/private/locales/uk_UA.json index 533610ef45e2688504d48efd8c474fe5759ad57d..5362e87eae5912f4ed020e26e58f389e8b4f8a8c 100644 --- a/bigbluebutton-html5/private/locales/uk_UA.json +++ b/bigbluebutton-html5/private/locales/uk_UA.json @@ -16,11 +16,28 @@ "app.chat.dropdown.copy": "Скопіювати", "app.chat.dropdown.save": "Зберегти", "app.chat.label": "Чат", + "app.chat.offline": "Ðе в мережі", "app.chat.emptyLogLabel": "Журнал чату порожній", "app.chat.clearPublicChatMessage": "ІÑÑ‚Ð¾Ñ€Ñ–Ñ Ð¿ÑƒÐ±Ð»Ñ–Ñ‡Ð½Ð¾Ð³Ð¾ чату була очищена модератором", + "app.captions.menu.close": "Закрити", + "app.captions.menu.start": "Почати", + "app.captions.menu.select": "Виберіть доÑтупну мову", + "app.captions.menu.fontSize": "Розмір", + "app.captions.menu.fontColor": "Колір текÑту", + "app.captions.menu.fontFamily": "Шрифт", + "app.captions.menu.backgroundColor": "Колір фону", + "app.captions.menu.previewLabel": "Попередній переглÑд", + "app.captions.menu.cancelLabel": "Відмінити", + "app.captions.pad.hide": "Приховати Ñубтитри", + "app.captions.pad.tip": "ÐатиÑніть Esc, щоб ÑфокуÑувати панель інÑтрументів редактора", + "app.captions.pad.ownership": "Перехопити", "app.note.title": "Спільні примітки", "app.note.label": "Примітки", "app.note.hideNoteLabel": "Сховати примітки", + "app.user.activityCheck": "Перевірка активноÑÑ‚Ñ– кориÑтувача", + "app.user.activityCheck.label": "Перевірте, чи знаходитьÑÑ ÐºÐ¾Ñ€Ð¸Ñтувач у зуÑÑ‚Ñ€iчi ({0})", + "app.user.activityCheck.check": "Перевірка", + "app.note.tipLabel": "ÐатиÑніть Esc, щоб ÑфокуÑувати панель інÑтрументів редактора", "app.userList.usersTitle": "КориÑтувачі", "app.userList.participantsTitle": "УчаÑники", "app.userList.messagesTitle": "ПовідомленнÑ", @@ -34,6 +51,7 @@ "app.userList.menuTitleContext": "ДоÑтупні опції", "app.userList.chatListItem.unreadSingular": "{0} нове повідомленнÑ", "app.userList.chatListItem.unreadPlural": "{0} нових повідомлень", + "app.userList.menu.chat.label": "Розпочати приватний чат", "app.userList.menu.clearStatus.label": "ОчиÑтити ÑтатуÑ", "app.userList.menu.removeUser.label": "Виключити кориÑтувача", "app.userList.menu.muteUserAudio.label": "Вимкнути мікрофон кориÑтувача", @@ -55,6 +73,18 @@ "app.userList.userOptions.unmuteAllDesc": "СкаÑовує Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¼Ñ–ÐºÑ€Ð¾Ñ„Ð¾Ð½Ñƒ", "app.userList.userOptions.lockViewersLabel": "ÐžÐ±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾Ñтей кориÑтувачів", "app.userList.userOptions.lockViewersDesc": "Обмежити веб-камеру, мікрофон, можливіÑÑ‚ÑŒ пиÑати в чат...", + "app.userList.userOptions.disableCam": "Веб-камери глÑдачів відключені", + "app.userList.userOptions.disableMic": "Мікрофони глÑдачів відключені", + "app.userList.userOptions.disablePrivChat": "Приватний чат вимкнено", + "app.userList.userOptions.disablePubChat": "ЗагальнодоÑтупний чат вимкнено", + "app.userList.userOptions.disableNote": "Спільні нотатки тепер заблоковані", + "app.userList.userOptions.webcamsOnlyForModerator": "Веб-камери глÑдачів можуть бачити лише модератори (через Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ)", + "app.userList.userOptions.enableCam": "Веб-камери глÑдачів увімкнено", + "app.userList.userOptions.enableMic": "Мікрофони глÑдачів увімкнено", + "app.userList.userOptions.enablePrivChat": "Приватний чат увімкнено", + "app.userList.userOptions.enablePubChat": "ЗагальнодоÑтупний чат увімкнено", + "app.userList.userOptions.enableNote": "Спільні нотатки тепер увімкнено", + "app.userList.userOptions.enableOnlyModeratorWebcam": "Тепер можна активувати веб-камеру, вÑÑ– бачитимуть ваÑ", "app.media.label": "Медіа", "app.media.screenshare.start": "ДемонÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ ÐµÐºÑ€Ð°Ð½Ñƒ розпочалаÑÑ", "app.media.screenshare.end": "ДемонÑтрацію екрану закінчено", @@ -65,10 +95,13 @@ "app.meeting.endedMessage": "Ви будете перенаправлені на головний екран", "app.meeting.alertMeetingEndsUnderOneMinute": "ЗуÑтріч закінчуєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· хвилину.", "app.meeting.alertBreakoutEndsUnderOneMinute": "ЗуÑтріч закінчуєтьÑÑ Ñ‡ÐµÑ€ÐµÐ· хвилину.", + "app.presentation.hide": "Приховати презентацію", + "app.presentation.notificationLabel": "Поточна презентаціÑ", "app.presentation.slideContent": "ВміÑÑ‚ Ñлайду", "app.presentation.startSlideContent": "Початок вміÑту Ñлайду", "app.presentation.endSlideContent": "Кінець вміÑту Ñлайду", "app.presentation.emptySlideContent": "Даний Ñлайд порожній", + "app.presentation.presentationToolbar.selectLabel": "Вибрати Ñлайд", "app.presentation.presentationToolbar.prevSlideLabel": "Попередній Ñлайд", "app.presentation.presentationToolbar.prevSlideDesc": "Перемкнути презентацію на попередній Ñлайд", "app.presentation.presentationToolbar.nextSlideLabel": "ÐаÑтупний Ñлайд", @@ -90,6 +123,9 @@ "app.presentation.presentationToolbar.fitToWidth": "Підігнати по ширині", "app.presentation.presentationToolbar.goToSlide": "Слайд {0}", "app.presentationUploder.title": "ПрезентаціÑ", + "app.presentationUploder.message": "Як ведучий ви маєте можливіÑÑ‚ÑŒ завантажувати будь-Ñкий офіÑний документ або PDF-файл. Ð”Ð»Ñ Ð½Ð°Ð¹ÐºÑ€Ð°Ñ‰Ð¸Ñ… результатів ми рекомендуємо PDF-файл. ПереконайтеÑÑ, що вибрано презентацію за допомогою Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ Ð¿Ñ€Ð°Ð²Ð¾Ñ€ÑƒÑ‡.", + "app.presentationUploder.uploadLabel": "Завантажити", + "app.presentationUploder.confirmLabel": "Підтвердити", "app.presentationUploder.confirmDesc": "Зберегти зміни та розпочати презентацію", "app.presentationUploder.dismissLabel": "Відмінити", "app.presentationUploder.dismissDesc": "Закрити вікно Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ‚Ð° ÑкаÑувати зміни", @@ -100,20 +136,25 @@ "app.presentationUploder.fileToUpload": "Буде завантажено ...", "app.presentationUploder.currentBadge": "Поточний", "app.presentationUploder.genericError": "Ой, щоÑÑŒ пішло не так", - "app.presentationUploder.rejectedError": "ДеÑкі з обраних файлів було відкинуто. Будь лаÑка, перевірте mime-типи файлів.", + "app.presentationUploder.rejectedError": "Вибрані файл(и) відхилено. Перевірте тип файлу(iв).", "app.presentationUploder.upload.progress": "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ ({0}%)", + "app.presentationUploder.upload.413": "Файл завеликий, не більше 200 Ñторінок", "app.presentationUploder.conversion.conversionProcessingSlides": "Обробка Ñторінки {0} з {1}", "app.presentationUploder.conversion.genericConversionStatus": "Файл конвертуєтьÑÑ...", "app.presentationUploder.conversion.generatingThumbnail": "Ð“ÐµÐ½ÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–Ð½Ñ–Ð°Ñ‚ÑŽÑ€...", "app.presentationUploder.conversion.generatedSlides": "Слайди генеруютьÑÑ...", "app.presentationUploder.conversion.generatingSvg": "Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ñ–Ñ Ñлайдів SVG...", + "app.presentationUploder.conversion.pageCountExceeded": "Ой, кількіÑÑ‚ÑŒ Ñторінок перевищила ліміт у 200 Ñторінок", "app.presentationUploder.conversion.timeout": "Ой, Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð·Ð°Ð¹Ð¼Ð°Ñ” надто багато чаÑу", "app.presentationUploder.isDownloadableLabel": "Ðе дозволÑти Ñкачувати презентацію", "app.presentationUploder.isNotDownloadableLabel": "Дозволити Ñкачувати презентацію", "app.presentationUploder.removePresentationLabel": "Видалити презентацію", "app.presentationUploder.setAsCurrentPresentation": "Ð’Ñтановити презентацію поточною", + "app.presentationUploder.tableHeading.filename": "Ім'Ñ Ñ„Ð°Ð¹Ð»Ñƒ", "app.presentationUploder.tableHeading.options": "Опції", + "app.presentationUploder.tableHeading.status": "СтатуÑ", "app.poll.pollPaneTitle": "ОпитуваннÑ", + "app.poll.quickPollTitle": "Швидке опитуваннÑ", "app.poll.hidePollDesc": "Ховає панель меню опитувань", "app.poll.customPollInstruction": "Щоб Ñтворити Ñвоє опитуваннÑ, оберіть кнопку нижче Ñ– введіть Ñвої опції.", "app.poll.quickPollInstruction": "Оберіть опцію нижче, щоб почати опитуваннÑ.", @@ -123,7 +164,13 @@ "app.poll.publishLabel": "Опублікувати результати опитуваннÑ", "app.poll.backLabel": "Ðазад до параметрів опитуваннÑ", "app.poll.closeLabel": "Закрити", + "app.poll.waitingLabel": "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ð° відповіді ({0} / {1})", + "app.poll.ariaInputCount": "ÐžÐ¿Ñ†Ñ–Ñ Ñпеціального Ð¾Ð¿Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ {0} з {1}", "app.poll.customPlaceholder": "Додати варіант опитуваннÑ", + "app.poll.noPresentationSelected": "Ðе вибрано жодної презентації! Виберіть одну.", + "app.poll.clickHereToSelect": "ÐатиÑніть тут, щоб вибрати", + "app.poll.t": "Вірно", + "app.poll.f": "Хибно", "app.poll.tf": "Правда / Ðеправда", "app.poll.y": "Так", "app.poll.n": "ÐÑ–", @@ -132,6 +179,15 @@ "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.yes": "Так", + "app.poll.answer.no": "ÐÑ–", + "app.poll.answer.a": "Ð", + "app.poll.answer.b": "Б", + "app.poll.answer.c": "Ð’", + "app.poll.answer.d": "Г", + "app.poll.answer.e": "Ò", "app.poll.liveResult.usersTitle": "КориÑтувачі", "app.poll.liveResult.responsesTitle": "Відповідь", "app.polling.pollingTitle": "ОпитуваннÑ: оберіть варіант", @@ -152,7 +208,10 @@ "app.navBar.settingsDropdown.aboutDesc": "Показати інформацію про клієнта", "app.navBar.settingsDropdown.leaveSessionDesc": "Залишити конференцію", "app.navBar.settingsDropdown.exitFullscreenDesc": "Вийти з повноекранного режиму", + "app.navBar.settingsDropdown.hotkeysLabel": "ГарÑчі клавіши", + "app.navBar.settingsDropdown.hotkeysDesc": "ÐŸÐµÑ€ÐµÐ¿Ð¸Ñ Ð´Ð¾Ñтупних гарÑчих клавiш", "app.navBar.settingsDropdown.helpLabel": "Допомога", + "app.navBar.settingsDropdown.helpDesc": "ПеренаправлÑÑ” кориÑтувача з відеоуроками (відкриваєтьÑÑ Ð½Ð¾Ð²Ð° вкладка)", "app.navBar.settingsDropdown.endMeetingDesc": "Завершити зуÑтріч", "app.navBar.settingsDropdown.endMeetingLabel": "Завершити зуÑтріч", "app.navBar.userListToggleBtnLabel": "Увімкнути/вимкнути ÑпиÑок кориÑтувачів", @@ -190,6 +249,7 @@ "app.submenu.application.fontSizeControlLabel": "Розмір шрифту", "app.submenu.application.increaseFontBtnLabel": "Збільшити шрифт заÑтоÑунку", "app.submenu.application.decreaseFontBtnLabel": "Зменшити шрифт заÑтоÑунку", + "app.submenu.application.currentSize": "зараз {0}", "app.submenu.application.languageLabel": "Мова заÑтоÑунку", "app.submenu.application.ariaLanguageLabel": "Змінити мову заÑтоÑунку", "app.submenu.application.languageOptionLabel": "Вибрати мову", @@ -203,18 +263,6 @@ "app.submenu.video.videoQualityLabel": "ЯкіÑÑ‚ÑŒ відео", "app.submenu.video.qualityOptionLabel": "Виберіть ÑкіÑÑ‚ÑŒ відео", "app.submenu.video.participantsCamLabel": "ПереглÑд веб-камер учаÑників", - "app.submenu.closedCaptions.closedCaptionsLabel": "Субтитри", - "app.submenu.closedCaptions.takeOwnershipLabel": "Перехопити", - "app.submenu.closedCaptions.languageLabel": "Мова", - "app.submenu.closedCaptions.localeOptionLabel": "Виберіть мову", - "app.submenu.closedCaptions.noLocaleOptionLabel": "ВідÑутні доÑтупні переклади", - "app.submenu.closedCaptions.fontFamilyLabel": "Шрифт", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "Виберіть шрифт", - "app.submenu.closedCaptions.fontSizeLabel": "Розмір шрифту", - "app.submenu.closedCaptions.fontSizeOptionLabel": "Виберіть розмір шрифту", - "app.submenu.closedCaptions.backgroundColorLabel": "Колір фону", - "app.submenu.closedCaptions.fontColorLabel": "Колір шрифта", - "app.submenu.closedCaptions.noLocaleSelected": "Мову не вибрано", "app.submenu.participants.muteAllLabel": "Вимкнути мікрофони у вÑÑ–Ñ… окрім ведучого", "app.submenu.participants.lockAllLabel": "Заблокувати вÑÑ–Ñ… учаÑників", "app.submenu.participants.lockItemLabel": "УчаÑники {0}", @@ -236,7 +284,6 @@ "app.settings.applicationTab.label": "ЗаÑтоÑунок", "app.settings.audioTab.label": "Ðудіо", "app.settings.videoTab.label": "Відео", - "app.settings.closedcaptionTab.label": "Субтитри", "app.settings.usersTab.label": "УчаÑники", "app.settings.main.label": "ÐалаштуваннÑ", "app.settings.main.cancel.label": "Відмінити", @@ -247,6 +294,7 @@ "app.settings.dataSavingTab.webcam": "Увімкнути веб-камери", "app.settings.dataSavingTab.screenShare": "Увімкнути демонÑтрацію робочого Ñтолу", "app.settings.dataSavingTab.description": "Щоб зберегти пропуÑкну здатніÑÑ‚ÑŒ, виберіть що зараз буде відображатиÑÑŒ.", + "app.settings.save-notification.label": "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾", "app.switch.onLabel": "УВІМК.", "app.switch.offLabel": "ВИМК.", "app.actionsBar.actionsDropdown.actionsLabel": "Дії", @@ -260,8 +308,10 @@ "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Зупинити демонÑтрацію екрану", "app.actionsBar.actionsDropdown.pollBtnLabel": "Розпочати опитуваннÑ", "app.actionsBar.actionsDropdown.pollBtnDesc": "Вкл/Викл панель опитуваннÑ", + "app.actionsBar.actionsDropdown.saveUserNames": "Зберегти імена кориÑтувачів", "app.actionsBar.actionsDropdown.createBreakoutRoom": "Створити кімнати Ð´Ð»Ñ ÑƒÑ‡Ð°Ñників", "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "Ñтворити кімнати Ñ– розділити учаÑників між ними ", + "app.actionsBar.actionsDropdown.takePresenter": "Стати презентатором", "app.actionsBar.actionsDropdown.takePresenterDesc": "Ð’Ñтановити Ñебе ведучим/презентером", "app.actionsBar.emojiMenu.statusTriggerLabel": "Задати ÑтатуÑ", "app.actionsBar.emojiMenu.awayLabel": "Відійшов", @@ -285,6 +335,8 @@ "app.actionsBar.emojiMenu.thumbsDownLabel": "Ðе подобаєтьÑÑ", "app.actionsBar.emojiMenu.thumbsDownDesc": "Змінює ваш ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° \\\"Ðе подобаєтьÑÑ\\\"", "app.actionsBar.currentStatusDesc": "нинішній ÑÑ‚Ð°Ñ‚ÑƒÑ {0}", + "app.actionsBar.captions.start": "Почати переглÑд Ñубтитрів", + "app.actionsBar.captions.stop": "Зупинити переглÑд Ñубтитрів", "app.audioNotification.audioFailedError1001": "Помилка 1001: WebSocket відключено", "app.audioNotification.audioFailedError1002": "Помилка 1002: Ðе вдалоÑÑŒ вÑтановити з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ WebSocket", "app.audioNotification.audioFailedError1003": "Помилка 1003: ВерÑÑ–Ñ Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð° не підтримуєтьÑÑ", @@ -303,7 +355,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "Ðудіо було заблоковано модератором, ви підключилиÑÑ Ð»Ð¸ÑˆÐµ Ñк Ñлухач", "app.breakoutJoinConfirmation.title": "ПриєднатиÑÑŒ до зуÑтрічі", "app.breakoutJoinConfirmation.message": "Чи хочете ви приєднатиÑÑ Ð´Ð¾", - "app.breakoutJoinConfirmation.confirmLabel": "ПриєднатиÑÑ", "app.breakoutJoinConfirmation.confirmDesc": "Приєднує Ð²Ð°Ñ Ð´Ð¾ зуÑтрічі", "app.breakoutJoinConfirmation.dismissLabel": "СкаÑувати", "app.breakoutJoinConfirmation.dismissDesc": "Закриває та відмовлÑÑ” в приєднанні до зуÑтрічі", @@ -318,6 +369,7 @@ "app.audioModal.iOSErrorDescription": "Ðаразі аудіо та відео в Chrome Ð´Ð»Ñ iOS не підтримуютьÑÑ.", "app.audioModal.iOSErrorRecommendation": "Ми рекомендуємо викориÑтовувати Safari Ð´Ð»Ñ iOS.", "app.audioModal.audioChoiceDesc": "Виберіть Ñк брати учаÑÑ‚ÑŒ в аудіоконференції", + "app.audioModal.unsupportedBrowserLabel": "Схоже, ви викориÑтовуєте браузер, Ñкий повніÑÑ‚ÑŽ не підтримуєтьÑÑ. Ð”Ð»Ñ Ð¿Ð¾Ð²Ð½Ð¾Ñ— підтримки викориÑтовуйте {0} або {1}.", "app.audioModal.closeLabel": "Закрити", "app.audioModal.yes": "Так", "app.audioModal.no": "ÐÑ–", @@ -327,6 +379,8 @@ "app.audioModal.settingsTitle": "Змінити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð°ÑƒÐ´Ñ–Ð¾", "app.audioModal.helpTitle": "З'ÑвилиÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ð¸ з вашими аудіоприладами", "app.audioModal.helpText": "Чи надали ви BigBlueButton дозвіл на доÑтуп до мікрофона? Зверніть увагу що коли ви намагаєтеÑÑ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ð´Ð¾ аудіоконференції має з'ÑвитиÑÑ Ð´Ñ–Ð°Ð»Ð¾Ð³Ð¾Ð²Ðµ вікно запитуючи дозволи на Ð¿Ñ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð¼ÐµÐ´Ñ–Ð°-приÑтрою, будь лаÑка, прийміть це, щоб приєднатиÑÑ Ð´Ð¾ аудіоконференції. Якщо цього не відбулоÑÑ Ñпробуйте змінити дозволи мікрофона у налаштуваннÑÑ… вашого веб-переглÑдача.", + "app.audioModal.audioDialTitle": "ПриєднатиÑÑ Ð·Ð° допомогою телефону", + "app.audioDial.audioDialConfrenceText": "Ñ– введіть PIN-код конференції:", "app.audioModal.connecting": "ПідключеннÑ", "app.audioModal.connectingEchoTest": "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ ехо теÑту", "app.audioManager.joinedAudio": "Ви приєдналиÑÑ Ð´Ð¾ аудіоконференції", @@ -354,15 +408,30 @@ "app.audio.permissionsOverlay.hint": "Ðам потрібно, щоб ви дозволили нам викориÑтовувати Ñвої медіа-приÑтрої, щоб приєднатиÑÑŒ до голоÑової конференції :)", "app.error.removed": "Ви були вилучені з конференції", "app.error.meeting.ended": "Ви вийшли з конференції", + "app.meeting.logout.duplicateUserEjectReason": "Дубльований кориÑтувач намагаєтьÑÑ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ñ‚Ð¸ÑÑ Ð´Ð¾ зуÑтрічі", + "app.meeting.logout.permissionEjectReason": "Вилучено через Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð´Ð¾Ð·Ð²Ð¾Ð»Ñƒ", + "app.meeting.logout.ejectedFromMeeting": "Ви були вилучені з зуÑÑ‚Ñ€iчi", + "app.meeting.logout.validateTokenFailedEjectReason": "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€Ð¸Ñ‚Ð¸ токен авторизації", + "app.meeting.logout.userInactivityEjectReason": "КориÑтувач неактивний занадто довго", + "app.meeting-ended.rating.legendLabel": "Рейтинг відгуків", "app.modal.close": "Закрити", "app.modal.confirm": "Готово", + "app.modal.newTab": "(відкриває нову вкладку)", "app.dropdown.close": "Закрити", "app.error.400": "Поганий запит", "app.error.401": "Ðеавторизований", + "app.error.403": "Ви були вилучені з зуÑÑ‚Ñ€iчi", "app.error.404": "Ðе знайдено", + "app.error.410": "ЗуÑтріч закінчилаÑÑ", "app.error.500": "Ой, щоÑÑŒ пішло не так", "app.error.leaveLabel": "Увійдіть знову", + "app.error.fallback.presentation.title": "Виникла помилка", + "app.error.fallback.presentation.description": "Він зареєÑтрований. Спробуйте перезавантажити Ñторінку.", + "app.error.fallback.presentation.reloadButton": "Перезавантажити", "app.guest.waiting": "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÑÑ…Ð²Ð°Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¸Ñ”Ð´Ð½Ð°Ð½Ð½Ñ", + "app.userList.guest.waitingUsers": "ÐžÑ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачів", + "app.userList.guest.waitingUsersTitle": "ÐšÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ñ€Ð¸Ñтувачами", + "app.userList.guest.optionTitle": "ПереглÑньте очікуваних кориÑтувачів", "app.toast.breakoutRoomEnded": "ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ñ–Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡Ð¸Ð»Ð°ÑÑ. Будь лаÑка, приєднайтеÑÑŒ знову до аудіо конференції.", "app.toast.chat.public": "Ðове Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ публічному чаті", "app.toast.chat.private": "Ðове Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñƒ приватному чаті", @@ -370,6 +439,7 @@ "app.notification.recordingStart": "Цей ÑÐµÐ°Ð½Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– запиÑуєтьÑÑ", "app.notification.recordingStop": "Цей ÑÐµÐ°Ð½Ñ Ð±Ñ–Ð»ÑŒÑˆÐµ не запиÑуєтьÑÑ", "app.notification.recordingAriaLabel": "ЗапиÑано чаÑу ", + "app.shortcut-help.title": "ГарÑчі клавіши", "app.shortcut-help.accessKeyNotAvailable": "Клавіші швидкого доÑтупу недоÑтупні.", "app.shortcut-help.comboLabel": "Комбо", "app.shortcut-help.functionLabel": "ФункціÑ", diff --git a/bigbluebutton-html5/private/locales/vi_VN.json b/bigbluebutton-html5/private/locales/vi_VN.json index 16ab98ba11159f33e7708ac5fe6ec2a15a97bcd2..fd7a8cbd89d813f8aa1253d927778e23e15dac89 100644 --- a/bigbluebutton-html5/private/locales/vi_VN.json +++ b/bigbluebutton-html5/private/locales/vi_VN.json @@ -1,25 +1,34 @@ { - "app.home.greeting": "Phần trình bà y của bạn sẽ bắt đầu trong trong Ãt phút", + "app.home.greeting": "Phần trình bà y của bạn sẽ bắt đầu trong trong Ãt phút ...", "app.chat.submitLabel": "Gá»i tin nhắn", - "app.chat.errorMinMessageLength": "Thông báo là {0} kà tá»± quá ngắn", - "app.chat.errorMaxMessageLength": "Thông báo là {0} kà tá»± quá dà i", - "app.chat.inputLabel": "Tin nhắn nháºp và o cuá»™c trò chuyện{0}", + "app.chat.errorMinMessageLength": "Thông báo {0} kà tá»±(s) quá ngắn", + "app.chat.errorMaxMessageLength": "Thông báo {0} kà tá»±(s) quá dà i", + "app.chat.inputLabel": "Tin nhắn nháºp và o cuá»™c trò chuyện {0}", "app.chat.inputPlaceholder": "Thông báo {0}", - "app.chat.titlePublic": "Cuá»™c trò chuyện công khai", - "app.chat.titlePrivate": "Trò chuyện riêng tÆ° vá»›i {0}", + "app.chat.titlePublic": "Thảo luáºn chung", + "app.chat.titlePrivate": "Chat riêng tÆ° vá»›i {0}", + "app.chat.partnerDisconnected": "{0} đã rá»i cuá»™c há»p", "app.chat.closeChatLabel": "Äóng {0}", "app.chat.hideChatLabel": "Ẩn {0}", + "app.chat.moreMessages": "Xem nhiá»u tin nhắn hÆ¡n bên dÆ°á»›i", "app.chat.dropdown.options": "Tùy chá»n trò chuyện", "app.chat.dropdown.clear": "Xóa", "app.chat.dropdown.copy": "Sao chép", "app.chat.dropdown.save": "LÆ°u", - "app.chat.label": "Trò chuyện", - "app.chat.emptyLogLabel": "Nháºt kà trò chuyện trống", + "app.chat.label": "Chat", + "app.chat.offline": "Ngoại tuyến", + "app.chat.emptyLogLabel": "Nháºt kà chat trống", "app.chat.clearPublicChatMessage": "Lịch sá» trò chuyện công khai được xóa bởi ngÆ°á»i quản lÃ", - "app.note.title": "Chia sẻ ghi chú", + "app.captions.menu.close": "Äóng", + "app.captions.menu.backgroundColor": "Mà u ná»n", + "app.captions.menu.cancelLabel": "Hủy", + "app.captions.pad.tip": "Nhấn ESC dể chuyển ra thanh công cụ", + "app.captions.pad.ownership": "Chiếm quyá»n quản lý", + "app.note.title": "Shared Notes", "app.note.label": "Ghi chú", "app.note.hideNoteLabel": "Ẩn ghi chú", - "app.user.activityCheck.label": "Kiểm tra nếu ngÆ°á»i dùng Ä‘ang ở trong cuá»™c thảo luáºn {0}", + "app.user.activityCheck": "Kiểm tra hoạt Ä‘á»™ng ngÆ°á»i dùng", + "app.user.activityCheck.label": "Kiểm tra nếu ngÆ°á»i dùng Ä‘ang ở trong cuá»™c thảo luáºn ({0})", "app.user.activityCheck.check": "Kiểm tra", "app.note.tipLabel": "Nhấn ESC dể chuyển ra thanh công cụ", "app.userList.usersTitle": "NgÆ°á»i dùng", @@ -38,38 +47,567 @@ "app.userList.menu.chat.label": "Bắt đầu cuá»™c trò chuyện riêng tÆ° ", "app.userList.menu.clearStatus.label": "Xóa trạng thái", "app.userList.menu.removeUser.label": "Xóa ngÆ°á»i dùng", - "app.userList.menu.muteUserAudio.label": "Chặn ngÆ°á»i dùng", - "app.userList.menu.unmuteUserAudio.label": "Bá» chặn ngÆ°á»i dùng", + "app.userList.menu.muteUserAudio.label": "Tắt tiếng ngÆ°á»i dùng", + "app.userList.menu.unmuteUserAudio.label": "Bá» tắt tiếng ngÆ°á»i dùng", "app.userList.userAriaLabel": "{0}{1}{2} Trạng thái {3}", - "app.userList.menu.promoteUser.label": "Äá» xuất tá»›i ngÆ°á»i quản trị", - "app.userList.menu.demoteUser.label": "Giảm lượt xem", + "app.userList.menu.promoteUser.label": "Cấp quyá»n là m quản lý", + "app.userList.menu.demoteUser.label": "Bá» quyá»n quản lý", "app.userList.menu.unlockUser.label": "Mở khóa {0}", "app.userList.menu.lockUser.label": "Khóa {0}", "app.userList.menu.directoryLookup.label": "Tra cứu thÆ° mục", - "app.userList.menu.makePresenter.label": "Tạo ngÆ°á»i thuyết trình ", + "app.userList.menu.makePresenter.label": "Trao quyá»n thuyết trình ", "app.userList.userOptions.manageUsersLabel": "Quản lý ngÆ°á»i dùng", - "app.userList.userOptions.muteAllLabel": "Chặn tất cả ngÆ°á»i dùng", - "app.userList.userOptions.muteAllDesc": "Chặn tất cả ngÆ°á»i dùng trong cuá»™c há»™i thoại", + "app.userList.userOptions.muteAllLabel": "Tắt tiếng tất cả", + "app.userList.userOptions.muteAllDesc": "Tắt tiếng tất cả ngÆ°á»i dùng trong cuá»™c há»™i thoại", "app.userList.userOptions.clearAllLabel": "Xóa tất cả các biểu tượng trạng thái", "app.userList.userOptions.clearAllDesc": "Xóa các biểu tượng trạng thái từ ngÆ°á»i dùng", - "app.userList.userOptions.muteAllExceptPresenterLabel": "Chặn tất cả ngÆ°á»i dùng ngoại trừ ngÆ°á»i trình bà y", - "app.userList.userOptions.muteAllExceptPresenterDesc": "Chặn tất cả ngÆ°á»i dùng trong cuá»™c há»™i thoại ngoại trừ ngÆ°á»i trình bà y", - "app.userList.userOptions.unmuteAllLabel": "Tắt chặn há»™i thoại", - "app.userList.userOptions.unmuteAllDesc": "Bá» chặn há»™i thoại", + "app.userList.userOptions.muteAllExceptPresenterLabel": "Tắt tiếng tất cả ngoại trừ ngÆ°á»i trình bà y", + "app.userList.userOptions.muteAllExceptPresenterDesc": "Tắt tiếng tất cả trong cuá»™c há»™i thoại ngoại trừ ngÆ°á»i trình bà y", + "app.userList.userOptions.unmuteAllLabel": "Turn off meeting mute", + "app.userList.userOptions.unmuteAllDesc": "Unmutes the meeting", "app.userList.userOptions.lockViewersLabel": "Khóa ngÆ°á»i xem", "app.userList.userOptions.lockViewersDesc": "Khóa má»™t số chức năng nhất định cho ngÆ°á»i tham dá»± cuá»™c há»™i thoại", "app.userList.userOptions.disableCam": "Webcam ngÆ°á»i dùng không khả dụng", "app.userList.userOptions.disableMic": "Mic ngÆ°á»i dùng không khả dụng", "app.userList.userOptions.disablePrivChat": "Trò chuyện riêng tÆ° không khả dụng", "app.userList.userOptions.disablePubChat": "Trò chuyện công khai không khả dụng", - "app.userList.userOptions.disableNote": "Chia sẻ ghi chú đã khóa ", + "app.userList.userOptions.disableNote": "Shared notes đã khóa ", "app.userList.userOptions.webcamsOnlyForModerator": "Chỉ ngÆ°á»i quản trị má»›i thấy được lượng ngÆ°á»i xem (Do khóa cà i đặt)", - "app.media.label": "Truyá»n thông", + "app.media.label": "Media", + "app.media.screenshare.start": "Chia sẻ mà n hình bắt đầu", + "app.media.screenshare.end": "Chia sẻ mà n hình đã tắt", + "app.media.screenshare.safariNotSupported": "Chia sẻ mà n hình không được há»— trợ bởi Safari. Vui lòng dùng FireFox hoặc Google Chrome", + "app.meeting.ended": "Phiên hoạt Ä‘á»™ng đã kết thúc", + "app.meeting.meetingTimeRemaining": "Thá»i gian còn lại của cuá»™c há»p: {0}", + "app.meeting.meetingTimeHasEnded": "Hết giá». Cuá»™c há»p sẽ đóng lại", + "app.meeting.endedMessage": "Bạn sẽ được chuyển hÆ°á»›ng vá» lại trang chủ mà n hình", + "app.meeting.alertMeetingEndsUnderOneMinute": "Cuá»™c há»p sẽ kết thúc trong má»™t phút nữa", + "app.meeting.alertBreakoutEndsUnderOneMinute": "Giải lao sẽ kết thúc trong má»™t phúc nữa ", + "app.presentation.hide": "Ẩn phần trình bà y", + "app.presentation.notificationLabel": "Phần trình bà y hiện tại", + "app.presentation.slideContent": "Ná»™i dung slide", + "app.presentation.startSlideContent": "Ná»™i dung slide bắt đầu", + "app.presentation.endSlideContent": "Ná»™i dung slide kết thúc", + "app.presentation.emptySlideContent": "Slide hiện tại không có ná»™i dung", + "app.presentation.presentationToolbar.selectLabel": "Chá»n slide", + "app.presentation.presentationToolbar.prevSlideLabel": "Slide trÆ°á»›c", + "app.presentation.presentationToolbar.prevSlideDesc": "Thay đổi phần trình bà y cho slide trÆ°á»›c", + "app.presentation.presentationToolbar.nextSlideLabel": "Slide kế tiếp", + "app.presentation.presentationToolbar.nextSlideDesc": "Thay đổi phần trình bà y cho slide kết tiếp", + "app.presentation.presentationToolbar.skipSlideLabel": "Bá» qua slide", + "app.presentation.presentationToolbar.skipSlideDesc": "Thay dổi phần trình bà y cho slide cụ thể", + "app.presentation.presentationToolbar.fitWidthLabel": "Khá»›p vá»›i bá» ngang mà n hình", + "app.presentation.presentationToolbar.fitWidthDesc": "Hiển thị toà n bá» ngang của slide", + "app.presentation.presentationToolbar.fitScreenLabel": "Khá»›p vá»›i toà n bá»™ mà n hình", + "app.presentation.presentationToolbar.fitScreenDesc": "Hiển thị toà n bá»™ slide được chá»n", + "app.presentation.presentationToolbar.zoomLabel": "Phóng to", + "app.presentation.presentationToolbar.zoomDesc": "Thay dổi mức Ä‘á»™ thu phóng của phần hiển thị", + "app.presentation.presentationToolbar.zoomInLabel": "Phóng to", + "app.presentation.presentationToolbar.zoomInDesc": "Phóng to phần trình bà y", + "app.presentation.presentationToolbar.zoomOutLabel": "Thu nhá»", + "app.presentation.presentationToolbar.zoomOutDesc": "Thu nhá» phần trình bà y", + "app.presentation.presentationToolbar.zoomReset": "Reset thu phóng", + "app.presentation.presentationToolbar.zoomIndicator": "Tá»· lệ thu phóng hiện tại", + "app.presentation.presentationToolbar.fitToWidth": "Khá»›p vá»›i bá» ngang mà n hình", + "app.presentation.presentationToolbar.fitToPage": "Khá»›p vá»›i toà n bá»™ trang", + "app.presentation.presentationToolbar.goToSlide": "Slide {0}", + "app.presentationUploder.title": "Phần trình bà y", + "app.presentationUploder.uploadLabel": "ÄÆ°a lên", + "app.presentationUploder.confirmDesc": "LÆ°u lại những thay dổi và bắt đầu bà i trình bà y", + "app.presentationUploder.dismissLabel": "Hủy", + "app.presentationUploder.dismissDesc": "Äóng và bá» lÆ°u. ", + "app.presentationUploder.dropzoneLabel": "Kéo và thả file và o dây để Ä‘Æ°a lên.", + "app.presentationUploder.dropzoneImagesLabel": "Kéo và thả hình ảnh và o đây để Ä‘Æ°a lên.", + "app.presentationUploder.browseFilesLabel": "Hoặc chá»n Ä‘Æ°á»ng dẫn cho file", + "app.presentationUploder.browseImagesLabel": "Hoặc chá»n Ä‘Æ°á»ng dẫn/chụp ảnh cho các hình ảnh.", + "app.presentationUploder.fileToUpload": "Chuẩn bị dÆ°a lên...", + "app.presentationUploder.currentBadge": "Hiện tại", + "app.presentationUploder.genericError": "Ops, đã xảy ra lá»—i", + "app.presentationUploder.upload.progress": "Äang Ä‘Æ°a lên ({0}%)", + "app.presentationUploder.upload.413": "KÃch thÆ°á»›c file quá lá»›n, tối Ä‘a là 200 trang.", + "app.presentationUploder.conversion.conversionProcessingSlides": "Äang xá» lý {0} trên {1} trang", + "app.presentationUploder.conversion.genericConversionStatus": "Äang chuyển đổi file...", + "app.presentationUploder.conversion.generatingThumbnail": "Tạo thumbnails", + "app.presentationUploder.conversion.generatedSlides": "Các slide được tạo...", + "app.presentationUploder.conversion.generatingSvg": "Tạo hình ảnh SVG ...", + "app.presentationUploder.conversion.pageCountExceeded": "Ops, Số trang hiện tại vượt quá 200 trang.", + "app.presentationUploder.conversion.timeout": "Ops, sá»± thay đổi mất má»™t khoảng thá»i gian", + "app.presentationUploder.isDownloadableLabel": "Không cho phép tải xuống phần trình bà y", + "app.presentationUploder.isNotDownloadableLabel": "Cho phép tải xuống phần trình bà y", + "app.presentationUploder.removePresentationLabel": "Bá» phần trình bà y", + "app.presentationUploder.setAsCurrentPresentation": "Thiết láºp phần trình bà y hiện tại", + "app.presentationUploder.tableHeading.filename": "Tên file", + "app.presentationUploder.tableHeading.options": "Tùy chá»n", + "app.presentationUploder.tableHeading.status": "Trạng thái", + "app.poll.pollPaneTitle": "Thăm dò ý kiến", + "app.poll.quickPollTitle": "Thăm dò ý kiến nhanh", + "app.poll.hidePollDesc": "Ẩn thanh thăm dò ý kiến", + "app.poll.customPollInstruction": "Äể tạo khảo sát, vui lòng bấm nút bên dÆ°á»›i và nháºp ý kiến của bạn", + "app.poll.quickPollInstruction": "Chá»n má»™t lá»±a chá»n bên dÆ°á»›i để bắt đầu cuá»™c khảo sát của bạn", + "app.poll.customPollLabel": "Tùy biến thăm dò ý kiến", + "app.poll.startCustomLabel": "Bắt đầu cuá»™c thăm dò ý kiến", + "app.poll.activePollInstruction": "Không dóng cá»a sổ nà y để cho ngÆ°á»i khác có thể tham gia và o cuá»™c thăm dò ý kiến. Vui lòng chá»n 'Công bố kết quả' hoặc nút quay lại để kết thúc cuá»™c khảo sát.", + "app.poll.publishLabel": "Công bố kết quả", + "app.poll.backLabel": "Quay lại các tùy chá»n của cuá»™c thăm dò ý kiến", + "app.poll.closeLabel": "Äóng", + "app.poll.waitingLabel": "Äang chá» phản hồi ({0}/{1})", + "app.poll.ariaInputCount": "Tùy chỉnh các ý kiến {0} trên {1}", + "app.poll.customPlaceholder": "Thêm má»™t ý kiến ", + "app.poll.noPresentationSelected": "Phần trình bà y chÆ°a được chá»n! Vui lòng chá»n má»™t trong những phần trình bà y trên", + "app.poll.clickHereToSelect": "Nhấp và o đây để chá»n", + "app.poll.t": "Äúng", + "app.poll.f": "Sai", + "app.poll.tf": "Äúng/Sai", + "app.poll.y": "Äồng ý", + "app.poll.n": "Không", + "app.poll.yn": "Äồng ý/Không", + "app.poll.a2": "A / B", + "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": "Äúng", + "app.poll.answer.false": "Sai", + "app.poll.answer.yes": "Äồng ý", + "app.poll.answer.no": "Không", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "NgÆ°á»i dùng", + "app.poll.liveResult.responsesTitle": "Phản hồi", + "app.polling.pollingTitle": "Các ý kiến trong cuá»™c khảo sát", + "app.polling.pollAnswerLabel": "Kết quả cuá»™c thăm dò ý kiến {0}", + "app.polling.pollAnswerDesc": "Chá»n ý kiến nà y để bá» phiếu cho {0}", + "app.failedMessage": "Xin lá»—i, kết nối vá»›i máy chủ đã xảy ra lá»—i", + "app.downloadPresentationButton.label": "Tải xuống file phần trình bà y gốc", + "app.connectingMessage": "Äang kết nối ...", + "app.waitingMessage": "Mất kết nối. Kết nối lại trong {0} giây ...", + "app.navBar.settingsDropdown.optionsLabel": "Tùy chá»n", + "app.navBar.settingsDropdown.fullscreenLabel": "Xem toà n mà n hình", + "app.navBar.settingsDropdown.settingsLabel": "Cà i đặt", + "app.navBar.settingsDropdown.aboutLabel": "Giá»›i thiệu", + "app.navBar.settingsDropdown.leaveSessionLabel": "Äăng xuất ", + "app.navBar.settingsDropdown.exitFullscreenLabel": "Tắt chế Ä‘á»™ toà n mà n hình", + "app.navBar.settingsDropdown.fullscreenDesc": "Tạo menu cà i đặt mà n hình ", + "app.navBar.settingsDropdown.settingsDesc": "Thay dổi cà i đặt chung", + "app.navBar.settingsDropdown.aboutDesc": "Hiển thị thông tin vá» khách hà ng", + "app.navBar.settingsDropdown.leaveSessionDesc": "Rá»i cuá»™c há»p", + "app.navBar.settingsDropdown.exitFullscreenDesc": "Tắt chế Ä‘á»™ xem toà n mà n hình", + "app.navBar.settingsDropdown.hotkeysLabel": "Các phÃm tắt bà n phÃm ", + "app.navBar.settingsDropdown.hotkeysDesc": "Danh sách các phÃm tắt có sẵn", + "app.navBar.settingsDropdown.helpLabel": "Há»— trợ", + "app.navBar.settingsDropdown.helpDesc": "Liên kết ngÆ°á»i dùng vá»›i các video khóa há»c (mở tab má»›i)", + "app.navBar.settingsDropdown.endMeetingDesc": "Kết thúc cuá»™c há»p hiện tại", + "app.navBar.settingsDropdown.endMeetingLabel": "Cuá»™c há»p kết thúc", + "app.navBar.userListToggleBtnLabel": "Danh sách ngÆ°á»i dùng chuyển đổi", + "app.navBar.toggleUserList.ariaLabel": "Chuyển đổi ngÆ°á»i dùng và tin nhắn", + "app.navBar.toggleUserList.newMessages": "Vá»›i thông báo tin nhắn má»›i", + "app.navBar.recording": "Phiên hoạt Ä‘á»™ng Ä‘ang dược ghi lại", + "app.navBar.recording.on": "Ghi hình", + "app.navBar.recording.off": "Không được ghi hình", + "app.leaveConfirmation.confirmLabel": "Rá»i khá»i", + "app.leaveConfirmation.confirmDesc": "Äăng xuất khá»i cuá»™c há»p", + "app.endMeeting.title": "Cuá»™c há»p kết thúc", + "app.endMeeting.description": "Bạn thá»±c sá»± muốn kết thúc phiên hoạt Ä‘á»™ng ?", + "app.endMeeting.yesLabel": "Äồng ý", + "app.endMeeting.noLabel": "Không", + "app.about.title": "Giá»›i thiệu", + "app.about.version": "Xáºy dá»±ng khách hà ng:", + "app.about.copyright": "Bản quyá»n:", + "app.about.confirmLabel": "Äồng ý", + "app.about.confirmDesc": "Äồng ý", + "app.about.dismissLabel": "Hủy", + "app.about.dismissDesc": "Äóng thông tin vá» khách hà ng", + "app.actionsBar.changeStatusLabel": "Thay dổi trạng thái", + "app.actionsBar.muteLabel": "Tắt tiếng", + "app.actionsBar.unmuteLabel": "Báºt tiếng", + "app.actionsBar.camOffLabel": "Camera tắt", + "app.actionsBar.raiseLabel": "Kéo lên", + "app.actionsBar.label": "Thanh hà nh Ä‘á»™ng", + "app.actionsBar.actionsDropdown.restorePresentationLabel": "Khôi phục phần trình bà y", + "app.actionsBar.actionsDropdown.restorePresentationDesc": "Nhấn nút để khôi phục phần trình bà y sau khi nó tắt", + "app.screenshare.screenShareLabel" : "Chia sẻ mà n hình", + "app.submenu.application.applicationSectionTitle": "Ứng dụng", + "app.submenu.application.animationsLabel": " Các hình ảnh Ä‘á»™ng", + "app.submenu.application.audioAlertLabel": "Cảnh báo âm thanh cho cuá»™c trò chuyện", + "app.submenu.application.pushAlertLabel": "Cảnh báo quảng cáo cho cuá»™c trò chuyện", + "app.submenu.application.fontSizeControlLabel": "Cỡ chữ", + "app.submenu.application.increaseFontBtnLabel": "Tăng cỡ chữ của ứng dụng", + "app.submenu.application.decreaseFontBtnLabel": "Giảm cỡ chữ của ứng dụng", + "app.submenu.application.currentSize": "hiện tại {0}", + "app.submenu.application.languageLabel": "Ngôn ngữ của ứng dụng", + "app.submenu.application.ariaLanguageLabel": "Thay đổi ngôn ngữ của ứng dụng", + "app.submenu.application.languageOptionLabel": "Chá»n ngôn ngữ", + "app.submenu.application.noLocaleOptionLabel": "Không có hoạt Ä‘á»™ng ", + "app.submenu.audio.micSourceLabel": "Nguồn micro", + "app.submenu.audio.speakerSourceLabel": "Nguồn loa", + "app.submenu.audio.streamVolumeLabel": "Âm lượng âm thanh của bạn", + "app.submenu.video.title": "video", + "app.submenu.video.videoSourceLabel": "Nguồn video", + "app.submenu.video.videoOptionLabel": "Chá»n nguồn video", + "app.submenu.video.videoQualityLabel": "Chất lượng video", + "app.submenu.video.qualityOptionLabel": "Chá»n chất lượng video", + "app.submenu.video.participantsCamLabel": "Xem webcam của các thà nh viên", + "app.submenu.participants.muteAllLabel": "Tắt tiếng tất cả ngoại trừ ngÆ°á»i trình bà y", + "app.submenu.participants.lockAllLabel": "Khóa tất cả ngÆ°á»i xem", + "app.submenu.participants.lockItemLabel": "NgÆ°á»i xem {0}", + "app.submenu.participants.lockMicDesc": "Tắt micro cho tất cả ngÆ°á»i xem bị khóa", + "app.submenu.participants.lockCamDesc": "Tắt webcam cho tất cả ngÆ°á»i xem bị khóa", + "app.submenu.participants.lockPublicChatDesc": "Tắt trò chuyện công cá»™ng cho ngÆ°á»i xem bị khóa", + "app.submenu.participants.lockPrivateChatDesc": "Tắt trò chuyện riêng tÆ° cho tất cả ngÆ°á»i xem bị khóa", + "app.submenu.participants.lockLayoutDesc": "Khóa layout cho tất cả ngÆ°á»i xem đã bị khóa", + "app.submenu.participants.lockMicAriaLabel": "Khóa micro", + "app.submenu.participants.lockCamAriaLabel": "Khóa webcam", + "app.submenu.participants.lockPublicChatAriaLabel": "Khóa cuá»™c trò chuyện công cá»™ng", + "app.submenu.participants.lockPrivateChatAriaLabel": "Khóa cuá»™c trò chuyện riêng tÆ°", + "app.submenu.participants.lockLayoutAriaLabel": "Khóa layout", + "app.submenu.participants.lockMicLabel": "Microphone", + "app.submenu.participants.lockCamLabel": "Webcam", + "app.submenu.participants.lockPublicChatLabel": "Thảo luáºn chung", + "app.submenu.participants.lockPrivateChatLabel": "Thảo luáºn riêng", + "app.submenu.participants.lockLayoutLabel": "Layout", + "app.settings.applicationTab.label": "Ứng dụng", + "app.settings.audioTab.label": "Âm thanh", + "app.settings.videoTab.label": "video", "app.settings.usersTab.label": "NgÆ°á»i tham gia", + "app.settings.main.label": "Cà i đặt", + "app.settings.main.cancel.label": "Hủy", + "app.settings.main.cancel.label.description": "Hủy bá» các thay đổi và dóng phần cà i đặt", "app.settings.main.save.label": "LÆ°u", + "app.settings.main.save.label.description": "LÆ°u các thay đổi và đóng lại", + "app.settings.dataSavingTab.label": "Tiết kiệm dữ liệu", + "app.settings.dataSavingTab.webcam": "Cho phép webcam", + "app.settings.dataSavingTab.screenShare": "Cho phép chia sẻ mà n hình", + "app.settings.dataSavingTab.description": "Äể tiết kiệm băng thông của bạn, hãy Ä‘iá»u chỉnh những gì Ä‘ang hiển thị ", + "app.settings.save-notification.label": "Cà i đặt đã được lÆ°u lại", + "app.switch.onLabel": "Mở", + "app.switch.offLabel": "Tắt", + "app.actionsBar.actionsDropdown.actionsLabel": "Các hà nh Ä‘á»™ng", + "app.actionsBar.actionsDropdown.presentationLabel": "Tải lên phần trình bà y", + "app.actionsBar.actionsDropdown.initPollLabel": "Khởi tạo cuá»™c thăm dò ý kiến", + "app.actionsBar.actionsDropdown.desktopShareLabel": "Chia sẻ mà n hình của bạn", + "app.actionsBar.actionsDropdown.stopDesktopShareLabel": "Dừng chia sẻ mà n hình của bạn", + "app.actionsBar.actionsDropdown.presentationDesc": "Tải lên phần trình bà y của bạn", + "app.actionsBar.actionsDropdown.initPollDesc": "Khởi tạo cuá»™c thăm dò ý kiến", + "app.actionsBar.actionsDropdown.desktopShareDesc": "Chia sẻ mà n hình của bạn vá»›i ngÆ°á»i khác", + "app.actionsBar.actionsDropdown.stopDesktopShareDesc": "Dừng chia sẻ mà n hình vá»›i ", + "app.actionsBar.actionsDropdown.pollBtnLabel": "Tạo thăm dò ý kiến", + "app.actionsBar.actionsDropdown.pollBtnDesc": "Cá»a sổ bình chá»n", + "app.actionsBar.actionsDropdown.saveUserNames": "LÆ°u tên các ngÆ°á»i dùng", + "app.actionsBar.actionsDropdown.createBreakoutRoom": "Chia nhóm", + "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "Chia nhóm cho cuá»™c há»p hiện tại", + "app.actionsBar.actionsDropdown.takePresenter": "Lấy quyá»n trình bà y", + "app.actionsBar.actionsDropdown.takePresenterDesc": "Chỉ định bạn là ngÆ°á»i trình bà y má»›i", + "app.actionsBar.emojiMenu.statusTriggerLabel": "Äặt dòng trạng thái", + "app.actionsBar.emojiMenu.awayLabel": "Cách xa", + "app.actionsBar.emojiMenu.awayDesc": "Thay đổi trạng thái của bạn ", + "app.actionsBar.emojiMenu.raiseHandLabel": "Kéo lên", + "app.actionsBar.emojiMenu.raiseHandDesc": "Hãy giÆ¡ tay để đặt câu há»i", + "app.actionsBar.emojiMenu.neutralLabel": "ChÆ°a quyết định", + "app.actionsBar.emojiMenu.neutralDesc": "Thay đổi trạng thái của bạn thà nh chÆ°a quyết định", + "app.actionsBar.emojiMenu.confusedLabel": "Phân vân", + "app.actionsBar.emojiMenu.confusedDesc": "Thay đổi trạng thái của bạn thà nh phân vân", + "app.actionsBar.emojiMenu.sadLabel": "Buồn", + "app.actionsBar.emojiMenu.sadDesc": "Thay đổi trạng thái của bạn thà nh buồn", + "app.actionsBar.emojiMenu.happyLabel": "Vui vẻ", + "app.actionsBar.emojiMenu.happyDesc": "Thay đổi trạng thái của bạn thà nh vui vẻ", + "app.actionsBar.emojiMenu.noneLabel": "Xóa dòng trạng thái", + "app.actionsBar.emojiMenu.noneDesc": "Xóa dòng trạng thái của bạn", + "app.actionsBar.emojiMenu.applauseLabel": "Hoan nghênh", + "app.actionsBar.emojiMenu.applauseDesc": "Thay đổi trạng thái của bạn thà nh hoan nghênh", + "app.actionsBar.emojiMenu.thumbsUpLabel": "Äồng ý", + "app.actionsBar.emojiMenu.thumbsUpDesc": "Thay đổi trạng thái của bạn thà nh đồng ý", + "app.actionsBar.emojiMenu.thumbsDownLabel": "Không đồng ý", + "app.actionsBar.emojiMenu.thumbsDownDesc": "Thay đổi trạng thái của bạn thà nh không đồng ý", + "app.actionsBar.currentStatusDesc": "trang thái hiện tại {0}", + "app.audioNotification.audioFailedError1001": "Error 1001: WebSocket disconnected", + "app.audioNotification.audioFailedError1002": "Error 1002: Could not make a WebSocket connection ", + "app.audioNotification.audioFailedError1003": "Error 1003: Browser version not supported ", + "app.audioNotification.audioFailedError1004": "Error 1004: Failure on call (reason={0})", + "app.audioNotification.audioFailedError1005": "Error 1005: Call ended unexpectedly", + "app.audioNotification.audioFailedError1006": "Error 1006: Call timed out ", + "app.audioNotification.audioFailedError1007": "Error 1007: ICE negotiation failed", + "app.audioNotification.audioFailedError1008": "Error 1008: Transfer failed", + "app.audioNotification.audioFailedError1009": "Error 1009: Could not fetch STUN/TURN server information", + "app.audioNotification.audioFailedError1010": "Error 1010: ICE negotiation timeout", + "app.audioNotification.audioFailedError1011": "Error 1011: ICE gathering timeout", + "app.audioNotification.audioFailedError1012": "Error 1012: ICE connection closed", + "app.audioNotification.audioFailedMessage": "Kết nối âm thanh của bạn bị lá»—i", + "app.audioNotification.mediaFailedMessage": "getUserMicMedia không thà nh công vì chỉ nguồn gốc an toà n má»›i được cho phép", + "app.audioNotification.closeLabel": "Äóng", + "app.audioNotificaion.reconnectingAsListenOnly": "Micro của ngÆ°á»i xem đã bị khóa, bạn chỉ có thể nghe khi kết nối", + "app.breakoutJoinConfirmation.title": "Tham gia phòng đã được chia nhóm", + "app.breakoutJoinConfirmation.message": "Bạn có muốn tham gia ?", + "app.breakoutJoinConfirmation.confirmDesc": "Má»i bạn tham gia và o phòng được chia nhóm", + "app.breakoutJoinConfirmation.dismissLabel": "Hủy", + "app.breakoutJoinConfirmation.dismissDesc": "Äóng và từ chối lá»i má»i tham gia phòng chia nhóm", + "app.breakoutJoinConfirmation.freeJoinMessage": "Chá»n má»™t phòng đã dược chia nhóm để tham gia", + "app.breakoutTimeRemainingMessage": "Thá»i gian còn lại của phòng: {0}", + "app.breakoutWillCloseMessage": "Hết giá». Phòng chia nhóm sẽ đóng", + "app.calculatingBreakoutTimeRemaining": "TÃnh thá»i gian còn lại ...", + "app.audioModal.ariaTitle": "Tham gia phÆ°Æ¡ng thức âm thanh", + "app.audioModal.microphoneLabel": "Nghe và nói", + "app.audioModal.listenOnlyLabel": "Chỉ nghe", + "app.audioModal.audioChoiceLabel": "Bạn muốn tham gia vá»›i hình thức âm thanh nhÆ° thế nà o ?", + "app.audioModal.iOSBrowser": "Âm thanh/Video không được hô trợ", + "app.audioModal.iOSErrorDescription": "Âm thanh và video không được há»— trên Chrome của IOS tại thá»i Ä‘iểm hiện tại", + "app.audioModal.iOSErrorRecommendation": "Chúng tôi khuyên bạn nên dùng Safari iOS", + "app.audioModal.audioChoiceDesc": "Chá»n cách thức tham gia cuá»™c gá»i trong cuá»™c há»p", + "app.audioModal.unsupportedBrowserLabel": "Có lẽ bạn Ä‘ang sá» dụng trình duyệt không được há»— trợ đầy Ä‘á». Vui lòng sá» dụng {0} hoặc {1} để được há»— trợ tốt nhất", + "app.audioModal.closeLabel": "Äóng", + "app.audioModal.yes": "Äồng ý", + "app.audioModal.no": "Không", + "app.audioModal.yes.arialabel" : "Tiếng vá»ng có thể nghe được", + "app.audioModal.no.arialabel" : "Tiếng vá»ng không thể nghe", + "app.audioModal.echoTestTitle": "Äây là má»™t bà i kiểm tra tiếng vá»ng. Hãy nói và i từ. Bạn đã nghe âm thanh chÆ°a ?", + "app.audioModal.settingsTitle": "Thay đổi cà i đặt âm thanh", + "app.audioModal.helpTitle": "Có má»™t và i vấn Ä‘á» vá»›i thiết bị của bạn", + "app.audioModal.helpText": "Bạn đã cho phép truy cáºp và o micrô của bạn? LÆ°u ý rằng má»™t há»™p thoại sẽ xuất hiện khi bạn cố gắng tham gia âm thanh, yêu cầu quyá»n của thiết bị Ä‘a phÆ°Æ¡ng tiện, vui lòng chấp nháºn Ä‘iá»u đó để tham gia há»™i nghị âm thanh. Nếu đó không phải là trÆ°á»ng hợp, hãy thá» thay đổi quyá»n micrô trong cà i đặt trình duyệt của bạn.", + "app.audioModal.audioDialTitle": "Tham gia bằng cách sá» dụng Ä‘iện thoại của bạn", + "app.audioDial.audioDialDescription": "Quay số", + "app.audioDial.audioDialConfrenceText": "và nháºp mã số PIN xác nháºn: ", + "app.audioModal.connecting": "Äang kết nối", + "app.audioModal.connectingEchoTest": "Kết nối tá»›i phần kiểm tra âm thanh ", + "app.audioManager.joinedAudio": "Bạn đã tham gia cuá»™ há»™i thoại âm thanh", + "app.audioManager.joinedEcho": "Bạn đã tham gia phần kiểm tra âm thanh ", + "app.audioManager.leftAudio": "Bạn vừa rá»i cuá»™c há»™i thoại âm thanh", + "app.audioManager.genericError": "Error: An error has occurred, please try again", + "app.audioManager.connectionError": "Error: Connection error", + "app.audioManager.requestTimeout": "Error: There was a timeout in the request ", + "app.audioManager.invalidTarget": "Error: Tried to request something to an invalid target", + "app.audioManager.mediaError": "Error: There was an issue getting your media devices", + "app.audio.joinAudio": "Sá» dụng âm thanh", + "app.audio.leaveAudio": "Không sá» dụng âm thanh", + "app.audio.enterSessionLabel": "Nháºp phiên hoạt Ä‘á»™ng", + "app.audio.playSoundLabel": "Nghe âm thanh", + "app.audio.backLabel": "Quay lại", + "app.audio.audioSettings.titleLabel": "Chá»n mục cà i đặt âm thanh của bạn", + "app.audio.audioSettings.descriptionLabel": "Xin lÆ°u ý, má»™t há»™p thoại sẽ xuất hiện trong trình duyệt của bạn, yêu cầu bạn chấp nháºn chia sẻ micrô của mình.", + "app.audio.audioSettings.microphoneSourceLabel": "Nguồn micro", + "app.audio.audioSettings.speakerSourceLabel": "Nguồn âm thanh", + "app.audio.audioSettings.microphoneStreamLabel": "Âm lượng âm thanh của bạn", + "app.audio.audioSettings.retryLabel": "Thá» lại", + "app.audio.listenOnly.backLabel": "Quay lại", + "app.audio.listenOnly.closeLabel": "Äóng", + "app.audio.permissionsOverlay.title": "Cho phép truy cáºp và o micro của bạn", + "app.audio.permissionsOverlay.hint": "Chúng tôi cần bạn cho phép chúng tôi sá» dụng các thiết bị Ä‘a phÆ°Æ¡ng tiện của bạn để cùng bạn tham gia há»™i nghị bằng giá»ng nói :)", + "app.error.removed": "Bạn vừa bị xóa khá»i cuá»™c há»™i nghị", + "app.error.meeting.ended": "Bạn vừa đăng xuất khá»i cuá»™c há»™i nghị", + "app.meeting.logout.duplicateUserEjectReason": "Má»™t ngÆ°á»i dùng khác Ä‘ang cố dùng tà i khoản của bạn để tham gia và o cuá»™c há»p", + "app.meeting.logout.permissionEjectReason": "Bị từ chối cho vi phạm quyá»n", + "app.meeting.logout.ejectedFromMeeting": "Bạn vừa bị xóa khá»i phòng há»p ", + "app.meeting.logout.validateTokenFailedEjectReason": "Không thể xác thá»±c mã thông báo ủy quyá»n", + "app.meeting.logout.userInactivityEjectReason": "NgÆ°á»i dùng đã quá lâu không hoạt Ä‘á»™ng", + "app.meeting-ended.rating.legendLabel": "Äánh giá phản hồi", + "app.meeting-ended.rating.starLabel": "Ngôi sao", + "app.modal.close": "Äóng", + "app.modal.close.description": "Bá» qua các thay dổi và đóng phÆ°Æ¡ng thức", + "app.modal.confirm": "Xong", + "app.modal.newTab": "(Mở tab má»›i)", + "app.modal.confirm.description": "LÆ°u các thay dổi và dóng lại", + "app.dropdown.close": "Äóng", + "app.error.400": "Yêu cầu xấu", + "app.error.401": "Không được phép", + "app.error.403": "Bạn vừa bị xóa khá»i phòng há»p ", + "app.error.404": "Không tìm thấy", + "app.error.410": "Cuá»™c há»p đã kết thúc", + "app.error.500": "Ops, đã xảy ra lá»—i", + "app.error.leaveLabel": "Äăng nháºp lại", + "app.error.fallback.presentation.title": "Má»™t lá»—i đã xuất hiện", + "app.error.fallback.presentation.description": "Tà i khoản đã được đăng nháºp. Vui lòng tải lại trang", + "app.error.fallback.presentation.reloadButton": "Tải lại", + "app.guest.waiting": "Chá» phê duyệt để tham gia ", + "app.userList.guest.waitingUsers": "NgÆ°á»i dùng Ä‘ang chá»", + "app.userList.guest.waitingUsersTitle": "Quản là ngÆ°á»i dùng", + "app.userList.guest.optionTitle": "Äánh giá ngÆ°á»i dùng Ä‘ang chá» xá» lý", + "app.userList.guest.allowAllAuthenticated": "Cho phép xác thá»±c tất cả", + "app.userList.guest.allowAllGuests": "Cho phép tất cả khách ", + "app.userList.guest.allowEveryone": "Cho phép tất cả má»i ngÆ°á»i", + "app.userList.guest.denyEveryone": "Từ chối tất cả má»i ngÆ°á»i", + "app.userList.guest.pendingUsers": "{0} NgÆ°á»i dùng Ä‘ang chá» xá» lý", + "app.userList.guest.pendingGuestUsers": "{0} Khách Ä‘ang chá» xá» lý", + "app.userList.guest.pendingGuestAlert": "Äã tham gia bà i há»c và đang chá» sá»± chấp thuáºn của bạn", + "app.userList.guest.rememberChoice": "Nhá»› lá»±a chá»n", "app.user-info.title": "Tra cứu thÆ° mục", - "app.lock-viewers.title": "Khóa ngÆ°á»i xem" + "app.toast.breakoutRoomEnded": "Phòng chia nhóm đã kết thúc. Vui lòng tham gia lại và cà i đặt âm thanh", + "app.toast.chat.public": "Tin nhắn trò chuyện công khai má»›i", + "app.toast.chat.private": "Tin nhắn trò chuyện riêng tÆ° má»›i", + "app.toast.chat.system": "Hệ thống", + "app.notification.recordingStart": "Buổi há»c nà y Ä‘ang được ghi hình lại ", + "app.notification.recordingStop": "Buổi há»c nà y không được ghi hình lại", + "app.notification.recordingAriaLabel": "Thá»i gian ghi hình", + "app.shortcut-help.title": "Các phÃm tắt bà n phÃm ", + "app.shortcut-help.accessKeyNotAvailable": "Khóa truy cáºp không có sẵn", + "app.shortcut-help.comboLabel": "Kết hợp", + "app.shortcut-help.functionLabel": "Chức năng", + "app.shortcut-help.closeLabel": "Äóng", + "app.shortcut-help.closeDesc": "Äóng phÆ°Æ¡ng thức phÃm tắt bà n phÃm", + "app.shortcut-help.openOptions": "Mở tùy chá»n", + "app.shortcut-help.toggleUserList": "Chuyển đổi danh sách ngÆ°á»i dùng", + "app.shortcut-help.toggleMute": "Tắt tiếng/ Báºt tiếng", + "app.shortcut-help.togglePublicChat": "Chuyển đổi trò chuyện công khai (Danh sách ngÆ°á»i dùng phải được mở)", + "app.shortcut-help.hidePrivateChat": "Ẩn cuá»™c trò chuyện riêng tÆ°", + "app.shortcut-help.closePrivateChat": "Äóng cuá»™c trò chuyện riêng tÆ°", + "app.shortcut-help.openActions": "Mở menu hoạt Ä‘á»™ng", + "app.shortcut-help.openStatus": "Mở menu trạng thái", + "app.shortcut-help.togglePan": "Kich hoạt công cụ Pan (NgÆ°á»i trình bà y)", + "app.shortcut-help.nextSlideDesc": "Slide tiếp theo (NgÆ°á»i trình bà y)", + "app.shortcut-help.previousSlideDesc": "Slide phÃa trÆ°á»›c (NgÆ°á»i trình bà y)", + "app.lock-viewers.title": "Khóa ngÆ°á»i xem", + "app.lock-viewers.description": "Các tùy chá»n nà y cho phép bạn hạn chế ngÆ°á»i xem sá» dụng các tÃnh năng cụ thể. (Những cà i đặt khóa nà y không áp dụng cho ngÆ°á»i Ä‘iá»u hà nh.)", + "app.lock-viewers.featuresLable": "Nổi báºt", + "app.lock-viewers.lockStatusLabel": "Khóa trạng thái", + "app.lock-viewers.webcamLabel": "Webcam", + "app.lock-viewers.otherViewersWebcamLabel": "Xem các webcam ngÆ°á»i dùng khác", + "app.lock-viewers.microphoneLable": "Microphone", + "app.lock-viewers.PublicChatLabel": "Cuá»™c trò chuyện công cá»™ng", + "app.lock-viewers.PrivateChatLable": "Cuá»™c trò chuyện riêng tÆ°", + "app.lock-viewers.notesLabel": "Chia sẻ ghi chú", + "app.lock-viewers.Layout": "Layout", + "app.lock-viewers.ariaTitle": "Khóa phÆ°Æ¡ng thức ngÆ°á»i xem", + "app.recording.startTitle": "Bắt đầu ghi âm", + "app.recording.stopTitle": "Tạm dừng ghi âm", + "app.recording.resumeTitle": "Tiếp tục ghi âm", + "app.recording.startDescription": "(Bạn có thể chá»n lại nút ghi âm sau để tạm dừng ghi âm.)", + "app.recording.stopDescription": "Bạn có chắc chắn muốn tạm dừng ghi âm? (Bạn có thể tiếp tục bằng cách chá»n lại nút ghi.)", + "app.videoPreview.cameraLabel": "Camera", + "app.videoPreview.profileLabel": "Chất lượng", + "app.videoPreview.cancelLabel": "Hủy", + "app.videoPreview.closeLabel": "Äóng", + "app.videoPreview.startSharingLabel": "Bắt đầu chia sẻ", + "app.videoPreview.webcamOptionLabel": "Chá»n webcam", + "app.videoPreview.webcamPreviewLabel": "Xem trÆ°á»›c webcam", + "app.videoPreview.webcamSettingsTitle": "Cà i đặt webcam", + "app.videoPreview.webcamNotFoundLabel": "Không tìm thấy webcam", + "app.videoPreview.profileNotFoundLabel": "Không há»— trợ camera", + "app.video.joinVideo": "Chia sẻ webcam", + "app.video.leaveVideo": "Dừng việc chia sẻ webcam", + "app.video.iceCandidateError": "Error on adding ICE candidate", + "app.video.iceConnectionStateError": "Error 1107: ICE negotiation failed ", + "app.video.permissionError": "Error on sharing webcam. Please check permissions", + "app.video.sharingError": "Error on sharing webcam", + "app.video.notFoundError": "Không thể tìm thấy webcam. Äảm bảo rằng thiết bị đã kết nối", + "app.video.notAllowed": "Thiếu quyá»n chia sẻ webcam, vui lòng đảm bảo quyá»n truy cáºp trình duyệt của bạn", + "app.video.notSupportedError": "Chỉ có thể chia sẻ video webcam vá»›i các nguồn an toà n, dảm bảo rằng chứng chỉ SSL của bạn hợp lệ", + "app.video.notReadableError": "Không thể nháºn video webcam. Äảm bảo rằng các chÆ°Æ¡ng trình khác Ä‘ang không sá» dụng webcam", + "app.video.mediaFlowTimeout1020": "Error 1020: media could not reach the server", + "app.video.swapCam": "Äổi", + "app.video.swapCamDesc": "Äổi vị trà các webcam", + "app.video.videoLocked": "Chia sẻ webcam đã khóa", + "app.video.videoButtonDesc": "Nút tham gia video", + "app.video.videoMenu": "menu video", + "app.video.videoMenuDisabled": "menu video webcam không khả đụng trong mục cà i đặt", + "app.video.videoMenuDesc": "Mở thanh menu video trượt xuống", + "app.video.chromeExtensionError": "Bạn phải cà i đặt", + "app.video.chromeExtensionErrorLink": "tiện Ãch mở rá»™ng Chrome nà y", + "app.video.stats.title": "Các chỉ số kết nối", + "app.video.stats.packetsReceived": "Các gói đã nháºn", + "app.video.stats.packetsSent": "Các gói đã gá»i", + "app.video.stats.packetsLost": "Các gói bị mất", + "app.video.stats.bitrate": "Tốc Ä‘á»™ bit", + "app.video.stats.lostPercentage": "Tổng phần trăm bị mất", + "app.video.stats.lostRecentPercentage": "Phần trăm bị mất gần đây", + "app.video.stats.dimensions": "KÃch thÆ°á»›c", + "app.video.stats.codec": "Tiá»n mã hóa", + "app.video.stats.decodeDelay": "Äá»— trệ giải mã", + "app.video.stats.rtt": "RTT", + "app.video.stats.encodeUsagePercent": "Sá» dụng mã hóa", + "app.video.stats.currentDelay": "Sá»± cháºm trá»… hiện tại", + "app.fullscreenButton.label": "Tạo {0} toà n mà n hình", + "app.deskshare.iceConnectionStateError": "Error 1108: ICE connection failed when sharing screen", + "app.sfu.mediaServerConnectionError2000": "Error 2000: Unable to connect to media server", + "app.sfu.mediaServerOffline2001": "Error 2001: Media server is offline. Please try again later.", + "app.sfu.mediaServerNoResources2002": "Error 2002: Media server has no available resources", + "app.sfu.mediaServerRequestTimeout2003": "Error 2003: Media server requests are timing out", + "app.sfu.serverIceGatheringFailed2021": "Error 2021: Media server cannot gather ICE candidates", + "app.sfu.serverIceGatheringFailed2022": "Error 2022: Media server ICE connection failed", + "app.sfu.mediaGenericError2200": "Error 2200: Media server failed to process request", + "app.sfu.invalidSdp2202":"Error 2202: Client generated an invalid SDP", + "app.sfu.noAvailableCodec2203": "Error 2203: Server could not find an appropriate codec", + "app.meeting.endNotification.ok.label": "Äồng ý", + "app.whiteboard.annotations.poll": "Kết quả cuá»™c thăm dò ý kiến đã được công bố", + "app.whiteboard.toolbar.tools": "Công cụ", + "app.whiteboard.toolbar.tools.hand": "Pan", + "app.whiteboard.toolbar.tools.pencil": "Bút chì", + "app.whiteboard.toolbar.tools.rectangle": "Hình chữ nháºt", + "app.whiteboard.toolbar.tools.triangle": "Hình tam giác", + "app.whiteboard.toolbar.tools.ellipse": "Hình ellipse", + "app.whiteboard.toolbar.tools.line": "ÄÆ°á»ng thẳng", + "app.whiteboard.toolbar.tools.text": "Văn bản", + "app.whiteboard.toolbar.thickness": "Nét vẽ có Ä‘á»™ dà y", + "app.whiteboard.toolbar.thicknessDisabled": "Nét vẽ có Ä‘á»™ dà y không khả dụng", + "app.whiteboard.toolbar.color": "Mà u sắc", + "app.whiteboard.toolbar.colorDisabled": "Mà u sắc không khả dụng", + "app.whiteboard.toolbar.color.black": "Mà u Ä‘en", + "app.whiteboard.toolbar.color.white": "Mà u trắng", + "app.whiteboard.toolbar.color.red": "Mà u Ä‘á»", + "app.whiteboard.toolbar.color.orange": "Mà u cam", + "app.whiteboard.toolbar.color.eletricLime": "Mà u vá» chanh", + "app.whiteboard.toolbar.color.lime": "Mà u vá» chanh", + "app.whiteboard.toolbar.color.cyan": "Mà u lục lam", + "app.whiteboard.toolbar.color.dodgerBlue": "Mà u xanh lam", + "app.whiteboard.toolbar.color.blue": "Mà u xanh", + "app.whiteboard.toolbar.color.violet": "Mà u tÃm", + "app.whiteboard.toolbar.color.magenta": "Mà u Ä‘á» tÆ°Æ¡i", + "app.whiteboard.toolbar.color.silver": "Mà u bạc", + "app.whiteboard.toolbar.undo": "Hoà n tác chú thÃch", + "app.whiteboard.toolbar.clear": "Xóa tất cả các chú thÃch", + "app.whiteboard.toolbar.multiUserOn": "Báºt bảng trắng cho nhiá»u ngÆ°á»i dùng", + "app.whiteboard.toolbar.multiUserOff": "Tắt bảng trắng cho nhiá»u ngÆ°á»i dùng", + "app.whiteboard.toolbar.fontSize": "Danh sách kÃch thÆ°á»›c phông chữ", + "app.feedback.title": "Bạn vừa đăng xuất khá»i cuá»™c há»™i nghị", + "app.feedback.subtitle": "Chúng tôi muốn nghe vá» trải nghiệm của bạn vá» BigBlueButton (tùy chá»n)", + "app.feedback.textarea": "Là m thế nà o để chúng tối tạo BigBlueButton tốt hÆ¡n ?", + "app.feedback.sendFeedback": "Gá»i phản hồi", + "app.feedback.sendFeedbackDesc": "Gá»i phản hồi và rá»i cuá»™c há»p", + "app.videoDock.webcamFocusLabel": "Táºp trung", + "app.videoDock.webcamFocusDesc": "Táºp trung và o các webcam đã chá»n", + "app.videoDock.webcamUnfocusLabel": "Không táºp trung", + "app.videoDock.webcamUnfocusDesc": "Không táºp trung và o các webcam đã chá»n", + "app.invitation.title": "Lá»i má»i và o phòng chia nhóm", + "app.invitation.confirm": "Má»i", + "app.createBreakoutRoom.title": "Chia nhóm", + "app.createBreakoutRoom.ariaTitle": "Ẩn các phòng chia nhóm", + "app.createBreakoutRoom.breakoutRoomLabel": "Phong chia nhóm {0}", + "app.createBreakoutRoom.generatingURL": "Tạo URL", + "app.createBreakoutRoom.generatedURL": "Tạo", + "app.createBreakoutRoom.duration": "Thá»i lượng {0}", + "app.createBreakoutRoom.room": "Phòng {0}", + "app.createBreakoutRoom.notAssigned": "Không được chỉ định ({0})", + "app.createBreakoutRoom.join": "Phòng tham gia", + "app.createBreakoutRoom.joinAudio": "Tham gia âm thanh", + "app.createBreakoutRoom.returnAudio": "Quay lại âm thanh", + "app.createBreakoutRoom.confirm": "Tạo", + "app.createBreakoutRoom.record": "Ghi lại", + "app.createBreakoutRoom.numberOfRooms": "Số phòng", + "app.createBreakoutRoom.durationInMinutes": "Thá»i lượng (phút)", + "app.createBreakoutRoom.randomlyAssign": "Chỉ định ngẫu nhiên", + "app.createBreakoutRoom.endAllBreakouts": "Kết thúc tất cả phòng giải lao", + "app.createBreakoutRoom.roomName": "{0} (Phòng - {1})", + "app.createBreakoutRoom.doneLabel": "Xong", + "app.createBreakoutRoom.nextLabel": "Tiếp theo", + "app.createBreakoutRoom.minusRoomTime": "Giảm thá»i gian phòng chia nhóm", + "app.createBreakoutRoom.addRoomTime": "Tăng thá»i gian phòng chia nhóm", + "app.createBreakoutRoom.addParticipantLabel": "+ Thêm ngÆ°á»i tham gia", + "app.createBreakoutRoom.freeJoin": "Cho phép ngÆ°á»i dùng chá»n phòng chia nhóm để tham gia", + "app.createBreakoutRoom.leastOneWarnBreakout": "Bạn phải đặt Ãt nhất má»™t ngÆ°á»i dùng trong phòng chia nhóm", + "app.createBreakoutRoom.modalDesc": "Hoà n thà nh các bÆ°á»›c bên dÆ°á»›i để tạo các phòng trong buổi há»c của bạn. Äể thêm ngÆ°á»i tham gia và o phòng", + "app.createBreakoutRoom.roomTime": "{0} phút", + "app.externalVideo.start": "Chia sẻ video má»›i", + "app.externalVideo.title": "Chia sẻ má»™t video YouTube", + "app.externalVideo.input": "Link dÆ°á»ng dẫn video YouTube", + "app.externalVideo.urlInput": "Thêm Ä‘Æ°á»ng dẫn link YouTube", + "app.externalVideo.urlError": "Äịa chỉ liên kết video YouTube nà y không hợp lệ", + "app.externalVideo.close": "Äóng", + "app.network.connection.effective.slow": "Chúng tôi nháºn thấy các vấn Ä‘á» kết nối", + "app.network.connection.effective.slow.help": "Là m thế nà o để khắc phục nó ?", + "app.externalVideo.noteLabel": "Chú ý: Video YouTube dược chia sẻ sẽ không xuất hiện trong bản ghi âm", + "app.actionsBar.actionsDropdown.shareExternalVideo": "Chia sẻ video YouTube", + "app.actionsBar.actionsDropdown.stopShareExternalVideo": "Dừng chia sẻ video YouTube", + "app.iOSWarning.label": "Vui lòng nâng cấp lên IOS 12.2 hoặc cao hÆ¡n", + "app.legacy.unsupportedBrowser": "Có lẽ bạn Ä‘ang sá» dụng trình duyệt không được há»— trợ đầy Ä‘á». Vui lòng sá» dụng {0} hoặc {1} để được há»— trợ tốt nhất", + "app.legacy.upgradeBrowser": "Có vẻ nhÆ° bạn Ä‘ang sá» dụng phiên bản cÅ© hÆ¡n của trình duyệt được há»— trợ. Vui lòng nâng cấp trình duyệt của bạn để được há»— trợ đầy đủ." } diff --git a/bigbluebutton-html5/private/locales/zh_CN.json b/bigbluebutton-html5/private/locales/zh_CN.json index 9f45a7afd2370767ca418e0bafbe0c13ed81579c..bfc9964252250efcde598423cc5da85df33316a2 100644 --- a/bigbluebutton-html5/private/locales/zh_CN.json +++ b/bigbluebutton-html5/private/locales/zh_CN.json @@ -18,6 +18,12 @@ "app.chat.label": "èŠå¤©", "app.chat.emptyLogLabel": "èŠå¤©æ—¥å¿—是空的", "app.chat.clearPublicChatMessage": "公共èŠå¤©åŽ†å²è®°å½•å·²è¢«ä¸»æŒäººæ¸…空", + "app.captions.menu.close": "å…³é—", + "app.captions.menu.start": "开始", + "app.captions.menu.backgroundColor": "背景色", + "app.captions.menu.cancelLabel": "å–消", + "app.captions.pad.tip": "按Esc键定ä½åˆ°ç¼–辑器工具æ ", + "app.captions.pad.ownership": "获å–所有者æƒé™", "app.note.title": "共享笔记", "app.note.label": "笔记", "app.note.hideNoteLabel": "éšè—笔记é¢æ¿", @@ -106,8 +112,7 @@ "app.presentation.presentationToolbar.fitToPage": "适应页é¢", "app.presentation.presentationToolbar.goToSlide": "å¹»ç¯ç‰‡{0}", "app.presentationUploder.title": "演示", - "app.presentationUploder.message": "作为演示者,您å¯ä»¥ä¸Šè½½ä»»ä½•Office文档或PDF文件。我们推èPDF文件以获得最佳结果。", - "app.presentationUploder.confirmLabel": "ä¸Šä¼ ", + "app.presentationUploder.uploadLabel": "ä¸Šä¼ ", "app.presentationUploder.confirmDesc": "ä¿å˜æ›´æ”¹å¹¶å¼€å§‹æ¼”示", "app.presentationUploder.dismissLabel": "å–消", "app.presentationUploder.dismissDesc": "å…³é—窗å£å¹¶ä¸¢å¼ƒæ›´æ”¹", @@ -118,7 +123,6 @@ "app.presentationUploder.fileToUpload": "ç‰å¾…ä¸Šä¼ ", "app.presentationUploder.currentBadge": "当å‰", "app.presentationUploder.genericError": "哎哟,出错了", - "app.presentationUploder.rejectedError": "部分文件被拒ç»ã€‚è¯·æ£€æŸ¥æ–‡ä»¶æ ¼å¼ã€‚ ", "app.presentationUploder.upload.progress": "ä¸Šä¼ ä¸({0}%)", "app.presentationUploder.upload.413": "文件太大,最多åªèƒ½200页", "app.presentationUploder.conversion.conversionProcessingSlides": "处ç†ä¸ï¼Œç¬¬{0}页/å…±{1}页", @@ -161,6 +165,10 @@ "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.yes": "是", + "app.poll.answer.no": "å¦", "app.poll.liveResult.usersTitle": "用户", "app.poll.liveResult.responsesTitle": "å馈", "app.polling.pollingTitle": "投票选项", @@ -235,18 +243,6 @@ "app.submenu.video.videoQualityLabel": "视频画é¢è´¨é‡", "app.submenu.video.qualityOptionLabel": "选择视频质é‡", "app.submenu.video.participantsCamLabel": "查看å‚会者的摄åƒå¤´", - "app.submenu.closedCaptions.closedCaptionsLabel": "éšè—å¼å—幕", - "app.submenu.closedCaptions.takeOwnershipLabel": "获å–所有者æƒé™", - "app.submenu.closedCaptions.languageLabel": "è¯è¨€", - "app.submenu.closedCaptions.localeOptionLabel": "选择è¯è¨€", - "app.submenu.closedCaptions.noLocaleOptionLabel": "æ— å¯ç”¨çš„è¯è¨€", - "app.submenu.closedCaptions.fontFamilyLabel": "å—体", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "选择å—体", - "app.submenu.closedCaptions.fontSizeLabel": "å—å·", - "app.submenu.closedCaptions.fontSizeOptionLabel": "选择å—å·", - "app.submenu.closedCaptions.backgroundColorLabel": "背景色", - "app.submenu.closedCaptions.fontColorLabel": "å—体颜色", - "app.submenu.closedCaptions.noLocaleSelected": "没有选择地区", "app.submenu.participants.muteAllLabel": "将演示者以外的人都é™éŸ³", "app.submenu.participants.lockAllLabel": "é”定所有观众", "app.submenu.participants.lockItemLabel": "观众{0}", @@ -268,7 +264,6 @@ "app.settings.applicationTab.label": "应用", "app.settings.audioTab.label": "音频", "app.settings.videoTab.label": "视频", - "app.settings.closedcaptionTab.label": "éšè—å¼å—幕", "app.settings.usersTab.label": "å‚会者", "app.settings.main.label": "设置", "app.settings.main.cancel.label": "å–消", @@ -338,7 +333,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "观众的麦克风被é”定,您现在仅能è†å¬ã€‚", "app.breakoutJoinConfirmation.title": "åŠ å…¥åˆ†ç»„ä¼šè®®å®¤", "app.breakoutJoinConfirmation.message": "æ‚¨æƒ³åŠ å…¥å—?", - "app.breakoutJoinConfirmation.confirmLabel": "åŠ å…¥", "app.breakoutJoinConfirmation.confirmDesc": "å°†æ‚¨åŠ å…¥åˆ†ç»„ä¼šè®®å®¤", "app.breakoutJoinConfirmation.dismissLabel": "å–消", "app.breakoutJoinConfirmation.dismissDesc": "å…³é—并拒ç»åŠ 入分组会议室", diff --git a/bigbluebutton-html5/private/locales/zh_TW.json b/bigbluebutton-html5/private/locales/zh_TW.json index dacbba2b817dd3055ee8e9a4555cf580e5f4b813..30c4ad0489fe8f1b0d79dca2e5f1fe0dccecb4bf 100644 --- a/bigbluebutton-html5/private/locales/zh_TW.json +++ b/bigbluebutton-html5/private/locales/zh_TW.json @@ -16,8 +16,23 @@ "app.chat.dropdown.copy": "æ‹·è²", "app.chat.dropdown.save": "儲å˜", "app.chat.label": "èŠå¤©", + "app.chat.offline": "下線", "app.chat.emptyLogLabel": "空的èŠå¤©ç´€éŒ„", "app.chat.clearPublicChatMessage": "公開èŠå¤©ç´€éŒ„已被主æŒäººæ¸…空了", + "app.captions.label": "å—幕", + "app.captions.menu.close": "關閉", + "app.captions.menu.start": "開始", + "app.captions.menu.select": "é¸æ“‡å¯ç”¨èªžè¨€", + "app.captions.menu.title": "éš±è—å¼å—幕é¸å–®", + "app.captions.menu.fontSize": "大å°", + "app.captions.menu.fontColor": "æ–‡å—é¡è‰²", + "app.captions.menu.fontFamily": "å—å½¢", + "app.captions.menu.backgroundColor": "背景é¡è‰²", + "app.captions.menu.previewLabel": "é 覽", + "app.captions.menu.cancelLabel": "å–消", + "app.captions.pad.hide": "關閉隱è—å¼å—幕", + "app.captions.pad.tip": "壓Escéµèšç„¦ç·¨è¼¯å™¨å·¥å…·åˆ—", + "app.captions.pad.ownership": "ç²å–所有者權é™", "app.note.title": "共享ç†è¨˜", "app.note.label": "ç†è¨˜", "app.note.hideNoteLabel": "éš±è—ç†è¨˜", @@ -29,6 +44,7 @@ "app.userList.participantsTitle": "åƒèˆ‡è€…", "app.userList.messagesTitle": "訊æ¯", "app.userList.notesTitle": "ç†è¨˜", + "app.userList.captionsTitle": "å—幕", "app.userList.presenter": "主æŒäºº", "app.userList.you": "您", "app.userList.locked": "已鎖定", @@ -67,6 +83,12 @@ "app.userList.userOptions.disablePubChat": "å·²åœç”¨å…¬é–‹èŠå¤©", "app.userList.userOptions.disableNote": "共享ç†è¨˜ç›®å‰éŽ–定ä¸", "app.userList.userOptions.webcamsOnlyForModerator": "åªæœ‰ä¸»æŒäººå¯ä»¥çœ‹åˆ°èˆ‡æœƒè€…的視訊(由於鎖定è¨ç½®)", + "app.userList.userOptions.enableCam": "與會者的網路æ”影機已啟用", + "app.userList.userOptions.enableMic": "與會者的麥克風已啟用", + "app.userList.userOptions.enablePrivChat": "ç§èŠå·²å•Ÿç”¨", + "app.userList.userOptions.enablePubChat": "公開èŠå¤©å·²å•Ÿç”¨", + "app.userList.userOptions.enableNote": "公享ç†è¨˜ç›®å‰å·²å•Ÿç”¨", + "app.userList.userOptions.enableOnlyModeratorWebcam": "您ç¾åœ¨èƒ½å¤ 啟用您的網路æ”影機,大家都å¯ä»¥çœ‹åˆ°æ‚¨ã€‚", "app.media.label": "媒體", "app.media.screenshare.start": "ç•«é¢åˆ†äº«å·²é–‹å§‹", "app.media.screenshare.end": "ç•«é¢åˆ†äº«å·²çµæŸ", @@ -106,8 +128,9 @@ "app.presentation.presentationToolbar.fitToPage": "é©åˆé é¢", "app.presentation.presentationToolbar.goToSlide": "投影片 {0}", "app.presentationUploder.title": "ç°¡å ±", - "app.presentationUploder.message": "身為主æŒäººï¼Œæ‚¨å¯ä»¥ä¸Šå‚³ä»»ä½•Office文件或PDF檔。我們推薦採用PDF檔案ç²å–最佳效果。", - "app.presentationUploder.confirmLabel": "上傳", + "app.presentationUploder.message": "身為主æŒäººï¼Œæ‚¨å¯ä»¥ä¸Šå‚³ä»»ä½•Office文件或PDF檔,我們推薦採用PDF檔案ç²å–最佳效果。請確èªä½¿ç”¨å³æ‰‹é‚Šçš„圓形複é¸æ¡†é¸æ“‡ç°¡å ±ã€‚", + "app.presentationUploder.uploadLabel": "上傳", + "app.presentationUploder.confirmLabel": "確èª", "app.presentationUploder.confirmDesc": "ä¿å˜è®Šæ›´ä¸¦ä¸”å•Ÿç”¨ç°¡å ±", "app.presentationUploder.dismissLabel": "å–消", "app.presentationUploder.dismissDesc": "關閉視窗並且忽略改變", @@ -118,7 +141,7 @@ "app.presentationUploder.fileToUpload": "ç‰å¾…上傳 ...", "app.presentationUploder.currentBadge": "ç›®å‰", "app.presentationUploder.genericError": "哎呀,有å•é¡Œ", - "app.presentationUploder.rejectedError": "有些é¸å–的檔案被拒,請確èªæª”æ¡ˆæ ¼å¼ã€‚", + "app.presentationUploder.rejectedError": "所é¸æª”案已被退回,請èªæª”æ¡ˆæ ¼å¼ã€‚", "app.presentationUploder.upload.progress": "ä¸Šå‚³ä¸ ({0}%)", "app.presentationUploder.upload.413": "文件太大,已抵é”最多200é ", "app.presentationUploder.conversion.conversionProcessingSlides": "處ç†ä¸ï¼Œç¬¬ {0}/{1} é ", @@ -161,6 +184,15 @@ "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.yes": "是", + "app.poll.answer.no": "å¦", + "app.poll.answer.a": "A", + "app.poll.answer.b": "B", + "app.poll.answer.c": "C", + "app.poll.answer.d": "D", + "app.poll.answer.e": "E", "app.poll.liveResult.usersTitle": "用戶", "app.poll.liveResult.responsesTitle": "應ç”", "app.polling.pollingTitle": "投票é¸é …", @@ -222,6 +254,7 @@ "app.submenu.application.fontSizeControlLabel": "å—型大å°", "app.submenu.application.increaseFontBtnLabel": "æ高應用程å¼å—é«”", "app.submenu.application.decreaseFontBtnLabel": "é™ä½Žæ‡‰ç”¨ç¨‹å¼å—é«”", + "app.submenu.application.currentSize": "ç›®å‰ {0}", "app.submenu.application.languageLabel": "應用程å¼èªžè¨€", "app.submenu.application.ariaLanguageLabel": "é¸è®Šæ‡‰ç”¨ç¨‹å¼èªžè¨€", "app.submenu.application.languageOptionLabel": "é¸æ“‡èªžè¨€", @@ -235,18 +268,6 @@ "app.submenu.video.videoQualityLabel": "視訊å“質", "app.submenu.video.qualityOptionLabel": "é¸å–視訊å“質", "app.submenu.video.participantsCamLabel": "顯示與會者視訊", - "app.submenu.closedCaptions.closedCaptionsLabel": "éš±è—å¼å—幕", - "app.submenu.closedCaptions.takeOwnershipLabel": "ç²å–所有者權é™", - "app.submenu.closedCaptions.languageLabel": "語言", - "app.submenu.closedCaptions.localeOptionLabel": "é¸æ“‡èªžè¨€", - "app.submenu.closedCaptions.noLocaleOptionLabel": "沒有å¯ç”¨çš„語言", - "app.submenu.closedCaptions.fontFamilyLabel": "å—åž‹", - "app.submenu.closedCaptions.fontFamilyOptionLabel": "é¸æ“‡å—åž‹", - "app.submenu.closedCaptions.fontSizeLabel": "å—型大å°", - "app.submenu.closedCaptions.fontSizeOptionLabel": "é¸æ“‡å—型大å°", - "app.submenu.closedCaptions.backgroundColorLabel": "背景é¡è‰²", - "app.submenu.closedCaptions.fontColorLabel": "å—é«”é¡è‰²", - "app.submenu.closedCaptions.noLocaleSelected": "沒有é¸æ“‡åœ°å€", "app.submenu.participants.muteAllLabel": "主æŒäººå¤–全部éœéŸ³", "app.submenu.participants.lockAllLabel": "鎖定所有與會者", "app.submenu.participants.lockItemLabel": "與會者 {0}", @@ -268,7 +289,6 @@ "app.settings.applicationTab.label": "應用", "app.settings.audioTab.label": "è²éŸ³", "app.settings.videoTab.label": "視訊", - "app.settings.closedcaptionTab.label": "éš±è—å¼å—幕", "app.settings.usersTab.label": "與會者", "app.settings.main.label": "è¨å®š", "app.settings.main.cancel.label": "å–消", @@ -296,6 +316,8 @@ "app.actionsBar.actionsDropdown.saveUserNames": "儲å˜ç”¨æˆ¶å稱", "app.actionsBar.actionsDropdown.createBreakoutRoom": "創建分組會è°å®¤", "app.actionsBar.actionsDropdown.createBreakoutRoomDesc": "ç›®å‰çš„會è°å‰µå»ºåˆ†çµ„會è°å®¤", + "app.actionsBar.actionsDropdown.captionsLabel": "寫入隱è—å¼å—幕", + "app.actionsBar.actionsDropdown.captionsDesc": "é–‹/é—œå—幕é¢ç‰ˆ", "app.actionsBar.actionsDropdown.takePresenter": "當主æŒäºº", "app.actionsBar.actionsDropdown.takePresenterDesc": "è¨å®šè‡ªå·±ç‚ºä¸»æŒäºº", "app.actionsBar.emojiMenu.statusTriggerLabel": "è¨å®šç‹€æ…‹", @@ -320,6 +342,8 @@ "app.actionsBar.emojiMenu.thumbsDownLabel": "åå°", "app.actionsBar.emojiMenu.thumbsDownDesc": "變更您的狀態為åå°", "app.actionsBar.currentStatusDesc": "ç›®å‰ç‹€æ…‹ {0}", + "app.actionsBar.captions.start": "開始觀看隱è—å¼å—幕", + "app.actionsBar.captions.stop": "åœæ¢è§€çœ‹éš±è—å¼å—幕", "app.audioNotification.audioFailedError1001": "Error 1001: WebSocket 斷線了", "app.audioNotification.audioFailedError1002": "Error 1002: 無法建立 WebSocket 連線", "app.audioNotification.audioFailedError1003": "Error 1003: ç€è¦½å™¨ç‰ˆæœ¬ä¸æ”¯æ´", @@ -338,7 +362,6 @@ "app.audioNotificaion.reconnectingAsListenOnly": "與會者麥克風已被鎖定,您ç¾åœ¨åªèƒ½è†è½ã€‚", "app.breakoutJoinConfirmation.title": "åŠ å…¥åˆ†çµ„æœƒè°å®¤", "app.breakoutJoinConfirmation.message": "您è¦åŠ 入嗎?", - "app.breakoutJoinConfirmation.confirmLabel": "åŠ å…¥", "app.breakoutJoinConfirmation.confirmDesc": "å°‡æ‚¨åŠ å…¥åˆ†çµ„æœƒè°å®¤", "app.breakoutJoinConfirmation.dismissLabel": "å–消", "app.breakoutJoinConfirmation.dismissDesc": "é—œé–‰ä¸¦æ‹’çµ•åŠ å…¥åˆ†çµ„æœƒè°å®¤", @@ -404,6 +427,7 @@ "app.modal.close": "關閉", "app.modal.close.description": "忽視變更並且關閉模組", "app.modal.confirm": "完æˆ", + "app.modal.newTab": "(開啟新分é )", "app.modal.confirm.description": "儲å˜è®Šæ›´ä¸¦ä¸”關閉模組", "app.dropdown.close": "關閉", "app.error.400": "錯誤請求", @@ -592,12 +616,15 @@ "app.createBreakoutRoom.freeJoin": "å…許與會者é¸æ“‡ä¸¦åŠ 入分組討論會è°å®¤", "app.createBreakoutRoom.leastOneWarnBreakout": "您必需指派一ä½äººå“¡åˆ°æ¯å€‹åˆ†çµ„討論會è°å®¤", "app.createBreakoutRoom.modalDesc": "完æˆä»¥ä¸‹æ¥é©Ÿå»ºç«‹åˆ†çµ„會è°å®¤ï¼Œä¸¦å¢žåŠ 與會者進入其ä¸ã€‚", + "app.createBreakoutRoom.roomTime": "{0} 分é˜", "app.externalVideo.start": "分享一個影片", "app.externalVideo.title": "分享一個YouTube影片", "app.externalVideo.input": "YouTube 影片網å€", "app.externalVideo.urlInput": "åŠ å…¥YouTube網å€", "app.externalVideo.urlError": "這個網å€ä¸æ˜¯æœ‰æ•ˆçš„YouTube影片", "app.externalVideo.close": "關閉", + "app.network.connection.effective.slow": "我們查覺到連接å•é¡Œã€‚", + "app.network.connection.effective.slow.help": "如何修æ£å®ƒï¼Ÿ", "app.externalVideo.noteLabel": "注æ„: 分享 YouTube 影片ä¸æœƒé¡¯ç¤ºåœ¨éŒ„製ä¸", "app.actionsBar.actionsDropdown.shareExternalVideo": "分享 YouTube 影片", "app.actionsBar.actionsDropdown.stopShareExternalVideo": "åœæ¢åˆ†äº« YouTube 影片", diff --git a/bigbluebutton-html5/public/compatibility/sip.js b/bigbluebutton-html5/public/compatibility/sip.js index 63ea6b37abf1c01f469b39b81dbe551b487493ba..ddea0ad180f227fc59abe81bb7528f70ba60df18 100755 --- a/bigbluebutton-html5/public/compatibility/sip.js +++ b/bigbluebutton-html5/public/compatibility/sip.js @@ -11618,6 +11618,9 @@ MediaHandler.prototype = Object.create(SIP.MediaHandler.prototype, { sdp = SIP.Hacks.Chrome.needsExplicitlyInactiveSDP(sdp); sdp = SIP.Hacks.AllBrowsers.unmaskDtls(sdp); + if (window.stripMDnsCandidates) { + sdp = window.stripMDnsCandidates(sdp); + } var sdpWrapper = { type: methodName === 'createOffer' ? 'offer' : 'answer', diff --git a/bigbluebutton-html5/tests/webdriverio/pageobjects/chat.page.js b/bigbluebutton-html5/tests/webdriverio/pageobjects/chat.page.js new file mode 100644 index 0000000000000000000000000000000000000000..75ff5d6639f82dccbf99ce9ee252f69368620e22 --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/pageobjects/chat.page.js @@ -0,0 +1,79 @@ + + +const Page = require('./page'); + +const pageObject = new Page(); +const chai = require('chai'); + +class ChatPage extends Page { + get publicChatSelector() { + return '#message-input'; + } + + get publicChatElement() { + return $(this.publicChatSelector); + } + + sendPublicChatMessage(message) { + this.publicChatElement.setValue(message); + pageObject.pressEnter(); + } + + // //////// + + get chatDropdownTriggerSelector() { + return '[data-test=chatDropdownTrigger]'; + } + + get chatDropdownTriggerElement() { + return $(this.chatDropdownTriggerSelector); + } + + triggerChatDropdown() { + this.chatDropdownTriggerElement.click(); + } + + // //////// + + get clearChatButtonSelector() { + return '[data-test=chatClear]'; + } + + get clearChatButtonElement() { + return $(this.clearChatButtonSelector); + } + + clearChat() { + this.clearChatButtonElement.click(); + } + + // //////// + + get saveChatButtonSelector() { + return '[data-test=chatSave]'; + } + + get saveChatButtonElement() { + return $(this.saveChatButtonSelector); + } + + saveChat() { + this.saveChatButtonElement.click(); + } + + // //////// + + get copyChatButtonSelector() { + return '[data-test=chatCopy]'; + } + + get copyChatButtonElement() { + return $(this.copyChatButtonSelector); + } + + copyChat() { + this.copyChatButtonElement.click(); + } +} + +module.exports = new ChatPage(); diff --git a/bigbluebutton-html5/tests/webdriverio/pageobjects/landing.page.js b/bigbluebutton-html5/tests/webdriverio/pageobjects/landing.page.js new file mode 100644 index 0000000000000000000000000000000000000000..ef3c30dc61f1df53c1777ee3dd4ada3d4b9b72bf --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/pageobjects/landing.page.js @@ -0,0 +1,54 @@ + + +const Page = require('./page'); + +const pageObject = new Page(); +const chai = require('chai'); + +class LandingPage extends Page { + get meetingNameInputSelector() { + return 'input[name=meetingname]'; + } + + get meetingNameInputElement() { + return $(this.meetingNameInputSelector); + } + + // //////// + + get usernameInputSelector() { + return 'input[name=username]'; + } + + get usernameInputElement() { + return $(this.usernameInputSelector); + } + + // //////// + + joinWithButtonClick() { + this.joinButtonElement.click(); + } + + joinWithEnterKey() { + pageObject.pressEnter(); + } + + // //////// + + get joinButtonSelector() { + return 'input[type=submit]'; + } + + get joinButtonElement() { + return $(this.joinButtonSelector); + } + + // //////// + + open() { + super.open('demo/demoHTML5.jsp'); + } +} + +module.exports = new LandingPage(); diff --git a/bigbluebutton-html5/tests/webdriverio/pageobjects/modal.page.js b/bigbluebutton-html5/tests/webdriverio/pageobjects/modal.page.js new file mode 100644 index 0000000000000000000000000000000000000000..09b69ce63decbe23603c2509ba187f1489f414eb --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/pageobjects/modal.page.js @@ -0,0 +1,38 @@ + + +const Page = require('./page'); + +const pageObject = new Page(); +const chai = require('chai'); + +class ModalPage extends Page { + get modalCloseSelector() { + return 'i.icon-bbb-close'; + } + + get modalCloseElement() { + return $(this.modalCloseSelector); + } + + closeAudioModal() { + this.modalCloseElement.click(); + } + + get meetingEndedModalTitleSelector() { + return '[data-test=meetingEndedModalTitle]'; + } + + get aboutModalSelector() { + return '[aria-label=About]'; + } + + get modalConfirmButtonSelector() { + return '[data-test=modalConfirmButton]'; + } + + get modalConfirmButtonElement() { + return browser.element(this.modalConfirmButtonSelector); + } +} + +module.exports = new ModalPage(); diff --git a/bigbluebutton-html5/tests/webdriverio/pageobjects/page.js b/bigbluebutton-html5/tests/webdriverio/pageobjects/page.js new file mode 100644 index 0000000000000000000000000000000000000000..4894e8c616c2ab53b88f35fa61521c62ac589cb3 --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/pageobjects/page.js @@ -0,0 +1,13 @@ + + +class Page { + open(path) { + browser.url(path); + } + + pressEnter() { + browser.keys('Enter'); + } +} + +module.exports = Page; diff --git a/bigbluebutton-html5/tests/webdriverio/pageobjects/settings.page.js b/bigbluebutton-html5/tests/webdriverio/pageobjects/settings.page.js new file mode 100644 index 0000000000000000000000000000000000000000..e046e12b559683b5d144b669070a09812f4d0ced --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/pageobjects/settings.page.js @@ -0,0 +1,93 @@ + + +const Page = require('./page'); + +const pageObject = new Page(); +const chai = require('chai'); + +class SettingsPage extends Page { + // open the settings dropdown + get openSettingsDropdownSelector() { + return 'i.icon-bbb-more'; + } + + get openSettingsDropdownElement() { + return $(this.openSettingsDropdownSelector); + } + + openSettingsDropdown() { + this.openSettingsDropdownElement.click(); + } + + // //////// + + get endMeetingButtonSelector() { + return 'i.icon-bbb-application'; + } + + get endMeetingButtonElement() { + return $(this.endMeetingButtonSelector); + } + + clickEndMeetingButton() { + this.endMeetingButtonElement.click(); + } + + // //////// + + get confirmEndMeetingSelector() { + return '[data-test=confirmEndMeeting]'; + } + + get confirmEndMeetingElement() { + return $(this.confirmEndMeetingSelector); + } + + confirmEndMeeting() { + this.confirmEndMeetingElement.click(); + } + + // //////// + + get logoutButtonSelector() { + return 'i.icon-bbb-logout'; + } + + get logoutButtonElement() { + return $(this.logoutButtonSelector); + } + + clickLogoutButton() { + this.logoutButtonElement.click(); + } + + // //////// + + get settingsButtonSelector() { + return 'i.icon-bbb-settings'; + } + + get settingsButtonElement() { + return $(this.settingsButtonSelector); + } + + clickSettingsButton() { + this.settingsButtonElement.click(); + } + + // //////// + + get languageSelectSelector() { + return '#langSelector'; + } + + get languageSelectElement() { + return $(this.languageSelectSelector); + } + + clickLanguageSelect() { + this.languageSelectElement.click(); + } +} + +module.exports = new SettingsPage(); diff --git a/bigbluebutton-html5/tests/webdriverio/specs/chat.spec.js b/bigbluebutton-html5/tests/webdriverio/specs/chat.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..a4c8b1e32d39476ad0f8a26a7194e08c09719585 --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/specs/chat.spec.js @@ -0,0 +1,76 @@ + + +const LandingPage = require('../pageobjects/landing.page'); +const ModalPage = require('../pageobjects/modal.page'); +const ChatPage = require('../pageobjects/chat.page'); +const Utils = require('../utils'); + +const WAIT_TIME = 10000; + +const loginWithoutAudio = function () { + // login + LandingPage.open(); + browser.setValue(LandingPage.usernameInputSelector, 'user'); + LandingPage.joinWithEnterKey(); + + // close audio modal + browser.waitForExist(ModalPage.modalCloseSelector, WAIT_TIME); + ModalPage.closeAudioModal(); +}; + +describe('Chat', () => { + beforeEach(() => { + Utils.configureViewport(); + jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000; + }); + + it('should be able to send a message', + () => { + loginWithoutAudio(); + + browser.waitForExist(ChatPage.publicChatSelector, WAIT_TIME); + ChatPage.sendPublicChatMessage('Hello'); + }); + + it('should be able to save chat', + () => { + loginWithoutAudio(); + + browser.waitForExist(ChatPage.publicChatSelector, WAIT_TIME); + ChatPage.sendPublicChatMessage('Hello'); + + browser.waitForExist(ChatPage.chatDropdownTriggerSelector, WAIT_TIME); + ChatPage.triggerChatDropdown(); + + browser.waitForExist(ChatPage.saveChatButtonSelector, WAIT_TIME); + ChatPage.saveChat(); + }); + + it('should be able to copy chat', + () => { + loginWithoutAudio(); + + browser.waitForExist(ChatPage.publicChatSelector, WAIT_TIME); + ChatPage.sendPublicChatMessage('Hello'); + + browser.waitForExist(ChatPage.chatDropdownTriggerSelector, WAIT_TIME); + ChatPage.triggerChatDropdown(); + + browser.waitForExist(ChatPage.copyChatButtonSelector, WAIT_TIME); + ChatPage.copyChat(); + }); + + it('should be able to clear chat', + () => { + loginWithoutAudio(); + + browser.waitForExist(ChatPage.publicChatSelector, WAIT_TIME); + ChatPage.sendPublicChatMessage('Hello'); + + browser.waitForExist(ChatPage.chatDropdownTriggerSelector, WAIT_TIME); + ChatPage.triggerChatDropdown(); + + browser.waitForExist(ChatPage.clearChatButtonSelector, WAIT_TIME); + ChatPage.clearChat(); + }); +}); diff --git a/bigbluebutton-html5/tests/webdriverio/specs/settings.spec.js b/bigbluebutton-html5/tests/webdriverio/specs/settings.spec.js new file mode 100644 index 0000000000000000000000000000000000000000..0477fd2582283f5cae9df283e84607d25753c843 --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/specs/settings.spec.js @@ -0,0 +1,109 @@ + + +const chai = require('chai'); +const LandingPage = require('../pageobjects/landing.page'); +const ModalPage = require('../pageobjects/modal.page'); +const SettingsPage = require('../pageobjects/settings.page'); +const Utils = require('../utils'); + +const openSettingsDropdown = function () { + browser.waitForExist(SettingsPage.openSettingsDropdownSelector, WAIT_TIME); + SettingsPage.openSettingsDropdown(); +}; + +const closeAudioModal = function () { + browser.waitForExist(ModalPage.modalCloseSelector, WAIT_TIME); + ModalPage.closeAudioModal(); +}; + +const openSettingsModal = function () { + browser.waitForExist(SettingsPage.settingsButtonSelector, WAIT_TIME); + SettingsPage.clickSettingsButton(); +}; + +const WAIT_TIME = 10000; +let errorsCounter = 0; + +describe('Settings', () => { + beforeAll(() => { + Utils.configureViewport(); + jasmine.DEFAULT_TIMEOUT_INTERVAL = 300000; + }); + + beforeEach(() => { + LandingPage.open(); + browser.setValue(LandingPage.usernameInputSelector, 'user'); + browser.setValue(LandingPage.meetingNameInputSelector, 'Demo Meeting Tests'); + LandingPage.joinWithEnterKey(); + closeAudioModal(); + }); + + it('should be able to use all locales', + () => { + openSettingsDropdown(); + openSettingsModal(); + browser.waitForExist(`${SettingsPage.languageSelectSelector} option:not([disabled]`, WAIT_TIME); + const locales = browser.elements('#langSelector option:not([disabled]').value.map(e => e.getValue()); + browser.refresh(); + + browser.cdp('Console', 'enable'); + browser.on('Console.messageAdded', (log) => { + if (log.message.level === 'error') { + console.log(log.message.text); + errorsCounter += 1; + } + }); + + locales.forEach((locale) => { + errorsCounter = 0; + + closeAudioModal(); + openSettingsDropdown(); + openSettingsModal(); + + browser.waitForExist(SettingsPage.languageSelectSelector, WAIT_TIME); + SettingsPage.clickLanguageSelect(); + browser.waitForExist(`option[value=${locale}]`, WAIT_TIME); + + $(`option[value=${locale}]`).click(); + + browser.waitForExist(ModalPage.modalConfirmButtonSelector, WAIT_TIME); + ModalPage.modalConfirmButtonElement.click(); + + browser.pause(500); + browser.refresh(); + browser.pause(500); + console.log(`[switching to ${locale}] number of errors: ${errorsCounter}`); + + chai.expect(errorsCounter < 5).to.be.true; + }); + }); + + it('should be able to end meeting and get confirmation', + () => { + openSettingsDropdown(); + + // click End Meeting + browser.waitForExist(SettingsPage.endMeetingButtonSelector, WAIT_TIME); + SettingsPage.clickEndMeetingButton(); + + // confirm + browser.waitForExist(SettingsPage.confirmEndMeetingSelector, WAIT_TIME); + SettingsPage.confirmEndMeeting(); + + // check the confirmation page + browser.waitForExist(ModalPage.meetingEndedModalTitleSelector, WAIT_TIME); + }); + + it('should be able to logout and get confirmation', + () => { + openSettingsDropdown(); + + // click Logout + browser.waitForExist(SettingsPage.logoutButtonSelector, WAIT_TIME); + SettingsPage.clickLogoutButton(); + + // check the confirmation page + browser.waitForExist(ModalPage.meetingEndedModalTitleSelector, WAIT_TIME); + }); +}); diff --git a/bigbluebutton-html5/tests/webdriverio/utils.js b/bigbluebutton-html5/tests/webdriverio/utils.js new file mode 100644 index 0000000000000000000000000000000000000000..0c07a8f6de489e0074172309322233c39bde17de --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/utils.js @@ -0,0 +1,12 @@ + + +class Utils { + configureViewport() { + browser.setViewportSize({ + width: 1366, + height: 768, + }); + } +} + +module.exports = new Utils(); diff --git a/bigbluebutton-html5/tests/webdriverio/wdio.conf.js b/bigbluebutton-html5/tests/webdriverio/wdio.conf.js new file mode 100644 index 0000000000000000000000000000000000000000..65bf9e33545c7b0a8ae2e965c5a494d3f0483692 --- /dev/null +++ b/bigbluebutton-html5/tests/webdriverio/wdio.conf.js @@ -0,0 +1,10 @@ +exports.config = { + specs: ['tests/webdriverio/specs/**/*.spec.js'], + capabilities: [{ + browserName: 'chrome', + }], + services: ['devtools'], + framework: 'jasmine', + reporters: ['spec'], + baseUrl: '', +}; diff --git a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties index 264dd1111ca348b4b1caaa7c7a0b8a333ec1f5c4..cf3d146171fad1519e0ae2fde8520c90acbc67bb 100755 --- a/bigbluebutton-web/grails-app/conf/bigbluebutton.properties +++ b/bigbluebutton-web/grails-app/conf/bigbluebutton.properties @@ -201,7 +201,8 @@ keepEvents=false #---------------------------------------------------- # This URL is where the BBB client is accessible. When a user sucessfully # enters a name and password, she is redirected here to load the client. -bigbluebutton.web.serverURL=192.168.246.131 +# Do not commit changes to this field. +bigbluebutton.web.serverURL=https://bigbluebutton.example.com #---------------------------------------------------- @@ -326,5 +327,8 @@ lockSettingsLockOnJoin=true lockSettingsLockOnJoinConfigurable=false allowDuplicateExtUserid=true +<<<<<<< HEAD -defaultTextTrackUrl=${bigbluebutton.web.serverURL}/bigbluebutton \ No newline at end of file +defaultTextTrackUrl=${bigbluebutton.web.serverURL}/bigbluebutton +======= +>>>>>>> 40d87e801950a9c22332dff0500564f930059238 diff --git a/record-and-playback/core/lib/recordandplayback.rb b/record-and-playback/core/lib/recordandplayback.rb index f45bb4a2e9086dca742450e9a10f2c60d7b2d04f..04bd6e07ac07a15bc74166bdee5a8cc9126d9796 100755 --- a/record-and-playback/core/lib/recordandplayback.rb +++ b/record-and-playback/core/lib/recordandplayback.rb @@ -160,7 +160,7 @@ module BigBlueButton http.head(uri.request_uri) } unless response.is_a? Net::HTTPSuccess - raise "File not available: #{respose.message}" + raise "File not available: #{response.message}" end end