Merge branch 'v2.2.x-release' of github.com:bigbluebutton/bigbluebutton into pres-url-on-page-convert
This commit is contained in:
commit
a1ea899c35
@ -10,6 +10,10 @@ import {
|
||||
analyzeSdp,
|
||||
logSelectedCandidate,
|
||||
} from '/imports/utils/sdpUtils';
|
||||
import { Tracker } from 'meteor/tracker';
|
||||
import VoiceCallStates from '/imports/api/voice-call-states';
|
||||
import CallStateOptions from '/imports/api/voice-call-states/utils/callStates';
|
||||
import Auth from '/imports/ui/services/auth';
|
||||
|
||||
const MEDIA = Meteor.settings.public.media;
|
||||
const MEDIA_TAG = MEDIA.mediaTag;
|
||||
@ -47,14 +51,6 @@ class SIPSession {
|
||||
this.reconnectAttempt = reconnectAttempt;
|
||||
}
|
||||
|
||||
static parseDTMF(message) {
|
||||
const parse = message.match(/Signal=(.)/);
|
||||
if (parse && parse.length === 2) {
|
||||
return parse[1];
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
joinAudio({ isListenOnly, extension, inputStream }, managerCallback) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const callExtension = extension ? `${extension}${this.userData.voiceBridge}` : this.userData.voiceBridge;
|
||||
@ -119,8 +115,10 @@ class SIPSession {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.inEchoTest = false;
|
||||
|
||||
const timeout = setInterval(() => {
|
||||
clearInterval(timeout);
|
||||
let trackerControl = null;
|
||||
|
||||
const timeout = setTimeout(() => {
|
||||
trackerControl.stop();
|
||||
logger.error({ logCode: 'sip_js_transfer_timed_out' }, 'Timeout on transferring from echo test to conference');
|
||||
this.callback({
|
||||
status: this.baseCallStates.failed,
|
||||
@ -136,15 +134,22 @@ class SIPSession {
|
||||
// This is is the call transfer code ask @chadpilkey
|
||||
this.currentSession.dtmf(1);
|
||||
|
||||
this.currentSession.on('dtmf', (event) => {
|
||||
if (event.body && (typeof event.body === 'string')) {
|
||||
const key = SIPSession.parseDTMF(event.body);
|
||||
if (key === '7') {
|
||||
clearInterval(timeout);
|
||||
onTransferSuccess();
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
Tracker.autorun((c) => {
|
||||
trackerControl = c;
|
||||
const selector = { meetingId: Auth.meetingID, userId: Auth.userID };
|
||||
const query = VoiceCallStates.find(selector);
|
||||
|
||||
query.observeChanges({
|
||||
changed: (id, fields) => {
|
||||
if (fields.callState === CallStateOptions.IN_CONFERENCE) {
|
||||
clearTimeout(timeout);
|
||||
onTransferSuccess();
|
||||
|
||||
c.stop();
|
||||
resolve();
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -491,17 +496,21 @@ class SIPSession {
|
||||
};
|
||||
['iceConnectionClosed'].forEach(e => mediaHandler.on(e, handleIceConnectionTerminated));
|
||||
|
||||
const inEchoDTMF = (event) => {
|
||||
if (event.body && typeof event.body === 'string') {
|
||||
const dtmf = SIPSession.parseDTMF(event.body);
|
||||
if (dtmf === '0') {
|
||||
fsReady = true;
|
||||
checkIfCallReady();
|
||||
}
|
||||
}
|
||||
currentSession.off('dtmf', inEchoDTMF);
|
||||
};
|
||||
currentSession.on('dtmf', inEchoDTMF);
|
||||
Tracker.autorun((c) => {
|
||||
const selector = { meetingId: Auth.meetingID, userId: Auth.userID };
|
||||
const query = VoiceCallStates.find(selector);
|
||||
|
||||
query.observeChanges({
|
||||
changed: (id, fields) => {
|
||||
if (fields.callState === CallStateOptions.IN_ECHO_TEST) {
|
||||
fsReady = true;
|
||||
checkIfCallReady();
|
||||
|
||||
c.stop();
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ import clearNote from '/imports/api/note/server/modifiers/clearNote';
|
||||
import clearNetworkInformation from '/imports/api/network-information/server/modifiers/clearNetworkInformation';
|
||||
import clearLocalSettings from '/imports/api/local-settings/server/modifiers/clearLocalSettings';
|
||||
import clearRecordMeeting from './clearRecordMeeting';
|
||||
import clearVoiceCallStates from '/imports/api/voice-call-states/server/modifiers/clearVoiceCallStates';
|
||||
|
||||
export default function meetingHasEnded(meetingId) {
|
||||
removeAnnotationsStreamer(meetingId);
|
||||
@ -40,6 +41,7 @@ export default function meetingHasEnded(meetingId) {
|
||||
clearNetworkInformation(meetingId);
|
||||
clearLocalSettings(meetingId);
|
||||
clearRecordMeeting(meetingId);
|
||||
clearVoiceCallStates(meetingId);
|
||||
|
||||
return Logger.info(`Cleared Meetings with id ${meetingId}`);
|
||||
});
|
||||
|
13
bigbluebutton-html5/imports/api/voice-call-states/index.js
Normal file
13
bigbluebutton-html5/imports/api/voice-call-states/index.js
Normal file
@ -0,0 +1,13 @@
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
|
||||
const VoiceCallStates = new Mongo.Collection('voiceCallStates');
|
||||
|
||||
if (Meteor.isServer) {
|
||||
// types of queries for the voice users:
|
||||
// 1. intId
|
||||
// 2. meetingId, intId
|
||||
|
||||
VoiceCallStates._ensureIndex({ meetingId: 1, userId: 1 });
|
||||
}
|
||||
|
||||
export default VoiceCallStates;
|
@ -0,0 +1,4 @@
|
||||
import RedisPubSub from '/imports/startup/server/redis';
|
||||
import handleVoiceCallStateEvent from './handlers/voiceCallStateEvent';
|
||||
|
||||
RedisPubSub.on('VoiceCallStateEvtMsg', handleVoiceCallStateEvent);
|
@ -0,0 +1,48 @@
|
||||
import { check } from 'meteor/check';
|
||||
import VoiceCallState from '/imports/api/voice-call-states';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
|
||||
// "CALL_STARTED", "IN_ECHO_TEST", "IN_CONFERENCE", "CALL_ENDED"
|
||||
|
||||
export default function handleVoiceCallStateEvent({ body }, meetingId) {
|
||||
const {
|
||||
voiceConf,
|
||||
clientSession,
|
||||
userId,
|
||||
callerName,
|
||||
callState,
|
||||
} = body;
|
||||
|
||||
check(meetingId, String);
|
||||
check(voiceConf, String);
|
||||
check(clientSession, String);
|
||||
check(userId, String);
|
||||
check(callerName, String);
|
||||
check(callState, String);
|
||||
|
||||
const selector = {
|
||||
meetingId,
|
||||
userId,
|
||||
clientSession,
|
||||
};
|
||||
|
||||
const modifier = {
|
||||
$set: {
|
||||
meetingId,
|
||||
userId,
|
||||
voiceConf,
|
||||
clientSession,
|
||||
callState,
|
||||
},
|
||||
};
|
||||
|
||||
const cb = (err) => {
|
||||
if (err) {
|
||||
return Logger.error(`Update voice call state=${userId}: ${err}`);
|
||||
}
|
||||
|
||||
return Logger.debug(`Update voice call state=${userId} meeting=${meetingId} clientSession=${clientSession}`);
|
||||
};
|
||||
|
||||
return VoiceCallState.upsert(selector, modifier, cb);
|
||||
}
|
@ -0,0 +1,2 @@
|
||||
import './eventHandlers';
|
||||
import './publishers';
|
@ -0,0 +1,14 @@
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import VoiceCallStates from '/imports/api/voice-users';
|
||||
|
||||
export default function clearVoiceCallStates(meetingId) {
|
||||
if (meetingId) {
|
||||
return VoiceCallStates.remove({ meetingId }, () => {
|
||||
Logger.info(`Cleared VoiceCallStates in (${meetingId})`);
|
||||
});
|
||||
}
|
||||
|
||||
return VoiceCallStates.remove({}, () => {
|
||||
Logger.info('Cleared VoiceCallStates in all meetings');
|
||||
});
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
import VoiceCallStates from '/imports/api/voice-call-states';
|
||||
import { Meteor } from 'meteor/meteor';
|
||||
import Logger from '/imports/startup/server/logger';
|
||||
import { extractCredentials } from '/imports/api/common/server/helpers';
|
||||
|
||||
function voiceCallStates() {
|
||||
if (!this.userId) {
|
||||
return VoiceCallStates.find({ meetingId: '' });
|
||||
}
|
||||
const { meetingId, requesterUserId } = extractCredentials(this.userId);
|
||||
|
||||
Logger.debug(`Publishing Voice Call States for ${meetingId} ${requesterUserId}`);
|
||||
|
||||
return VoiceCallStates.find({ meetingId, userId: requesterUserId });
|
||||
}
|
||||
|
||||
function publish(...args) {
|
||||
const boundVoiceCallStates = voiceCallStates.bind(this);
|
||||
return boundVoiceCallStates(...args);
|
||||
}
|
||||
|
||||
Meteor.publish('voice-call-states', publish);
|
@ -0,0 +1,8 @@
|
||||
const CallStateOptions = {
|
||||
CALL_STARTED: 'CALL_STARTED',
|
||||
IN_ECHO_TEST: 'IN_ECHO_TEST',
|
||||
IN_CONFERENCE: 'IN_CONFERENCE',
|
||||
CALL_ENDED: 'CALL_ENDED',
|
||||
};
|
||||
|
||||
export default CallStateOptions;
|
@ -89,10 +89,6 @@ const intlMessages = defineMessages({
|
||||
id: 'app.presentationUploder.fileToUpload',
|
||||
description: 'message used in the file selected for upload',
|
||||
},
|
||||
genericError: {
|
||||
id: 'app.presentationUploder.genericError',
|
||||
description: 'generic error while uploading/converting',
|
||||
},
|
||||
rejectedError: {
|
||||
id: 'app.presentationUploder.rejectedError',
|
||||
description: 'some files rejected, please check the file mime types',
|
||||
@ -132,10 +128,22 @@ const intlMessages = defineMessages({
|
||||
id: 'app.presentationUploder.conversion.pageCountExceeded',
|
||||
description: 'warns the user that the conversion failed because of the page count',
|
||||
},
|
||||
PAGE_COUNT_FAILED: {
|
||||
id: 'app.presentationUploder.conversion.pageCountFailed',
|
||||
description: '',
|
||||
},
|
||||
PDF_HAS_BIG_PAGE: {
|
||||
id: 'app.presentationUploder.conversion.pdfHasBigPage',
|
||||
description: 'warns the user that the conversion failed because of the pdf page siz that exceeds the allowed limit',
|
||||
},
|
||||
OFFICE_DOC_CONVERSION_INVALID: {
|
||||
id: 'app.presentationUploder.conversion.officeDocConversionInvalid',
|
||||
description: '',
|
||||
},
|
||||
OFFICE_DOC_CONVERSION_FAILED: {
|
||||
id: 'app.presentationUploder.conversion.officeDocConversionFailed',
|
||||
description: '',
|
||||
},
|
||||
isDownloadable: {
|
||||
id: 'app.presentationUploder.isDownloadableLabel',
|
||||
description: 'presentation is available for downloading by all viewers',
|
||||
@ -249,7 +257,7 @@ class PresentationUploader extends Component {
|
||||
}
|
||||
|
||||
handleConfirm() {
|
||||
const { mountModal, intl, handleSave } = this.props;
|
||||
const { mountModal, handleSave } = this.props;
|
||||
const { disableActions, presentations, oldCurrentId } = this.state;
|
||||
const presentationsToSave = presentations
|
||||
.filter(p => !p.upload.error && !p.conversion.error);
|
||||
@ -287,7 +295,6 @@ class PresentationUploader extends Component {
|
||||
});
|
||||
})
|
||||
.catch((error) => {
|
||||
notify(intl.formatMessage(intlMessages.genericError), 'error');
|
||||
logger.error({
|
||||
logCode: 'presentationuploader_component_save_error',
|
||||
extraInfo: { error },
|
||||
@ -483,6 +490,7 @@ class PresentationUploader extends Component {
|
||||
|
||||
renderPresentationItemStatus(item) {
|
||||
const { intl } = this.props;
|
||||
|
||||
if (!item.upload.done && item.upload.progress === 0) {
|
||||
return intl.formatMessage(intlMessages.fileToUpload);
|
||||
}
|
||||
@ -494,13 +502,11 @@ class PresentationUploader extends Component {
|
||||
}
|
||||
|
||||
if (item.upload.done && item.upload.error) {
|
||||
const errorMessage = intlMessages[item.upload.status] || intlMessages.genericError;
|
||||
return intl.formatMessage(errorMessage);
|
||||
return intl.formatMessage(intlMessages[item.upload.status]);
|
||||
}
|
||||
|
||||
if (!item.conversion.done && item.conversion.error) {
|
||||
const errorMessage = intlMessages[item.conversion.status] || intlMessages.genericError;
|
||||
return intl.formatMessage(errorMessage);
|
||||
return intl.formatMessage(intlMessages[item.conversion.status]);
|
||||
}
|
||||
|
||||
if (!item.conversion.done && !item.conversion.error) {
|
||||
|
@ -20,6 +20,7 @@ const SUBSCRIPTIONS = [
|
||||
'voiceUsers', 'whiteboard-multi-user', 'screenshare', 'group-chat',
|
||||
'presentation-pods', 'users-settings', 'guestUser', 'users-infos', 'note', 'meeting-time-remaining',
|
||||
'network-information', 'ping-pong', 'local-settings', 'users-typing', 'record-meetings', 'video-streams',
|
||||
'voice-call-states',
|
||||
];
|
||||
|
||||
class Subscriptions extends Component {
|
||||
|
@ -82,6 +82,8 @@
|
||||
text-align: left;
|
||||
padding-left: var(--lg-padding-y);
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
|
||||
[dir="rtl"] & {
|
||||
text-align: right;
|
||||
|
@ -168,7 +168,6 @@
|
||||
"app.presentationUploder.browseImagesLabel": "or browse/capture for images",
|
||||
"app.presentationUploder.fileToUpload": "To be uploaded ...",
|
||||
"app.presentationUploder.currentBadge": "Current",
|
||||
"app.presentationUploder.genericError": "Ops, something went wrong",
|
||||
"app.presentationUploder.rejectedError": "The selected file(s) have been rejected. Please check the file type(s).",
|
||||
"app.presentationUploder.upload.progress": "Uploading ({0}%)",
|
||||
"app.presentationUploder.upload.413": "File is too large. Please split into multiple files.",
|
||||
@ -177,9 +176,12 @@
|
||||
"app.presentationUploder.conversion.generatingThumbnail": "Generating thumbnails ...",
|
||||
"app.presentationUploder.conversion.generatedSlides": "Slides generated ...",
|
||||
"app.presentationUploder.conversion.generatingSvg": "Generating SVG images ...",
|
||||
"app.presentationUploder.conversion.pageCountExceeded": "Ops, the page count exceeded the limit of 200 pages",
|
||||
"app.presentationUploder.conversion.pageCountExceeded": "Number of pages exceeded. Please break file into multiple files.",
|
||||
"app.presentationUploder.conversion.officeDocConversionInvalid": "Failed to process office document. Please upload a PDF instead.",
|
||||
"app.presentationUploder.conversion.officeDocConversionFailed": "Failed to process office document. Please upload a PDF instead.",
|
||||
"app.presentationUploder.conversion.pdfHasBigPage": "We could not convert the PDF file, please try optimizing it",
|
||||
"app.presentationUploder.conversion.timeout": "Ops, the conversion took too long",
|
||||
"app.presentationUploder.conversion.pageCountFailed": "Failed to determine the number of pages.",
|
||||
"app.presentationUploder.isDownloadableLabel": "Do not allow presentation to be downloaded",
|
||||
"app.presentationUploder.isNotDownloadableLabel": "Allow presentation to be downloaded",
|
||||
"app.presentationUploder.removePresentationLabel": "Remove presentation",
|
||||
|
@ -576,14 +576,18 @@
|
||||
"app.video.stats.codec": "Codec",
|
||||
"app.video.stats.decodeDelay": "Retardo de decodificación",
|
||||
"app.video.stats.rtt": "RTT",
|
||||
"app.video.stats.encodeUsagePercent": "Codificar uso",
|
||||
"app.video.stats.currentDelay": "Retardo actual",
|
||||
"app.fullscreenButton.label": "Hacer {0} pantalla completa",
|
||||
"app.deskshare.iceConnectionStateError": "Error 1108: La conexión ICE falló al compartir pantalla",
|
||||
"app.sfu.mediaServerConnectionError2000": "Error 2000: Incapaz de conectarse al servidor multimedia",
|
||||
"app.sfu.mediaServerOffline2001": "Error 2001: El servidor multimedia está fuera de línea. Por favor, inténtelo de nuevo más tarde",
|
||||
"app.sfu.mediaServerNoResources2002": "Error 2002: El servidor multimedia no tiene recursos disponibles",
|
||||
"app.sfu.mediaServerRequestTimeout2003": "Error 2003: Solicitudes del servidor de medios están agotándose",
|
||||
"app.sfu.serverIceGatheringFailed2021": "Error 2021: Servidor de medios no puede reunir candidatos ICE",
|
||||
"app.sfu.serverIceGatheringFailed2022": "Error 2022: Error en la conexión al servidor multimedia ICE",
|
||||
"app.sfu.mediaGenericError2200": "Error 2200: El servidor multimedia falló al procesar la solicitud",
|
||||
"app.sfu.invalidSdp2202":"Error 2202: El cliente generó un SDP inválido",
|
||||
"app.sfu.noAvailableCodec2203": "Error 2203: El servidor no pudo encontrar el codec adecuado",
|
||||
"app.meeting.endNotification.ok.label": "OK",
|
||||
"app.whiteboard.annotations.poll": "Los resultados de la encuesta fueron publicados",
|
||||
@ -621,6 +625,10 @@
|
||||
"app.feedback.textarea": "¿Cómo podemos hacer BigBlueButton mejor?",
|
||||
"app.feedback.sendFeedback": "Enviar retroalimentación",
|
||||
"app.feedback.sendFeedbackDesc": "Enviar retroalimentación y abandonar la reunión",
|
||||
"app.videoDock.webcamFocusLabel": "Enfoque",
|
||||
"app.videoDock.webcamFocusDesc": "Enfoque la cámara seleccionada",
|
||||
"app.videoDock.webcamUnfocusLabel": "Desenfoque",
|
||||
"app.videoDock.webcamUnfocusDesc": "Desenfoque la cámara seleccionada",
|
||||
"app.videoDock.autoplayBlockedDesc": "Necesitamos su permiso para mostrarle las webcams de otros usuarios",
|
||||
"app.videoDock.autoplayAllowLabel": "Ver webcams",
|
||||
"app.invitation.title": "Invitación a sala externa",
|
||||
@ -635,6 +643,7 @@
|
||||
"app.createBreakoutRoom.notAssigned": "No asignado ({0})",
|
||||
"app.createBreakoutRoom.join": "Unirse a la sala",
|
||||
"app.createBreakoutRoom.joinAudio": "Unirse al audio",
|
||||
"app.createBreakoutRoom.returnAudio": "Regrese el audio",
|
||||
"app.createBreakoutRoom.alreadyConnected": "Ya en la sala",
|
||||
"app.createBreakoutRoom.confirm": "Crear",
|
||||
"app.createBreakoutRoom.record": "Grabación",
|
||||
@ -645,9 +654,12 @@
|
||||
"app.createBreakoutRoom.roomName": "{0} (Sala - {1})",
|
||||
"app.createBreakoutRoom.doneLabel": "Hecho",
|
||||
"app.createBreakoutRoom.nextLabel": "Siguiente",
|
||||
"app.createBreakoutRoom.minusRoomTime": "Disminuya el tiempo de la sala externa a ",
|
||||
"app.createBreakoutRoom.addRoomTime": "Incremente tiempo de la sala externa a ",
|
||||
"app.createBreakoutRoom.addParticipantLabel": "+ Añadir participante",
|
||||
"app.createBreakoutRoom.freeJoin": "Permitir a los usuarios escoger una sala externa a la que unirse",
|
||||
"app.createBreakoutRoom.leastOneWarnBreakout": "Debe colocar al menos un usuario en la sala externa",
|
||||
"app.createBreakoutRoom.modalDesc": "Sugerencia: puede arrastrar y soltar el nombre de un usuario para asignarlo a una sala externa específica.",
|
||||
"app.createBreakoutRoom.roomTime": "{0} minutos",
|
||||
"app.createBreakoutRoom.numberOfRoomsError": "El número de salas es inválido",
|
||||
"app.externalVideo.start": "Compartir un nuevo video",
|
||||
@ -656,11 +668,16 @@
|
||||
"app.externalVideo.urlInput": "Introducir URL de video",
|
||||
"app.externalVideo.urlError": "La URL de este video no está soportada",
|
||||
"app.externalVideo.close": "Cerrar",
|
||||
"app.externalVideo.autoPlayWarning": "Reproduzca el video para habilitar la sincronización de medios",
|
||||
"app.network.connection.effective.slow": "Estamos notando problemas de conectividad.",
|
||||
"app.network.connection.effective.slow.help": "Más información",
|
||||
"app.externalVideo.noteLabel": "Nota: los videos externos compartidos no aparecerán en la grabación. Se admiten las URL de YouTube, Vimeo, Instructure Media, Twitch y Daily Motion.",
|
||||
"app.actionsBar.actionsDropdown.shareExternalVideo": "Compartir un video externo",
|
||||
"app.actionsBar.actionsDropdown.stopShareExternalVideo": "Detener compartir video externo",
|
||||
"app.iOSWarning.label": "Por favor, actualice a iOS 12.2 o mayor",
|
||||
"app.legacy.upgradeBrowser": "Parece que está usando una versión antigua no soportada del navegador. Por favor, actualice su navegador para soporte total."
|
||||
"app.legacy.unsupportedBrowser": "Parece que estás usando un navegador que no es compatible. Utilice {0} o {1} para obtener soporte completo.",
|
||||
"app.legacy.upgradeBrowser": "Parece que está usando una versión antigua no soportada del navegador. Por favor, actualice su navegador para soporte total.",
|
||||
"app.legacy.criosBrowser": "En iOS, use Safari para obtener soporte completo."
|
||||
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,10 @@
|
||||
"app.chat.submitLabel": "Надіслати повідомлення",
|
||||
"app.chat.errorMinMessageLength": "Повідомлення із {0} символа(-ів) занадто коротке",
|
||||
"app.chat.errorMaxMessageLength": "Повідомлення із {0} символа(-ів) занадто довге",
|
||||
"app.chat.disconnected": "Ви від'єднались, повідомлення не можуть бути надіслані",
|
||||
"app.chat.locked": "Чат заблокований, повідомлення неможливо надіслати",
|
||||
"app.chat.inputLabel": "Введення повідомлення для чату {0}",
|
||||
"app.chat.inputPlaceholder": "Надіслати повідомлення для {0}",
|
||||
"app.chat.titlePublic": "Загальний чат",
|
||||
"app.chat.titlePrivate": "Приватний чат з {0}",
|
||||
"app.chat.partnerDisconnected": "{0} покинув конференцію",
|
||||
@ -17,10 +20,18 @@
|
||||
"app.chat.label": "Чат",
|
||||
"app.chat.offline": "Не в мережі",
|
||||
"app.chat.emptyLogLabel": "Журнал чату порожній",
|
||||
"app.chat.clearPublicChatMessage": "Історія публічного чату була очищена модератором",
|
||||
"app.chat.clearPublicChatMessage": "Історія загального чату була очищена модератором",
|
||||
"app.chat.multi.typing": "Декілька користувачів набирають",
|
||||
"app.chat.one.typing": "{0} набирає",
|
||||
"app.chat.two.typing": "{0} і {1} набирають",
|
||||
"app.captions.label": "Субтитри",
|
||||
"app.captions.menu.close": "Закрити",
|
||||
"app.captions.menu.start": "Почати",
|
||||
"app.captions.menu.ariaStart": "Почати писати субтитри",
|
||||
"app.captions.menu.ariaStartDesc": "Відкриває редактор субтитрів та закриває цей діалог",
|
||||
"app.captions.menu.select": "Виберіть доступну мову",
|
||||
"app.captions.menu.ariaSelect": "Мова субтитрів",
|
||||
"app.captions.menu.subtitle": "Будь ласка, виберіть мову і стилі прихованих субтитрів для вашого сеансу",
|
||||
"app.captions.menu.title": "Субтитри",
|
||||
"app.captions.menu.fontSize": "Розмір",
|
||||
"app.captions.menu.fontColor": "Колір тексту",
|
||||
@ -30,6 +41,13 @@
|
||||
"app.captions.menu.cancelLabel": "Відмінити",
|
||||
"app.captions.pad.hide": "Приховати субтитри",
|
||||
"app.captions.pad.tip": "Натисніть Esc, щоб сфокусувати панель інструментів редактора",
|
||||
"app.captions.pad.ownership": "Стати ведучим",
|
||||
"app.captions.pad.ownershipTooltip": "Ви будете призначені як власник {0} субтитрів",
|
||||
"app.captions.pad.interimResult": "Проміжні результати",
|
||||
"app.captions.pad.dictationStart": "Почати диктування",
|
||||
"app.captions.pad.dictationStop": "Зупинити диктування",
|
||||
"app.captions.pad.dictationOnDesc": "Включити розпізнавання мови",
|
||||
"app.captions.pad.dictationOffDesc": "Виключити розпізнавання мови",
|
||||
"app.note.title": "Спільні примітки",
|
||||
"app.note.label": "Примітки",
|
||||
"app.note.hideNoteLabel": "Сховати примітки",
|
||||
@ -41,6 +59,8 @@
|
||||
"app.userList.participantsTitle": "Учасники",
|
||||
"app.userList.messagesTitle": "Повідомлення",
|
||||
"app.userList.notesTitle": "Примітки",
|
||||
"app.userList.notesListItem.unreadContent": "В розділі \"Спільні примітки\" появилась нова інформація",
|
||||
"app.userList.captionsTitle": "Субтитри",
|
||||
"app.userList.presenter": "Ведучий",
|
||||
"app.userList.you": "Ви",
|
||||
"app.userList.locked": "Обмеження",
|
||||
@ -50,6 +70,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": "Вимкнути мікрофон користувача",
|
||||
@ -59,6 +80,7 @@
|
||||
"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": "Вимкнути мікрофон всім",
|
||||
@ -74,19 +96,29 @@
|
||||
"app.userList.userOptions.disableCam": "Веб-камери глядачів відключені",
|
||||
"app.userList.userOptions.disableMic": "Мікрофони глядачів відключені",
|
||||
"app.userList.userOptions.disablePrivChat": "Приватний чат вимкнено",
|
||||
"app.userList.userOptions.disablePubChat": "Загальнодоступний чат вимкнено",
|
||||
"app.userList.userOptions.disablePubChat": "Загальний чат вимкнено",
|
||||
"app.userList.userOptions.disableNote": "Спільні нотатки тепер заблоковані",
|
||||
"app.userList.userOptions.hideUserList": "Список користувачів тепер прихований від учасників",
|
||||
"app.userList.userOptions.webcamsOnlyForModerator": "Веб-камери глядачів можуть бачити лише модератори (через налаштування блокування)",
|
||||
"app.userList.content.participants.options.clearedStatus": "Статус очищено",
|
||||
"app.userList.userOptions.enableCam": "Веб-камери глядачів увімкнено",
|
||||
"app.userList.userOptions.enableMic": "Мікрофони глядачів увімкнено",
|
||||
"app.userList.userOptions.enablePrivChat": "Приватний чат увімкнено",
|
||||
"app.userList.userOptions.enablePubChat": "Загальнодоступний чат увімкнено",
|
||||
"app.userList.userOptions.enablePubChat": "Загальний чат увімкнено",
|
||||
"app.userList.userOptions.enableNote": "Спільні нотатки тепер увімкнено",
|
||||
"app.userList.userOptions.showUserList": "Список користувачів тепер видимий для учасників",
|
||||
"app.userList.userOptions.enableOnlyModeratorWebcam": "Тепер можна активувати веб-камеру, всі бачитимуть вас",
|
||||
"app.media.label": "Медіа",
|
||||
"app.media.autoplayAlertDesc": "Дозволити доступ",
|
||||
"app.media.screenshare.start": "Демонстрація екрану розпочалася",
|
||||
"app.media.screenshare.end": "Демонстрацію екрану закінчено",
|
||||
"app.media.screenshare.safariNotSupported": "Демонстрація екрану наразі не підтримується Safari. Будь ласка, використовуйте Firefox або Google Chrome.",
|
||||
"app.media.screenshare.autoplayBlockedDesc": "Нам потрібен Ваш дозвіл, щоб показати Вам екран ведучого.",
|
||||
"app.media.screenshare.autoplayAllowLabel": "Показати екран, який демонструється",
|
||||
"app.screenshare.notAllowed": "Помилка: Дозвіл на доступ до екрану не було надано.",
|
||||
"app.screenshare.notSupportedError": "Помилка: Демонстрація екрану можлива тільки на безпечних (SSL) доменах",
|
||||
"app.screenshare.notReadableError": "Помилка: При спробі захопити екран сталась помилка",
|
||||
"app.screenshare.genericError": "Помилка: Відбулась помилка при демонстрації екрану. Будь ласка, спробуйте пізніше",
|
||||
"app.meeting.ended": "Ця сесія завершилася",
|
||||
"app.meeting.meetingTimeRemaining": "Залишилось часу зустрічі: {0}",
|
||||
"app.meeting.meetingTimeHasEnded": "Час закінчився. Зустріч буде закрито незабаром",
|
||||
@ -99,6 +131,8 @@
|
||||
"app.presentation.startSlideContent": "Початок вмісту слайду",
|
||||
"app.presentation.endSlideContent": "Кінець вмісту слайду",
|
||||
"app.presentation.emptySlideContent": "Даний слайд порожній",
|
||||
"app.presentation.presentationToolbar.noNextSlideDesc": "Кінець презентації",
|
||||
"app.presentation.presentationToolbar.noPrevSlideDesc": "Початок презентації",
|
||||
"app.presentation.presentationToolbar.selectLabel": "Вибрати слайд",
|
||||
"app.presentation.presentationToolbar.prevSlideLabel": "Попередній слайд",
|
||||
"app.presentation.presentationToolbar.prevSlideDesc": "Перемкнути презентацію на попередній слайд",
|
||||
@ -119,8 +153,10 @@
|
||||
"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-файл. Переконайтеся, що вибрано презентацію за допомогою прапорця праворуч.",
|
||||
"app.presentationUploder.uploadLabel": "Завантажити",
|
||||
"app.presentationUploder.confirmLabel": "Підтвердити",
|
||||
"app.presentationUploder.confirmDesc": "Зберегти зміни та розпочати презентацію",
|
||||
@ -135,12 +171,14 @@
|
||||
"app.presentationUploder.genericError": "Ой, щось пішло не так",
|
||||
"app.presentationUploder.rejectedError": "Вибрані файл(и) відхилено. Перевірте тип файлу(iв).",
|
||||
"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.generatingSvg": "Генерування слайдів SVG...",
|
||||
"app.presentationUploder.conversion.pageCountExceeded": "Ой, кількість сторінок перевищила ліміт у 200 сторінок",
|
||||
"app.presentationUploder.conversion.pdfHasBigPage": "Ми не змогли конвертувати PDF файл, будь ласка, спробуйте оптимізувати його",
|
||||
"app.presentationUploder.conversion.timeout": "Ой, перетворення займає надто багато часу",
|
||||
"app.presentationUploder.isDownloadableLabel": "Не дозволяти скачувати презентацію",
|
||||
"app.presentationUploder.isNotDownloadableLabel": "Дозволити скачувати презентацію",
|
||||
@ -156,6 +194,7 @@
|
||||
"app.poll.quickPollInstruction": "Оберіть опцію нижче, щоб почати опитування.",
|
||||
"app.poll.customPollLabel": "Своє опитування",
|
||||
"app.poll.startCustomLabel": "Розпочати своє опитування",
|
||||
"app.poll.activePollInstruction": "Залиште цю панель відкритою, щоб бачити відповіді на опитування в реальному часі. Коли будете готові, оберіть \"Опублікувати результати голосування\", щоб опублікувати результати і завершити опитування.",
|
||||
"app.poll.publishLabel": "Опублікувати результати опитування",
|
||||
"app.poll.backLabel": "Назад до параметрів опитування",
|
||||
"app.poll.closeLabel": "Закрити",
|
||||
@ -192,6 +231,7 @@
|
||||
"app.downloadPresentationButton.label": "Скачати оригінал презентації",
|
||||
"app.connectingMessage": "З'єднання...",
|
||||
"app.waitingMessage": "Втрачено з'еднання. Спроба повторного підключення через {0} секунд...",
|
||||
"app.retryNow": "Повторити",
|
||||
"app.navBar.settingsDropdown.optionsLabel": "Опції",
|
||||
"app.navBar.settingsDropdown.fullscreenLabel": "Розгорнути на весь екран",
|
||||
"app.navBar.settingsDropdown.settingsLabel": "Відкрити параметри",
|
||||
@ -203,7 +243,7 @@
|
||||
"app.navBar.settingsDropdown.aboutDesc": "Показати інформацію про клієнта",
|
||||
"app.navBar.settingsDropdown.leaveSessionDesc": "Залишити конференцію",
|
||||
"app.navBar.settingsDropdown.exitFullscreenDesc": "Вийти з повноекранного режиму",
|
||||
"app.navBar.settingsDropdown.hotkeysLabel": "Гарячі клавіши",
|
||||
"app.navBar.settingsDropdown.hotkeysLabel": "Гарячі клавіші",
|
||||
"app.navBar.settingsDropdown.hotkeysDesc": "Перепис доступних гарячих клавiш",
|
||||
"app.navBar.settingsDropdown.helpLabel": "Допомога",
|
||||
"app.navBar.settingsDropdown.helpDesc": "Перенаправляє користувача з відеоуроками (відкривається нова вкладка)",
|
||||
@ -215,6 +255,7 @@
|
||||
"app.navBar.recording": "Ця сесія записується",
|
||||
"app.navBar.recording.on": "Записується",
|
||||
"app.navBar.recording.off": "Не записується",
|
||||
"app.navBar.emptyAudioBrdige": "Немає активного мікрофону. Активуйте Ваш мікрофон, щоб додати звук в даний запис.",
|
||||
"app.leaveConfirmation.confirmLabel": "Вийти",
|
||||
"app.leaveConfirmation.confirmDesc": "Вийти з конференції",
|
||||
"app.endMeeting.title": "Завершити зустріч",
|
||||
@ -241,6 +282,8 @@
|
||||
"app.submenu.application.animationsLabel": "Анімації",
|
||||
"app.submenu.application.audioAlertLabel": "Аудіо сповіщення для чату",
|
||||
"app.submenu.application.pushAlertLabel": "Спливаючі сповіщення для чату",
|
||||
"app.submenu.application.userJoinAudioAlertLabel": "Аудіо сповіщення приєднання користувача",
|
||||
"app.submenu.application.userJoinPushAlertLabel": "Спливаючі сповіщення приєднання користувача",
|
||||
"app.submenu.application.fontSizeControlLabel": "Розмір шрифту",
|
||||
"app.submenu.application.increaseFontBtnLabel": "Збільшити шрифт застосунку",
|
||||
"app.submenu.application.decreaseFontBtnLabel": "Зменшити шрифт застосунку",
|
||||
@ -273,10 +316,14 @@
|
||||
"app.settings.save-notification.label": "Налаштування збережено",
|
||||
"app.switch.onLabel": "УВІМК.",
|
||||
"app.switch.offLabel": "ВИМК.",
|
||||
"app.talkingIndicator.ariaMuteDesc" : "Натисніть, щоб вимкнути мікрофон користувача",
|
||||
"app.talkingIndicator.isTalking" : "{0} говорить",
|
||||
"app.talkingIndicator.wasTalking" : "{0} закінчив говорити",
|
||||
"app.actionsBar.actionsDropdown.actionsLabel": "Дії",
|
||||
"app.actionsBar.actionsDropdown.presentationLabel": "Завантажити презентацію",
|
||||
"app.actionsBar.actionsDropdown.initPollLabel": "Розпочати опитування",
|
||||
"app.actionsBar.actionsDropdown.desktopShareLabel": "Демонструвати ваш екран",
|
||||
"app.actionsBar.actionsDropdown.lockedDesktopShareLabel": "Демонстрація екрану заблокована",
|
||||
"app.actionsBar.actionsDropdown.stopDesktopShareLabel": "Зупинити демонстрацію екрану",
|
||||
"app.actionsBar.actionsDropdown.presentationDesc": "Завантажити вашу презентацію",
|
||||
"app.actionsBar.actionsDropdown.initPollDesc": "Розпочати опитування",
|
||||
@ -284,8 +331,11 @@
|
||||
"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": "Задати статус",
|
||||
@ -337,6 +387,7 @@
|
||||
"app.breakoutTimeRemainingMessage": "Час до закінчення конференції: {0}",
|
||||
"app.breakoutWillCloseMessage": "Час вичерпано. Конференцію невдовзі буде закрито",
|
||||
"app.calculatingBreakoutTimeRemaining": "Підрахунок часу що залишився...",
|
||||
"app.audioModal.ariaTitle": "Вікно підключення до аудіо-конференції",
|
||||
"app.audioModal.microphoneLabel": "Мікрофон",
|
||||
"app.audioModal.listenOnlyLabel": "Тільки слухати",
|
||||
"app.audioModal.audioChoiceLabel": "Як ви хочете увійти в аудіо-конференцію?",
|
||||
@ -353,14 +404,23 @@
|
||||
"app.audioModal.echoTestTitle": "Це приватний ехо-тест. Промовте кілька слів. Чи чуєте ви себе в динаміках?",
|
||||
"app.audioModal.settingsTitle": "Змінити налаштування аудіо",
|
||||
"app.audioModal.helpTitle": "З'явилися проблеми з вашими аудіоприладами",
|
||||
"app.audioModal.helpText": "Чи надали ви BigBlueButton дозвіл на доступ до мікрофона? Зверніть увагу що коли ви намагаєтеся приєднатися до аудіоконференції має з'явитися діалогове вікно запитуючи дозволи на підключення медіа-пристрою, будь ласка, прийміть це, щоб приєднатися до аудіоконференції. Якщо цього не відбулося спробуйте змінити дозволи мікрофона у налаштуваннях вашого веб-переглядача.",
|
||||
"app.audioModal.helpText": "Чи надали ви BigBlueButton дозвіл на доступ до мікрофона? Зверніть увагу, що коли ви намагаєтеся приєднатися до аудіо-конференції, має з'явитися діалогове вікно, в якому Вас запитають дозвіл на підключення медіа-пристрою, будь ласка, надайте його, щоб приєднатися до аудіо-конференції. Якщо цього не відбулося, спробуйте змінити дозволи мікрофона у налаштуваннях вашого веб-переглядача.",
|
||||
"app.audioModal.help.noSSL": "Сторінка незахищена. Щоб дозволити доступ до мікрофона, сторінка повинна обслуговуватися через HTTPS. Будь ласка, зв'яжіться з адміністратором сервера.",
|
||||
"app.audioModal.help.macNotAllowed": "Схоже, системні настройки Mac блокують доступ до Вашого мікрофону. Відкрийте System Preferences> Security & Privacy> Privacy> Microphone, і переконайтеся, що використовуваний Вами браузер відзначений.",
|
||||
"app.audioModal.audioDialTitle": "Приєднатися за допомогою телефону",
|
||||
"app.audioDial.audioDialDescription": "Наберіть номер",
|
||||
"app.audioDial.audioDialConfrenceText": "і введіть PIN-код конференції:",
|
||||
"app.audioModal.autoplayBlockedDesc": "Нам необхідний Ваш дозвіл на відтворення аудіо",
|
||||
"app.audioModal.playAudio": "Відтворювати звук",
|
||||
"app.audioModal.playAudio.arialabel" : "Відтворювати звук",
|
||||
"app.audioDial.tipIndicator": "Підказка",
|
||||
"app.audioDial.tipMessage": "Натисніть кнопку '0' на телефоні, щоб відключити / включити свій мікрофон",
|
||||
"app.audioModal.connecting": "Підключення",
|
||||
"app.audioModal.connectingEchoTest": "Підключення до ехо тесту",
|
||||
"app.audioManager.joinedAudio": "Ви приєдналися до аудіоконференції",
|
||||
"app.audioManager.joinedEcho": "Ви приєдналися до ехо тесту",
|
||||
"app.audioManager.leftAudio": "Ви покинули аудіо конференцію",
|
||||
"app.audioManager.reconnectingAudio": "Спроба повторно підключити аудіо",
|
||||
"app.audioManager.genericError": "Помилка: Щось пішло не так, будь ласка, спробуйте ще раз",
|
||||
"app.audioManager.connectionError": "Помилка: Підключення не вдалося",
|
||||
"app.audioManager.requestTimeout": "Помилка: Час очікування підключення вичерпано",
|
||||
@ -389,9 +449,12 @@
|
||||
"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.400": "Поганий запит",
|
||||
"app.error.401": "Неавторизований",
|
||||
@ -407,42 +470,77 @@
|
||||
"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.toast.clearedEmoji.label": "Статус емодзі очищено",
|
||||
"app.toast.setEmoji.label": "Статус емодзі встановлено: {0}",
|
||||
"app.toast.meetingMuteOn.label": "Всім користувачам виключено мікрофони",
|
||||
"app.toast.meetingMuteOff.label": "Блокування мікрофону виключено",
|
||||
"app.notification.recordingStart": "Цей сеанс наразі записується",
|
||||
"app.notification.recordingStop": "Цей сеанс не записується",
|
||||
"app.notification.recordingPaused": "Цей сеанс більше не записується",
|
||||
"app.notification.recordingAriaLabel": "Записано часу ",
|
||||
"app.shortcut-help.title": "Гарячі клавіши",
|
||||
"app.notification.userJoinPushAlert": "{0} приєднався до сеансу",
|
||||
"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.togglePublicChat": "Вмикає публічний чат (Список користувачів має бути відкритим)",
|
||||
"app.shortcut-help.togglePublicChat": "Вмикає загальний чат (Список користувачів має бути відкритим)",
|
||||
"app.shortcut-help.hidePrivateChat": "Приховує приватний чат",
|
||||
"app.shortcut-help.closePrivateChat": "Закриває приватний чат",
|
||||
"app.shortcut-help.openActions": "Відкриває меню дій",
|
||||
"app.shortcut-help.openStatus": "Відкриває меню статусу",
|
||||
"app.shortcut-help.togglePan": "Активувати інструмент панорамування (Ведучий)",
|
||||
"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.button.cancel": "Відмінити",
|
||||
"app.lock-viewers.microphoneLable": "Увімкнути мікрофон",
|
||||
"app.lock-viewers.PublicChatLabel": "Надіслати повідомлення у загальному чаті",
|
||||
"app.lock-viewers.PrivateChatLable": "Надіслати повідомлення у приватному чаті",
|
||||
"app.lock-viewers.notesLabel": "Редагувати спільні примітки",
|
||||
"app.lock-viewers.userListLabel": "Подивитися інших учасників в списку користувачів",
|
||||
"app.lock-viewers.ariaTitle": "Вікно налаштування блокування користувачів",
|
||||
"app.lock-viewers.button.apply": "Застосувати",
|
||||
"app.lock-viewers.button.cancel": "Відхилити",
|
||||
"app.lock-viewers.locked": "Обмеження",
|
||||
"app.lock-viewers.unlocked": "Розблокований",
|
||||
"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.findingWebcamsLabel": "Пошук веб-камер",
|
||||
"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 кандидату",
|
||||
@ -454,9 +552,13 @@
|
||||
"app.video.notSupportedError": "Можна транслювати веб-камеру лише з безпечних джерел, переконайтеся, що сертифікат SSL дійсний",
|
||||
"app.video.notReadableError": "Не вдалося отримати відео з веб-камери. Будь ласка, переконайтеся, що інша програма не використовує веб-камеру",
|
||||
"app.video.mediaFlowTimeout1020": "Помилка 1020: медіа не можуть бути доставлені на сервер",
|
||||
"app.video.suggestWebcamLock": "Примусово заблокувати веб-камери учасникам?",
|
||||
"app.video.suggestWebcamLockReason": "(це підвищить стабільність конференції)",
|
||||
"app.video.enable": "Включити",
|
||||
"app.video.cancel": "Відмінити",
|
||||
"app.video.swapCam": "Змінити",
|
||||
"app.video.swapCamDesc": "поміняти напрямок веб-камер",
|
||||
"app.video.videoLocked": "Транслювати веб-камеру заблоковано",
|
||||
"app.video.videoButtonDesc": "Транслювати веб-камеру",
|
||||
"app.video.videoMenu": "Меню відео",
|
||||
"app.video.videoMenuDisabled": "Меню відео веб-камера відключено в налаштуваннях",
|
||||
@ -476,7 +578,7 @@
|
||||
"app.video.stats.rtt": "Час RTT",
|
||||
"app.video.stats.encodeUsagePercent": "Використання кодуванням",
|
||||
"app.video.stats.currentDelay": "Поточна затримка",
|
||||
"app.fullscreenButton.label": "Зробити {0} на весь екран",
|
||||
"app.fullscreenButton.label": "{0} на весь екран",
|
||||
"app.deskshare.iceConnectionStateError": "Помилка 1108: при з'єднанні екрана не вдалося підключити ICE",
|
||||
"app.sfu.mediaServerConnectionError2000": "Помилка 2000: неможливо підключитися до медіасервера",
|
||||
"app.sfu.mediaServerOffline2001": "Помилка 2001: медіасервер недоступний. Будь-ласка спробуйте пізніше.",
|
||||
@ -488,6 +590,7 @@
|
||||
"app.sfu.invalidSdp2202":"Помилка 2202: Клієнт створив невірний SDP",
|
||||
"app.sfu.noAvailableCodec2203": "Помилка 2203: сервер не зміг знайти відповідного кодека",
|
||||
"app.meeting.endNotification.ok.label": "OK",
|
||||
"app.whiteboard.annotations.poll": "Результати опитування були опубліковані",
|
||||
"app.whiteboard.toolbar.tools": "Інструменти",
|
||||
"app.whiteboard.toolbar.tools.hand": "Переміщення",
|
||||
"app.whiteboard.toolbar.tools.pencil": "Олівець",
|
||||
@ -526,6 +629,8 @@
|
||||
"app.videoDock.webcamFocusDesc": "Сфокусувати вибрану веб-камеру",
|
||||
"app.videoDock.webcamUnfocusLabel": "Розфокусувати",
|
||||
"app.videoDock.webcamUnfocusDesc": "Розфокусувати вибрану веб-камеру",
|
||||
"app.videoDock.autoplayBlockedDesc": "Нам потрібен Ваш дозвіл, щоб показати Вам веб-камери інших.",
|
||||
"app.videoDock.autoplayAllowLabel": "Подивитися веб-камери",
|
||||
"app.invitation.title": "Запрошення в кімнату для учасників",
|
||||
"app.invitation.confirm": "Запросити",
|
||||
"app.createBreakoutRoom.title": "Кімнати для учасників",
|
||||
@ -539,7 +644,9 @@
|
||||
"app.createBreakoutRoom.join": "Приєднатись до кімнати",
|
||||
"app.createBreakoutRoom.joinAudio": "Приєднатися до аудіоконференції",
|
||||
"app.createBreakoutRoom.returnAudio": "Повернути аудіо",
|
||||
"app.createBreakoutRoom.alreadyConnected": "Вже в кімнаті",
|
||||
"app.createBreakoutRoom.confirm": "Створити",
|
||||
"app.createBreakoutRoom.record": "Записати",
|
||||
"app.createBreakoutRoom.numberOfRooms": "Кількість кімнат",
|
||||
"app.createBreakoutRoom.durationInMinutes": "Тривалість (хвилини)",
|
||||
"app.createBreakoutRoom.randomlyAssign": "Випадково присвоїти",
|
||||
@ -547,11 +654,30 @@
|
||||
"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.externalVideo.start": "Поділитись новим відео",
|
||||
"app.externalVideo.close": "Закрити"
|
||||
"app.createBreakoutRoom.modalDesc": "Замітка: Ви можете перетягувати імена користувачів, щоб призначити їх у певні групові кімнати.",
|
||||
"app.createBreakoutRoom.roomTime": "{0} хвилин",
|
||||
"app.createBreakoutRoom.numberOfRoomsError": "Кількість кімнат неправильна.",
|
||||
"app.externalVideo.start": "Поділитися новим відео",
|
||||
"app.externalVideo.title": "Поділитися відео із зовнішніх ресурсів",
|
||||
"app.externalVideo.input": "Зовнішня URL-адреса відео",
|
||||
"app.externalVideo.urlInput": "Додати URL-адресу відео",
|
||||
"app.externalVideo.urlError": "Ця URL-адреса відео не підтримується",
|
||||
"app.externalVideo.close": "Закрити",
|
||||
"app.externalVideo.autoPlayWarning": "Запустіть відео, щоб активувати синхронізацію медіа",
|
||||
"app.network.connection.effective.slow": "Спостерігаються проблеми зі з'єднанням",
|
||||
"app.network.connection.effective.slow.help": "Детальна інформація",
|
||||
"app.externalVideo.noteLabel": "Замітка: відео із зовнішніх ресурсів не буде відображатися в записі. Підтримуються посилання YouTube, Vimeo, Instructure Media, Twitch і Daily Motion.",
|
||||
"app.actionsBar.actionsDropdown.shareExternalVideo": "Поділитися відео із зовнішніх ресурсів",
|
||||
"app.actionsBar.actionsDropdown.stopShareExternalVideo": "Припинити показ відео із зовнішніх ресурсів",
|
||||
"app.iOSWarning.label": "Будь ласка, оновіться до iOS 12.2 або більш нової версії",
|
||||
"app.legacy.unsupportedBrowser": "Схоже, ви використовуєте браузер, який в повному обсязі не підтримується. Будь ласка, використовуйте {0} або {1} для повної підтримки.",
|
||||
"app.legacy.upgradeBrowser": "Схоже, ви використовуєте старшу версію підтримуваного браузера. Будь ласка, встановіть нову версію для повної підтримки.",
|
||||
"app.legacy.criosBrowser": "На iOS, будь ласка, використовуйте браузер Safari для повної підтримки."
|
||||
|
||||
}
|
||||
|
||||
|
@ -282,6 +282,8 @@
|
||||
"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.userJoinAudioAlertLabel": "Âm thanh thông báo cho người tham gia",
|
||||
"app.submenu.application.userJoinPushAlertLabel": "Popup thông báo cho người tham gia",
|
||||
"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",
|
||||
@ -314,6 +316,9 @@
|
||||
"app.settings.save-notification.label": "Cài đặt đã được lưu lại",
|
||||
"app.switch.onLabel": "Mở",
|
||||
"app.switch.offLabel": "Tắt",
|
||||
"app.talkingIndicator.ariaMuteDesc" : "Chọn để tắt tiếng người dùng",
|
||||
"app.talkingIndicator.isTalking" : "{0} đang nói",
|
||||
"app.talkingIndicator.wasTalking" : "{0} dừng nói",
|
||||
"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",
|
||||
@ -486,6 +491,7 @@
|
||||
"app.notification.recordingStop": "Phiên hoạt động này đang không được ghi lại",
|
||||
"app.notification.recordingPaused": "Buổi học này không được ghi hình lại",
|
||||
"app.notification.recordingAriaLabel": "Thời gian ghi hình",
|
||||
"app.notification.userJoinPushAlert": "{0} đã tham gia vào",
|
||||
"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",
|
||||
@ -615,8 +621,8 @@
|
||||
"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ề hệ thống này (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.subtitle": "Chúng tôi muốn nghe trải nghiệm của bạn về hệ thống này (tùy chọn)",
|
||||
"app.feedback.textarea": "Làm thế nào để hệ thống 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",
|
||||
|
@ -26,7 +26,7 @@ import '/imports/api/external-videos/server';
|
||||
import '/imports/api/guest-users/server';
|
||||
import '/imports/api/ping-pong/server';
|
||||
import '/imports/api/local-settings/server';
|
||||
|
||||
import '/imports/api/voice-call-states/server';
|
||||
|
||||
// Commons
|
||||
import '/imports/api/log-client/server';
|
||||
|
Loading…
Reference in New Issue
Block a user