mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2025-12-31 11:52:29 +00:00
Compare commits
143 Commits
rm-dead-co
...
7100
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc1827fb4a | ||
|
|
aeeca7c343 | ||
|
|
a7fa33286d | ||
|
|
754f658489 | ||
|
|
679711534a | ||
|
|
238bd46480 | ||
|
|
e4d4bec175 | ||
|
|
2b3fbaa360 | ||
|
|
8949753874 | ||
|
|
16115a3a16 | ||
|
|
7c17d80ae8 | ||
|
|
511548060a | ||
|
|
00780929e5 | ||
|
|
a89f762a66 | ||
|
|
82a03c36c6 | ||
|
|
7968578a25 | ||
|
|
62b6411bb6 | ||
|
|
b3bce9e5ae | ||
|
|
ed37bedee2 | ||
|
|
2182a1e452 | ||
|
|
4eea924c02 | ||
|
|
de3b6d2a9f | ||
|
|
2a090d8034 | ||
|
|
238def34cf | ||
|
|
43c4ec0808 | ||
|
|
7910554625 | ||
|
|
56d2af197e | ||
|
|
466a36dc93 | ||
|
|
1fc5d6e97e | ||
|
|
7156df5b99 | ||
|
|
2c8c98aaf3 | ||
|
|
afcedd0f3c | ||
|
|
f253939f28 | ||
|
|
98cba457f2 | ||
|
|
f7e7750cfb | ||
|
|
d9749f3da6 | ||
|
|
45b7f53294 | ||
|
|
27765b47d7 | ||
|
|
185e9d4f58 | ||
|
|
39991da2cf | ||
|
|
f968d5e70a | ||
|
|
f846eb9234 | ||
|
|
126b0d385f | ||
|
|
306c979adb | ||
|
|
99d6012743 | ||
|
|
a94ba85a98 | ||
|
|
f618194587 | ||
|
|
e9c4774695 | ||
|
|
6421df7fa0 | ||
|
|
4ffc2bca5f | ||
|
|
79a252652c | ||
|
|
9eddb71e92 | ||
|
|
ac65b23ccf | ||
|
|
1f6483daae | ||
|
|
c8ecd47ff5 | ||
|
|
50885e258c | ||
|
|
164d305528 | ||
|
|
183de81a57 | ||
|
|
e12999d44f | ||
|
|
8982f17ce1 | ||
|
|
c8f1690057 | ||
|
|
aa57309057 | ||
|
|
fb81619fc5 | ||
|
|
5a5656020b | ||
|
|
0ff44a2f22 | ||
|
|
4d04ea325e | ||
|
|
42ce6dcc58 | ||
|
|
b033d0268a | ||
|
|
4aea40d34f | ||
|
|
e5a170fb28 | ||
|
|
d1cf5578fc | ||
|
|
4b29af6b5f | ||
|
|
f3481576ff | ||
|
|
455a91a5c6 | ||
|
|
297ab194a8 | ||
|
|
077a88a803 | ||
|
|
02c232440e | ||
|
|
f727b9295f | ||
|
|
0d0bec3aad | ||
|
|
cfb8589bef | ||
|
|
65730e256e | ||
|
|
7b8b911fee | ||
|
|
036286a1d6 | ||
|
|
d550254f31 | ||
|
|
b1a71d55d7 | ||
|
|
17ed45799c | ||
|
|
e5681382b0 | ||
|
|
c27cb25afe | ||
|
|
baf5aa14e8 | ||
|
|
29b6ce7721 | ||
|
|
4f95c45e50 | ||
|
|
72dd609247 | ||
|
|
fed74afffe | ||
|
|
204f34cccb | ||
|
|
c81777a475 | ||
|
|
778bca3031 | ||
|
|
336fa304ce | ||
|
|
f14b69166c | ||
|
|
e405595a11 | ||
|
|
cabe48d66a | ||
|
|
8d7f46024b | ||
|
|
d7f6c2bbf0 | ||
|
|
3c69645169 | ||
|
|
abe2fa4dd4 | ||
|
|
863fd12488 | ||
|
|
50c4748d40 | ||
|
|
f83840a3bc | ||
|
|
1466d7d149 | ||
|
|
d0fe034db5 | ||
|
|
8225f5e363 | ||
|
|
c641835d0f | ||
|
|
35ee92869f | ||
|
|
9b7a5ffdd1 | ||
|
|
581c2e621c | ||
|
|
f3117f3037 | ||
|
|
877ef58dfb | ||
|
|
19e61747b8 | ||
|
|
b4bf363237 | ||
|
|
f8af9c4fae | ||
|
|
9fa426d97f | ||
|
|
e3c95e376a | ||
|
|
00ed794c50 | ||
|
|
b52d5629e2 | ||
|
|
9d8e646d4e | ||
|
|
850c0b97e4 | ||
|
|
87035d0812 | ||
|
|
ef0168c9ff | ||
|
|
df1a5a25d4 | ||
|
|
c424884201 | ||
|
|
0a464a5223 | ||
|
|
8cd62bc132 | ||
|
|
123a74b38b | ||
|
|
dbeca806bb | ||
|
|
f790d3e3ed | ||
|
|
a12f7fc4d2 | ||
|
|
456ce38a10 | ||
|
|
72ef1668f2 | ||
|
|
fce8f52574 | ||
|
|
8fcfd7a308 | ||
|
|
04a41395c8 | ||
|
|
18e8201167 | ||
|
|
27b8794d8c | ||
|
|
3cb0df579c |
22
.github/workflows/ci.yml
vendored
22
.github/workflows/ci.yml
vendored
@@ -42,3 +42,25 @@ jobs:
|
||||
cache: 'npm'
|
||||
- run: npm install
|
||||
- run: make
|
||||
android-build:
|
||||
name: Build mobile bundle (Android)
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
cache: 'npm'
|
||||
- run: npm install
|
||||
- run: npx react-native bundle --entry-file react/index.native.js --platform android --bundle-output /tmp/android.bundle --reset-cache
|
||||
ios-build:
|
||||
name: Build mobile bundle (iOS)
|
||||
runs-on: macOS-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: 16
|
||||
cache: 'npm'
|
||||
- run: npm install
|
||||
- run: npx react-native bundle --entry-file react/index.native.js --platform ios --bundle-output /tmp/ios.bundle --reset-cache
|
||||
|
||||
7
Makefile
7
Makefile
@@ -44,12 +44,8 @@ deploy-appbundle:
|
||||
cp \
|
||||
$(BUILD_DIR)/app.bundle.min.js \
|
||||
$(BUILD_DIR)/app.bundle.min.js.map \
|
||||
$(BUILD_DIR)/do_external_connect.min.js \
|
||||
$(BUILD_DIR)/do_external_connect.min.js.map \
|
||||
$(BUILD_DIR)/external_api.min.js \
|
||||
$(BUILD_DIR)/external_api.min.js.map \
|
||||
$(BUILD_DIR)/dial_in_info_bundle.min.js \
|
||||
$(BUILD_DIR)/dial_in_info_bundle.min.js.map \
|
||||
$(BUILD_DIR)/alwaysontop.min.js \
|
||||
$(BUILD_DIR)/alwaysontop.min.js.map \
|
||||
$(OUTPUT_DIR)/analytics-ga.js \
|
||||
@@ -70,7 +66,6 @@ deploy-lib-jitsi-meet:
|
||||
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.js \
|
||||
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.map \
|
||||
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.e2ee-worker.js \
|
||||
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
|
||||
$(LIBJITSIMEET_DIR)/modules/browser/capabilities.json \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
@@ -131,7 +126,7 @@ dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-mode
|
||||
|
||||
source-package:
|
||||
mkdir -p source_package/jitsi-meet/css && \
|
||||
cp -r *.js *.html resources/*.txt connection_optimization favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
|
||||
cp -r *.js *.html resources/*.txt favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
|
||||
cp css/all.css source_package/jitsi-meet/css && \
|
||||
(cd source_package ; tar cjf ../jitsi-meet.tar.bz2 jitsi-meet) && \
|
||||
rm -rf source_package
|
||||
|
||||
11
app.js
11
app.js
@@ -33,17 +33,6 @@ window.APP = {
|
||||
API,
|
||||
conference,
|
||||
|
||||
// Used by do_external_connect.js if we receive the attach data after
|
||||
// connect was already executed. status property can be 'initialized',
|
||||
// 'ready', or 'connecting'. We are interested in 'ready' status only which
|
||||
// means that connect was executed but we have to wait for the attach data.
|
||||
// In status 'ready' handler property will be set to a function that will
|
||||
// finish the connect process when the attach data or error is received.
|
||||
connect: {
|
||||
handler: null,
|
||||
status: 'initialized'
|
||||
},
|
||||
|
||||
// Used for automated performance tests.
|
||||
connectionTimes: {
|
||||
'index.loaded': window.indexLoadedTime
|
||||
|
||||
@@ -141,7 +141,7 @@ import {
|
||||
showNotification,
|
||||
showWarningNotification
|
||||
} from './react/features/notifications';
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay/actions';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import { initPrejoin, makePrecallTest, setJoiningInProgress } from './react/features/prejoin/actions';
|
||||
import { isPrejoinPageVisible } from './react/features/prejoin/functions';
|
||||
@@ -153,6 +153,7 @@ import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise'
|
||||
import { endpointMessageReceived } from './react/features/subtitles';
|
||||
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
|
||||
import { muteLocal } from './react/features/video-menu/actions.any';
|
||||
import { setIAmVisitor } from './react/features/visitors/actions';
|
||||
import UIEvents from './service/UI/UIEvents';
|
||||
|
||||
const logger = Logger.getLogger(__filename);
|
||||
@@ -342,6 +343,8 @@ class ConferenceConnector {
|
||||
case JitsiConferenceErrors.REDIRECTED: {
|
||||
generateVisitorConfig(APP.store.getState(), params);
|
||||
|
||||
APP.store.dispatch(setIAmVisitor(true));
|
||||
|
||||
connection.disconnect().then(() => {
|
||||
connect(this._conference.roomName).then(con => {
|
||||
const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']);
|
||||
@@ -1034,13 +1037,20 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
const state = APP.store.getState();
|
||||
|
||||
if (!mute
|
||||
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
|
||||
&& isUserInteractionRequiredForUnmute(state)) {
|
||||
logger.error('Unmuting video requires user interaction');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// check for A/V Moderation when trying to unmute and return early
|
||||
if (!mute && shouldShowModeratedNotification(MEDIA_TYPE.VIDEO, state)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If not ready to modify track's state yet adjust the base/media
|
||||
if (!this._localTracksInitialized) {
|
||||
// This will only modify base/media.video.muted which is then synced
|
||||
@@ -1054,7 +1064,7 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
const localVideo = getLocalJitsiVideoTrack(state);
|
||||
|
||||
if (!localVideo && !mute && !this.isCreatingLocalTrack) {
|
||||
const maybeShowErrorDialog = error => {
|
||||
@@ -1445,7 +1455,7 @@ export default {
|
||||
|
||||
logger.debug(`useVideoStream: Replacing ${oldTrack} with ${newTrack}`);
|
||||
|
||||
if (oldTrack === newTrack) {
|
||||
if (oldTrack === newTrack || (!oldTrack && !newTrack)) {
|
||||
resolve();
|
||||
onFinish();
|
||||
|
||||
|
||||
44
config.js
44
config.js
@@ -46,9 +46,9 @@ var config = {
|
||||
},
|
||||
|
||||
// BOSH URL. FIXME: use XEP-0156 to discover it.
|
||||
bosh: '//jitsi-meet.example.com/' + subdir + 'http-bind',
|
||||
bosh: 'https://jitsi-meet.example.com/' + subdir + 'http-bind',
|
||||
|
||||
// Websocket URL
|
||||
// Websocket URL (XMPP)
|
||||
// websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket',
|
||||
|
||||
// The real JID of focus participant - can be overridden here
|
||||
@@ -56,6 +56,19 @@ var config = {
|
||||
// https://github.com/jitsi/jitsi-meet/issues/7376
|
||||
// focusUserJid: 'focus@auth.jitsi-meet.example.com',
|
||||
|
||||
// Options related to the bridge (colibri) data channel
|
||||
bridgeChannel: {
|
||||
// If the backend advertises multiple colibri websockets, this options allows
|
||||
// to filter some of them out based on the domain name. We use the first URL
|
||||
// which does not match ignoreDomain, falling back to the first one that matches
|
||||
// ignoreDomain. Has no effect if undefined.
|
||||
// ignoreDomain: 'example.com',
|
||||
|
||||
// Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket.
|
||||
// If SCTP is available in the backend it will be used instead of a WS. Defaults to
|
||||
// false (SCTP is used only if available and no WS are available).
|
||||
// preferSctp: false
|
||||
},
|
||||
|
||||
// Testing / experimental features.
|
||||
//
|
||||
@@ -184,6 +197,22 @@ var config = {
|
||||
// enableOpusDtx: false,
|
||||
// },
|
||||
|
||||
// Noise suppression configuration. By default rnnoise is used. Optionally Krisp
|
||||
// can be used by enabling it below, but the Krisp JS SDK files must be supplied in your
|
||||
// installation. Specifically, these files are needed:
|
||||
// - https://meet.example.com/libs/krisp/krisp.mjs
|
||||
// - https://meet.example.com/libs/krisp/models/model_8.kw
|
||||
// - https://meet.example.com/libs/krisp/models/model_16.kw
|
||||
// - https://meet.example.com/libs/krisp/models/model_32.kw
|
||||
// NOTE: Krisp JS SDK v1.0.9 was tested.
|
||||
// noiseSuppression: {
|
||||
// krisp: {
|
||||
// enabled: false,
|
||||
// logProcessStats: false,
|
||||
// debugLogs: false,
|
||||
// },
|
||||
// },
|
||||
|
||||
// Video
|
||||
|
||||
// Sets the preferred resolution (height) for local video. Defaults to 720.
|
||||
@@ -561,6 +590,9 @@ var config = {
|
||||
// Require users to always specify a display name.
|
||||
// requireDisplayName: true,
|
||||
|
||||
// Enables webhid functionality for Audio.
|
||||
// enableWebHIDFeature: false,
|
||||
|
||||
// DEPRECATED! Use 'welcomePage.disabled' instead.
|
||||
// Whether to use a welcome page or not. In case it's false a random room
|
||||
// will be joined when no room is specified.
|
||||
@@ -1146,6 +1178,13 @@ var config = {
|
||||
// }
|
||||
// },
|
||||
|
||||
// // The terms, privacy and help centre URL's.
|
||||
// legalUrls: {
|
||||
// helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html',
|
||||
// privacy: 'https://jitsi.org/meet/privacy',
|
||||
// terms: 'https://jitsi.org/meet/terms'
|
||||
// },
|
||||
|
||||
// A property to disable the right click context menu for localVideo
|
||||
// the menu has option to flip the locally seen video for local presentations
|
||||
// disableLocalVideoFlip: false,
|
||||
@@ -1365,7 +1404,6 @@ var config = {
|
||||
dialOutRegionUrl
|
||||
disableRemoteControl
|
||||
displayJids
|
||||
externalConnectUrl
|
||||
e2eeLabels
|
||||
firefox_fake_device
|
||||
googleApiApplicationClientID
|
||||
|
||||
@@ -32,54 +32,6 @@ const logger = Logger.getLogger(__filename);
|
||||
*/
|
||||
export const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';
|
||||
|
||||
/**
|
||||
* Checks if we have data to use attach instead of connect. If we have the data
|
||||
* executes attach otherwise check if we have to wait for the data. If we have
|
||||
* to wait for the attach data we are setting handler to APP.connect.handler
|
||||
* which is going to be called when the attach data is received otherwise
|
||||
* executes connect.
|
||||
*
|
||||
* @param {string} [id] user id
|
||||
* @param {string} [password] password
|
||||
* @param {string} [roomName] the name of the conference.
|
||||
*/
|
||||
function checkForAttachParametersAndConnect(id, password, connection) {
|
||||
if (window.XMPPAttachInfo) {
|
||||
APP.connect.status = 'connecting';
|
||||
|
||||
// When connection optimization is not deployed or enabled the default
|
||||
// value will be window.XMPPAttachInfo.status = "error"
|
||||
// If the connection optimization is deployed and enabled and there is
|
||||
// a failure the value will be window.XMPPAttachInfo.status = "error"
|
||||
if (window.XMPPAttachInfo.status === 'error') {
|
||||
connection.connect({
|
||||
id,
|
||||
password
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const attachOptions = window.XMPPAttachInfo.data;
|
||||
|
||||
if (attachOptions) {
|
||||
connection.attach(attachOptions);
|
||||
delete window.XMPPAttachInfo.data;
|
||||
} else {
|
||||
connection.connect({
|
||||
id,
|
||||
password
|
||||
});
|
||||
}
|
||||
} else {
|
||||
APP.connect.status = 'ready';
|
||||
APP.connect.handler
|
||||
= checkForAttachParametersAndConnect.bind(
|
||||
null,
|
||||
id, password, connection);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to open connection using provided credentials.
|
||||
* @param {string} [id]
|
||||
@@ -182,7 +134,10 @@ export async function connect(id, password) {
|
||||
APP.store.dispatch(setPrejoinDisplayNameRequired());
|
||||
}
|
||||
|
||||
checkForAttachParametersAndConnect(id, password, connection);
|
||||
connection.connect({
|
||||
id,
|
||||
password
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
module.exports = {
|
||||
'extends': '../react/.eslintrc.js'
|
||||
};
|
||||
@@ -1,86 +0,0 @@
|
||||
/* global config, createConnectionExternally */
|
||||
|
||||
import getRoomName from '../react/features/base/config/getRoomName';
|
||||
import { parseURLParams } from '../react/features/base/util/parseURLParams';
|
||||
|
||||
/**
|
||||
* Implements external connect using createConnectionExternally function defined
|
||||
* in external_connect.js for Jitsi Meet. Parses the room name and JSON Web
|
||||
* Token (JWT) from the URL and executes createConnectionExternally.
|
||||
*
|
||||
* NOTE: If you are using lib-jitsi-meet without Jitsi Meet, you should use this
|
||||
* file as reference only because the implementation is Jitsi Meet-specific.
|
||||
*
|
||||
* NOTE: For optimal results this file should be included right after
|
||||
* external_connect.js.
|
||||
*/
|
||||
|
||||
if (typeof createConnectionExternally === 'function') {
|
||||
// URL params have higher priority than config params.
|
||||
// Do not use external connect if websocket is enabled.
|
||||
let url
|
||||
= parseURLParams(window.location, true, 'hash')[
|
||||
'config.externalConnectUrl']
|
||||
|| config.websocket ? undefined : config.externalConnectUrl;
|
||||
const isRecorder
|
||||
= parseURLParams(window.location, true, 'hash')['config.iAmRecorder'];
|
||||
|
||||
let roomName;
|
||||
|
||||
if (url && (roomName = getRoomName()) && !isRecorder) {
|
||||
url += `?room=${roomName}`;
|
||||
|
||||
const token = parseURLParams(window.location, true, 'search').jwt;
|
||||
|
||||
if (token) {
|
||||
url += `&token=${token}`;
|
||||
}
|
||||
|
||||
createConnectionExternally(
|
||||
url,
|
||||
connectionInfo => {
|
||||
// Sets that global variable to be used later by connect method
|
||||
// in connection.js.
|
||||
window.XMPPAttachInfo = {
|
||||
status: 'success',
|
||||
data: connectionInfo
|
||||
};
|
||||
checkForConnectHandlerAndConnect();
|
||||
},
|
||||
errorCallback);
|
||||
} else {
|
||||
errorCallback();
|
||||
}
|
||||
} else {
|
||||
errorCallback();
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if connect from connection.js was executed and executes the handler
|
||||
* that is going to finish the connect work.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
function checkForConnectHandlerAndConnect() {
|
||||
window.APP
|
||||
&& window.APP.connect.status === 'ready'
|
||||
&& window.APP.connect.handler();
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements a callback to be invoked if anything goes wrong.
|
||||
*
|
||||
* @param {Error} error - The specifics of what went wrong.
|
||||
* @returns {void}
|
||||
*/
|
||||
function errorCallback(error) {
|
||||
// The value of error is undefined if external connect is disabled.
|
||||
error && console.warn(error);
|
||||
|
||||
// Sets that global variable to be used later by connect method in
|
||||
// connection.js.
|
||||
window.XMPPAttachInfo = {
|
||||
status: 'error'
|
||||
};
|
||||
checkForConnectHandlerAndConnect();
|
||||
}
|
||||
@@ -16,14 +16,6 @@
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Move the @atlaskit/flag container up a little bit so it does not cover the
|
||||
* toolbar with the first notification.
|
||||
*/
|
||||
.atlaskit-portal > #notifications-container {
|
||||
bottom: calc(#{$newToolbarSizeWithPadding}) !important;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Keep overflow menu within screen vertical bounds and make it scrollable.
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
&-content {
|
||||
position: relative;
|
||||
right: auto;
|
||||
margin-bottom: 8px;
|
||||
max-height: 456px;
|
||||
margin-bottom: 4px;
|
||||
max-height: calc(100vh - 100px);
|
||||
overflow: auto;
|
||||
width: 300px;
|
||||
|
||||
@@ -22,11 +22,7 @@
|
||||
}
|
||||
|
||||
&-entry-text {
|
||||
display: inline-block;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 213px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
|
||||
&.left-margin {
|
||||
margin-left: 36px;
|
||||
|
||||
@@ -82,6 +82,7 @@
|
||||
}
|
||||
|
||||
.left-column {
|
||||
order: -1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 0;
|
||||
@@ -92,6 +93,7 @@
|
||||
.right-column {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
flex-grow: 1;
|
||||
padding-left: 16px;
|
||||
padding-top: 13px;
|
||||
@@ -99,11 +101,11 @@
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
line-height: 16px;
|
||||
padding-bottom: 4px;
|
||||
}
|
||||
font-size: 12px;
|
||||
font-weight: 600;
|
||||
line-height: 16px;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.subtitle {
|
||||
color: #5E6D7A;
|
||||
@@ -125,8 +127,7 @@
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&.with-click-handler:hover,
|
||||
&.with-click-handler:focus {
|
||||
&.with-click-handler:hover {
|
||||
background-color: #c7ddff;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
#polls-panel {
|
||||
.polls-panel {
|
||||
height: calc(100% - 119px);
|
||||
}
|
||||
|
||||
@@ -1,49 +1,27 @@
|
||||
/**
|
||||
* Mousemove padding styles are used to add invisible elements to the popover
|
||||
* to allow mouse movement from the popover trigger to the popover itself
|
||||
* without triggering a mouseleave event.
|
||||
*/
|
||||
%vertical-popover-padding {
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
width: 20px;
|
||||
padding: 20px 0;
|
||||
top: -20px;
|
||||
}
|
||||
|
||||
%horizontal-popover-padding {
|
||||
height: 25px;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
padding: 0 35px;
|
||||
left: -35px;
|
||||
}
|
||||
|
||||
.popover-mousemove-padding-left {
|
||||
@extend %vertical-popover-padding;
|
||||
left: -35px;
|
||||
}
|
||||
|
||||
.popover-mousemove-padding-right {
|
||||
@extend %vertical-popover-padding;
|
||||
right: -35px;
|
||||
}
|
||||
|
||||
.popover-mousemove-padding-bottom {
|
||||
@extend %horizontal-popover-padding;
|
||||
bottom: -40px;
|
||||
}
|
||||
|
||||
.popover-mousemove-padding-top {
|
||||
@extend %horizontal-popover-padding;
|
||||
top: -40px;
|
||||
}
|
||||
|
||||
.popover {
|
||||
margin: -16px -24px;
|
||||
z-index: $popoverZ;
|
||||
|
||||
.popover-content {
|
||||
margin: 16px 24px;
|
||||
position: relative;
|
||||
|
||||
&.top {
|
||||
bottom: 8px;
|
||||
}
|
||||
|
||||
&.bottom {
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
&.left {
|
||||
right: 8px;
|
||||
}
|
||||
|
||||
&.right {
|
||||
left: 8px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.excalidraw .popover {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
width: 280px;
|
||||
background: $menuBG;
|
||||
box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);
|
||||
border-radius: 3px;
|
||||
border-radius: 6px;
|
||||
padding: 16px;
|
||||
|
||||
&.with-gif {
|
||||
@@ -104,10 +104,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.reactions-menu-container {
|
||||
padding-bottom: 6px;
|
||||
}
|
||||
|
||||
.reactions-animations-container {
|
||||
position: absolute;
|
||||
width: 20%;
|
||||
|
||||
@@ -3,30 +3,33 @@
|
||||
display: block;
|
||||
|
||||
#enter_room {
|
||||
position: relative;
|
||||
height: 42px;
|
||||
|
||||
.welcome-page-button {
|
||||
font-size: 16px;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 68px;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
font-size: 16px;
|
||||
left: 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.header {
|
||||
background-color: #002637;
|
||||
|
||||
.insecure-room-name-warning {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#enter_room {
|
||||
.enter-room-input-container {
|
||||
padding-right: 0;
|
||||
width: 100%;
|
||||
|
||||
.join-meeting-container {
|
||||
padding: 0;
|
||||
flex-direction: column;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.warning-without-link,
|
||||
.warning-with-link {
|
||||
top: 120px;
|
||||
.enter-room-input-container {
|
||||
padding-right: 0;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,20 +34,20 @@
|
||||
background: #F2F3F4;
|
||||
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
|
||||
|
||||
& > svg {
|
||||
& svg {
|
||||
fill: #040404;
|
||||
}
|
||||
|
||||
&.settings-button-small-icon--disabled {
|
||||
background: #36383C;
|
||||
|
||||
&> svg {
|
||||
& svg {
|
||||
fill: #929292;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
& > svg {
|
||||
& svg {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
background-color: #36383c;
|
||||
cursor: default;
|
||||
|
||||
&> svg {
|
||||
& svg {
|
||||
fill: #929292;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ $welcomePageHeaderBackground: linear-gradient(0deg, rgba(0, 0, 0, 0.2), rgba(0,
|
||||
$welcomePageHeaderBackgroundPosition: center;
|
||||
$welcomePageHeaderBackgroundRepeat: none;
|
||||
$welcomePageHeaderBackgroundSize: cover;
|
||||
$welcomePageHeaderPaddingBottom: 0px;
|
||||
$welcomePageHeaderPaddingBottom: 15px;
|
||||
$welcomePageHeaderTitleMaxWidth: initial;
|
||||
$welcomePageHeaderTextAlign: center;
|
||||
|
||||
@@ -201,11 +201,6 @@ $deepLinkingDialInConferenceIdPadding: inherit;
|
||||
$deepLinkingDialInConferenceIdBackgroundColor: inherit;
|
||||
$deepLinkingDialInConferenceIdBorderRadius: inherit;
|
||||
|
||||
$deepLinkingDialInConferenceNameFontSize: inherit;
|
||||
$deepLinkingDialInConferenceNameLineHeight: inherit;
|
||||
$deepLinkingDialInConferenceNameMarginBottom: none;
|
||||
$deepLinkingDialInConferenceNameFontWeight: inherit;
|
||||
|
||||
$deepLinkingDialInConferenceDescriptionFontSize: 0.8em;
|
||||
$deepLinkingDialInConferenceDescriptionLineHeight: inherit;
|
||||
$deepLinkingDialInConferenceDescriptionMarginBottom: none;
|
||||
|
||||
@@ -3,49 +3,38 @@
|
||||
display: inline-block;
|
||||
|
||||
&-container {
|
||||
max-height: 344px;
|
||||
background: $menuBG;
|
||||
border-radius: 3px;
|
||||
max-height: 456px;
|
||||
overflow: auto;
|
||||
padding: 8px;
|
||||
margin-bottom: 8px;
|
||||
margin-bottom: 4px;
|
||||
position: relative;
|
||||
right: auto;
|
||||
}
|
||||
|
||||
&-entry {
|
||||
cursor: pointer;
|
||||
height: 168px;
|
||||
margin-bottom: 8px;
|
||||
height: 138px;
|
||||
width: 244px;
|
||||
position: relative;
|
||||
width: 284px;
|
||||
margin: 0 7px 4px;
|
||||
border-radius: 6px;
|
||||
box-sizing: border-box;
|
||||
overflow: hidden;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&--selected {
|
||||
border: 3px solid #31B76A;
|
||||
border-radius: 3px;
|
||||
cursor: default;
|
||||
height: 162px;
|
||||
width: 278px;
|
||||
border: 2px solid #4687ED;
|
||||
}
|
||||
}
|
||||
|
||||
&-video {
|
||||
border-radius: 3px;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&-overlay {
|
||||
background: rgba(42, 58, 75, 0.6);
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
&-error {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
@@ -56,23 +45,22 @@
|
||||
}
|
||||
|
||||
&-label {
|
||||
bottom: 8px;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
max-width: 100%;
|
||||
padding: 8px;
|
||||
z-index: 2;
|
||||
|
||||
&-container {
|
||||
margin: 0 16px;
|
||||
}
|
||||
|
||||
&-text {
|
||||
background-color: #131519;
|
||||
border-radius: 3px;
|
||||
padding: 2px 8px;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
margin: 0 auto;
|
||||
background-color: rgba(0, 0, 0, 0.7);
|
||||
border-radius: 4px;
|
||||
padding: 4px 8px;
|
||||
color: #fff;
|
||||
font-size: 12px;
|
||||
line-height: 16px;
|
||||
font-weight: 600;
|
||||
max-width: calc(100% - 16px);
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
@@ -80,8 +68,8 @@
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
// Override @atlaskit/InlineDialog container which is made with styled components
|
||||
& > div:nth-child(2) {
|
||||
padding: 0;
|
||||
|
||||
&-checkbox-container {
|
||||
padding: 10px 14px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ body.welcome-page {
|
||||
background-size: $welcomePageHeaderBackgroundSize;
|
||||
padding-bottom: $welcomePageHeaderPaddingBottom;
|
||||
background-color: #131519;
|
||||
height: 400px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
@@ -62,26 +61,58 @@ body.welcome-page {
|
||||
|
||||
}
|
||||
|
||||
.insecure-room-name-warning {
|
||||
align-items: center;
|
||||
color: $defaultWarningColor;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-top: 15px;
|
||||
max-width: 480px;
|
||||
width: $welcomePageEnterRoomWidth;
|
||||
|
||||
.jitsi-icon {
|
||||
margin-right: 15px;
|
||||
|
||||
svg {
|
||||
fill: $defaultWarningColor;
|
||||
|
||||
& > *:first-child {
|
||||
fill: none !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: #253858;
|
||||
}
|
||||
|
||||
#enter_room {
|
||||
display: $welcomePageEnterRoomDisplay;
|
||||
align-items: center;
|
||||
max-width: 480px;
|
||||
width: $welcomePageEnterRoomWidth;
|
||||
z-index: $zindex2;
|
||||
background-color: #fff;
|
||||
padding: $welcomePageEnterRoomPadding;
|
||||
border-radius: 4px;
|
||||
margin: $welcomePageEnterRoomMargin;
|
||||
height: fit-content;
|
||||
|
||||
.enter-room-input-container {
|
||||
.join-meeting-container {
|
||||
margin: $welcomePageEnterRoomMargin;
|
||||
padding: $welcomePageEnterRoomPadding;
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
width: 100%;
|
||||
text-align: left;
|
||||
color: #253858;
|
||||
}
|
||||
|
||||
.enter-room-input-container {
|
||||
flex-grow: 1;
|
||||
height: fit-content;
|
||||
padding-right: 4px;
|
||||
position: relative;
|
||||
|
||||
.enter-room-input {
|
||||
border-radius: 4px;
|
||||
border: 0;
|
||||
background: #fff;
|
||||
display: inline-block;
|
||||
@@ -90,48 +121,17 @@ body.welcome-page {
|
||||
font-size: 14px;
|
||||
padding-left: 10px;
|
||||
|
||||
&:focus {
|
||||
&.focus-visible {
|
||||
outline: auto 2px #005fcc;
|
||||
}
|
||||
}
|
||||
|
||||
.insecure-room-name-warning {
|
||||
align-items: center;
|
||||
color: $defaultWarningColor;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin-top: 15px;
|
||||
|
||||
.jitsi-icon {
|
||||
margin-right: 15px;
|
||||
|
||||
svg {
|
||||
fill: $defaultWarningColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
color: #253858;
|
||||
}
|
||||
}
|
||||
|
||||
.warning-without-link {
|
||||
position: absolute;
|
||||
top: 44px;
|
||||
left: -10px;
|
||||
}
|
||||
|
||||
.warning-with-link {
|
||||
position: absolute;
|
||||
top: 84px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#moderated-meetings {
|
||||
max-width: calc(100% - 40px);
|
||||
padding: 16px 0 39px 0;
|
||||
padding: 16px 0 0;
|
||||
width: $welcomePageEnterRoomWidth;
|
||||
text-align: center;
|
||||
|
||||
@@ -167,7 +167,7 @@ body.welcome-page {
|
||||
margin: 4px;
|
||||
display: $welcomePageTabButtonsDisplay;
|
||||
|
||||
.tab {
|
||||
[role="tab"] {
|
||||
background-color: #c7ddff;
|
||||
border-radius: 7px;
|
||||
cursor: pointer;
|
||||
@@ -176,8 +176,10 @@ body.welcome-page {
|
||||
margin: 2px;
|
||||
padding: 7px 0;
|
||||
text-align: center;
|
||||
color: inherit;
|
||||
border: 0;
|
||||
|
||||
&.selected {
|
||||
&[aria-selected="true"] {
|
||||
background-color: #FFF;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -67,6 +67,13 @@
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
|
||||
.dial-in-conference-id {
|
||||
text-align: center;
|
||||
min-width: 200px;
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.dial-in-conference-id {
|
||||
margin: $deepLinkingDialInConferenceIdMargin;
|
||||
padding: $deepLinkingDialInConferenceIdPadding;
|
||||
@@ -74,24 +81,12 @@
|
||||
border-radius: $deepLinkingDialInConferenceIdBorderRadius;
|
||||
}
|
||||
|
||||
.dial-in-conference-name {
|
||||
font-size: $deepLinkingDialInConferenceNameFontSize;
|
||||
line-height: $deepLinkingDialInConferenceNameLineHeight;
|
||||
margin-bottom: $deepLinkingDialInConferenceNameMarginBottom;
|
||||
font-weight: $deepLinkingDialInConferenceNameFontWeight;
|
||||
}
|
||||
|
||||
.dial-in-conference-description {
|
||||
font-size: $deepLinkingDialInConferenceDescriptionFontSize;
|
||||
line-height: $deepLinkingDialInConferenceDescriptionLineHeight;
|
||||
margin-bottom: $deepLinkingDialInConferenceDescriptionMarginBottom;
|
||||
}
|
||||
|
||||
.dial-in-conference-pin {
|
||||
font-size: $deepLinkingDialInConferencePinFontSize;
|
||||
line-height: $deepLinkingDialInConferencePinLineHeight;
|
||||
}
|
||||
|
||||
.toll-free-list {
|
||||
min-width: 80px;
|
||||
}
|
||||
|
||||
@@ -33,7 +33,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'reload_overlay/reload_overlay';
|
||||
@import 'mini_toolbox';
|
||||
@import 'modals/desktop-picker/desktop-picker';
|
||||
@import 'modals/device-selection/device-selection';
|
||||
@import 'modals/dialog';
|
||||
@import 'modals/embed-meeting/embed-meeting';
|
||||
@import 'modals/feedback/feedback';
|
||||
|
||||
@@ -63,3 +63,8 @@
|
||||
.desktop-source-preview-image-container {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.desktop-picker-tabs-container {
|
||||
width: 65%;
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
@@ -1,148 +0,0 @@
|
||||
.device-selection {
|
||||
.device-selectors {
|
||||
font-size: 14px;
|
||||
|
||||
> div {
|
||||
display: block;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
||||
.device-selector-icon {
|
||||
align-self: center;
|
||||
color: inherit;
|
||||
font-size: 20px;
|
||||
margin-left: 3px;
|
||||
}
|
||||
|
||||
.device-selector-label {
|
||||
margin-bottom: 1px;
|
||||
}
|
||||
|
||||
/* device-selector-trigger stylings attempt to mimic AtlasKit button */
|
||||
.device-selector-trigger {
|
||||
background-color: #0E1624;
|
||||
border: 1px solid #455166;
|
||||
border-radius: 5px;
|
||||
display: flex;
|
||||
height: 2.3em;
|
||||
justify-content: space-between;
|
||||
line-height: 2.3em;
|
||||
overflow: hidden;
|
||||
padding: 0 8px;
|
||||
}
|
||||
.device-selector-trigger-disabled {
|
||||
.device-selector-trigger {
|
||||
color: #a5adba;
|
||||
cursor: default;
|
||||
}
|
||||
}
|
||||
|
||||
.device-selector-trigger-text {
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.device-selection-column {
|
||||
box-sizing: border-box;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
|
||||
&.column-selectors {
|
||||
margin-left: 15px;
|
||||
width: 45%;
|
||||
}
|
||||
|
||||
&.column-video {
|
||||
width: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.device-selection-video-container {
|
||||
border-radius: 3px;
|
||||
margin-bottom: 5px;
|
||||
|
||||
.video-input-preview {
|
||||
margin-top: 2px;
|
||||
position: relative;
|
||||
|
||||
> video {
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.video-input-preview-error {
|
||||
color: $participantNameColor;
|
||||
display: none;
|
||||
left: 0;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
text-align: center;
|
||||
top: 50%;
|
||||
}
|
||||
|
||||
&.video-preview-has-error {
|
||||
background: black;
|
||||
|
||||
.video-input-preview-error {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
.video-input-preview-display {
|
||||
height: auto;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.audio-output-preview {
|
||||
font-size: 14px;
|
||||
|
||||
a {
|
||||
color: #6FB1EA;
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #B3D4FF;
|
||||
}
|
||||
}
|
||||
|
||||
.audio-input-preview {
|
||||
background: #1B2638;
|
||||
border-radius: 5px;
|
||||
height: 8px;
|
||||
|
||||
.audio-input-preview-level {
|
||||
background: #75B1FF;
|
||||
border-radius: 5px;
|
||||
height: 100%;
|
||||
-webkit-transition: width .1s ease-in-out;
|
||||
-moz-transition: width .1s ease-in-out;
|
||||
-o-transition: width .1s ease-in-out;
|
||||
transition: width .1s ease-in-out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.device-selection.video-hidden {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
width: 100%;
|
||||
|
||||
.column-selectors {
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.column-video {
|
||||
order: 1;
|
||||
width: 100%;
|
||||
margin-top: 8px;
|
||||
}
|
||||
}
|
||||
@@ -44,61 +44,3 @@
|
||||
-webkit-animation-timing-function: ease-in-out;
|
||||
animation-timing-function: ease-in-out
|
||||
}
|
||||
|
||||
.feedback-dialog {
|
||||
margin-bottom: 5px;
|
||||
|
||||
.details {
|
||||
textarea {
|
||||
min-height: 100px;
|
||||
}
|
||||
}
|
||||
|
||||
.input-control {
|
||||
background-color: $feedbackInputBg;
|
||||
color: $feedbackInputTextColor;
|
||||
|
||||
&::-webkit-input-placeholder {
|
||||
color: $feedbackInputPlaceholderColor;
|
||||
}
|
||||
&::-moz-placeholder { /* Firefox 19+ */
|
||||
color: $feedbackInputPlaceholderColor;
|
||||
}
|
||||
&:-ms-input-placeholder {
|
||||
color: $feedbackInputPlaceholderColor;
|
||||
}
|
||||
}
|
||||
|
||||
.rating {
|
||||
line-height: 1.2;
|
||||
margin-top: 10px;
|
||||
text-align: center;
|
||||
|
||||
.star-label {
|
||||
font-size: 14px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.star-btn {
|
||||
color: inherit;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 34px;
|
||||
outline: none;
|
||||
position: relative;
|
||||
text-decoration: none;
|
||||
@include transition(all .2s ease);
|
||||
|
||||
&.active,
|
||||
&:hover,
|
||||
&.starHover {
|
||||
color: #36B37E;
|
||||
};
|
||||
|
||||
}
|
||||
.star-btn:focus,
|
||||
.star-btn:active {
|
||||
outline: 1px solid #B8C7E0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,6 +50,8 @@
|
||||
}
|
||||
|
||||
.dial-in-numbers-list {
|
||||
max-width: 334px;
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
font-size: 12px;
|
||||
line-height: 24px;
|
||||
@@ -59,10 +61,6 @@
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
tr {
|
||||
border-bottom: 1px solid #d1dbe8;
|
||||
}
|
||||
|
||||
.flag-cell {
|
||||
vertical-align: top;
|
||||
width: 30px;
|
||||
@@ -91,6 +89,7 @@
|
||||
font-weight: bold;
|
||||
list-style: none;
|
||||
vertical-align: top;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
li.toll-free:empty:before {
|
||||
@@ -119,11 +118,6 @@
|
||||
margin-top: 40px;
|
||||
}
|
||||
|
||||
.dial-in-conference-name,
|
||||
.dial-in-conference-pin {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.dial-in-conference-description {
|
||||
margin: 12px;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ $sidePanelWidth: 300px;
|
||||
.prejoin-third-party {
|
||||
flex-direction: column-reverse;
|
||||
z-index: auto;
|
||||
align-items: center;
|
||||
|
||||
.content {
|
||||
height: auto;
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
.prejoin-input {
|
||||
margin-bottom: 16px;
|
||||
width: 100%;
|
||||
|
||||
& input {
|
||||
text-align: center;
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
.toolbox-content-wrapper,
|
||||
.toolbox-content-items {
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
width: auto;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
1
debian/jitsi-meet-web.install
vendored
1
debian/jitsi-meet-web.install
vendored
@@ -8,7 +8,6 @@ sounds /usr/share/jitsi-meet/
|
||||
fonts /usr/share/jitsi-meet/
|
||||
images /usr/share/jitsi-meet/
|
||||
lang /usr/share/jitsi-meet/
|
||||
connection_optimization /usr/share/jitsi-meet/
|
||||
resources/robots.txt /usr/share/jitsi-meet/
|
||||
resources/*.sh /usr/share/jitsi-meet/scripts/
|
||||
pwa-worker.js /usr/share/jitsi-meet/
|
||||
|
||||
@@ -93,7 +93,7 @@ server {
|
||||
}
|
||||
|
||||
# ensure all static content can always be found first
|
||||
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
|
||||
location ~ ^/(libs|css|static|images|fonts|lang|sounds|.well-known)/(.*)$
|
||||
{
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
alias /usr/share/jitsi-meet/$1/$2;
|
||||
|
||||
BIN
images/logo-deep-linking-mobile.png
Normal file
BIN
images/logo-deep-linking-mobile.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 6.3 KiB |
@@ -182,8 +182,6 @@
|
||||
'error', loadErrHandler, true /* capture phase type of listener */);
|
||||
</script>
|
||||
<script><!--#include virtual="/config.js" --></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
|
||||
<!--#include virtual="connection_optimization/connection_optimization.html" -->
|
||||
<script src="libs/do_external_connect.min.js?v=1"></script>
|
||||
<script><!--#include virtual="/interface_config.js" --></script>
|
||||
<script src="libs/lib-jitsi-meet.min.js?v=139"></script>
|
||||
<script src="libs/app.bundle.min.js?v=139"></script>
|
||||
|
||||
434
ios/Podfile.lock
434
ios/Podfile.lock
@@ -13,14 +13,14 @@ PODS:
|
||||
- CocoaLumberjack/Core (= 3.7.2)
|
||||
- CocoaLumberjack/Core (3.7.2)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.68.5)
|
||||
- FBReactNativeSpec (0.68.5):
|
||||
- FBLazyVector (0.68.6)
|
||||
- FBReactNativeSpec (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- RCTRequired (= 0.68.6)
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Core (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- Firebase/Analytics (8.15.0):
|
||||
- Firebase/Core
|
||||
- Firebase/Core (8.15.0):
|
||||
@@ -163,201 +163,201 @@ PODS:
|
||||
- DoubleConversion
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- RCTRequired (0.68.5)
|
||||
- RCTTypeSafety (0.68.5):
|
||||
- FBLazyVector (= 0.68.5)
|
||||
- RCTRequired (0.68.6)
|
||||
- RCTTypeSafety (0.68.6):
|
||||
- FBLazyVector (= 0.68.6)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React (0.68.5):
|
||||
- React-Core (= 0.68.5)
|
||||
- React-Core/DevSupport (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-RCTActionSheet (= 0.68.5)
|
||||
- React-RCTAnimation (= 0.68.5)
|
||||
- React-RCTBlob (= 0.68.5)
|
||||
- React-RCTImage (= 0.68.5)
|
||||
- React-RCTLinking (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- React-RCTSettings (= 0.68.5)
|
||||
- React-RCTText (= 0.68.5)
|
||||
- React-RCTVibration (= 0.68.5)
|
||||
- React-callinvoker (0.68.5)
|
||||
- React-Codegen (0.68.5):
|
||||
- FBReactNativeSpec (= 0.68.5)
|
||||
- RCTRequired (= 0.68.6)
|
||||
- React-Core (= 0.68.6)
|
||||
- React (0.68.6):
|
||||
- React-Core (= 0.68.6)
|
||||
- React-Core/DevSupport (= 0.68.6)
|
||||
- React-Core/RCTWebSocket (= 0.68.6)
|
||||
- React-RCTActionSheet (= 0.68.6)
|
||||
- React-RCTAnimation (= 0.68.6)
|
||||
- React-RCTBlob (= 0.68.6)
|
||||
- React-RCTImage (= 0.68.6)
|
||||
- React-RCTLinking (= 0.68.6)
|
||||
- React-RCTNetwork (= 0.68.6)
|
||||
- React-RCTSettings (= 0.68.6)
|
||||
- React-RCTText (= 0.68.6)
|
||||
- React-RCTVibration (= 0.68.6)
|
||||
- React-callinvoker (0.68.6)
|
||||
- React-Codegen (0.68.6):
|
||||
- FBReactNativeSpec (= 0.68.6)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-Core (0.68.5):
|
||||
- RCTRequired (= 0.68.6)
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Core (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-Core (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-Core/Default (= 0.68.6)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.68.5):
|
||||
- React-Core/CoreModulesHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/Default (0.68.5):
|
||||
- React-Core/Default (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.68.5):
|
||||
- React-Core/DevSupport (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-jsinspector (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-Core/Default (= 0.68.6)
|
||||
- React-Core/RCTWebSocket (= 0.68.6)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-jsinspector (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.68.5):
|
||||
- React-Core/RCTActionSheetHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.68.5):
|
||||
- React-Core/RCTAnimationHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.68.5):
|
||||
- React-Core/RCTBlobHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.68.5):
|
||||
- React-Core/RCTImageHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.68.5):
|
||||
- React-Core/RCTLinkingHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.68.5):
|
||||
- React-Core/RCTNetworkHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.68.5):
|
||||
- React-Core/RCTSettingsHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.68.5):
|
||||
- React-Core/RCTTextHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.68.5):
|
||||
- React-Core/RCTVibrationHeaders (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.68.5):
|
||||
- React-Core/RCTWebSocket (0.68.6):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-Core/Default (= 0.68.6)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsiexecutor (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- Yoga
|
||||
- React-CoreModules (0.68.5):
|
||||
- React-CoreModules (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTImage (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-cxxreact (0.68.5):
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-RCTImage (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-cxxreact (0.68.6):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsinspector (= 0.68.5)
|
||||
- React-logger (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-runtimeexecutor (= 0.68.5)
|
||||
- React-jsi (0.68.5):
|
||||
- React-callinvoker (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-jsinspector (= 0.68.6)
|
||||
- React-logger (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- React-runtimeexecutor (= 0.68.6)
|
||||
- React-jsi (0.68.6):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsi/Default (= 0.68.5)
|
||||
- React-jsi/Default (0.68.5):
|
||||
- React-jsi/Default (= 0.68.6)
|
||||
- React-jsi/Default (0.68.6):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.68.5):
|
||||
- React-jsiexecutor (0.68.6):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-jsinspector (0.68.5)
|
||||
- React-logger (0.68.5):
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- React-jsinspector (0.68.6)
|
||||
- React-logger (0.68.6):
|
||||
- glog
|
||||
- react-native-background-timer (2.4.1):
|
||||
- React-Core
|
||||
@@ -389,76 +389,76 @@ PODS:
|
||||
- react-native-video/Video (6.0.0-alpha.1):
|
||||
- PromisesSwift
|
||||
- React-Core
|
||||
- react-native-webrtc (106.0.5):
|
||||
- react-native-webrtc (106.0.7):
|
||||
- JitsiWebRTC (~> 106.0.0)
|
||||
- React-Core
|
||||
- react-native-webview (11.15.1):
|
||||
- React-Core
|
||||
- React-perflogger (0.68.5)
|
||||
- React-RCTActionSheet (0.68.5):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.5)
|
||||
- React-RCTAnimation (0.68.5):
|
||||
- React-perflogger (0.68.6)
|
||||
- React-RCTActionSheet (0.68.6):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.6)
|
||||
- React-RCTAnimation (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTBlob (0.68.5):
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-RCTBlob (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTImage (0.68.5):
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.6)
|
||||
- React-Core/RCTWebSocket (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-RCTNetwork (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-RCTImage (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTImageHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTLinking (0.68.5):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTNetwork (0.68.5):
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTImageHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-RCTNetwork (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-RCTLinking (0.68.6):
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-RCTNetwork (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTSettings (0.68.5):
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-RCTSettings (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTText (0.68.5):
|
||||
- React-Core/RCTTextHeaders (= 0.68.5)
|
||||
- React-RCTVibration (0.68.5):
|
||||
- RCTTypeSafety (= 0.68.6)
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-RCTText (0.68.6):
|
||||
- React-Core/RCTTextHeaders (= 0.68.6)
|
||||
- React-RCTVibration (0.68.6):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-runtimeexecutor (0.68.5):
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (0.68.5):
|
||||
- React-Codegen (= 0.68.6)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (= 0.68.6)
|
||||
- React-runtimeexecutor (0.68.6):
|
||||
- React-jsi (= 0.68.6)
|
||||
- ReactCommon/turbomodule/core (0.68.6):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-logger (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-callinvoker (= 0.68.6)
|
||||
- React-Core (= 0.68.6)
|
||||
- React-cxxreact (= 0.68.6)
|
||||
- React-jsi (= 0.68.6)
|
||||
- React-logger (= 0.68.6)
|
||||
- React-perflogger (= 0.68.6)
|
||||
- RNCalendarEvents (2.2.0):
|
||||
- React
|
||||
- RNCAsyncStorage (1.17.3):
|
||||
@@ -705,8 +705,8 @@ SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736
|
||||
FBReactNativeSpec: 0e0d384ef17a33b385f13f0c7f97702c7cd17858
|
||||
FBLazyVector: 74b042924fe14da854ac4e87cefc417f583b22b1
|
||||
FBReactNativeSpec: cc0037b9914b9b1d92a15f179bc3e2e2c7cc0c6f
|
||||
Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d
|
||||
FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa
|
||||
FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1
|
||||
@@ -731,18 +731,18 @@ SPEC CHECKSUMS:
|
||||
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
||||
PromisesSwift: 99fddfe4a0ec88a56486644c0da106694c92a604
|
||||
RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8
|
||||
RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74
|
||||
RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65
|
||||
React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03
|
||||
React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593
|
||||
React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d
|
||||
React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca
|
||||
React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942
|
||||
React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9
|
||||
React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c
|
||||
React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56
|
||||
React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9
|
||||
React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d
|
||||
RCTRequired: 92cbd71369a2de6add25fd2403ac39838f1b694f
|
||||
RCTTypeSafety: 494e8af41d7410ed0b877210859ee3984f37e6b4
|
||||
React: 59989499c0e8926a90d34a9ae0bdb2d1b5b53406
|
||||
React-callinvoker: 8187db1c71cf2c1c66e8f7328a0cf77a2b255d94
|
||||
React-Codegen: e806dc2f10ddae645d855cb58acf73ce41eb8ea5
|
||||
React-Core: fc7339b493e368ae079850a4721bdf716cf3dba2
|
||||
React-CoreModules: 2f54f6bbf2764044379332089fcbdaf79197021e
|
||||
React-cxxreact: ee119270006794976e1ab271f0111a5a88b16bcf
|
||||
React-jsi: ec691b2a475d13b1fd39f697145a526eeeb6661c
|
||||
React-jsiexecutor: b4ce4afc5dd9c8fdd2ac59049ccf420f288ecef7
|
||||
React-jsinspector: e396d5e56af08fce39f50571726b68a40f1e302d
|
||||
React-logger: cec52b3f8fb0be0d47b2cb75dec69de60f2de3b6
|
||||
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
|
||||
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
|
||||
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
|
||||
@@ -754,20 +754,20 @@ SPEC CHECKSUMS:
|
||||
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
|
||||
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
|
||||
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
|
||||
react-native-webrtc: ef315d8adb68e78298b22100377d12ef168efdb5
|
||||
react-native-webrtc: 0df36747802476e758af6b6dceccdeaed8c826c2
|
||||
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
|
||||
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
|
||||
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
|
||||
React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313
|
||||
React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57
|
||||
React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b
|
||||
React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4
|
||||
React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6
|
||||
React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3
|
||||
React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e
|
||||
React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1
|
||||
React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1
|
||||
ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b
|
||||
React-perflogger: 46620fc6d1c3157b60ed28434e08f7fd7f3f3353
|
||||
React-RCTActionSheet: b1f7e72a0ba760ec684df335c61f730b5179f5ff
|
||||
React-RCTAnimation: d73b62d42867ab608dfb10e100d8b91106275b18
|
||||
React-RCTBlob: b5f59693721d50967c35598158e6ca01b474c7de
|
||||
React-RCTImage: 37cf34d0c2fbef2e0278d42a7c5e8ea06a9fed6b
|
||||
React-RCTLinking: a11dced20019cf1c2ec7fd120f18b08f2851f79e
|
||||
React-RCTNetwork: ba097188e5eac42e070029e7cedd9b978940833a
|
||||
React-RCTSettings: 147073708a1c1bde521cf3af045a675682772726
|
||||
React-RCTText: 23f76ebfb2717d181476432e5ecf1c6c4a104c5e
|
||||
React-RCTVibration: be5f18ffc644f96f904e0e673ab639ca5d673ee8
|
||||
React-runtimeexecutor: d5498cfb7059bf8397b6416db4777843f3f4c1e7
|
||||
ReactCommon: 1974dab5108c79b40199f12a4833d2499b9f6303
|
||||
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
||||
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
@@ -779,7 +779,7 @@ SPEC CHECKSUMS:
|
||||
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
||||
RNSVG: f3b60aeeaa81960e2e0536c3a9eef50b667ef3a9
|
||||
RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4
|
||||
Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c
|
||||
Yoga: 7929b92b1828675c1bebeb114dae8cb8fa7ef6a3
|
||||
|
||||
PODFILE CHECKSUM: e671cdcdb80fab67e305861c36bfae8ed5a5b0ef
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
"cs": "Čeština",
|
||||
"da": "Dansk",
|
||||
"de": "Deutsch",
|
||||
"dsb": "Dolnoserbšćina",
|
||||
"el": "Ελληνικά",
|
||||
"en": "English",
|
||||
"enGB": "English (United Kingdom)",
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
"defaultEmail": "La vostra adreça de correu electrònic predeterminada",
|
||||
"disabled": "No podeu convidar-hi persones.",
|
||||
"failedToAdd": "No s'han pogut afegir-hi participants",
|
||||
"footerText": "La marcació està desactivada.",
|
||||
"googleEmail": "Correu de Google",
|
||||
"inviteMoreHeader": "Sou l'única persona en la reunió",
|
||||
"inviteMoreMailSubject": "Entra a la reunió {{appName}}",
|
||||
@@ -97,6 +96,7 @@
|
||||
"messageAccessibleTitleMe": "jo dic:",
|
||||
"messageTo": "Missatge privat per a {{recipient}}",
|
||||
"messagebox": "Escriviu un missatge",
|
||||
"newMessages": "Missatges nous",
|
||||
"nickname": {
|
||||
"popover": "Trieu un sobrenom",
|
||||
"title": "Introduïu un sobrenom per a usar el xat",
|
||||
@@ -116,6 +116,7 @@
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"buttonText": "Instal·la l'extensió de Chrome",
|
||||
"buttonTextEdge": "Instal·la l'extensió d'Edge",
|
||||
"close": "Tanca",
|
||||
"dontShowAgain": "No m'ho mostris més",
|
||||
"installExtensionText": "Instal·la l'extensió per a la integració amb Google Calendar i Office 365"
|
||||
@@ -206,6 +207,9 @@
|
||||
"selectADevice": "Seleccioneu un aparell",
|
||||
"testAudio": "Reprodueix un so de prova"
|
||||
},
|
||||
"dialIn": {
|
||||
"screenTitle": "Resum de la trucada"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "ara és {{status}}"
|
||||
},
|
||||
@@ -267,6 +271,7 @@
|
||||
"gracefulShutdown": "El nostre servei ara mateix és en manteniment. Torneu-ho a intentar més tard.",
|
||||
"grantModeratorDialog": "Esteu segur que voleu concedir drets de moderador a {{participantName}}?",
|
||||
"grantModeratorTitle": "Concedeix drets de moderador",
|
||||
"hide": "Amaga",
|
||||
"hideShareAudioHelper": "No tornis a mostrar aquest diàleg",
|
||||
"incorrectPassword": "El nom o la contrasenya no són correctes",
|
||||
"incorrectRoomLockPassword": "La contrasenya no és correcta",
|
||||
@@ -281,7 +286,6 @@
|
||||
"linkMeetingTitle": "Enllaça la reunió a Salesforce",
|
||||
"liveStreaming": "Transmissió en directe",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "No és possible mentre l'enregistrament estigui actiu",
|
||||
"liveStreamingDisabledTooltip": "No es pot iniciar la transmissió en directe.",
|
||||
"localUserControls": "Controls locals d'usuari",
|
||||
"lockMessage": "No s'ha pogut blocar la conferència.",
|
||||
"lockRoom": "Afegeix una $t(lockRoomPassword) de reunió",
|
||||
@@ -336,7 +340,6 @@
|
||||
"recentlyUsedObjects": "Els objectes que heu usat recentment",
|
||||
"recording": "Enregistrament",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "No és possible mentre hi ha una transmissió en directe activa",
|
||||
"recordingDisabledTooltip": "No es pot enregistrar.",
|
||||
"rejoinNow": "Torna a entrar ara",
|
||||
"remoteControlAllowedMessage": "{{user}} ha acceptat la petició de control remot!",
|
||||
"remoteControlDeniedMessage": "{{user}} ha rebutjat la petició de control remot!",
|
||||
@@ -386,6 +389,7 @@
|
||||
"shareYourScreenDisabled": "S'ha inhabilitat la compartició de pantalla.",
|
||||
"sharedVideoDialogError": "Error: URL no vàlid",
|
||||
"sharedVideoLinkPlaceholder": "Enllaç de YouTube o enllaç directe del vídeo",
|
||||
"show": "Mostra",
|
||||
"start": "Inicia",
|
||||
"startLiveStreaming": "Inicia la transmissió en directe",
|
||||
"startRecording": "Inicia l'enregistrament",
|
||||
@@ -476,9 +480,11 @@
|
||||
"noRoom": "No s'ha indicat cap sala a què marcar.",
|
||||
"numbers": "Números de marcatge",
|
||||
"password": "$t(lockRoomPasswordUppercase): ",
|
||||
"reachedLimit": "Heu arribat al límit del vostre pla.",
|
||||
"sip": "Adreça SIP",
|
||||
"title": "Comparteix",
|
||||
"tooltip": "Comparteix l'enllaç i la informació de marcatge d'aquesta reunió"
|
||||
"tooltip": "Comparteix l'enllaç i la informació de marcatge d'aquesta reunió",
|
||||
"upgradeOptions": "Vegeu les opcions d'actualització"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "Vam ensopegar una mica.",
|
||||
@@ -513,6 +519,10 @@
|
||||
"toggleShortcuts": "Mostra o amaga les dreceres de teclat",
|
||||
"videoMute": "Inicia o atura la càmera"
|
||||
},
|
||||
"largeVideo": {
|
||||
"screenIsShared": "Esteu compartint la pantalla",
|
||||
"showMeWhatImSharing": "Mostra'm què estic compartint"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Treballem per a alliberar recursos de transmissió. Torneu-ho a intentar en uns minuts.",
|
||||
"busyTitle": "Ara mateix, tots els reproductors són ocupats",
|
||||
@@ -616,6 +626,7 @@
|
||||
"no": "No",
|
||||
"participant": "Participant",
|
||||
"participantStats": "Estadístiques del participant",
|
||||
"selectTabTitle": "🎥 Trieu aquesta pestanya per a enregistrar",
|
||||
"sessionToken": "Identificador de la sessió",
|
||||
"start": "Inicia l'enregistrament",
|
||||
"stop": "Atura l'enregistrament",
|
||||
@@ -638,6 +649,8 @@
|
||||
"connectedOneMember": "{{name}} s'ha unit a la reunió",
|
||||
"connectedThreePlusMembers": "{{name}} i molts altres s'han unit a la reunió",
|
||||
"connectedTwoMembers": "{{first}} i {{second}} s'han unit a la reunió",
|
||||
"dataChannelClosed": "Qualitat del vídeo deteriorada",
|
||||
"dataChannelClosedDescription": "El canal pont s'ha desconnectat i per la qualitat de vídeo està limitada al valor inferior.",
|
||||
"disconnected": "desconnectat",
|
||||
"displayNotifications": "Mostra les notificacions sobre",
|
||||
"focus": "Focus de la conferència",
|
||||
@@ -658,6 +671,8 @@
|
||||
"linkToSalesforceKey": "Enllaça aquesta reunió",
|
||||
"linkToSalesforceProgress": "S'està enllaçant la reunió a Salesforce...",
|
||||
"linkToSalesforceSuccess": "La reunió s'ha enllaçat a Salesforce",
|
||||
"localRecordingStarted": "{{name}} ha iniciat un enregistrament local.",
|
||||
"localRecordingStopped": "{{name}} ha aturat has stopped a local recording.",
|
||||
"me": "Jo",
|
||||
"moderationInEffectCSDescription": "Aixequeu la mà si voleu compartir la pantalla.",
|
||||
"moderationInEffectCSTitle": "El moderador ha blocat la compartició de pantalla",
|
||||
@@ -678,6 +693,10 @@
|
||||
"newDeviceAction": "Usa",
|
||||
"newDeviceAudioTitle": "S'ha detectat un aparell d'àudio nou",
|
||||
"newDeviceCameraTitle": "S'ha detectat una càmera nova",
|
||||
"noiseSuppressionDesktopAudioDescription": "La supressió de soroll no es pot activar mentre es comparteix l'àudio de l'escriptori. Desactiveu-lo i proveu una altra vegada.",
|
||||
"noiseSuppressionFailedTitle": "No s'ha pogut iniciar la supressió de soroll",
|
||||
"noiseSuppressionNoTrackDescription": "Abans, activeu el vostre micròfon.",
|
||||
"noiseSuppressionStereoDescription": "Ara per ara, no és possible la supressió de soroll d'àudio en estèreo",
|
||||
"oldElectronClientDescription1": "Sembla que useu una versió antiga del client Jitsi Meet, que té vulnerabilitats de seguretat conegudes. Assegureu-vos d'actualitzar-lo",
|
||||
"oldElectronClientDescription2": "última construcció",
|
||||
"oldElectronClientDescription3": "ara!",
|
||||
@@ -813,6 +832,7 @@
|
||||
"initiated": "S'ha iniciat la trucada",
|
||||
"joinAudioByPhone": "Entra amb àudio de telèfon",
|
||||
"joinMeeting": "Entra a la reunió",
|
||||
"joinMeetingInLowBandwidthMode": "Uneix-t'hi en mode de poca amplada de banda",
|
||||
"joinWithoutAudio": "Entra sense àudio",
|
||||
"keyboardShortcuts": "Activa les dreceres del teclat",
|
||||
"linkCopied": "L'enllaç s'ha copiat al porta-retalls",
|
||||
@@ -888,13 +908,23 @@
|
||||
"limitNotificationDescriptionWeb": "A causa de la gran demanda, l'enregistrament es limitarà a {{limit}} min. Per a enregistraments il·limitats, proveu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "S'ha generat un enllaç a l'enregistrament.",
|
||||
"live": "EN DIRECTE",
|
||||
"localRecordingNoNotificationWarning": "L'enregistrament no s'anunciarà als altres participants. Els haureu d'informar que la reunió s'està enregistrant.",
|
||||
"localRecordingNoVideo": "El vídeo no s'està enregistrant",
|
||||
"localRecordingStartWarning": "Assegureu-vos que atureu l'enregistrament abans de sortir de la reunió per a poder-lo desar.",
|
||||
"localRecordingStartWarningTitle": "Atura l'enregistrament per a desar-lo",
|
||||
"localRecordingVideoStop": "Aturar el vídeo també aturarà l'enregistrament local. Segur que voleu continuar?",
|
||||
"localRecordingVideoWarning": "Per a enregistrar el vostre vídeo, cal que ho feu en començar l'enregistrament",
|
||||
"localRecordingWarning": "Assegureu-vos de triar la pestanya actual per a poder usar el vídeo i àudios correctes. L'enregistrament actualment està limitat a 1 GB. Això són, aproximadament, 100 minuts.",
|
||||
"loggedIn": "Sessió iniciada com a {{userName}}",
|
||||
"noStreams": "No s'ha detectat flux d'àudio ni vídeo.",
|
||||
"off": "S'ha aturat l'enregistrament",
|
||||
"offBy": "{{name}} ha aturat l'enregistrament",
|
||||
"on": "L'enregistrament ha començat",
|
||||
"onBy": "{{name}} ha iniciat l'enregistrament",
|
||||
"onlyRecordSelf": "Enregistra només el meu àudio i vídeo",
|
||||
"pending": "S'està preparant per a enregistrar la reunió...",
|
||||
"rec": "ENREG",
|
||||
"saveLocalRecording": "Desa el fitxer de l'enregistrament en local (beta)",
|
||||
"serviceDescription": "El servei d'enregistrament desarà el vostre enregistrament",
|
||||
"serviceDescriptionCloud": "Enregistrament al núvol",
|
||||
"serviceDescriptionCloudInfo": "Les reunions enregistrades s'esborren automàticament 24 hores després de l'enregistrament.",
|
||||
@@ -902,6 +932,7 @@
|
||||
"sessionAlreadyActive": "Aquesta sessió ja s'està enregistrant o emetent en directe.",
|
||||
"signIn": "Inicia la sessió",
|
||||
"signOut": "Tanca la sessió",
|
||||
"surfaceError": "Trieu la pestanya actual.",
|
||||
"title": "Enregistrament",
|
||||
"unavailable": "Vaja! El servei {{serviceName}} ara mateix no és disponible. Treballem per a resoldre el problema. Torneu-ho a intentar més tard.",
|
||||
"unavailableTitle": "L'enregistrament no és disponible",
|
||||
@@ -918,6 +949,7 @@
|
||||
"title": "Opcions de seguretat"
|
||||
},
|
||||
"settings": {
|
||||
"buttonLabel": "Paràmetres",
|
||||
"calendar": {
|
||||
"about": "La integració de l'agenda {{appName}} s'usa per a accedir de forma segura a la vostra agenda perquè pugui llegir els esdeveniments pròxims.",
|
||||
"disconnect": "Desconnectat",
|
||||
@@ -941,6 +973,7 @@
|
||||
"name": "Nom",
|
||||
"noDevice": "Cap",
|
||||
"participantJoined": "S'ha unit un participant",
|
||||
"participantKnocking": "El participant ha entrat a la sala d'espera",
|
||||
"participantLeft": "Un participant ha sortit de la reunió",
|
||||
"playSounds": "Reprodueix el so",
|
||||
"reactions": "Reaccions de la reunió",
|
||||
@@ -970,13 +1003,21 @@
|
||||
"disableCrashReportingWarning": "Esteu segur que voleu desactivar l'informe de fallades? La configuració s'aplicarà després de reiniciar l'aplicació.",
|
||||
"disableP2P": "Desactiva el mode d'igual a igual",
|
||||
"displayName": "Nom visible",
|
||||
"displayNamePlaceholderText": "P. ex.: Pere Cullera",
|
||||
"email": "Adreça electrònica",
|
||||
"emailPlaceholderText": "email@example.com",
|
||||
"goTo": "Ves a",
|
||||
"header": "Configuració",
|
||||
"help": "Ajuda",
|
||||
"links": "Enllaços",
|
||||
"privacy": "Privadesa",
|
||||
"profileSection": "Perfil",
|
||||
"serverURL": "URL del servidor",
|
||||
"showAdvanced": "Mostra la configuració avançada",
|
||||
"startCarModeInLowBandwidthMode": "Inicia el mode cotxe en el mode d'amplada de banda baixa",
|
||||
"startWithAudioMuted": "Comença amb l'àudio silenciat",
|
||||
"startWithVideoMuted": "Comença amb el vídeo desactivat",
|
||||
"terms": "Condicions",
|
||||
"version": "Versió"
|
||||
},
|
||||
"share": {
|
||||
@@ -1003,6 +1044,7 @@
|
||||
},
|
||||
"startupoverlay": {
|
||||
"genericTitle": "La reunió requereix usar el micròfon i la càmera.",
|
||||
"policyText": "",
|
||||
"title": "{{app}} requereix usar el micròfon i la càmera."
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
@@ -1013,6 +1055,7 @@
|
||||
"termsView": {
|
||||
"title": "Condicions"
|
||||
},
|
||||
"toggleTopPanelLabel": "Mostra o amaga el panell superior",
|
||||
"toolbar": {
|
||||
"Settings": "Configuració",
|
||||
"accessibilityLabel": {
|
||||
@@ -1030,6 +1073,7 @@
|
||||
"document": "Activa o desactiva el document compartit",
|
||||
"download": "Baixeu les nostres aplicacions",
|
||||
"embedMeeting": "Insereix la reunió",
|
||||
"endConference": "Finalitza la reunió per a tothom",
|
||||
"expand": "Expandeix",
|
||||
"feedback": "Deixa comentaris",
|
||||
"fullScreen": "Activa o desactiva la pantalla completa",
|
||||
@@ -1054,6 +1098,7 @@
|
||||
"muteEveryoneElse": "Silencia tots els altres participants",
|
||||
"muteEveryoneElsesVideoStream": "Atura el vídeo a tots els altres",
|
||||
"muteEveryonesVideoStream": "Atura el vídeo a tothom",
|
||||
"noiseSuppression": "Supressió de soroll",
|
||||
"participants": "Participants",
|
||||
"pip": "Activa o desactiva el mode imatge en imatge",
|
||||
"privateMessage": "Envia un missatge privat",
|
||||
@@ -1079,7 +1124,8 @@
|
||||
"toggleCamera": "Activa o desactiva la càmera",
|
||||
"toggleFilmstrip": "Mostra o amaga la cinta",
|
||||
"videoblur": "Activa o desactiva el desenfocament del vídeo",
|
||||
"videomute": "Activa o desactiva la càmera"
|
||||
"videomute": "Activa o desactiva la càmera",
|
||||
"whiteboard": "Mostra o amaga la pissarra"
|
||||
},
|
||||
"addPeople": "Afegeix persones a la trucada",
|
||||
"audioOnlyOff": "Desactiva el mode de poca amplada de banda",
|
||||
@@ -1093,12 +1139,14 @@
|
||||
"clap": "Picament de mans",
|
||||
"closeChat": "Tanca el xat",
|
||||
"closeReactionsMenu": "Tanca el menú de reaccions",
|
||||
"disableNoiseSuppression": "Desactiva la supressió de soroll",
|
||||
"disableReactionSounds": "Podeu desactivar els sons de reacció per a aquesta reunió",
|
||||
"documentClose": "Tanca el document compartit",
|
||||
"documentOpen": "Obre el document compartit",
|
||||
"download": "Baixeu les nostres aplicacions",
|
||||
"e2ee": "Xifratge d'extrem a extrem",
|
||||
"embedMeeting": "Insereix la reunió",
|
||||
"endConference": "Finalitza la reunió per a tothom",
|
||||
"enterFullScreen": "Mostra en pantalla completa",
|
||||
"enterTileView": "Mostra en mode mosaic",
|
||||
"exitFullScreen": "Surt de la pantalla completa",
|
||||
@@ -1107,6 +1155,7 @@
|
||||
"giphy": "Mostra o amaga el menú GIPHY",
|
||||
"hangup": "Surt la reunió",
|
||||
"help": "Ajuda",
|
||||
"hideWhiteboard": "Amaga la pissarra",
|
||||
"invite": "Convida-hi persones",
|
||||
"joinBreakoutRoom": "Entra a la sala de descans",
|
||||
"laugh": "Riure",
|
||||
@@ -1129,6 +1178,7 @@
|
||||
"noAudioSignalDialInDesc": "També podeu marcar usant:",
|
||||
"noAudioSignalDialInLinkDesc": "Números de marcatge",
|
||||
"noAudioSignalTitle": "No entra cap so pel vostre micròfon!",
|
||||
"noiseSuppression": "Supressió de soroll",
|
||||
"noisyAudioInputDesc": "Sembla que el vostre micròfon fa soroll, considereu de silenciar-lo o canviar l'aparell.",
|
||||
"noisyAudioInputTitle": "Sembla que el micròfon fa soroll!",
|
||||
"openChat": "Obre el xat",
|
||||
@@ -1151,6 +1201,7 @@
|
||||
"shareaudio": "Comparteix l'àudio",
|
||||
"sharedvideo": "Comparteix el vídeo",
|
||||
"shortcuts": "Mostra les dreceres",
|
||||
"showWhiteboard": "Mostra la pissarra",
|
||||
"silence": "Silenci",
|
||||
"speakerStats": "Estadístiques de l'interlocutor",
|
||||
"startScreenSharing": "Atura la compartició de la pantalla",
|
||||
@@ -1174,8 +1225,12 @@
|
||||
"labelToolTip": "La reunió s'està transcrivint",
|
||||
"off": "La transcripció s'ha aturat",
|
||||
"pending": "S'està preparant per a enregistrar la reunió...",
|
||||
"sourceLanguageDesc": "La llengua actual de la reunió és <b>{{sourceLanguage}}</b>. <br/> Podeu canviar-la",
|
||||
"sourceLanguageHere": "aquí",
|
||||
"start": "Activa els subtítols",
|
||||
"stop": "Desactiva els subtítols",
|
||||
"subtitles": "Subtítols",
|
||||
"subtitlesOff": "Inactiu",
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
@@ -1311,6 +1366,7 @@
|
||||
"roomname": "Introduïu el nom de la sala",
|
||||
"roomnameHint": "Introduïu el nom o l'URL de la sala on voleu entrar. Podeu crear un nom, només cal que les persones amb qui us reuniu el coneguin i introdueixin el mateix nom.",
|
||||
"sendFeedback": "Envia comentaris",
|
||||
"settings": "Paràmetres",
|
||||
"startMeeting": "Inicia la reunió",
|
||||
"terms": "Condicions",
|
||||
"title": "Videoconferència segura, plena de funcionalitats i completament gratuïta i lliure"
|
||||
|
||||
@@ -184,13 +184,21 @@
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Sie benötigen die „{{app}}“-App, um der Konferenz auf dem Smartphone beizutreten.",
|
||||
"description": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. Versuchen Sie es erneut oder treten Sie der Konferenz in {{app}} im Web bei.",
|
||||
"descriptionNew": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. <br /><br /> Versuchen Sie es erneut oder treten Sie der Konferenz im Web bei.",
|
||||
"descriptionWithoutWeb": "Ist nichts passiert? Wir haben versucht, Ihre Besprechung in der „{{app}}“-Desktop-App zu starten.",
|
||||
"downloadApp": "App herunterladen",
|
||||
"downloadMobileApp": "Aus dem App Store herunterladen",
|
||||
"ifDoNotHaveApp": "Wenn Sie die App noch nicht haben:",
|
||||
"ifHaveApp": "Wenn Sie die App bereits haben:",
|
||||
"joinInApp": "Mit der App am Meeting teilnehmen",
|
||||
"joinInAppNew": "Mit der App",
|
||||
"joinInBrowser": "Im Browser",
|
||||
"launchMeetingLabel": "Wie möchten Sie an der Konferenz teilnehmen?",
|
||||
"launchWebButton": "Im Web öffnen",
|
||||
"noMobileApp": "Sie haben die App noch nicht installiert?",
|
||||
"termsAndConditions": "Indem Sie fortfahren, stimmen Sie underen<a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>Nutzungsbedingungen</a> zu.",
|
||||
"title": "Die Konferenz wird in {{app}} geöffnet …",
|
||||
"titleNew": "Konferenz starten ...",
|
||||
"tryAgainButton": "Erneut mit der nativen Applikation versuchen",
|
||||
"unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
|
||||
},
|
||||
@@ -203,6 +211,12 @@
|
||||
"microphonePermission": "Fehler beim Bezug der Mikrofon-Zugriffsberechtigungen"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"hid": {
|
||||
"callControl": "Anrufsteuerung",
|
||||
"connectedDevices": "Verbundene Geräte:",
|
||||
"deleteDevice": "Gerät löschen",
|
||||
"pairDevice": "Gerät verbinden"
|
||||
},
|
||||
"noPermission": "Berechtigungen nicht erteilt",
|
||||
"previewUnavailable": "Keine Vorschau verfügbar",
|
||||
"selectADevice": "Ein Gerät wählen",
|
||||
@@ -226,7 +240,9 @@
|
||||
"WaitingForHostTitle": "Warten auf den Beginn der Konferenz …",
|
||||
"Yes": "Ja",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Livestream"
|
||||
"close": "Popup schließen",
|
||||
"liveStreaming": "Livestream",
|
||||
"sharingTabs": "Optionen zum Teilen"
|
||||
},
|
||||
"add": "Hinzufügen",
|
||||
"addMeetingNote": "Notiz zu dieser Konferenz hinzufügen",
|
||||
@@ -438,6 +454,11 @@
|
||||
"veryBad": "Sehr schlecht",
|
||||
"veryGood": "Sehr gut"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Videominiaturen"
|
||||
}
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "Keine Ergebnisse :(",
|
||||
"search": "GIPHY durchsuchen"
|
||||
@@ -654,6 +675,7 @@
|
||||
"dataChannelClosedDescription": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher ist die Videoqulität auf die schlechteste Stufe limitiert.",
|
||||
"disconnected": "getrennt",
|
||||
"displayNotifications": "Benachrichtigungen anzeigen für",
|
||||
"dontRemindMe": "Nicht erinnern",
|
||||
"focus": "Konferenzleitung",
|
||||
"focusFail": "{{component}} ist im Moment nicht verfügbar – wiederholen in {{ms}} Sekunden",
|
||||
"gifsMenu": "GIPHY",
|
||||
@@ -662,6 +684,7 @@
|
||||
"invitedOneMember": "{{name}} wurde eingeladen",
|
||||
"invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen",
|
||||
"invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen",
|
||||
"joinMeeting": "Beitreten",
|
||||
"kickParticipant": "{{kicked}} wurde von {{kicker}} ausgewiesen",
|
||||
"leftOneMember": "{{name}} hat die Konferenz verlassen",
|
||||
"leftThreePlusMembers": "{{name}} und Weitere haben die Konferenz verlassen",
|
||||
@@ -751,6 +774,7 @@
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"participantsList": "Anwesende ({{count}})",
|
||||
"visitors": "Gäste ({{count}})",
|
||||
"waitingLobby": "In der Lobby ({{count}})"
|
||||
},
|
||||
"search": "Suche Anwesende",
|
||||
@@ -758,6 +782,7 @@
|
||||
},
|
||||
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
||||
"passwordSetRemotely": "von einer anderen Person gesetzt",
|
||||
"pinParticipant": "{{participantName}} - anheften",
|
||||
"pinnedParticipant": "Die Person ist angeheftet",
|
||||
"polls": {
|
||||
"answer": {
|
||||
@@ -916,6 +941,7 @@
|
||||
"localRecordingVideoWarning": "Um Ihr eigenes Kamerabild aufzuzeichnen, müssen Sie Ihre Kamera beim Start der Aufnahme einschalten",
|
||||
"localRecordingWarning": "Bitte prüfen Sie, dass das aktuelle Tab auswählen, um Bild und Ton aufzuzeichnen. Die Länge der Aufzeichnung ist aktuell auf 1GB beschränkt, was ungefähr 100 Minuten entspricht.",
|
||||
"loggedIn": "Als {{userName}} angemeldet",
|
||||
"noMicPermission": "Zugriff auf Mikrofon fehlgeschlagen. Bitte erlauben Sie den Zugriff auf das Mikrofon.",
|
||||
"noStreams": "Kein Ton oder Video erkannt.",
|
||||
"off": "Aufnahme gestoppt",
|
||||
"offBy": "{{name}} stoppte die Aufnahme",
|
||||
@@ -949,6 +975,7 @@
|
||||
"title": "Sicherheitsoptionen"
|
||||
},
|
||||
"settings": {
|
||||
"audio": "Audio",
|
||||
"buttonLabel": "Einstellungen",
|
||||
"calendar": {
|
||||
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Termine zu ermöglichen.",
|
||||
@@ -969,9 +996,11 @@
|
||||
"maxStageParticipants": "Maximale Anzahl an Personen, die zur Hauptansicht angeheftet werden können",
|
||||
"microphones": "Mikrofon",
|
||||
"moderator": "Moderation",
|
||||
"moderatorOptions": "Moderationseinstellungen",
|
||||
"more": "Mehr",
|
||||
"name": "Name",
|
||||
"noDevice": "Kein",
|
||||
"notifications": "Benachrichtigungen",
|
||||
"participantJoined": "Neue Person nimmt teil",
|
||||
"participantKnocking": "Person hat Lobby betreten",
|
||||
"participantLeft": "Person verlässt die Konferenz",
|
||||
@@ -982,13 +1011,14 @@
|
||||
"selectCamera": "Kamera",
|
||||
"selectMic": "Mikrofon",
|
||||
"selfView": "Eigene Ansicht",
|
||||
"sounds": "Hinweistöne",
|
||||
"shortcuts": "Tastaturkürzel",
|
||||
"speakers": "Lautsprecher",
|
||||
"startAudioMuted": "Alle Personen treten stummgeschaltet bei",
|
||||
"startReactionsMuted": "Interaktionstöne für alle deaktivieren",
|
||||
"startVideoMuted": "Alle Personen treten ohne Video bei",
|
||||
"talkWhileMuted": "Wenn bei Stummschaltung gesprochen wird",
|
||||
"title": "Einstellungen"
|
||||
"title": "Einstellungen",
|
||||
"video": "Kamera"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Erweitert",
|
||||
@@ -1069,18 +1099,29 @@
|
||||
"cc": "Untertitel ein-/ausschalten",
|
||||
"chat": "Chatfenster öffnen / schließen",
|
||||
"clap": "Klatschen",
|
||||
"closeChat": "Chat schließen",
|
||||
"closeMoreActions": "„Weitere Einstellungen“ schließen",
|
||||
"closeParticipantsPane": "Anwesendenliste schließen",
|
||||
"collapse": "Einklappen",
|
||||
"document": "Geteiltes Dokument schließen",
|
||||
"documentClose": "Geteiltes Dokument schließen",
|
||||
"documentOpen": "Geteiltes Dokument öffnen",
|
||||
"download": "Unsere Apps herunterladen",
|
||||
"embedMeeting": "Konferenz einbetten",
|
||||
"endConference": "Konferenz für alle beenden",
|
||||
"enterFullScreen": "Vollbildmodus einschalten",
|
||||
"enterTileView": "Kachelansicht einschalten",
|
||||
"exitFullScreen": "Vollbildansicht ausschalten",
|
||||
"exitTileView": "Kachelansicht ausschalten",
|
||||
"expand": "Ausklappen",
|
||||
"feedback": "Feedback hinterlassen",
|
||||
"fullScreen": "Vollbildmodus ein-/ausschalten",
|
||||
"giphy": "GIPHY ein-/ausschalten",
|
||||
"grantModerator": "Moderationsrechte vergeben",
|
||||
"hangup": "Konferenz verlassen",
|
||||
"heading": "Toolbar",
|
||||
"help": "Hilfe",
|
||||
"hideWhiteboard": "Whiteboard ausblenden",
|
||||
"invite": "Person einladen",
|
||||
"kick": "Person entfernen",
|
||||
"laugh": "Lachen",
|
||||
@@ -1090,6 +1131,7 @@
|
||||
"lobbyButton": "Lobbymodus ein-/ausschalten",
|
||||
"localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten",
|
||||
"lockRoom": "Konferenzpasswort ein-/ausschalten",
|
||||
"lowerHand": "Hand senken",
|
||||
"moreActions": "Menü „Weitere Einstellungen“ ein-/ausschalten",
|
||||
"moreActionsMenu": "Menü „Weitere Einstellungen“",
|
||||
"moreOptions": "Menü „Weitere Optionen“",
|
||||
@@ -1099,6 +1141,7 @@
|
||||
"muteEveryoneElsesVideoStream": "Alle anderen Kameras ausschalten",
|
||||
"muteEveryonesVideoStream": "Alle Kameras ausschalten",
|
||||
"noiseSuppression": "Rauschunterdrückung",
|
||||
"openChat": "Chat öffnen",
|
||||
"participants": "Anwesende",
|
||||
"pip": "Bild-in-Bild-Modus ein-/ausschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
@@ -1117,15 +1160,19 @@
|
||||
"sharedvideo": "Videofreigabe ein-/ausschalten",
|
||||
"shortcuts": "Tastenkombinationen ein-/ausblenden",
|
||||
"show": "Im Vordergrund anzeigen",
|
||||
"showWhiteboard": "Whiteboard anzeigen",
|
||||
"silence": "Stille",
|
||||
"speakerStats": "Sprechstatistik ein-/ausblenden",
|
||||
"stopScreenSharing": "Bildschirmfreigabe beenden",
|
||||
"stopSharedVideo": "Videofreigabe beenden",
|
||||
"surprised": "Überrascht",
|
||||
"tileView": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"toggleFilmstrip": "Miniaturansichten ein-/ausschalten",
|
||||
"unmute": "Stummschaltung aufheben",
|
||||
"videoblur": "Unscharfer Hintergrund ein-/ausschalten",
|
||||
"videomute": "„Video stummschalten“ ein-/ausschalten",
|
||||
"whiteboard": "Whiteboard ein-/ausschalten"
|
||||
"videounmute": "Kamera einschalten"
|
||||
},
|
||||
"addPeople": "Personen zur Konferenz hinzufügen",
|
||||
"audioOnlyOff": "Modus „Nur Audio“ deaktivieren",
|
||||
@@ -1138,6 +1185,7 @@
|
||||
"chat": "Chat öffnen / schließen",
|
||||
"clap": "Klatschen",
|
||||
"closeChat": "Chat schließen",
|
||||
"closeParticipantsPane": "Anwesenheitsliste schließen",
|
||||
"closeReactionsMenu": "Interaktionsmenü schließen",
|
||||
"disableNoiseSuppression": "Rauschunterdrückung deaktivieren",
|
||||
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
|
||||
@@ -1146,6 +1194,7 @@
|
||||
"download": "Unsere Apps herunterladen",
|
||||
"e2ee": "Ende-zu-Ende-Verschlüsselung",
|
||||
"embedMeeting": "Konferenz einbetten",
|
||||
"enableNoiseSuppression": "Rauschunterdrückung einschalten",
|
||||
"endConference": "Konferenz für alle beenden",
|
||||
"enterFullScreen": "Vollbildmodus",
|
||||
"enterTileView": "Kachelansicht einschalten",
|
||||
@@ -1170,7 +1219,7 @@
|
||||
"lowerYourHand": "Hand senken",
|
||||
"moreActions": "Weitere Einstellungen",
|
||||
"moreOptions": "Weitere Optionen",
|
||||
"mute": "Mikrofon aktivieren / deaktivieren",
|
||||
"mute": "Stummschalten",
|
||||
"muteEveryone": "Alle stummschalten",
|
||||
"muteEveryonesVideo": "Alle Kameras ausschalten",
|
||||
"noAudioSignalDesc": "Wenn Sie das Gerät nicht absichtlich über die Systemeinstellungen oder die Hardware stumm geschaltet haben, sollten Sie einen Wechsel des Geräts in Erwägung ziehen.",
|
||||
@@ -1214,8 +1263,10 @@
|
||||
"talkWhileMutedPopup": "Versuchen Sie zu sprechen? Ihr Mikrofon ist stummgeschaltet.",
|
||||
"tileViewToggle": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"unmute": "Stummschaltung aufheben",
|
||||
"videoSettings": "Kameraeinstellungen",
|
||||
"videomute": "Kamera starten / stoppen"
|
||||
"videomute": "Kamera stoppen",
|
||||
"videounmute": "Kamera einschalten"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Untertitel ein-/ausschalten",
|
||||
@@ -1233,6 +1284,7 @@
|
||||
"subtitlesOff": "Ausschalten",
|
||||
"tr": "TR"
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Nicht mehr anheften",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"chromeGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
@@ -1271,9 +1323,11 @@
|
||||
"ldTooltip": "Video wird in niedriger Auflösung angezeigt",
|
||||
"lowDefinition": "Niedrige Auflösung",
|
||||
"performanceSettings": "Qualitätseinstellungen",
|
||||
"recording": "Aufnahme läuft",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Video wird in Standardauflösung angezeigt",
|
||||
"standardDefinition": "Standardauflösung"
|
||||
"standardDefinition": "Standardauflösung",
|
||||
"streaming": "Streaming läuft"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Verbindungsinformationen",
|
||||
@@ -1285,6 +1339,7 @@
|
||||
"grantModerator": "Moderationsrechte vergeben",
|
||||
"hideSelfView": "Eigene Ansicht ausblenden",
|
||||
"kick": "Hinauswerfen",
|
||||
"mirrorVideo": "Mein Video spiegeln",
|
||||
"moderator": "Moderation",
|
||||
"mute": "Person ist stumm geschaltet",
|
||||
"muted": "Stummgeschaltet",
|
||||
@@ -1322,6 +1377,7 @@
|
||||
"webAssemblyWarning": "WebAssembly wird nicht unterstützt",
|
||||
"webAssemblyWarningDescription": "WebAssembly ist deaktiviert oder wird in diesem Browser nicht unterstützt"
|
||||
},
|
||||
"visitorsLabel": "Anzahl Gäste: {{count}}",
|
||||
"volumeSlider": "Lautstärkeregler",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -1354,6 +1410,7 @@
|
||||
"microsoftLogo": "Microsoft Logo",
|
||||
"policyLogo": "Richtlinienlogo"
|
||||
},
|
||||
"meetingsAccessibilityLabel": "Konferenzen",
|
||||
"mobileDownLoadLinkAndroid": "Android App Download",
|
||||
"mobileDownLoadLinkFDroid": "F-Droid App Download",
|
||||
"mobileDownLoadLinkIos": "iOS App Download",
|
||||
@@ -1373,5 +1430,10 @@
|
||||
"terms": "AGB",
|
||||
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen",
|
||||
"upcomingMeetings": "Ihre zukünftigen Konferenzen"
|
||||
},
|
||||
"whiteboard": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Whiteboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
1379
lang/main-dsb.json
Normal file
1379
lang/main-dsb.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -838,7 +838,7 @@
|
||||
"selectCamera": "Cámara",
|
||||
"selectMic": "Micrófono",
|
||||
"sounds": "Sonidos",
|
||||
"speakers": "Parlantes",
|
||||
"speakers": "Altavoces",
|
||||
"startAudioMuted": "Todos inician silenciados",
|
||||
"startVideoMuted": "Todos inician con cámara desactivada",
|
||||
"talkWhileMuted": "Hablar en silencio",
|
||||
|
||||
@@ -429,7 +429,12 @@
|
||||
"startSilentTitle": "",
|
||||
"suboptimalExperienceDescription": "Valitettavasti {{appName}} ei taida toimia kovin hyvin täällä. Yritämme löytää parannuskeinoja, mutta sillä välin kannattaa käyttää jotain <a href='{{recommendedBrowserPageLink}}' target='_blank'>täysin tuettua selainta</a>.",
|
||||
"suboptimalExperienceTitle": "Selainvaroitus",
|
||||
"unmute": ""
|
||||
"unmute": "Poista mykistys"
|
||||
},
|
||||
"participantsPane": {
|
||||
"actions": {
|
||||
"muteEveryoneElse": "Mykistä kaikki muut"
|
||||
}
|
||||
},
|
||||
"passwordDigitsOnly": "",
|
||||
"passwordSetRemotely": "",
|
||||
@@ -563,11 +568,13 @@
|
||||
"moreActions": "Säädä Lisää toimintoja -valikkoa",
|
||||
"moreActionsMenu": "Lisää toimintoja -valikko",
|
||||
"mute": "Säädä äänen mykistystä",
|
||||
"muteEveryoneElse": "Mykistä kaikki muut",
|
||||
"pip": "Säädä Kuva kuvassa (PiP) -tilaa",
|
||||
"profile": "Muokkaa profiilia",
|
||||
"raiseHand": "Säädä käden nostoa",
|
||||
"recording": "Säädä nauhoitusta",
|
||||
"remoteMute": "Mykistä osanottaja",
|
||||
"selectBackground": "Valitse tausta",
|
||||
"shareRoom": "Kutsu joku",
|
||||
"shareYourScreen": "Säädä näytön jakoa",
|
||||
"sharedvideo": "Säädä videon jakoa",
|
||||
@@ -657,29 +664,37 @@
|
||||
"pending": "{{displayName}} on kutsuttu"
|
||||
},
|
||||
"videoStatus": {
|
||||
"adjustFor": "Muokkaa:",
|
||||
"audioOnly": "ÄÄNI",
|
||||
"audioOnlyExpanded": "Käytössäsi on Vain ääni -tila. Se säästää kaistanleveyttä, mutta et näe muiden videoita.",
|
||||
"callQuality": "",
|
||||
"bestPerformance": "Paras suorituskyky",
|
||||
"callQuality": "Videon laatu",
|
||||
"hd": "HD",
|
||||
"highDefinition": "Teräväpiirto",
|
||||
"highestQuality": "Korkein laatu",
|
||||
"labelTooiltipNoVideo": "Ei videota",
|
||||
"labelTooltipAudioOnly": "Vain ääni -tila käytössä",
|
||||
"ld": "LD",
|
||||
"lowDefinition": "Alhainen kuvanlaatu",
|
||||
"onlyAudioAvailable": "Vain ääni -tila on käytettävissä",
|
||||
"onlyAudioSupported": "Tässä selaimessa tuemme vain ääntä.",
|
||||
"performanceSettings": "Suorituskykyasetukset",
|
||||
"sd": "SD",
|
||||
"standardDefinition": "Vakiopiirto"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"domute": "Mykistä",
|
||||
"domuteOthers": "Mykistä kaikki muut",
|
||||
"domuteVideoOfOthers": "Estä muiden kamera",
|
||||
"flip": "Käännä",
|
||||
"kick": "Poista",
|
||||
"moderator": "Valvoja",
|
||||
"mute": "",
|
||||
"mute": "Osallistuja on mykistetty",
|
||||
"muted": "Mykistetty",
|
||||
"pinToStage": "Kiinnitä ruutuun",
|
||||
"remoteControl": "Etäkäyttö",
|
||||
"show": "",
|
||||
"show": "Näytä ruudulla",
|
||||
"unpinFromStage": "Irroita kiinnitys",
|
||||
"videomute": ""
|
||||
},
|
||||
"welcomepage": {
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
"defaultEmail": "Votre email par défaut",
|
||||
"disabled": "Vous ne pouvez pas inviter quelqu'un.",
|
||||
"failedToAdd": "Erreur lors de l'ajout des participants",
|
||||
"footerText": "Appels sortants désactivés.",
|
||||
"googleEmail": "Gmail",
|
||||
"inviteMoreHeader": "Vous êtes seul(e) dans la réunion",
|
||||
"inviteMoreMailSubject": "Rejoindre une réunion {{appName}}",
|
||||
@@ -31,6 +30,7 @@
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"car": "Système audio du véhicule",
|
||||
"headphones": "Écouteurs",
|
||||
"none": "Aucune source audio n'est disponible",
|
||||
"phone": "Téléphone",
|
||||
@@ -76,6 +76,16 @@
|
||||
"refresh": "Rafraîchir le calendrier",
|
||||
"today": "Aujourd'hui"
|
||||
},
|
||||
"carmode": {
|
||||
"actions": {
|
||||
"selectSoundDevice": "Sélectionnez le dispositif audio"
|
||||
},
|
||||
"labels": {
|
||||
"buttonLabel": "Mode voiture",
|
||||
"title": "Mode voiture",
|
||||
"videoStopped": "Votre vidéo est arrêtée"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"enter": "Entrez dans le salon",
|
||||
"error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}",
|
||||
@@ -86,6 +96,7 @@
|
||||
"messageAccessibleTitleMe": "Je dis: ",
|
||||
"messageTo": "Message privé à {{recipient}}",
|
||||
"messagebox": "Saisissez un message",
|
||||
"newMessages": "Nouveaux messages",
|
||||
"nickname": {
|
||||
"popover": "Choisissez un pseudonyme",
|
||||
"title": "Entrez un pseudonyme pour utiliser le chat",
|
||||
@@ -105,6 +116,7 @@
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"buttonText": "Installer l'extension Chrome",
|
||||
"buttonTextEdge": "Installer l’extension Edge",
|
||||
"close": "Fermer",
|
||||
"dontShowAgain": "Ne plus me montrer ceci",
|
||||
"installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365"
|
||||
@@ -135,6 +147,7 @@
|
||||
"bridgeCount": "Nombre de serveurs :",
|
||||
"codecs": "Codecs (A/V) :",
|
||||
"connectedTo": "Connecté à :",
|
||||
"e2eeVerified": "E2EE vérifié",
|
||||
"framerate": "Images par seconde :",
|
||||
"less": "Cacher les détails",
|
||||
"localaddress": "Adresse locale :",
|
||||
@@ -171,13 +184,21 @@
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Vous avez besoin de l'application mobile {{app}} pour participer à cette réunion avec votre téléphone.",
|
||||
"description": "Rien ne s'est passé ? Nous avons essayé de lancer votre réunion dans l'application de bureau {{app}}. Essayez à nouveau ou lancez-la dans l'application web {{app}}.",
|
||||
"descriptionNew": "Rien ne s'est passé ? Nous avons essayé de lancer votre réunion dans l'application de bureau {{app}}. <br /><br /> Vous pouvez essayer à nouveau ou la lancer dans l'application web.",
|
||||
"descriptionWithoutWeb": "Rien ne s'est passé ? Nous avons essayé de démarrer votre réunion dans l'application bureau {{app}}.",
|
||||
"downloadApp": "Télécharger l'application",
|
||||
"downloadMobileApp": "Télécharger l'application depuis le Store",
|
||||
"ifDoNotHaveApp": "Si vous n'avez pas encore l'application:",
|
||||
"ifHaveApp": "Si vous avez déjà installé l'application:",
|
||||
"joinInApp": "Rejoindre la réunion en utilisant l'application",
|
||||
"joinInAppNew": "Rejoindre depuis l’application",
|
||||
"joinInBrowser": "Rejoindre depuis le navigateur",
|
||||
"launchMeetingLabel": "Comment voulez-vous rejoindre la réunion ?",
|
||||
"launchWebButton": "Lancer dans le navigateur",
|
||||
"noMobileApp": "Vous n’avez pas l’application ?",
|
||||
"termsAndConditions": "En continuant, vous acceptez nos <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>conditions générales d’utilisation.</a>",
|
||||
"title": "Lancement de votre réunion dans {{app}} en cours ...",
|
||||
"titleNew": "Lancement de votre réunion ...",
|
||||
"tryAgainButton": "Réessayez sur le bureau",
|
||||
"unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté."
|
||||
},
|
||||
@@ -190,11 +211,20 @@
|
||||
"microphonePermission": "Erreur lors de l'obtention de la permission du microphone"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"hid": {
|
||||
"callControl": "Contrôle des appels",
|
||||
"connectedDevices": "Appareils connectés",
|
||||
"deleteDevice": "Supprimer un appareil",
|
||||
"pairDevice": "Connecter un appareil"
|
||||
},
|
||||
"noPermission": "Permission non accordée",
|
||||
"previewUnavailable": "Aperçu non disponible",
|
||||
"selectADevice": "Sélectionner un périphérique",
|
||||
"testAudio": "Tester la sortie audio"
|
||||
},
|
||||
"dialIn": {
|
||||
"screenTitle": "Bilan des appels"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "est maintenant {{status}}"
|
||||
},
|
||||
@@ -210,7 +240,9 @@
|
||||
"WaitingForHostTitle": "En attente de l'hôte ...",
|
||||
"Yes": "Oui",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Diffusion en direct"
|
||||
"close": "Fermer la popup",
|
||||
"liveStreaming": "Diffusion en direct",
|
||||
"sharingTabs": "Options de partage"
|
||||
},
|
||||
"add": "Ajouter",
|
||||
"addMeetingNote": "Ajouter une note à cette conférence",
|
||||
@@ -256,6 +288,7 @@
|
||||
"gracefulShutdown": "Notre service est actuellement en maintenance. Veuillez réessayer plus tard.",
|
||||
"grantModeratorDialog": "Êtes-vous sûr de vouloir rendre ce participant modérateur ?",
|
||||
"grantModeratorTitle": "Nommer modérateur",
|
||||
"hide": "Cacher",
|
||||
"hideShareAudioHelper": "Ne pas montrer ce dialogue à nouveau",
|
||||
"incorrectPassword": "Nom d'utilisateur ou mot de passe incorrect",
|
||||
"incorrectRoomLockPassword": "Mot de passe incorrect",
|
||||
@@ -270,7 +303,6 @@
|
||||
"linkMeetingTitle": "Relier la conférence à Salesforce",
|
||||
"liveStreaming": "Direct",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Impossible durant l'enregistrement",
|
||||
"liveStreamingDisabledTooltip": "La diffusion en direct est désactivée",
|
||||
"localUserControls": "Contrôles de l'utilisateur local",
|
||||
"lockMessage": "Impossible de verrouiller la conférence.",
|
||||
"lockRoom": "Ajouter un $t(lockRoomPassword) à la réunion ",
|
||||
@@ -325,7 +357,6 @@
|
||||
"recentlyUsedObjects": "Vos objets récemment utilisés",
|
||||
"recording": "Enregistrement",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct",
|
||||
"recordingDisabledTooltip": "L'enregistrement est désactivé.",
|
||||
"rejoinNow": "Rejoindre maintenant",
|
||||
"remoteControlAllowedMessage": "{{user}} a accepté votre demande de prise en main à distance !",
|
||||
"remoteControlDeniedMessage": "{{user}} a refusé votre demande de prise en main à distance !",
|
||||
@@ -375,6 +406,7 @@
|
||||
"shareYourScreenDisabled": "Le partage d'écran est désactivé.",
|
||||
"sharedVideoDialogError": "Erreur: URL invalide",
|
||||
"sharedVideoLinkPlaceholder": "lien YouTube ou lien vidéo direct",
|
||||
"show": "Afficher",
|
||||
"start": "Démarrer ",
|
||||
"startLiveStreaming": "Démarrer la diffusion en direct",
|
||||
"startRecording": "Commencer l'enregistrement",
|
||||
@@ -393,6 +425,10 @@
|
||||
"user": "Utilisateur",
|
||||
"userIdentifier": "Identifiant utilisateur",
|
||||
"userPassword": "mot de passe utilisateur",
|
||||
"verifyParticipantConfirm": "Ils correspondent",
|
||||
"verifyParticipantDismiss": "Ils ne correspondent pas",
|
||||
"verifyParticipantQuestion": "EXPÉRIMENTAL: Demander au participant {{participantName}} s'il voit le même contenu dans le même ordre. ",
|
||||
"verifyParticipantTitle": "Vérification utilisateur",
|
||||
"videoLink": "Lien de la vidéo",
|
||||
"viewUpgradeOptions": "Voir les options de mise à jour",
|
||||
"viewUpgradeOptionsContent": "Pour obtenir un accès illimité à des capacités premium comme l'enregistrement, les transcriptions, diffusion RTMP et plus, vous devez mettre à jour votre plan.",
|
||||
@@ -418,13 +454,15 @@
|
||||
"veryBad": "Très mauvais",
|
||||
"veryGood": "Très bon"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Vignettes vidéos"
|
||||
}
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "Aucun résultat de recherche :(",
|
||||
"search": "Rechercher dans GIPHY"
|
||||
},
|
||||
"helpView": {
|
||||
"title": "Centre d'aide"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Répondre",
|
||||
"audioCallTitle": "Appel entrant",
|
||||
@@ -465,9 +503,11 @@
|
||||
"noRoom": "Aucune réunion n'a été spécifiée pour l'appel entrant.",
|
||||
"numbers": "Numéros d'appel",
|
||||
"password": "$t(lockRoomPasswordUppercase) :",
|
||||
"reachedLimit": "Vous avez atteint la limite de votre abonnement.",
|
||||
"sip": "adresse SIP",
|
||||
"title": "Partager",
|
||||
"tooltip": "Partager le lien et les informations de connexion pour cette conférence"
|
||||
"tooltip": "Partager le lien et les informations de connexion pour cette conférence",
|
||||
"upgradeOptions": "Veuillez vérifier les options de mise à niveau"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "Il y a eu un petit problème.",
|
||||
@@ -502,6 +542,10 @@
|
||||
"toggleShortcuts": "Afficher / Masquer les raccourcis clavier",
|
||||
"videoMute": "Démarrer / Arrêter votre caméra"
|
||||
},
|
||||
"largeVideo": {
|
||||
"screenIsShared": "Vous êtes en train de partager votre écran",
|
||||
"showMeWhatImSharing": "Me montrer ce que je partage"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Nous tentons de libérer des ressources de diffusion. Veuillez réessayez dans quelques minutes.",
|
||||
"busyTitle": "Tous les flux sont actuellement occupés",
|
||||
@@ -542,7 +586,6 @@
|
||||
"lobby": {
|
||||
"admit": "Accepter",
|
||||
"admitAll": "Tout accepter",
|
||||
"allow": "Autoriser",
|
||||
"backToKnockModeButton": "Aucun mot de passe, demander à rejoindre plutôt",
|
||||
"chat": "Chat",
|
||||
"dialogTitle": "Mode salle d'attente",
|
||||
@@ -605,6 +648,7 @@
|
||||
"no": "Non",
|
||||
"participant": "Participant(e)",
|
||||
"participantStats": "Statistiques du participant",
|
||||
"selectTabTitle": "🎥 Veuillez sélectionner cet onglet pour enregistrer",
|
||||
"sessionToken": "Token de la session",
|
||||
"start": "Démarrer l'enregistrement",
|
||||
"stop": "Arrêter l'enregistrement",
|
||||
@@ -627,6 +671,8 @@
|
||||
"connectedOneMember": "{{name}} a rejoint la réunion",
|
||||
"connectedThreePlusMembers": "{{name}} et {{count}} autres personnes ont rejoint la réunion",
|
||||
"connectedTwoMembers": "{{first}} et {{second}} ont rejoint la réunion",
|
||||
"dataChannelClosed": "Qualité vidéo dégradée",
|
||||
"dataChannelClosedDescription": "Le canal de communication avec le Bridge a été interrompu, la qualité vidéo se trouve limitée à sa valeur la plus faible.",
|
||||
"disconnected": "déconnecté",
|
||||
"displayNotifications": "Afficher les notifications pour",
|
||||
"focus": "Focus de conférence",
|
||||
@@ -647,6 +693,8 @@
|
||||
"linkToSalesforceKey": "Relier cette conférence",
|
||||
"linkToSalesforceProgress": "Liaison de la conférence à Salesforce...",
|
||||
"linkToSalesforceSuccess": "La conférence a été reliée à Salesforce",
|
||||
"localRecordingStarted": "{{name}} a commencé un enregistrement local.",
|
||||
"localRecordingStopped": "{{name}} a arrêté un enregistrement local.",
|
||||
"me": "Moi",
|
||||
"moderationInEffectCSDescription": "Merci de lever la main si vous voulez partager votre écran.",
|
||||
"moderationInEffectCSTitle": "Le partage d'écran est interdit par le modérateur",
|
||||
@@ -667,6 +715,10 @@
|
||||
"newDeviceAction": "Utiliser",
|
||||
"newDeviceAudioTitle": "Nouveau périphérique audio détecté",
|
||||
"newDeviceCameraTitle": "Nouvelle caméra détectée",
|
||||
"noiseSuppressionDesktopAudioDescription": "La suppression de bruit ne peut pas être activée en même temps que la partage audio du système, veuillez le désactiver et réessayer.",
|
||||
"noiseSuppressionFailedTitle": "Échec du démarrage de la suppression de bruit",
|
||||
"noiseSuppressionNoTrackDescription": "Veuillez activer votre microphone d'abord.",
|
||||
"noiseSuppressionStereoDescription": "La suppression de bruit d’une source stéréo n’est pas encore supportée.",
|
||||
"oldElectronClientDescription1": "Vous semblez utiliser une ancienne version du client Jitsi Meet qui présente des failles de sécurité connues. Veuillez vous assurer de mettre à jour vers notre ",
|
||||
"oldElectronClientDescription2": "dernière build",
|
||||
"oldElectronClientDescription3": " rapidement !",
|
||||
@@ -681,6 +733,8 @@
|
||||
"reactionSoundsForAll": "Bloquer les réactions sonores pour tous",
|
||||
"screenShareNoAudio": " La case Partager l'audio n'a pas été cochée dans l'écran de sélection de la fenêtre.",
|
||||
"screenShareNoAudioTitle": "La case Partager l'audio n'a pas été cochée",
|
||||
"screenSharingAudioOnlyDescription": "Veuillez noter qu’en partageant votre écran, vous impactez le mode “Meilleure Performance” et vous utilisez plus de bande passante.",
|
||||
"screenSharingAudioOnlyTitle": "Mode \"Meilleure Performance\"",
|
||||
"selfViewTitle": "Vous pouvez toujours rétablir l'affichage de votre propre vidéo dans les paramètres",
|
||||
"somebody": "Quelqu'un",
|
||||
"startSilentDescription": "Rejoignez la réunion de nouveau pour activer l'audio",
|
||||
@@ -718,6 +772,7 @@
|
||||
"headings": {
|
||||
"lobby": "Salle d'attente ({{count}})",
|
||||
"participantsList": "Participants de la réunion ({{count}})",
|
||||
"visitors": "Visiteurs {{count}}",
|
||||
"waitingLobby": "Dans la salle d'attente ({{count}})"
|
||||
},
|
||||
"search": "Rechercher des participants",
|
||||
@@ -725,6 +780,7 @@
|
||||
},
|
||||
"passwordDigitsOnly": "Jusqu'à {{number}} chiffres",
|
||||
"passwordSetRemotely": "défini par un autre participant",
|
||||
"pinParticipant": "Épingler - {{participantName}}",
|
||||
"pinnedParticipant": "Participant toujours affiché",
|
||||
"polls": {
|
||||
"answer": {
|
||||
@@ -802,6 +858,7 @@
|
||||
"initiated": "Appel lancé",
|
||||
"joinAudioByPhone": "Rejoindre avec l'audio du téléphone",
|
||||
"joinMeeting": "Rejoindre la réunion",
|
||||
"joinMeetingInLowBandwidthMode": "Rejoindre en mode bande passante réduite",
|
||||
"joinWithoutAudio": "Rejoignez sans microphone",
|
||||
"keyboardShortcuts": "Activer les raccourcis clavier",
|
||||
"linkCopied": "Lien copié dans le presse-papiers",
|
||||
@@ -829,9 +886,6 @@
|
||||
"rejected": "Rejeté",
|
||||
"ringing": "Appel en cours ..."
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "Confidentialité"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Choisissez un pseudo",
|
||||
@@ -877,13 +931,24 @@
|
||||
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
|
||||
"linkGenerated": "Nous avons généré un lien à votre enregistrement.",
|
||||
"live": "DIRECT",
|
||||
"localRecordingNoNotificationWarning": "Le démarrage de l’enregistrement ne sera pas annoncé aux autres participants. Vous devrez les informer par vous-même que la réunion sera enregistrée.",
|
||||
"localRecordingNoVideo": "La vidéo n'est pas en cours d’enregistrement",
|
||||
"localRecordingStartWarning": "Assurez-vous d’arrêter l’enregistrement vidéo avant de quitter la réunion afin de pouvoir le sauvegarder.",
|
||||
"localRecordingStartWarningTitle": "Arrêter l’enregistrement pour le sauvegarder",
|
||||
"localRecordingVideoStop": "Arrêter votre vidéo va aussi arrêter votre enregistrement local. Êtes-vous sûrs de vouloir continuer ?",
|
||||
"localRecordingVideoWarning": "Pour enregistrer votre vidéo, vous devez avoir celle-ci active au moment de commencer l’enregistrement.",
|
||||
"localRecordingWarning": "Assurez-vous de sélectionner l’onglet courant pour utiliser le bon son et la bonne vidéo. L’enregistrement est pour le moment limité à 1 Go, soit approximativement 100 minutes.",
|
||||
"loggedIn": "Connecté en tant que {{userName}}",
|
||||
"noMicPermission": "La piste microphone ne peut pas être créée. Veuillez autoriser l’utilisation du microphone.",
|
||||
"noStreams": "Aucun flux audio ou vidéo détectés.",
|
||||
"off": "Enregistrement arrêté",
|
||||
"offBy": "{{name}} a arrêté l'enregistrement",
|
||||
"on": "Enregistrement",
|
||||
"onBy": "{{name}} a démarré l'enregistrement",
|
||||
"onlyRecordSelf": "Enregistrer seulement mon audio et ma vidéo.",
|
||||
"pending": "Préparation de l'enregistrement de la réunion ...",
|
||||
"rec": "REC",
|
||||
"saveLocalRecording": "Sauvegarder l’enregistrement local (Beta)",
|
||||
"serviceDescription": "Votre enregistrement sera enregistré par le service dédié",
|
||||
"serviceDescriptionCloud": "Enregistrement Cloud",
|
||||
"serviceDescriptionCloudInfo": "Les conférences enregistrées sont automatiquement supprimées 24h après leur heure d'enregistrement.",
|
||||
@@ -891,11 +956,13 @@
|
||||
"sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.",
|
||||
"signIn": "Se connecter",
|
||||
"signOut": "Se déconnecter",
|
||||
"surfaceError": "Veuillez sélectionner l’onglet courant.",
|
||||
"title": "Enregistrement",
|
||||
"unavailable": "Oups ! Le {{serviceName}} est actuellement indisponible. Nous tentons de résoudre le problème. Veuillez réessayer plus tard.",
|
||||
"unavailableTitle": "Enregistrement indisponible",
|
||||
"uploadToCloud": "Envoyer vers le cloud"
|
||||
},
|
||||
"screenshareDisplayName": "Écran {{name}}",
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Tirer pour recharger"
|
||||
},
|
||||
@@ -906,6 +973,8 @@
|
||||
"title": "Options de sécurité"
|
||||
},
|
||||
"settings": {
|
||||
"audio": "Audio",
|
||||
"buttonLabel": "Paramètres",
|
||||
"calendar": {
|
||||
"about": "L'intégration de {{appName}} avec votre calendrier permet d'accéder de manière sécurisée aux événements à venir.",
|
||||
"disconnect": "Se déconnecter",
|
||||
@@ -922,12 +991,16 @@
|
||||
"incomingMessage": "un message arrive",
|
||||
"language": "Langue",
|
||||
"loggedIn": "Connecté en tant que {{name}}",
|
||||
"maxStageParticipants": "Nombre maximum de participants pouvant être épinglé sur l’affichage principal (EXPÉRIMENTAL)",
|
||||
"microphones": "Microphones",
|
||||
"moderator": "Modérateur",
|
||||
"moderatorOptions": "Options de modérateur",
|
||||
"more": "Plus",
|
||||
"name": "Nom",
|
||||
"noDevice": "Aucun",
|
||||
"notifications": "Notifications",
|
||||
"participantJoined": "un participant arrive",
|
||||
"participantKnocking": "un participant en salle d’attente",
|
||||
"participantLeft": "un participant quitte",
|
||||
"playSounds": "Jouer un son quand",
|
||||
"reactions": "il y a une réaction à la réunion",
|
||||
@@ -936,13 +1009,14 @@
|
||||
"selectCamera": "Caméra",
|
||||
"selectMic": "Microphone",
|
||||
"selfView": "Affichage de votre propre vidéo",
|
||||
"sounds": "Sons",
|
||||
"shortcuts": "Raccourcis",
|
||||
"speakers": "Haut-parleurs",
|
||||
"startAudioMuted": "Tout le monde commence en muet",
|
||||
"startReactionsMuted": "Tout le monde commence avec les réactions sonores bloquées",
|
||||
"startVideoMuted": "Tout le monde commence sans vidéo",
|
||||
"talkWhileMuted": "vous parlez en étant muet",
|
||||
"title": "Paramètres"
|
||||
"title": "Paramètres",
|
||||
"video": "Vidéo"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Avancé",
|
||||
@@ -957,13 +1031,21 @@
|
||||
"disableCrashReportingWarning": "Etes-vous certain de vouloir désactiver les rapports de plantage ? Le paramètre sera effectif après le redémarrage de l'application.",
|
||||
"disableP2P": "Désactiver le mode pair à pair",
|
||||
"displayName": "Pseudo",
|
||||
"displayNamePlaceholderText": "Ex : Jean Dupond",
|
||||
"email": "Email",
|
||||
"emailPlaceholderText": "email@example..com",
|
||||
"goTo": "Aller à",
|
||||
"header": "Paramètres",
|
||||
"help": "Aide",
|
||||
"links": "Liens",
|
||||
"privacy": "Confidentialité",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "URL du serveur",
|
||||
"showAdvanced": "Afficher les paramètres avancés",
|
||||
"startCarModeInLowBandwidthMode": "Commencer le mode voiture en mode bande passante réduite",
|
||||
"startWithAudioMuted": "Commencez avec l'audio en sourdine",
|
||||
"startWithVideoMuted": "Commencez avec la vidéo en sourdine",
|
||||
"terms": "Conditions d’utilisations",
|
||||
"version": "Version"
|
||||
},
|
||||
"share": {
|
||||
@@ -1001,6 +1083,7 @@
|
||||
"termsView": {
|
||||
"title": "Conditions d'utilisation"
|
||||
},
|
||||
"toggleTopPanelLabel": "Basculer le panneau supérieur",
|
||||
"toolbar": {
|
||||
"Settings": "Paramètres",
|
||||
"accessibilityLabel": {
|
||||
@@ -1010,6 +1093,7 @@
|
||||
"boo": "Hou",
|
||||
"breakoutRoom": "Rejoindre/quitter une salle annexe",
|
||||
"callQuality": "Ajuster la qualité vidéo",
|
||||
"carmode": "Mode voiture",
|
||||
"cc": "Activer / Désactiver les sous-titres",
|
||||
"chat": "Afficher / Masquer la discussion instantanée",
|
||||
"clap": "Applaudir",
|
||||
@@ -1017,16 +1101,19 @@
|
||||
"document": "Activer / Désactiver le document partagé",
|
||||
"download": "Télécharger nos applications",
|
||||
"embedMeeting": "Intégrer la réunion",
|
||||
"endConference": "Terminer la réunion pour tout le monde",
|
||||
"expand": "Développer",
|
||||
"feedback": "Laisser des commentaires",
|
||||
"fullScreen": "Activer / Désactiver le plein écran",
|
||||
"giphy": "Activer/désactiver le menu GIPHY",
|
||||
"grantModerator": "donner des droits de modérateur",
|
||||
"hangup": "Quitter la conversation",
|
||||
"heading": "Barre d'outils",
|
||||
"help": "Aide",
|
||||
"invite": "Inviter des participants",
|
||||
"kick": "Expulser le participant",
|
||||
"laugh": "Rire",
|
||||
"leaveConference": "Quitter la réunion",
|
||||
"like": "Approuver",
|
||||
"linkToSalesforce": "Lien à Salesforce",
|
||||
"lobbyButton": "Activer / Désactiver le mode salle d'attente",
|
||||
@@ -1040,6 +1127,7 @@
|
||||
"muteEveryoneElse": "Couper le micro de tous les autres",
|
||||
"muteEveryoneElsesVideoStream": "Couper la caméra de tous les autres",
|
||||
"muteEveryonesVideoStream": "Couper la caméra de tout le monde",
|
||||
"noiseSuppression": "Suppression du bruit",
|
||||
"participants": "Participants",
|
||||
"pip": "Activer / Désactiver le mode Picture in Picture",
|
||||
"privateMessage": "Envoyer un message privé",
|
||||
@@ -1065,7 +1153,8 @@
|
||||
"toggleCamera": "Changer de caméra",
|
||||
"toggleFilmstrip": "Afficher ou masquer les vignettes vidéo",
|
||||
"videoblur": "Activer / désactiver le floutage",
|
||||
"videomute": "Activer / Couper la vidéo"
|
||||
"videomute": "Activer / Couper la vidéo",
|
||||
"whiteboard": "Afficher / Cacher le tableau blanc"
|
||||
},
|
||||
"addPeople": "Ajouter des personnes à votre appel",
|
||||
"audioOnlyOff": "Désactiver le mode bande passante réduite",
|
||||
@@ -1079,12 +1168,15 @@
|
||||
"clap": "Applaudir",
|
||||
"closeChat": "Fermer le chat",
|
||||
"closeReactionsMenu": "Fermer le menu réactions",
|
||||
"disableNoiseSuppression": "Arrêter la suppression du bruit",
|
||||
"disableReactionSounds": "Vous pouvez interdire les réactions sonores à cette réunion",
|
||||
"documentClose": "Fermer le document partagé",
|
||||
"documentOpen": "Ouvrir le document partagé",
|
||||
"download": "Télécharger nos applications",
|
||||
"e2ee": "Chiffrement de Bout-en-Bout",
|
||||
"embedMeeting": "Intégrer la réunion",
|
||||
"enableNoiseSuppression": "Activer la suppression du bruit",
|
||||
"endConference": "Terminer la réunion pour tout le monde",
|
||||
"enterFullScreen": "Afficher en plein écran",
|
||||
"enterTileView": "Accéder au mode mosaïque",
|
||||
"exitFullScreen": "Quitter le mode plein écran",
|
||||
@@ -1093,10 +1185,12 @@
|
||||
"giphy": "Activer/désactiver le menu GIPHY",
|
||||
"hangup": "Quitter",
|
||||
"help": "Aide",
|
||||
"hideWhiteboard": "Cacher le tableau blanc",
|
||||
"invite": "Inviter des participants",
|
||||
"joinBreakoutRoom": "Rejoindre salle annexe",
|
||||
"laugh": "Rire",
|
||||
"leaveBreakoutRoom": "Quitter salle annexe",
|
||||
"leaveConference": "Quitter la réunion",
|
||||
"like": "Approuver",
|
||||
"linkToSalesforce": "Lien à Salesforce",
|
||||
"lobbyButtonDisable": "Désactiver le mode salle d'attente / contrôle des participant(e)s",
|
||||
@@ -1114,6 +1208,7 @@
|
||||
"noAudioSignalDialInDesc": "Vous pouvez également appeler en utilisant :",
|
||||
"noAudioSignalDialInLinkDesc": "Numéros d'appel",
|
||||
"noAudioSignalTitle": "Il n'y a pas de signal provenant de votre micro !",
|
||||
"noiseSuppression": "Suppression du bruit",
|
||||
"noisyAudioInputDesc": "Il semble que votre microphone soit bruyant, veuillez le couper ou changer de périphérique.",
|
||||
"noisyAudioInputTitle": "Votre microphone semble être bruyant !",
|
||||
"openChat": "Ouvrir le chat",
|
||||
@@ -1136,6 +1231,7 @@
|
||||
"shareaudio": "Partager l'audio",
|
||||
"sharedvideo": "Partager une vidéo",
|
||||
"shortcuts": "Afficher les raccourcis",
|
||||
"showWhiteboard": "Afficher le tableau blanc",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "Statistiques de l'interlocuteur",
|
||||
"startScreenSharing": "Démarrer le partage d'écran",
|
||||
@@ -1159,10 +1255,15 @@
|
||||
"labelToolTip": "La transcription de la réunion est en cours",
|
||||
"off": "La transcription désactivée",
|
||||
"pending": "Préparation de la transcription de la réunion ...",
|
||||
"sourceLanguageDesc": "Actuellement, la langue de la réunion est sélectionnée à <b>{{sourceLanguage}}</b>. <br/> Vous pouvez la changer à partir de ",
|
||||
"sourceLanguageHere": "ici",
|
||||
"start": "Activer les sous-titres",
|
||||
"stop": "Désactiver les sous-titres",
|
||||
"subtitles": "sous-titres",
|
||||
"subtitlesOff": "off",
|
||||
"tr": "TR"
|
||||
},
|
||||
"unpinParticipant": "Désépingler - {{participantName}}",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
"chromeGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
|
||||
@@ -1201,9 +1302,11 @@
|
||||
"ldTooltip": "Regardez la vidéo en basse définition",
|
||||
"lowDefinition": "Basse définition",
|
||||
"performanceSettings": "Paramètres de performance",
|
||||
"recording": "Enregistrement en cours",
|
||||
"sd": "MD",
|
||||
"sdTooltip": "Regardez la vidéo en définition standard",
|
||||
"standardDefinition": "Moyenne Définition"
|
||||
"standardDefinition": "Moyenne Définition",
|
||||
"streaming": "Diffusion en direct en cours"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Informations de la connexion",
|
||||
@@ -1215,6 +1318,7 @@
|
||||
"grantModerator": "Donner des droits de modérateur",
|
||||
"hideSelfView": "Cacher l'affichage de votre propre vidéo",
|
||||
"kick": "Exclure",
|
||||
"mirrorVideo": "Inverser ma vidéo",
|
||||
"moderator": "Modérateur",
|
||||
"mute": "Le participant a coupé son micro",
|
||||
"muted": "Muet",
|
||||
@@ -1224,6 +1328,7 @@
|
||||
"show": "Afficher en premier plan",
|
||||
"showSelfView": "Montrer votre propre vidéo",
|
||||
"unpinFromStage": "Ne plus garder affiché",
|
||||
"verify": "Vérifier le participant",
|
||||
"videoMuted": "Caméra coupée",
|
||||
"videomute": "Le participant a arrêté la caméra"
|
||||
},
|
||||
@@ -1251,6 +1356,7 @@
|
||||
"webAssemblyWarning": "WebAssembly non supporté",
|
||||
"webAssemblyWarningDescription": "WebAssembly invalidé ou non supporté par ce navigateur"
|
||||
},
|
||||
"visitorsLabel": "Nombre de visiteurs: {{count}}",
|
||||
"volumeSlider": "Curseur de volume",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -1283,6 +1389,7 @@
|
||||
"microsoftLogo": "Logo Microsoft",
|
||||
"policyLogo": "Logo de la politique"
|
||||
},
|
||||
"meetingsAccessibilityLabel": "Réunions",
|
||||
"mobileDownLoadLinkAndroid": "Télécharger l'application mobile sur Android",
|
||||
"mobileDownLoadLinkFDroid": "Télécharger l'application mobile sur F-Droid",
|
||||
"mobileDownLoadLinkIos": "Télécharger l'application mobile sur iOS",
|
||||
@@ -1291,13 +1398,21 @@
|
||||
"recentList": "Récent",
|
||||
"recentListDelete": "Supprimer",
|
||||
"recentListEmpty": "Votre liste récente est actuellement vide. Discuter avec votre équipe et vous trouverez toutes vos réunions récentes ici.",
|
||||
"recentMeetings": "Vos réunions récentes",
|
||||
"reducedUIText": "Bienvenue sur {{app}} !",
|
||||
"roomNameAllowedChars": "Le nom de la réunion ne doit contenir aucun de ces caractères : ?, &, :, ', \", %, #.",
|
||||
"roomname": "Saisissez un nom de salle",
|
||||
"roomnameHint": "Entrez le nom ou l'URL de la salle que vous souhaitez rejoindre. Vous pouvez faire un nom, laissez les gens que vous rencontrerez le savoir afin qu'ils entrent le même nom.",
|
||||
"sendFeedback": "Envoyer votre avis",
|
||||
"settings": "Paramètres",
|
||||
"startMeeting": "Démarrer la conférence",
|
||||
"terms": "Termes",
|
||||
"title": "Système de vidéoconférence sécurisé, riche en fonctionnalités et gratuit"
|
||||
"title": "Système de vidéoconférence sécurisé, riche en fonctionnalités et gratuit",
|
||||
"upcomingMeetings": "Vos réunions à venir"
|
||||
},
|
||||
"whiteboard": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Tableau blanc"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,9 +68,9 @@
|
||||
},
|
||||
"join": "Participar",
|
||||
"joinTooltip": "Participar na reunião",
|
||||
"nextMeeting": "próxima reunião",
|
||||
"nextMeeting": "Próxima reunião",
|
||||
"noEvents": "Não há eventos próximos agendados.",
|
||||
"ongoingMeeting": "reunião a decorrer",
|
||||
"ongoingMeeting": "Reunião a decorrer",
|
||||
"permissionButton": "Abrir configurações",
|
||||
"permissionMessage": "Permissão do calendário é requerida para ver as suas reuniões na aplicação.",
|
||||
"refresh": "Atualizar calendário",
|
||||
@@ -183,16 +183,24 @@
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Precisa da aplicação móvel {{app}} para participar na reunião com o seu telefone.",
|
||||
"description": "Não acontece nada? Estamos a tentar iniciar a sua reunião na aplicação desktop {{app}}. Tente novamente ou inicie na aplicação web {{app}}.",
|
||||
"description": "Não aconteceu nada? Tentámos iniciar a sua reunião na aplicação desktop {{app}}. Tente novamente ou inicie-a na aplicação web {{app}}.",
|
||||
"descriptionNew": "Não aconteceu nada? Tentámos iniciar a sua reunião na aplicação desktop {{app}}. <br /><br /> Pode tentar novamente ou iniciá-la na web.",
|
||||
"descriptionWithoutWeb": "Não aconteceu nada? Tentamos iniciar a sua reunião na aplicação desktop {{app}}.",
|
||||
"downloadApp": "Transfira a aplicação",
|
||||
"downloadApp": "Descarregar a aplicação",
|
||||
"downloadMobileApp": "Descarregar da App Store",
|
||||
"ifDoNotHaveApp": "Se ainda não tem a aplicação:",
|
||||
"ifHaveApp": "Se já tem a aplicação:",
|
||||
"joinInApp": "Participe nesta reunião utilizando a aplicação",
|
||||
"launchWebButton": "Iniciar na web",
|
||||
"title": "A iniciar a sua reunião na {{app}}...",
|
||||
"joinInAppNew": "Entrar pela aplicação",
|
||||
"joinInBrowser": "Entrar pelo navegador de Internet",
|
||||
"launchMeetingLabel": "Como deseja entrar nesta reunião?",
|
||||
"launchWebButton": "Iniciar pelo navegador de Internet",
|
||||
"noMobileApp": "Não tem a aplicação?",
|
||||
"termsAndConditions": "Ao continuar, concorda com os nossos <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>termos & condições.</a>",
|
||||
"title": "Iniciando a sua reunião na {{app}}...",
|
||||
"titleNew": "Iniciando a sua reunião ...",
|
||||
"tryAgainButton": "Tente novamente no desktop",
|
||||
"unsupportedBrowser": "Parece que está a usar um browser que não suportamos."
|
||||
"unsupportedBrowser": "Parece que está a usar um navegador que não suportamos."
|
||||
},
|
||||
"defaultLink": "ex.: {{url}}",
|
||||
"defaultNickname": "ex.: João Dias",
|
||||
@@ -203,10 +211,16 @@
|
||||
"microphonePermission": "Erro ao obter permissão para o microfone"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"hid": {
|
||||
"callControl": "Controlo de chamadas",
|
||||
"connectedDevices": "Dispositivos ligados:",
|
||||
"deleteDevice": "Apagar dispositivo",
|
||||
"pairDevice": "Emparelhar dispositivo"
|
||||
},
|
||||
"noPermission": "Permissão não concedida",
|
||||
"previewUnavailable": "Visualização indisponível",
|
||||
"selectADevice": "Selecione um dispositivo",
|
||||
"testAudio": "Tocar um som de teste"
|
||||
"testAudio": "Teste"
|
||||
},
|
||||
"dialIn": {
|
||||
"screenTitle": "Resumo da marcação"
|
||||
@@ -226,7 +240,9 @@
|
||||
"WaitingForHostTitle": "À espera do anfitrião ...",
|
||||
"Yes": "Sim",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Transmissão em direto"
|
||||
"close": "Fechar caixa de diálogo",
|
||||
"liveStreaming": "Transmissão em direto",
|
||||
"sharingTabs": "Opções de partilha"
|
||||
},
|
||||
"add": "Adicionar",
|
||||
"addMeetingNote": "Acrescentar uma nota sobre esta reunião",
|
||||
@@ -438,6 +454,11 @@
|
||||
"veryBad": "Muito má",
|
||||
"veryGood": "Muito boa"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Miniaturas de vídeo"
|
||||
}
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "Não foram encontrados resultados :(",
|
||||
"search": "Procurar no GIPHY"
|
||||
@@ -662,6 +683,7 @@
|
||||
"invitedOneMember": "{{displayName}} foi convidado",
|
||||
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
|
||||
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
|
||||
"joinMeeting": "Entrar",
|
||||
"kickParticipant": "{{kicked}} foi expulso por {{kicker}}",
|
||||
"leftOneMember": "{{name}} deixou a reunião",
|
||||
"leftThreePlusMembers": "{{name}} e muitos outros deixaram a reunião",
|
||||
@@ -687,8 +709,8 @@
|
||||
"moderationStoppedTitle": "A moderação parou",
|
||||
"moderationToggleDescription": "pelo {{participantDisplayName}}",
|
||||
"moderator": "É agora um moderador",
|
||||
"muted": "Iniciou uma conversa com o microfone desativado.",
|
||||
"mutedRemotelyDescription": "Pode sempre voltar a ativar o microfone quando estiver pronto para falar. Silencie de volta quando estiver pronto para manter o barulho afastado da reunião.",
|
||||
"muted": "Iniciou uma conversa com o microfone desligado.",
|
||||
"mutedRemotelyDescription": "Pode sempre voltar a ligar o microfone quando estiver pronto para falar. Silencie de volta quando estiver pronto para manter o barulho afastado da reunião.",
|
||||
"mutedRemotelyTitle": "Foi silenciado pelo {{participantDisplayName}}",
|
||||
"mutedTitle": "Está silenciado!",
|
||||
"newDeviceAction": "Usar",
|
||||
@@ -720,7 +742,7 @@
|
||||
"startSilentTitle": "Entrou sem áudio!",
|
||||
"suboptimalBrowserWarning": "Tememos que sua experiência de reunião não seja tão boa aqui. Estamos procurando maneiras de melhorar isso, mas até então, tente usar um dos <a href='{{recommendedBrowserPageLink}}' target='_blank'>navegadores completamente suportados</a>.",
|
||||
"suboptimalExperienceTitle": "Alerta do navegador",
|
||||
"unmute": "Ativar som",
|
||||
"unmute": "Ligar microfone",
|
||||
"videoMutedRemotelyDescription": "Pode sempre ligá-la novamente.",
|
||||
"videoMutedRemotelyTitle": "A sua câmara foi desligada pelo {{participantDisplayName}}.",
|
||||
"videoUnmuteBlockedDescription": "A operação de ligar a câmara e partilhar o ambiente de trabalho foi temporariamente bloqueada devido aos limites do sistema.",
|
||||
@@ -751,6 +773,7 @@
|
||||
"headings": {
|
||||
"lobby": "Sala de espera ({{count}})",
|
||||
"participantsList": "Participantes da reunião ({{count}})",
|
||||
"visitors": "Visitantes ({{count}})",
|
||||
"waitingLobby": "Aguardam na sala de espera ({{count}})"
|
||||
},
|
||||
"search": "Pesquisar participantes",
|
||||
@@ -758,6 +781,7 @@
|
||||
},
|
||||
"passwordDigitsOnly": "Até {{number}} dígitos",
|
||||
"passwordSetRemotely": "Definido por outro participante",
|
||||
"pinParticipant": "{{participantName}} - Afixar",
|
||||
"pinnedParticipant": "O participante está afixado",
|
||||
"polls": {
|
||||
"answer": {
|
||||
@@ -839,7 +863,7 @@
|
||||
"joinWithoutAudio": "Entrar sem áudio",
|
||||
"keyboardShortcuts": "Ativar os atalhos de teclado",
|
||||
"linkCopied": "Link copiado para a área de transferência",
|
||||
"lookGood": "O microfone está a funcionar corretamente",
|
||||
"lookGood": "O seu microfone funciona corretamente",
|
||||
"or": "ou",
|
||||
"premeeting": "Pré-reunião",
|
||||
"screenSharingError": "Erro de partilha de ecrã:",
|
||||
@@ -865,9 +889,9 @@
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Definir seu nome de exibição",
|
||||
"setDisplayNameLabel": "Nome",
|
||||
"setEmailInput": "Digite email",
|
||||
"setEmailLabel": "Definir seu email de gravatar",
|
||||
"setEmailLabel": "Email de gravatar",
|
||||
"title": "Perfil"
|
||||
},
|
||||
"raisedHand": "Gostaria de falar",
|
||||
@@ -950,6 +974,7 @@
|
||||
"title": "Opções de segurança"
|
||||
},
|
||||
"settings": {
|
||||
"audio": "Áudio",
|
||||
"buttonLabel": "Definições",
|
||||
"calendar": {
|
||||
"about": "A integração do calendário {{appName}} é utilizada para aceder com segurança ao seu calendário para que este possa ler os próximos eventos.",
|
||||
@@ -970,26 +995,29 @@
|
||||
"maxStageParticipants": "Número máximo de participantes que podem ser afixados (EXPERIMENTAL)",
|
||||
"microphones": "Microfones",
|
||||
"moderator": "Moderador",
|
||||
"more": "Mais",
|
||||
"moderatorOptions": "Opções de moderador",
|
||||
"more": "Geral",
|
||||
"name": "Nome",
|
||||
"noDevice": "Nenhum",
|
||||
"notifications": "Notificações",
|
||||
"participantJoined": "Entrar um participante",
|
||||
"participantKnocking": "Entrar um participante na sala de espera",
|
||||
"participantLeft": "Sair um participante",
|
||||
"playSounds": "Reproduzir som quando",
|
||||
"reactions": "Há uma reação na reunião",
|
||||
"reactions": "Existir uma reação na reunião",
|
||||
"sameAsSystem": "O mesmo que o sistema ({{label}})",
|
||||
"selectAudioOutput": "Saída de áudio",
|
||||
"selectCamera": "Câmara",
|
||||
"selectMic": "Microfone",
|
||||
"selfView": "Autovisualização",
|
||||
"sounds": "Sons",
|
||||
"speakers": "Participantes",
|
||||
"shortcuts": "Atalhos",
|
||||
"speakers": "Altifalantes",
|
||||
"startAudioMuted": "Todos começam com microfone desligado",
|
||||
"startReactionsMuted": "Todos começam com os sons de reação desativados",
|
||||
"startVideoMuted": "Todos começam com câmara desligada",
|
||||
"talkWhileMuted": "Falar com o microfone desligado",
|
||||
"title": "Definições"
|
||||
"title": "Definições",
|
||||
"video": "Vídeo"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Avançado",
|
||||
@@ -1070,18 +1098,29 @@
|
||||
"cc": "Mudar legendas",
|
||||
"chat": "Abrir / Fechar chat",
|
||||
"clap": "Aplausos",
|
||||
"closeChat": "Fechar chat",
|
||||
"closeMoreActions": "Fechar menu de mais ações",
|
||||
"closeParticipantsPane": "Fechar painel de participantes",
|
||||
"collapse": "Colapsar",
|
||||
"document": "Mudar para documento partilhado",
|
||||
"documentClose": "Fechar documento partilhado",
|
||||
"documentOpen": "Abrir documento partilhado",
|
||||
"download": "Descarregar as nossas aplicações",
|
||||
"embedMeeting": "Reunião incorporada",
|
||||
"endConference": "Terminar reunião para todos",
|
||||
"enterFullScreen": "Ver ecrã inteiro",
|
||||
"enterTileView": "Entrar na vista em quadrícula",
|
||||
"exitFullScreen": "Sair de ecrã inteiro",
|
||||
"exitTileView": "Sair da vista em quadrícula",
|
||||
"expand": "Expandir",
|
||||
"feedback": "Deixar comentários",
|
||||
"fullScreen": "Mudar para ecrã completo",
|
||||
"giphy": "Ativar/Desativar o menu GIPHY",
|
||||
"grantModerator": "Conceder direitos de moderador",
|
||||
"hangup": "Sair da reunião",
|
||||
"heading": "Barra de ferramentas",
|
||||
"help": "Ajuda",
|
||||
"hideWhiteboard": "Esconder quadro branco",
|
||||
"invite": "Convidar pessoas",
|
||||
"kick": "Remover participante",
|
||||
"laugh": "Risos",
|
||||
@@ -1091,21 +1130,23 @@
|
||||
"lobbyButton": "Ativar/desativar sala de espera",
|
||||
"localRecording": "Mudar os controlos locais de gravação",
|
||||
"lockRoom": "Mudar palavra-chave de reunião",
|
||||
"lowerHand": "Baixar a mão",
|
||||
"moreActions": "Mais ações",
|
||||
"moreActionsMenu": "Menu de mais ações",
|
||||
"moreOptions": "Mostrar mais opções",
|
||||
"mute": "Ativar / Desativar microfone",
|
||||
"mute": "Desligar microfone",
|
||||
"muteEveryone": "Silenciar a todos",
|
||||
"muteEveryoneElse": "Silenciar todos os outros",
|
||||
"muteEveryoneElsesVideo": "Parar o vídeo de todos os outros",
|
||||
"muteEveryonesVideo": "Parar o vídeo de todos",
|
||||
"noiseSuppression": "Supressão de ruído",
|
||||
"participants": "Participantes",
|
||||
"openChat": "Abrir chat",
|
||||
"participants": "Abrir painel de participantes",
|
||||
"pip": "Mudar para o modo Picture-in-Picture",
|
||||
"privateMessage": "Enviar mensagem privada",
|
||||
"profile": "Editar o seu perfil",
|
||||
"raiseHand": "Levantar / Baixar a mão",
|
||||
"reactionsMenu": "Abrir / Fechar menu de reações",
|
||||
"raiseHand": "Levantar a mão",
|
||||
"reactionsMenu": "Menu de reações",
|
||||
"recording": "Mudar gravação",
|
||||
"remoteMute": "Participante sem som",
|
||||
"remoteVideoMute": "Desativar a câmara do participante",
|
||||
@@ -1113,20 +1154,24 @@
|
||||
"selectBackground": "Selecionar plano de fundo",
|
||||
"selfView": "Mudar a autovisualização",
|
||||
"shareRoom": "Convidar alguém",
|
||||
"shareYourScreen": "Iniciar / Parar partilha de ecrã",
|
||||
"shareYourScreen": "Iniciar partilha de ecrã",
|
||||
"shareaudio": "Partilhar áudio",
|
||||
"sharedvideo": "Mudar a partilha de vídeos",
|
||||
"sharedvideo": "Partilhar vídeo",
|
||||
"shortcuts": "Mostrar / Esconder atalhos",
|
||||
"show": "Mostrar no palco",
|
||||
"showWhiteboard": "Mostrar quadro branco",
|
||||
"silence": "Silêncio",
|
||||
"speakerStats": "Mostrar / Esconder estatísticas dos participantes",
|
||||
"stopScreenSharing": "Parar de partilhar o seu ecrã",
|
||||
"stopSharedVideo": "Parar vídeo",
|
||||
"surprised": "Surpreendido",
|
||||
"tileView": "Mudar a vista em quadrícula",
|
||||
"toggleCamera": "Mudar a câmara",
|
||||
"toggleFilmstrip": "Mudar a película de filme",
|
||||
"unmute": "Ligar microfone",
|
||||
"videoblur": "Mudar o desfoque de vídeo",
|
||||
"videomute": "Iniciar / Parar câmara",
|
||||
"whiteboard": "Mostrar / Esconder quadro branco"
|
||||
"videomute": "Parar câmara",
|
||||
"videounmute": "Iniciar câmara"
|
||||
},
|
||||
"addPeople": "Adicione pessoas à sua chamada",
|
||||
"audioOnlyOff": "Desativar modo de largura de banda baixa",
|
||||
@@ -1139,6 +1184,7 @@
|
||||
"chat": "Abrir / Fechar chat",
|
||||
"clap": "Aplausos",
|
||||
"closeChat": "Fechar chat",
|
||||
"closeParticipantsPane": "Fechar painel de participantes",
|
||||
"closeReactionsMenu": "Fechar menu de reações",
|
||||
"disableNoiseSuppression": "Desativar a supressão de ruído",
|
||||
"disableReactionSounds": "Pode desactivar os sons de reacção para esta reunião",
|
||||
@@ -1147,6 +1193,7 @@
|
||||
"download": "Descarregar as nossas aplicações",
|
||||
"e2ee": "Criptografia ponta a ponta",
|
||||
"embedMeeting": "Incorporar reunião",
|
||||
"enableNoiseSuppression": "Ativar a supressão de ruído",
|
||||
"endConference": "Terminar reunião para todos",
|
||||
"enterFullScreen": "Ver em ecrã completo",
|
||||
"enterTileView": "Ver em quadrícula",
|
||||
@@ -1171,7 +1218,7 @@
|
||||
"lowerYourHand": "Baixar a mão",
|
||||
"moreActions": "Mais ações",
|
||||
"moreOptions": "Mais opções",
|
||||
"mute": "Ativar / Desativar microfone",
|
||||
"mute": "Desligar microfone",
|
||||
"muteEveryone": "Silenciar todos",
|
||||
"muteEveryonesVideo": "Desativar a câmara de todos",
|
||||
"noAudioSignalDesc": "Se não o silenciou propositadamente a partir de configurações do sistema ou hardware, considere mudar de dispositivo.",
|
||||
@@ -1188,7 +1235,7 @@
|
||||
"pip": "Entrar no modo Picture-in-Picture",
|
||||
"privateMessage": "Enviar mensagem privada",
|
||||
"profile": "Editar o seu perfil",
|
||||
"raiseHand": "Levantar / Baixar a mão",
|
||||
"raiseHand": "Levantar a mão",
|
||||
"raiseYourHand": "Levantar a mão",
|
||||
"reactionBoo": "Enviar reação de vaia",
|
||||
"reactionClap": "Enviar reação de aplausos",
|
||||
@@ -1212,11 +1259,13 @@
|
||||
"stopSharedVideo": "Parar vídeo",
|
||||
"stopSubtitles": "Parar legendas",
|
||||
"surprised": "Surpreendido",
|
||||
"talkWhileMutedPopup": "Está a tentar falar? Está com o microfone desativado.",
|
||||
"talkWhileMutedPopup": "Está a tentar falar? Está com o microfone desligado.",
|
||||
"tileViewToggle": "Mudar para vista em quadrícula",
|
||||
"toggleCamera": "Mudar a câmara",
|
||||
"unmute": "Ligar microfone",
|
||||
"videoSettings": "Definições de vídeo",
|
||||
"videomute": "Iniciar / Parar câmara"
|
||||
"videomute": "Parar câmara",
|
||||
"videounmute": "Iniciar câmara"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Iniciar/parar legendas",
|
||||
@@ -1234,6 +1283,7 @@
|
||||
"subtitlesOff": "Desligado",
|
||||
"tr": "TR"
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Desafixar",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Selecione <b><i>Permitir</i></b> quando o seu navegador perguntar pelas permissões.",
|
||||
"chromeGrantPermissions": "Selecione <b><i>Permitir</i></b> quando o seu navegador perguntar pelas permissões.",
|
||||
@@ -1272,9 +1322,11 @@
|
||||
"ldTooltip": "Ver vídeo em baixa definição",
|
||||
"lowDefinition": "Baixa definição (LD)",
|
||||
"performanceSettings": "Definições de desempenho",
|
||||
"recording": "Gravação em curso",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Ver vídeo em definição padrão",
|
||||
"standardDefinition": "Definição padrão"
|
||||
"standardDefinition": "Definição padrão",
|
||||
"streaming": "Transmissão em curso"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Informações sobre a ligação",
|
||||
@@ -1286,6 +1338,7 @@
|
||||
"grantModerator": "Conceder direitos de moderador",
|
||||
"hideSelfView": "Ocultar a autovisualização",
|
||||
"kick": "Expulsar",
|
||||
"mirrorVideo": "Espelhar o meu vídeo",
|
||||
"moderator": "Moderador",
|
||||
"mute": "Participante está sem som",
|
||||
"muted": "Sem som",
|
||||
@@ -1303,7 +1356,7 @@
|
||||
"addBackground": "Adicionar imagem de fundo",
|
||||
"apply": "Aplicar",
|
||||
"backgroundEffectError": "Falha ao aplicar efeito de fundo.",
|
||||
"blur": "Desfocagem",
|
||||
"blur": "Esbatido",
|
||||
"deleteImage": "Apagar imagem",
|
||||
"desktopShare": "Partilhar área de trabalho",
|
||||
"desktopShareError": "Não foi possível partilhar a área de trabalho",
|
||||
@@ -1317,12 +1370,13 @@
|
||||
"none": "Nenhum",
|
||||
"pleaseWait": "Por favor aguarde...",
|
||||
"removeBackground": "Remover imagem de fundo",
|
||||
"slightBlur": "Desfocagem ligeira",
|
||||
"title": "Planos de fundo virtuais",
|
||||
"slightBlur": "Ligeiro esbatido",
|
||||
"title": "Fundos virtuais",
|
||||
"uploadedImage": "Imagem carregada {{index}}",
|
||||
"webAssemblyWarning": "WebAssembly não suportado",
|
||||
"webAssemblyWarningDescription": "WebAssembly desactivado ou não suportado por este navegador"
|
||||
},
|
||||
"visitorsLabel": "Número de visitantes: {{count}}",
|
||||
"volumeSlider": "Controlo de volume",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -1355,6 +1409,7 @@
|
||||
"microsoftLogo": "Logo da Microsoft",
|
||||
"policyLogo": "Logo da Política de Privacidade"
|
||||
},
|
||||
"meetingsAccessibilityLabel": "Reuniões",
|
||||
"mobileDownLoadLinkAndroid": "Descarregar aplicação móvel para Android",
|
||||
"mobileDownLoadLinkFDroid": "Descarregar aplicação móvel para F-Droid",
|
||||
"mobileDownLoadLinkIos": "Descarregar aplicação móvel para iOS",
|
||||
@@ -1374,5 +1429,10 @@
|
||||
"terms": "Termos",
|
||||
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas",
|
||||
"upcomingMeetings": "As suas próximas reuniões"
|
||||
},
|
||||
"whiteboard": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Quadro branco"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,6 @@
|
||||
"defaultEmail": "Email-i Juaj Parazgjedhje",
|
||||
"disabled": "S’mund të ftoni persona.",
|
||||
"failedToAdd": "S’u arrit të shtohen pjesëmarrës",
|
||||
"footerText": "Formimi i numrave është i çaktivizuar.",
|
||||
"googleEmail": "Email Google",
|
||||
"inviteMoreHeader": "Në takim jeni vetëm ju",
|
||||
"inviteMoreMailSubject": "Merrni pjesë në takim me {{appName}}",
|
||||
@@ -31,6 +30,7 @@
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"car": "Audio Automjeti",
|
||||
"headphones": "Kufje",
|
||||
"none": "S’ka pajisje audio",
|
||||
"phone": "Telefon",
|
||||
@@ -39,9 +39,6 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "Gjerësi e ulët bande"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "Takimi përfundoi."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"actions": {
|
||||
"add": "Shtoni aneks konsultimesh",
|
||||
@@ -79,15 +76,27 @@
|
||||
"refresh": "Rifresko kalendarin",
|
||||
"today": "Sot"
|
||||
},
|
||||
"carmode": {
|
||||
"actions": {
|
||||
"selectSoundDevice": "Përzgjidhni pajisje zëri"
|
||||
},
|
||||
"labels": {
|
||||
"buttonLabel": "Mënyra automjet",
|
||||
"title": "Mënyra automjet",
|
||||
"videoStopped": "Videoja juaj është ndalur"
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"enter": "Hyni në fjalosje",
|
||||
"error": "Gabim: mesazhi juaj s’u dërgua. Arsye: {{error}}",
|
||||
"fieldPlaceHolder": "Shtypni këtu mesazhin tuaj",
|
||||
"lobbyChatMessageTo": "Mesazh fjalosjeje në holl për {{recipient}}",
|
||||
"message": "Mesazh",
|
||||
"messageAccessibleTitle": "{{user}} thotë:",
|
||||
"messageAccessibleTitleMe": "unë them:",
|
||||
"messageTo": "Mesazh privat për {{recipient}}",
|
||||
"messagebox": "Shtypni një mesazh",
|
||||
"newMessages": "Mesazhe të rinj",
|
||||
"nickname": {
|
||||
"popover": "Zgjidhni një nofkë",
|
||||
"title": "Që të përdorni fjalosjen, jepni një nofkë",
|
||||
@@ -96,7 +105,7 @@
|
||||
"noMessagesMessage": "Te takimi s’ka ende mesazhe. Nisni një bisedë këtu!",
|
||||
"privateNotice": "Mesazh privat për {{recipient}}",
|
||||
"sendButton": "Dërgoje",
|
||||
"smileysPanel": "Panel emoji-sh",
|
||||
"smileysPanel": "Panel emoxhish",
|
||||
"tabs": {
|
||||
"chat": "Fjalosje",
|
||||
"polls": "Pyetësorë"
|
||||
@@ -107,6 +116,7 @@
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"buttonText": "Instaloni Zgjerimin për Chrome",
|
||||
"buttonTextEdge": "Instaloni Zgjerimin Edge",
|
||||
"close": "Mbylle",
|
||||
"dontShowAgain": "Mos ma shfaq sërish këtë",
|
||||
"installExtensionText": "Instaloni zgjerimin për integrim të Google Calendar-it dhe Office 365-s"
|
||||
@@ -137,6 +147,7 @@
|
||||
"bridgeCount": "Numër shërbyesish: ",
|
||||
"codecs": "Kodekë (A/V): ",
|
||||
"connectedTo": "Lidhur te:",
|
||||
"e2eeVerified": "I verifikuar si E2EE:",
|
||||
"framerate": "Shpejtësi kuadrosh:",
|
||||
"less": "Shfaq më pak",
|
||||
"localaddress": "Adresë vendore:",
|
||||
@@ -172,14 +183,22 @@
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Që të merrni pjesë në këtë takim që nga telefoni juaj, ju duhet aplikacioni për celular {{app}}.",
|
||||
"description": "S’ngjau gjë? Provuam të nisim takimin tuaj te aplikacioni për desktop {{app}}. Rorpovoni, ose niseni nga aplikacioni web {{app}}.",
|
||||
"description": "S’ngjau gjë? Provuam të nisim takimin tuaj te aplikacioni për desktop {{app}}. Riprovoni, ose niseni nga aplikacioni web {{app}}.",
|
||||
"descriptionNew": "S’ngjau gjë? Provuam nisjen e takimit tuaj te aplikacioni për desktop {{app}}. <br /><br /> Mund të riprovoni, ose ta nisni në web.",
|
||||
"descriptionWithoutWeb": "S’ngjau gjë? Provuam nisjen e takimit tuaj te aplikacioni për desktop {{app}}.",
|
||||
"downloadApp": "Shkarkoni aplikacionin",
|
||||
"downloadMobileApp": "Shkarkojeni prej App Store",
|
||||
"ifDoNotHaveApp": "Nëse s’e keni ende aplikacionin:",
|
||||
"ifHaveApp": "Nëse e keni tashmë aplikacionin:",
|
||||
"joinInApp": "Merrni pjesë në këtë takim duke përdorur aplikacionin",
|
||||
"joinInAppNew": "Hyni që nga aplikacioni",
|
||||
"joinInBrowser": "Hyni që nga shfletues",
|
||||
"launchMeetingLabel": "Si doni të hyhet në këtë takim?",
|
||||
"launchWebButton": "Nise në web",
|
||||
"noMobileApp": "S’e keni aplikacionin?",
|
||||
"termsAndConditions": "Duke vazhduar, pajtoheni me <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a> tona",
|
||||
"title": "Po niset takimi juaj në {{app}}…",
|
||||
"titleNew": "Po niset takimi juaj…",
|
||||
"tryAgainButton": "Riprovoni në desktop",
|
||||
"unsupportedBrowser": "Duket se përdorni një shfletues që s’e mbulojmë."
|
||||
},
|
||||
@@ -192,11 +211,20 @@
|
||||
"microphonePermission": "Gabim në marrje lejesh mbi mikrofonin"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"hid": {
|
||||
"callControl": "Kontroll thirrjesh",
|
||||
"connectedDevices": "Pajisje të lidhura:",
|
||||
"deleteDevice": "Fshije pajisjen",
|
||||
"pairDevice": "Çiftoni pajisje"
|
||||
},
|
||||
"noPermission": "S’u akordua leje",
|
||||
"previewUnavailable": "S’bëhet dot paraparje",
|
||||
"selectADevice": "Përzgjidhni një pajisje",
|
||||
"testAudio": "Luaj një tingull, për provë"
|
||||
},
|
||||
"dialIn": {
|
||||
"screenTitle": "Përmbledhje rënieje numrash"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "tani është {{status}}"
|
||||
},
|
||||
@@ -215,6 +243,8 @@
|
||||
"liveStreaming": "Transmetim i Drejtpërdrejtë"
|
||||
},
|
||||
"add": "Shtoni",
|
||||
"addMeetingNote": "Shtoni një shënim rreth këtij takimi",
|
||||
"addOptionalNote": "Shtoni një shënim (në daçi):",
|
||||
"allow": "Lejoje",
|
||||
"alreadySharedVideoMsg": "Një tjetër pjesëmarrës po ndan me të tjerët një video. Kjo konferencë lejon vetëm një ndarje videoje në herë.",
|
||||
"alreadySharedVideoTitle": "Lejohet vetëm një ndarje videoje me të tjerët në herë",
|
||||
@@ -256,6 +286,7 @@
|
||||
"gracefulShutdown": "Shërbimi ynë është aktualisht i ndërprerë, për punë mirëmbajtjeje. Ju lutemi, riprovoni më vonë.",
|
||||
"grantModeratorDialog": "Jeni i sigurt se doni të akordohen të drejta moderatori për {{participantName}}?",
|
||||
"grantModeratorTitle": "Akordoni të drejta moderatori",
|
||||
"hide": "Fshihe",
|
||||
"hideShareAudioHelper": "Mos e shfaq më këtë dialog",
|
||||
"incorrectPassword": "Emër përdoruesi ose fjalëkalim i pasaktë",
|
||||
"incorrectRoomLockPassword": "Fjalëkalim i pasaktë",
|
||||
@@ -266,9 +297,10 @@
|
||||
"kickParticipantDialog": "Jeni i sigurt se doni të përzihet ky pjesëmarrës?",
|
||||
"kickParticipantTitle": "Të përzihet ky pjesëmarrës?",
|
||||
"kickTitle": "Ooh! {{participantDisplayName}} ju përzuri nga takimi",
|
||||
"linkMeeting": "Lidheni takimin",
|
||||
"linkMeetingTitle": "Lidheni takimin me Salesforce",
|
||||
"liveStreaming": "Transmetim i Drejtpërdrejtë",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Jo e mundshme, kur është aktiv regjistrimi",
|
||||
"liveStreamingDisabledTooltip": "Nisje transmetimesh të drejtpërdrejta e çaktivizuar.",
|
||||
"localUserControls": "Kontrolle vendore përdoruesi",
|
||||
"lockMessage": "S’u arrit të kyçej konferenca.",
|
||||
"lockRoom": "Shtoni takim $t(lockRoomPasswordUppercase)",
|
||||
@@ -280,7 +312,7 @@
|
||||
"maxUsersLimitReachedTitle": "U mbërrit në kufi numri maksimum pjesëmarrësish",
|
||||
"micConstraintFailedError": "Mikrofoni juaj s’plotëson disa nga kufizimet e domosdoshme.",
|
||||
"micNotFoundError": "S’u gjet mikrofon.",
|
||||
"micNotSendingData": "Kaloni te rregullimet e kompjuterit tuaj që t’i hiqni mikrofonit heshtimin dhe të ujdisni volumin për të",
|
||||
"micNotSendingData": "Kaloni te rregullimet e kompjuterit tuaj, që t’i hiqni mikrofonit heshtimin dhe të ujdisni volumin për të",
|
||||
"micNotSendingDataTitle": "Mikrofoni juaj është heshtuar nga rregullimet e sistemit tuaj",
|
||||
"micPermissionDeniedError": "S’keni akorduar leje për t’u përdorur mikrofoni juaj. Mundeni prapëseprapë të merrni pjesë te konferenca, por të tjerët s’do t’ju dëgjojnë. Përdorni butonin e kamerës, te shtylla e adresave, për ta ndrequr këtë gjë.",
|
||||
"micTimeoutError": "S’u nis dot burim audio. Ndodhi mbarim kohe!",
|
||||
@@ -320,15 +352,15 @@
|
||||
"popupError": "Shfletuesi juaj i bllokon dritaret flluskë prej këtij sajti. Ju lutemi, aktivizoni flluskat te rregullimet e sigurisë të shfletuesit tuaj dhe riprovoni.",
|
||||
"popupErrorTitle": "Flluska u bllokua",
|
||||
"readMore": "më tepër",
|
||||
"recentlyUsedObjects": "Së fundi përdorët objekte",
|
||||
"recording": "Regjistrim",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Jo i mundshëm kur ka aktiv një transmetim të drejtpërdrejtë",
|
||||
"recordingDisabledTooltip": "Nisja e regjistrimit është çaktivizuar.",
|
||||
"rejoinNow": "Rihyni tani",
|
||||
"remoteControlAllowedMessage": "{{user}} pranoi kërkesën tuaj për kontroll së largëti!",
|
||||
"remoteControlDeniedMessage": "{{user}} hodhi poshtë kërkesën tuaj për kontroll së largëti!",
|
||||
"remoteControlErrorMessage": "Ndodhi një gabim teksa provohej të kërkoheshin leje kontrolli së largëti nga {{user}}!",
|
||||
"remoteControlRequestMessage": "A do ta lejoni {{user}} të kontrollojë së largëti desktopin tuaj?",
|
||||
"remoteControlShareScreenWarning": "Mbani parasysh se nëse shtypni \"Lejoje\", do t’u tregoni ekranin tuaj!",
|
||||
"remoteControlShareScreenWarning": "Mbani parasysh se nëse shtypni “Lejoje”, do t’u tregoni ekranin tuaj!",
|
||||
"remoteControlStopMessage": "Sesioni me kontroll së largëti përfundoi!",
|
||||
"remoteControlTitle": "Kontroll desktopi së largëti",
|
||||
"remoteUserControls": "Kontrolle përdoruesi së largëti të {{username}}",
|
||||
@@ -342,6 +374,12 @@
|
||||
"screenSharingFailed": "Hëm! Diç shkoi ters, s’qemë në gjendje të nisnim tregim ekrani!",
|
||||
"screenSharingFailedTitle": "Tregimi i ekrani dështoi!",
|
||||
"screenSharingPermissionDeniedError": "Hëm! Diç shkoi ters me lejet tuaja për tregim ekrani. Ju lutemi, ringarkojeni dhe riprovoni.",
|
||||
"searchInSalesforce": "Kërkoni në Salesforce",
|
||||
"searchResults": "Përfundime kërkimi({{count}})",
|
||||
"searchResultsDetailsError": "Diç shkoi ters teksa provohej të merreshin të dhënat e të zotit.",
|
||||
"searchResultsError": "Diç shkoi ters teksa provohej të merreshin të dhëna.",
|
||||
"searchResultsNotFound": "S’u gjetën përfundime kërkimi.",
|
||||
"searchResultsTryAgain": "Provoni duke përdorur terma alternativë.",
|
||||
"sendPrivateMessage": "Tani së fundi morët një mesazh privat. Kishit ndërmend t’i përgjigjeni privatisht, apo doni t’ia dërgoni mesazhin grupit?",
|
||||
"sendPrivateMessageCancel": "Dërgoja grupit",
|
||||
"sendPrivateMessageOk": "Dërgoje privatisht",
|
||||
@@ -352,12 +390,12 @@
|
||||
"shareAudio": "Vazhdo",
|
||||
"shareAudioTitle": "Si të ndahet audio me të tjerë",
|
||||
"shareAudioWarningD1": "lypset të ndalni tregim ekrani, para se të ndani audion tuaj me të tjerë.",
|
||||
"shareAudioWarningD2": "lypset të rinisni tregimin e ekranit tuaj dhe t’i vini shenjë mundësisë \"ndani audio me të tjerë\".",
|
||||
"shareAudioWarningD2": "lypset të rinisni tregimin e ekranit tuaj dhe t’i vini shenjë mundësisë “ndani audio me të tjerë”.",
|
||||
"shareAudioWarningH1": "Nëse doni të ndani vetëm audio me të tjerë:",
|
||||
"shareAudioWarningTitle": "Lypset të ndalni tregimin e ekranit, para se të ndani audio me të tjerë",
|
||||
"shareMediaWarningGenericH2": "Nëse doni të tregoni ekranin dhe të ndani audio me të tjerë",
|
||||
"shareScreenWarningD1": "lypset të ndalni ndarjen e audios me të tjerë, para se të tregoni ekranin tuaj.",
|
||||
"shareScreenWarningD2": "lypset të ndalni ndarjen e audios me të tjerë, të nisni tregimin e ekranit dhe t’i vini shenjë mundësisë \"ndani audio me të tjerë\".",
|
||||
"shareScreenWarningD2": "lypset të ndalni ndarjen e audios me të tjerë, të nisni tregimin e ekranit dhe t’i vini shenjë mundësisë “ndani audio me të tjerë”.",
|
||||
"shareScreenWarningH1": "Nëse thjesht doni të tregoni ekranin tuaj:",
|
||||
"shareScreenWarningTitle": "Lypset të ndalni ndarjen e audios me të tjerë, para tregimit të ekranit tuaj",
|
||||
"shareVideoLinkError": "Ju lutemi, jepni një lidhje të saktë videoje.",
|
||||
@@ -366,6 +404,8 @@
|
||||
"shareYourScreenDisabled": "Tregimi i ekranit është i çaktivizuar.",
|
||||
"sharedVideoDialogError": "Gabim: URL e pavlefshme",
|
||||
"sharedVideoLinkPlaceholder": "Lidhje YouTube ose lidhje e drejtpërdrejtë për video",
|
||||
"show": "Shfaqe",
|
||||
"start": "Fillo ",
|
||||
"startLiveStreaming": "Nisni transmetim të drejtpërdrejtë",
|
||||
"startRecording": "Fillo regjistrim",
|
||||
"startRemoteControlErrorMessage": "Ndodhi një gabim teksa provohej të nisej sesioni i kontrollit së largëti!",
|
||||
@@ -383,6 +423,10 @@
|
||||
"user": "Përdorues",
|
||||
"userIdentifier": "Identifikues përdoruesi",
|
||||
"userPassword": "Fjalëkalim përdoruesi",
|
||||
"verifyParticipantConfirm": "Përputhen",
|
||||
"verifyParticipantDismiss": "Nuk përputhen",
|
||||
"verifyParticipantQuestion": "EKSPERIMENTALE: Pyeteni pjesëmarrësin {{participantName}} nëse sheh të njëjtën lëndë, sipas të njëjtës radhë.",
|
||||
"verifyParticipantTitle": "Verifikim përdoruesi",
|
||||
"videoLink": "Lidhje videoje",
|
||||
"viewUpgradeOptions": "Shihni mundësi përmirësimi",
|
||||
"viewUpgradeOptionsContent": "Që të përfitoni përdorim të pakufizuar veçorish me pagesë, të tilla si regjistrimi, transcriptime, RTMP Streaming & etj, duhet të përmirësoni planin tuaj.",
|
||||
@@ -408,8 +452,14 @@
|
||||
"veryBad": "Shumë i Dobët",
|
||||
"veryGood": "Shumë i Mirë"
|
||||
},
|
||||
"helpView": {
|
||||
"title": "Qendër ndihme"
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Miniatura videosh"
|
||||
}
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "S’u gjetën përfundime :(",
|
||||
"search": "Kërkoni në GIPHY"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Përgjigjuni",
|
||||
@@ -451,9 +501,11 @@
|
||||
"noRoom": "S’u dha dhomë për të cilën të formësohet numri.",
|
||||
"numbers": "Numra Për T’u Përdorur",
|
||||
"password": "$t(lockRoomPasswordUppercase): ",
|
||||
"reachedLimit": "Keni mbërritur në kufijtë e planit tuaj.",
|
||||
"sip": "Adresë SIP",
|
||||
"title": "Ndani me të tjerë",
|
||||
"tooltip": "Ndani me të tjerë lidhje dhe hollësi numrash për këtë takim"
|
||||
"tooltip": "Ndani me të tjerë lidhje dhe hollësi numrash për këtë takim",
|
||||
"upgradeOptions": "Ju lutemi, shihni mundësitë e përmirësimit, te"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "Ngecëm pak.",
|
||||
@@ -474,10 +526,11 @@
|
||||
"focusLocal": "Fokusi te videoja juaj",
|
||||
"focusRemote": "Fokusi te videoja e një personi tjetër",
|
||||
"fullScreen": "Hyni ose dilni në mënyrën “Sa krejt ekrani”",
|
||||
"giphyMenu": "Shfaq/Fshish menu GIPHY",
|
||||
"keyboardShortcuts": "Shkurtore tastiere",
|
||||
"localRecording": "Shfaqni ose fshini kontrolle regjistrimi lokal",
|
||||
"mute": "Mbyllni ose hapni mikrofonin tuaj",
|
||||
"pushToTalk": "Për të folur, shtypeni",
|
||||
"pushToTalk": "Që të flisni, shtypni",
|
||||
"raiseHand": "Ngrini ose ulni dorën",
|
||||
"showSpeakerStats": "Shfaq statistika folësish",
|
||||
"toggleChat": "Hapni ose mbyllni fjalosjen",
|
||||
@@ -487,6 +540,10 @@
|
||||
"toggleShortcuts": "Shfaqni ose fshihni shkurtore tastiere",
|
||||
"videoMute": "Vini në punë ose ndalni kamerën tuaj"
|
||||
},
|
||||
"largeVideo": {
|
||||
"screenIsShared": "Po u tregoni ekranin tuaj",
|
||||
"showMeWhatImSharing": "Tregomë ç’po u tregoj"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Po përpiqemi të lirojmë burime transmetimi. Ju lutemi, riprovoni pas pak minutash.",
|
||||
"busyTitle": "Krejt transmetuesit janë aktualisht të zënë",
|
||||
@@ -527,8 +584,8 @@
|
||||
"lobby": {
|
||||
"admit": "Pranoje",
|
||||
"admitAll": "Pranoji të tërë",
|
||||
"allow": "Lejoje",
|
||||
"backToKnockModeButton": "Kërkoji të marrë pjesë",
|
||||
"chat": "Fjalosje",
|
||||
"dialogTitle": "Mënyra holl",
|
||||
"disableDialogContent": "Mënyra holl është aktualisht e aktivizuar. Kjo veçori siguron që pjesëmarrës të padëshiruar të mos mund të hyjnë në takimin tuaj. Doni të çaktivizohet?",
|
||||
"disableDialogSubmit": "Çaktivizoje",
|
||||
@@ -541,6 +598,7 @@
|
||||
"errorMissingPassword": "Ju lutemi, jepni fjalëkalimin e takimit",
|
||||
"invalidPassword": "Fjalëkalim i pavlefshëm",
|
||||
"joinRejectedMessage": "Kërkesa juaj për hyrje u hodh poshtë nga një moderator.",
|
||||
"joinRejectedTitle": "Kërkesa për pjesëmarrje u hodh poshtë.",
|
||||
"joinTitle": "Merrni Pjesë Në Takim",
|
||||
"joinWithPasswordMessage": "Po provohet të hyhet me fjalëkalim, ju lutemi, pritni…",
|
||||
"joiningMessage": "Do të hyni në takim sapo dikush të pranojë kërkesën tuaj",
|
||||
@@ -549,6 +607,8 @@
|
||||
"knockButton": "Kërko të Hyhet",
|
||||
"knockTitle": "Dikush dëshiron të hyjë në takim",
|
||||
"knockingParticipantList": "Listë pjesëmarrësish që duan të hyjnë",
|
||||
"lobbyChatStartedNotification": "{{moderator}} filloi një fjalosje në holl me {{attendee}}",
|
||||
"lobbyChatStartedTitle": "{{moderator}} ka filluar një fjalosje në holl me ju.",
|
||||
"nameField": "Jepni emrin tuaj",
|
||||
"notificationLobbyAccessDenied": "Hyrja e {{targetParticipantName}} është hedhur poshtë nga {{originParticipantName}}",
|
||||
"notificationLobbyAccessGranted": "{{targetParticipantName}} është lejuar të hyjë nga {{originParticipantName}}",
|
||||
@@ -586,6 +646,7 @@
|
||||
"no": "Jo",
|
||||
"participant": "Pjesëmarrës",
|
||||
"participantStats": "Statistika Pjesëmarrësish",
|
||||
"selectTabTitle": "🎥 Ju lutemi, për regjistrim përzgjidhni këtë skedë",
|
||||
"sessionToken": "Token Sesioni",
|
||||
"start": "Nis Regjistrim",
|
||||
"stop": "Ndale Regjistrimin",
|
||||
@@ -608,10 +669,13 @@
|
||||
"connectedOneMember": "{{name}} nisi takimin",
|
||||
"connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë tjerë hynë në takim",
|
||||
"connectedTwoMembers": "{{first}} dhe {{second}} tjetër hynë në takim",
|
||||
"dataChannelClosed": "Rënie cilësie videoje",
|
||||
"dataChannelClosedDescription": "Kanali urë u shkëput, kështu që cilësia e videos është kufizuar te vlera më e ulët.",
|
||||
"disconnected": "u shkëput",
|
||||
"displayNotifications": "Shfaq njoftime për",
|
||||
"focus": "Fokusi te konferenca",
|
||||
"focusFail": "{{component}} jo i passhëm - riprovoni pas {{ms}} sekondash",
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "Njoftime",
|
||||
"hostAskedUnmute": "Moderatori do të donte të flisnit",
|
||||
"invitedOneMember": "{{name}} u ftua",
|
||||
@@ -621,6 +685,14 @@
|
||||
"leftOneMember": "{{name}} doli nga takimi",
|
||||
"leftThreePlusMembers": "{{name}} dhe mjaft të tjerë dolën nga takimi",
|
||||
"leftTwoMembers": "{{first}} dhe {{second}} dolën nga takimi",
|
||||
"linkToSalesforce": "Lidheni te Salesforce",
|
||||
"linkToSalesforceDescription": "Mund ta lidhni përmbledhjen e takimit te një objekt Salesforce.",
|
||||
"linkToSalesforceError": "S’u arrit të lidhe takimi te Salesforce",
|
||||
"linkToSalesforceKey": "Lidheni këtë takim",
|
||||
"linkToSalesforceProgress": "Po lidhet takimi te Salesforce…",
|
||||
"linkToSalesforceSuccess": "Takimi u lidh te Salesforce",
|
||||
"localRecordingStarted": "{{name}} ka filluar një regjistrim vendor.",
|
||||
"localRecordingStopped": "{{name}} ka ndalur një regjistrim vendor.",
|
||||
"me": "Unë",
|
||||
"moderationInEffectCSDescription": "Ju lutemi, ngrini dorën, nëse doni të tregoni ekranin tuaj.",
|
||||
"moderationInEffectCSTitle": "Tregimi i ekranit është bllokuar nga moderatori",
|
||||
@@ -641,7 +713,11 @@
|
||||
"newDeviceAction": "Përdore",
|
||||
"newDeviceAudioTitle": "U pikas pajisje audio e re",
|
||||
"newDeviceCameraTitle": "U pikas kamerë e re",
|
||||
"oldElectronClientDescription1": "Duket se përdorni një version të vjetër të klientit Jitsi Meet, i cili ka cenueshmëri sigurie që njihen. Ju lutemi, siguroni përditësimin me ",
|
||||
"noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave s’mund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.",
|
||||
"noiseSuppressionFailedTitle": "S’u arrit të nisej mbytja e zhurmave",
|
||||
"noiseSuppressionNoTrackDescription": "Ju lutemi, së pari, çheshtoni mikrofonin tuaj.",
|
||||
"noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash audioje stereo.",
|
||||
"oldElectronClientDescription1": "Duket se përdorni një version të vjetër të klientit Jitsi Meet, i cili ka cenueshmëri të ditura sigurie. Ju lutemi, siguroni përditësimin me ",
|
||||
"oldElectronClientDescription2": "montimin tonë më të ri",
|
||||
"oldElectronClientDescription3": " që tani!",
|
||||
"participantWantsToJoin": "Dëshiron të hyjë në takim",
|
||||
@@ -655,6 +731,8 @@
|
||||
"reactionSoundsForAll": "Çaktivizoji tingujt për të tërë",
|
||||
"screenShareNoAudio": "Kutizës për ndarje audioje me të tjerë s’i është vënë shenjë te skena e përzgjedhjes së dritares.",
|
||||
"screenShareNoAudioTitle": "S’u nda dot me të tjerë audioja e sistemit!",
|
||||
"screenSharingAudioOnlyDescription": "Ju lutemi, kini parasysh se duke dhënë ekranin tuaj, ndikoni te mënyra “Punimi më i mirë” dhe do të përdorni më tepër gjerësi bande",
|
||||
"screenSharingAudioOnlyTitle": "Mënyra “”Punimi më i mirë",
|
||||
"selfViewTitle": "Mundeni përherë të hiqni fshehjen e pamjes së vetes, që nga rregullimet",
|
||||
"somebody": "Dikush",
|
||||
"startSilentDescription": "Që të aktivizohet audioja, rihyni në takim",
|
||||
@@ -674,7 +752,7 @@
|
||||
"allow": "Lejoju pjesëmarrësve të:",
|
||||
"allowVideo": "Çaktivizoni videon",
|
||||
"askUnmute": "Kërkoni heqje heshtimi",
|
||||
"audioModeration": "Hiqni heshtim të vetes",
|
||||
"audioModeration": "Heqin heshtim të vetes",
|
||||
"blockEveryoneMicCamera": "Bllokoni mikrofonin dhe kamerën e gjithkujt",
|
||||
"invite": "Ftoni Dikë",
|
||||
"moreModerationActions": "Më tepër mundësi moderimi",
|
||||
@@ -686,12 +764,13 @@
|
||||
"stopEveryonesVideo": "Ndal videon e gjithkujt",
|
||||
"stopVideo": "Ndale videon",
|
||||
"unblockEveryoneMicCamera": "Zhblloko mikrofonin dhe kamerën e gjithkujt",
|
||||
"videoModeration": "Nis videon e vet"
|
||||
"videoModeration": "Nisin videon e vetes"
|
||||
},
|
||||
"close": "Mbylle",
|
||||
"headings": {
|
||||
"lobby": "Holli ({{count}})",
|
||||
"participantsList": "Pjesëmarrës në takim ({{count}})",
|
||||
"visitors": "Vizitorë ({{count}})",
|
||||
"waitingLobby": "Duke pritur në holl ({{count}})"
|
||||
},
|
||||
"search": "Kërkoni te pjesëmarrësit",
|
||||
@@ -699,6 +778,8 @@
|
||||
},
|
||||
"passwordDigitsOnly": "Deri në {{number}} shifra",
|
||||
"passwordSetRemotely": "Caktuar nga një tjetër pjesëmarrës",
|
||||
"pinParticipant": "{{participantName}} - Fiksoje",
|
||||
"pinnedParticipant": "Pjesëmarrësi është fiksuar",
|
||||
"polls": {
|
||||
"answer": {
|
||||
"skip": "Anashkaloje",
|
||||
@@ -775,6 +856,7 @@
|
||||
"initiated": "U nis thirrja",
|
||||
"joinAudioByPhone": "Merrni pjesë me audio telefoni",
|
||||
"joinMeeting": "Merrni pjesë në takim",
|
||||
"joinMeetingInLowBandwidthMode": "Merrni pjesë nën mënyrën “gjerësi e ulët bande”",
|
||||
"joinWithoutAudio": "Merrni pjesë pa audio",
|
||||
"keyboardShortcuts": "Aktivizo shkurtore tastiere",
|
||||
"linkCopied": "Lidhja u kopjua në të papastër",
|
||||
@@ -802,9 +884,6 @@
|
||||
"rejected": "Hedhur poshtë",
|
||||
"ringing": "Po i bihet ziles…"
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "Privatësi"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Caktoni emrin tuaj për në ekran",
|
||||
@@ -814,6 +893,18 @@
|
||||
},
|
||||
"raisedHand": "Do të donte të fliste",
|
||||
"raisedHandsLabel": "Numër duarsh të ngritura",
|
||||
"record": {
|
||||
"already": {
|
||||
"linked": "Takimi është i lidhur tashmë te ky objekt Salesforce."
|
||||
},
|
||||
"type": {
|
||||
"account": "Llogari",
|
||||
"contact": "Kontakt",
|
||||
"lead": "Lead",
|
||||
"opportunity": "Mundësi",
|
||||
"owner": "Zotërues"
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"authDropboxText": "Ngarkoje në Dropbox",
|
||||
"availableSpace": "Hapësirë e gatshme: {{spaceLeft}} MB (afërsisht {{duration}} minuta regjistrim)",
|
||||
@@ -828,29 +919,48 @@
|
||||
"expandedPending": "Po niset regjistrimi…",
|
||||
"failedToStart": "S’u arrit të niset regjistrimi",
|
||||
"fileSharingdescription": "Ndajeni regjistrimin me pjesëmarrësit në takim",
|
||||
"highlight": "Nxjerrje në pah",
|
||||
"highlightMoment": "Nxirni në pah një çast",
|
||||
"highlightMomentDisabled": "Mund të nxirrni në pah çaste kur fillon regjistrimi",
|
||||
"highlightMomentSuccess": "Çasti u nxorr në pah",
|
||||
"highlightMomentSucessDescription": "Çasti i nxjerrë në pah nga ju do të shtohet te përmbledhja e takimit.",
|
||||
"inProgress": "Regjistrim ose transmetim drejtpërsëdrejti në ecuri e sipër",
|
||||
"limitNotificationDescriptionNative": "Për shkak kërkesash të shumta, regjistrimi juaj do të kufizohet në {{limit}} min. Për regjistrime të pakufizuara provoni <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Për shkak kërkesash të shumta, regjistrimi juaj do të kufizohet në {{limit}} min. Për regjistrime të pakufizuara provoni <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Kemi prodhuar një lidhje për te regjistrimi juaj.",
|
||||
"live": "DREJTPËRSËDREJTI",
|
||||
"localRecordingNoNotificationWarning": "Regjistrimi s’do t’u njoftohet pjesëmarrësve të tjerë. Do t’ju duhet t’i vini në dijeni se takimi po regjistrohet.",
|
||||
"localRecordingNoVideo": "Videoja nuk po regjistrohet",
|
||||
"localRecordingStartWarning": "Ju lutemi, sigurohuni se e ndalni regjistrimin para se dilni nga takimi, që të mund ta ruani.",
|
||||
"localRecordingStartWarningTitle": "Ndaleni regjistrimin që ta ruani",
|
||||
"localRecordingVideoStop": "Ndalja e videos tuaj do të ndalë gjithashtu edhe regjistrimin vendor. Jeni i sigurt se doni të vazhdohet?",
|
||||
"localRecordingVideoWarning": "Që ta regjistroni, videon tuaj duhet ta keni të hapur, kur niset regjistrimi",
|
||||
"localRecordingWarning": "Sigurohuni se përzgjidhni skedën e tanishme, që të mund të përdoret videoja dhe audioja e saktë. Regjistrimi aktualisht është i kufizuar deri në 1GB, çka është aty afër 100 minutave.",
|
||||
"loggedIn": "I futur si {{userName}}",
|
||||
"noMicPermission": "S’u krijua dot pistë mikrofoni. Ju lutemi, akordoni leje për përdorim të mikrofonit.",
|
||||
"noStreams": "S’u pikas rrjedhë audio ose video.",
|
||||
"off": "Regjistrimi u ndal",
|
||||
"offBy": "{{name}} ndali regjistrimin",
|
||||
"on": "Regjistrimi nisi",
|
||||
"onBy": "{{name}} nisi regjistrimin",
|
||||
"onlyRecordSelf": "Regjistro vetëm rrjedhat e mia audio dhe video",
|
||||
"pending": "Po përgatitet të regjistrohet takimi…",
|
||||
"rec": "REC",
|
||||
"saveLocalRecording": "Ruajeni lokalisht kartelën e regjistrimit (Beta)",
|
||||
"serviceDescription": "Regjistrimi juaj do të ruhet nga shërbimi i regjistrimit",
|
||||
"serviceDescriptionCloud": "Regjistrim në re",
|
||||
"serviceDescriptionCloudInfo": "Takimet e regjistruara spastrohen automatikisht 24h pas kohës së regjistrimit të tyre.",
|
||||
"serviceName": "Shërbim regjistrimi",
|
||||
"sessionAlreadyActive": "Ky sesion po regjistrohet ose transmetohet drejtpërsëdrejti tashmë.",
|
||||
"signIn": "Hyni",
|
||||
"signOut": "Dilni",
|
||||
"surfaceError": "Ju lutemi, përdorni skedën e tanishme.",
|
||||
"title": "Regjistrim",
|
||||
"unavailable": "Hëm! {{serviceName}} s’është i passhëm aktualisht. Po punojmë për të zgjidhur problemin. Ju lutemi, riprovoni më vonë.",
|
||||
"unavailableTitle": "Regjistrim jo i passhëm",
|
||||
"uploadToCloud": "Ngarkojeni te reja"
|
||||
},
|
||||
"screenshareDisplayName": "Skena e {{name}}",
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Tërhiqeni që të rifreskohet"
|
||||
},
|
||||
@@ -861,8 +971,9 @@
|
||||
"title": "Mundësi Sigurie"
|
||||
},
|
||||
"settings": {
|
||||
"buttonLabel": "Rregullime",
|
||||
"calendar": {
|
||||
"about": "Integrimi i me kalendar {{appName}} përdoret për të hyrë me sukses te kalendari juaj, që kështu të mund të lexohen veprimtari të ardhshme.",
|
||||
"about": "Integrimi me kalendar {{appName}} përdoret për të hyrë me sukses te kalendari juaj, që kështu të mund të lexohen veprimtari të ardhshme.",
|
||||
"disconnect": "Shkëputu",
|
||||
"microsoftSignIn": "Hyni me Microsoft",
|
||||
"signedIn": "Aktualisht po shihen veprimtari kalendari për {{email}}. Klikoni mbi butonin Shkëputu më poshtë që të ndalni parjen e veprimtarive të kalendarit.",
|
||||
@@ -877,12 +988,14 @@
|
||||
"incomingMessage": "Mesazh ardhës",
|
||||
"language": "Gjuhë",
|
||||
"loggedIn": "I futur si {{name}}",
|
||||
"maxStageParticipants": "Numër maksimum pjesëmarrësish që mund të fiksohen te skena kryesore (EKSPERIMENTALe)",
|
||||
"microphones": "Mikrofona",
|
||||
"moderator": "Moderator",
|
||||
"more": "Më tepër",
|
||||
"name": "Emër",
|
||||
"noDevice": "Asnjë",
|
||||
"participantJoined": "Hyri Pjesëmarrës",
|
||||
"participantKnocking": "Pjesëmarrës hyri në holl",
|
||||
"participantLeft": "Doli Pjesëmarrës",
|
||||
"playSounds": "Luaj tingull kur",
|
||||
"reactions": "Reagime takimi",
|
||||
@@ -912,13 +1025,21 @@
|
||||
"disableCrashReportingWarning": "Jeni i sigurt se doni të çaktivizohet raportim vithisjesh? Rregullimi do të vihet në punë pasi të rinisni aplikacionin.",
|
||||
"disableP2P": "Çaktivizo mënyrë Tek-Për-Tek",
|
||||
"displayName": "Emër në ekrani",
|
||||
"displayNamePlaceholderText": "P.sh.: Zamir Gjoli",
|
||||
"email": "Email",
|
||||
"emailPlaceholderText": "email@example.com",
|
||||
"goTo": "Kalo te",
|
||||
"header": "Rregullime",
|
||||
"help": "Ndihmë",
|
||||
"links": "Lidhje",
|
||||
"privacy": "Privatësi",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "URL Shërbyesi",
|
||||
"showAdvanced": "Shfaq rregullime të mëtejshme",
|
||||
"startCarModeInLowBandwidthMode": "Nën mënyrën “gjerësi e ulët bande” nis mënyrën automjet",
|
||||
"startWithAudioMuted": "Fillo me audio të mbyllur",
|
||||
"startWithVideoMuted": "Fillo me video të mbyllur",
|
||||
"terms": "Terma",
|
||||
"version": "Version"
|
||||
},
|
||||
"share": {
|
||||
@@ -956,6 +1077,7 @@
|
||||
"termsView": {
|
||||
"title": "Terma"
|
||||
},
|
||||
"toggleTopPanelLabel": "Shfaq/fshih panelin e epërm",
|
||||
"toolbar": {
|
||||
"Settings": "Rregullime",
|
||||
"accessibilityLabel": {
|
||||
@@ -965,6 +1087,7 @@
|
||||
"boo": "Ya",
|
||||
"breakoutRoom": "Hyni/Dilni nga dhomë aneks konsultimesh",
|
||||
"callQuality": "Administroni cilësi videoje",
|
||||
"carmode": "Mënyra Automjet",
|
||||
"cc": "Shfaq/Fshih titra",
|
||||
"chat": "Hapni / Mbyllni fjalosje",
|
||||
"clap": "Duartrokitje",
|
||||
@@ -972,16 +1095,21 @@
|
||||
"document": "Shfaq/Fshih dokument të ndarë",
|
||||
"download": "Shkarkoni aplikacionet tona",
|
||||
"embedMeeting": "Trupëzoni takimin",
|
||||
"endConference": "Përfundoje takimin për të tërë",
|
||||
"expand": "Zgjeroje",
|
||||
"feedback": "Lini përshtypje",
|
||||
"fullScreen": "Kalo/Dil nga mënyra “Sa krejt ekrani”",
|
||||
"fullScreen": "Kalo nën/Dil nga mënyra “Sa krejt ekrani”",
|
||||
"giphy": "Shfaq/fshih menunë GIPHY",
|
||||
"grantModerator": "Akordoji të Drejta Moderatori",
|
||||
"hangup": "Braktiseni takimin",
|
||||
"heading": "Panel",
|
||||
"help": "Ndihmë",
|
||||
"invite": "Ftoni njerëz",
|
||||
"kick": "Përzëre pjesëmarrësin",
|
||||
"laugh": "E qeshur",
|
||||
"leaveConference": "Dilni nga takimi",
|
||||
"like": "Thumbs Up",
|
||||
"linkToSalesforce": "Lidhje për te Salesforce",
|
||||
"lobbyButton": "Aktivizo/Çaktivizoni mënyrën holl",
|
||||
"localRecording": "Shfaq/Fshih kontrolle regjistrimi vendor",
|
||||
"lockRoom": "Aktivizo/Çaktivizo fjalëkalim takimi",
|
||||
@@ -993,6 +1121,7 @@
|
||||
"muteEveryoneElse": "Heshto gjithkënd tjetër",
|
||||
"muteEveryoneElsesVideoStream": "Ndal videon e gjithkujt tjetër",
|
||||
"muteEveryonesVideoStream": "Ndal videon e gjithkujt",
|
||||
"noiseSuppression": "Mbytje zhurmash",
|
||||
"participants": "Pjesëmarrës",
|
||||
"pip": "Aktivizo/Çaktivizo mënyrën “Picture-in-Picture”",
|
||||
"privateMessage": "Dërgoni mesazh privat",
|
||||
@@ -1004,7 +1133,7 @@
|
||||
"remoteVideoMute": "Çaktivizo kamerën e pjesëmarrësit",
|
||||
"security": "Mundësi sigurie",
|
||||
"selectBackground": "Përzgjidhni Sfond",
|
||||
"selfView": "Shfaq/Fshih pamje veteje",
|
||||
"selfView": "Shfaq/Fshih pamje të vetes",
|
||||
"shareRoom": "Ftoni dikë",
|
||||
"shareYourScreen": "Nisni / Ndalni tregimin e ekranit tuaj",
|
||||
"shareaudio": "Ndani audio me të tjerë",
|
||||
@@ -1014,11 +1143,12 @@
|
||||
"silence": "Heshtje",
|
||||
"speakerStats": "Shfaq/Fshih statistika folësi",
|
||||
"surprised": "I befasuar",
|
||||
"tileView": "Kalo/Dil nga mënyra mozaik",
|
||||
"tileView": "Kalo në/Dil nga mënyra mozaik",
|
||||
"toggleCamera": "Hap/Mbyll kamerën",
|
||||
"toggleFilmstrip": "Shfaq/Fshih shirit filmi",
|
||||
"videoblur": "Aktivizo/Çaktivizo turbullim videoje",
|
||||
"videomute": "Nis / Ndal kamerën"
|
||||
"videomute": "Nis / Ndal kamerën",
|
||||
"whiteboard": "Shfaq / Fshih tabelën"
|
||||
},
|
||||
"addPeople": "Shtoni persona te thirrja juaj",
|
||||
"audioOnlyOff": "Çaktivizo mënyrën “Sasi e ulët të dhënash trafiku”",
|
||||
@@ -1032,24 +1162,30 @@
|
||||
"clap": "Duartrokitje",
|
||||
"closeChat": "Mbyll fjalosjen",
|
||||
"closeReactionsMenu": "Mbyll menu reagimesh",
|
||||
"disableNoiseSuppression": "Çaktivizo mbytje zhurmash",
|
||||
"disableReactionSounds": "Mund të çaktivizoni tinguj reagimesh për këtë takim",
|
||||
"documentClose": "Mbylle dokumentin e ndarë",
|
||||
"documentOpen": "Hape dokumentin e ndarë",
|
||||
"download": "Shkarkoni aplikacione tonat",
|
||||
"e2ee": "Fshehtëzim Skaj-Më-Skaj",
|
||||
"embedMeeting": "Trupëzoni takim",
|
||||
"endConference": "Përfundoje takimin për të tërë",
|
||||
"enterFullScreen": "Shiheni sa krejt ekrani",
|
||||
"enterTileView": "Kalo te pamja me kuadrate",
|
||||
"exitFullScreen": "Dil nga mënyra sa krejt ekrani",
|
||||
"exitTileView": "Dil nga pamja me kuadrate",
|
||||
"feedback": "Lini përshtypje",
|
||||
"giphy": "Shfaq/Fshih menunë GIPHY",
|
||||
"hangup": "Braktisni takimin",
|
||||
"help": "Ndihmë",
|
||||
"hideWhiteboard": "Fshihe tabelën",
|
||||
"invite": "Ftoni persona",
|
||||
"joinBreakoutRoom": "Hyni në dhomë aneks konsultimesh",
|
||||
"laugh": "Qeshje",
|
||||
"leaveBreakoutRoom": "Dilni nga dhomë aneks konsultimesh",
|
||||
"leaveConference": "Dilni nga takimi",
|
||||
"like": "Thumbs Up",
|
||||
"linkToSalesforce": "Lidhje për te Salesforce",
|
||||
"lobbyButtonDisable": "Çaktivizo mënyrën holl",
|
||||
"lobbyButtonEnable": "Aktivizo mënyrën holl",
|
||||
"login": "Hyrje",
|
||||
@@ -1065,6 +1201,7 @@
|
||||
"noAudioSignalDialInDesc": "Mund t’i bini numrit edhe duke përdorur:",
|
||||
"noAudioSignalDialInLinkDesc": "Numra thirrjeje",
|
||||
"noAudioSignalTitle": "S’ka sinjal që vjen nga mikrofoni juaj!",
|
||||
"noiseSuppression": "Mbytje zhurmash",
|
||||
"noisyAudioInputDesc": "Dëgjohet sikur mikrofoni juaj prodhon zhurmë, ju lutemi, shihni mundësinë e heshtimit të tij, ose të ndërrimit të pajisjes.",
|
||||
"noisyAudioInputTitle": "Mikrofoni juaj duket të jetë i zhurmshëm!",
|
||||
"openChat": "Hapni fjalosje",
|
||||
@@ -1075,18 +1212,19 @@
|
||||
"profile": "Përpunoni profilin tuaj",
|
||||
"raiseHand": "Ngrini / Ulni dorën",
|
||||
"raiseYourHand": "Ngrini dorën",
|
||||
"reactionBoo": "Dërgo reagim me ya",
|
||||
"reactionClap": "Dërgo reagim me duartrokitje",
|
||||
"reactionLaugh": "Dërgo reagim me qeshje",
|
||||
"reactionLike": "Dërgo reagim me “thumbs up”",
|
||||
"reactionSilence": "Dërgo reagim me heshtje",
|
||||
"reactionSurprised": "Dërgo reagim të befasuari",
|
||||
"reactionBoo": "Dërgoni reagim me ya",
|
||||
"reactionClap": "Dërgoni reagim me duartrokitje",
|
||||
"reactionLaugh": "Dërgoni reagim me qeshje",
|
||||
"reactionLike": "Dërgoni reagim me “thumbs up”",
|
||||
"reactionSilence": "Dërgoni reagim me heshtje",
|
||||
"reactionSurprised": "Dërgoni reagim të befasuari",
|
||||
"security": "Mundësi sigurie",
|
||||
"selectBackground": "Përzgjidhni sfond",
|
||||
"shareRoom": "Ftoni dikë",
|
||||
"shareaudio": "Ndani audio me të tjerë",
|
||||
"sharedvideo": "Ndani video me të tjerë",
|
||||
"shortcuts": "Shihni shkurtore",
|
||||
"showWhiteboard": "Shfaq tabelë",
|
||||
"silence": "Heshtje",
|
||||
"speakerStats": "Statistika folësi",
|
||||
"startScreenSharing": "Nise tregimin e ekranit",
|
||||
@@ -1097,7 +1235,7 @@
|
||||
"stopSubtitles": "Ndali titrat",
|
||||
"surprised": "I befasuar",
|
||||
"talkWhileMutedPopup": "Po provoni të flisni? Jeni i heshtuar.",
|
||||
"tileViewToggle": "Kaloni/Dilni nga mënyra mozaik",
|
||||
"tileViewToggle": "Kalo në/Dil nga mënyra mozaik",
|
||||
"toggleCamera": "Hapni/Mbyllni kamerën",
|
||||
"videoSetting": "Rregullime videoje",
|
||||
"videomute": "Nisni / Ndalni kamerën"
|
||||
@@ -1110,10 +1248,15 @@
|
||||
"labelToolTip": "Takimit po i bëhet transkriptim",
|
||||
"off": "Transkriptimi u ndal",
|
||||
"pending": "Po përgatitet të transkriptohet takimi…",
|
||||
"sourceLanguageDesc": "Aktualisht si gjuhë takimi është caktuar <b>{{sourceLanguage}}</b>. <br/> Mund ta ndryshoni që nga ",
|
||||
"sourceLanguageHere": "këtu",
|
||||
"start": "Fillo shfaqje titrash",
|
||||
"stop": "Ndal shfaqje titrash",
|
||||
"subtitles": "Titra",
|
||||
"subtitlesOff": "Off",
|
||||
"tr": "TR"
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Hiqja fiksimin",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni <b><i>Lejoje</i></b>.",
|
||||
"chromeGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni <b><i>Lejoje</i></b>.",
|
||||
@@ -1152,9 +1295,11 @@
|
||||
"ldTooltip": "Po shihet video në cilësi të ulët",
|
||||
"lowDefinition": "Cilësi e ulët",
|
||||
"performanceSettings": "Rregullime funksionimi",
|
||||
"recording": "Regjistrim në kryerje e sipër",
|
||||
"sd": "CS",
|
||||
"sdTooltip": "Po shihet video në cilësi standarde",
|
||||
"standardDefinition": "Cilësi standarde"
|
||||
"standardDefinition": "Cilësi standarde",
|
||||
"streaming": "Transmetim në kryerje e sipër"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Hollësi Lidhjeje",
|
||||
@@ -1166,13 +1311,17 @@
|
||||
"grantModerator": "Akordoji të Drejta Moderatori",
|
||||
"hideSelfView": "Fshihe pamjen e vetes",
|
||||
"kick": "Përzëre",
|
||||
"mirrorVideo": "Pasqyro videon time",
|
||||
"moderator": "Moderator",
|
||||
"mute": "Pjesëmarrësi është heshtuar",
|
||||
"muted": "I heshtuar",
|
||||
"pinToStage": "Fiksoje në skenë",
|
||||
"remoteControl": "Nis / Ndal kontroll së largëti",
|
||||
"screenSharing": "Pjesëmarrësi po tregon ekranin e vet",
|
||||
"show": "Shfaqe në skenë",
|
||||
"showSelfView": "Shfaq pamje të vetes",
|
||||
"unpinFromStage": "Çfiksoje",
|
||||
"verify": "Verifikoni pjesëmarrës",
|
||||
"videoMuted": "Kamera e çaktivizuar",
|
||||
"videomute": "Pjesëmarrësi ka ndalur kamerën"
|
||||
},
|
||||
@@ -1183,7 +1332,7 @@
|
||||
"blur": "Turbulloje",
|
||||
"deleteImage": "Fshije figurën",
|
||||
"desktopShare": "Tregim desktopi",
|
||||
"desktopShareError": "S’u krijua dot tregim desktopi",
|
||||
"desktopShareError": "S’u formua dot tregim desktopi",
|
||||
"image1": "Plazh",
|
||||
"image2": "Mur i bardhë asnjanës",
|
||||
"image3": "Dhomë e bardhë e zbrazët",
|
||||
@@ -1200,6 +1349,7 @@
|
||||
"webAssemblyWarning": "Nuk mbulohet WebAssembly",
|
||||
"webAssemblyWarningDescription": "WebAssembly e çaktivizuar ose e pambuluar nga ky shfletues"
|
||||
},
|
||||
"visitorsLabel": "Numër vizitorësh: {{count}}",
|
||||
"volumeSlider": "Rrëshqitës volumi",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -1240,13 +1390,21 @@
|
||||
"recentList": "Së fundi",
|
||||
"recentListDelete": "Fshije zërin",
|
||||
"recentListEmpty": "Lista juaj për “së fundi” aktualisht është e zbrazët. Bisedoni me ekipin tuaj dhe do të gjeni këtu krejt takimet tuaj së fundi.",
|
||||
"recentMeetings": "Takimet tuaja së fundi",
|
||||
"reducedUIText": "Mirë se vini në {{app}}!",
|
||||
"roomNameAllowedChars": "Emri i takimit s’duhet të përmbajë ndonjë nga këto shenja: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Jepni emër dhome",
|
||||
"roomnameHint": "Jepni emrin ose URL-në e dhomës ku doni të hyhet. Emrin mund ta vini si të doni, thjesht tregojuani personave me të cilët po takoheni, që të japin të njëjtin emër.",
|
||||
"sendFeedback": "Dërgoni përshtypje",
|
||||
"settings": "Rregullime",
|
||||
"startMeeting": "Nisni takim",
|
||||
"terms": "Kushte",
|
||||
"title": "Konferenca video të parrezik, me të gjitha veçoritë dhe plotësisht të lira"
|
||||
"title": "Konferenca video të parrezik, me të gjitha veçoritë dhe plotësisht të lira",
|
||||
"upcomingMeetings": "Takimet tuaja s’afërmi"
|
||||
},
|
||||
"whiteboard": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Tabelë shënimesh"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,9 +68,9 @@
|
||||
},
|
||||
"join": "Приєднатися",
|
||||
"joinTooltip": "Приєднатися до зустрічі",
|
||||
"nextMeeting": "наступна зустріч",
|
||||
"nextMeeting": "Наступна зустріч",
|
||||
"noEvents": "Немає запланованих подій.",
|
||||
"ongoingMeeting": "поточна зустріч",
|
||||
"ongoingMeeting": "Поточна зустріч",
|
||||
"permissionButton": "Налаштування",
|
||||
"permissionMessage": "Для перегляду зустрічей у застосунку потрібен дозвіл Календаря.",
|
||||
"refresh": "Оновити календар",
|
||||
@@ -89,7 +89,7 @@
|
||||
"chat": {
|
||||
"enter": "Увійти в кімнату",
|
||||
"error": "Помилка: ваше повідомлення не було відправлено. Причина: {{error}}",
|
||||
"fieldPlaceHolder": "Текст повідомлення",
|
||||
"fieldPlaceHolder": "Аа",
|
||||
"lobbyChatMessageTo": "Повідомлення у приймальній для {{recipient}}",
|
||||
"message": "Повідомлення",
|
||||
"messageAccessibleTitle": "{{user}} пише:",
|
||||
@@ -147,6 +147,7 @@
|
||||
"bridgeCount": "Кількість серверів: ",
|
||||
"codecs": "Кодеки (A/V): ",
|
||||
"connectedTo": "З'єднано з:",
|
||||
"e2eeVerified": "E2EE підтверджено:",
|
||||
"framerate": "Частота кадрів:",
|
||||
"less": "Показати менше",
|
||||
"localaddress": "Локальна адреса:",
|
||||
@@ -183,13 +184,21 @@
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Встановіть застосунок {{app}}, щоб приєднатися до цієї зустрічі з мобільного пристрою.",
|
||||
"description": "Ми спробували розпочати вашу зустріч у програмі {{app}}. Спробуйте ще раз або відкрийте {{app}} у веб-браузері.",
|
||||
"descriptionNew": "Ми спробували розпочати вашу зустріч у програмі {{app}}. <br /><br /> Спробуйте ще раз або розпочніть зустріч у веб-браузері.",
|
||||
"descriptionWithoutWeb": "Ми спробували розпочати вашу зустріч у програмі {{app}}.",
|
||||
"downloadApp": "Завантажити застосунок",
|
||||
"downloadMobileApp": "Завантажити з App Store",
|
||||
"ifDoNotHaveApp": "Якщо застосунок ще не встановлено:",
|
||||
"ifHaveApp": "Якщо ви вже встановили застосунок:",
|
||||
"joinInApp": "Приєднатися до цієї зустрічі за допомогою застосунку",
|
||||
"joinInAppNew": "Приєднатися із застосунку",
|
||||
"joinInBrowser": "Приєднатися у веб-браузері",
|
||||
"launchMeetingLabel": "Яким чином приєднатися до цієї зустрічі?",
|
||||
"launchWebButton": "Відкрити у веб-браузері",
|
||||
"noMobileApp": "Застосунок не встановлений?",
|
||||
"termsAndConditions": "Продовжуючи, ви погоджуєтесь з нашіми <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>умовами використання.</a>",
|
||||
"title": "Приєднання до вашої зустрічі у {{app}}...",
|
||||
"titleNew": "Приєднання до вашої зустрічі ...",
|
||||
"tryAgainButton": "Спробуйте у програмі на ПК",
|
||||
"unsupportedBrowser": "Ви використовуєте веб-браузер, який ми не підтримуємо."
|
||||
},
|
||||
@@ -202,10 +211,16 @@
|
||||
"microphonePermission": "Помилка отримання дозволу доступу до мікрофона"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"hid": {
|
||||
"callControl": "Налаштування зв'язку",
|
||||
"connectedDevices": "Приєднані пристрої:",
|
||||
"deleteDevice": "Вилучити пристрій",
|
||||
"pairDevice": "Додати пристрій Bluetooth"
|
||||
},
|
||||
"noPermission": "Дозвіл не надано",
|
||||
"previewUnavailable": "Перегляд недоступний",
|
||||
"selectADevice": "Виберіть пристрій",
|
||||
"testAudio": "Перевірити звук"
|
||||
"testAudio": "Перевірити"
|
||||
},
|
||||
"dialIn": {
|
||||
"screenTitle": "Підсумок вихідного дзвінка"
|
||||
@@ -225,7 +240,9 @@
|
||||
"WaitingForHostTitle": "В очікуванні організатора...",
|
||||
"Yes": "Так",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Трансляція"
|
||||
"close": "Закрити",
|
||||
"liveStreaming": "Трансляція",
|
||||
"sharingTabs": "Параметри спільного доступу"
|
||||
},
|
||||
"add": "Додати",
|
||||
"addMeetingNote": "Додати примітку про цю зустріч",
|
||||
@@ -408,6 +425,10 @@
|
||||
"user": "Користувач",
|
||||
"userIdentifier": "Ідентифікатор користувача",
|
||||
"userPassword": "Пароль",
|
||||
"verifyParticipantConfirm": "Збігаються",
|
||||
"verifyParticipantDismiss": "Не збігаються",
|
||||
"verifyParticipantQuestion": "Запитайте, чи учасник {{participantName}} бачить однаковий з вашим вміст і в тому самому порядку (ТЕСТУВАННЯ).",
|
||||
"verifyParticipantTitle": "Підтвердження особи учасника",
|
||||
"videoLink": "URL-адреса відео",
|
||||
"viewUpgradeOptions": "Переглянути додаткові послуги",
|
||||
"viewUpgradeOptionsContent": "Щоб отримати необмежений доступ до таких преміум-послуг, як записування, транскрипція, RTMP трансляцію тощо, вам потрібно оновити ваш пакет послуг.",
|
||||
@@ -433,13 +454,15 @@
|
||||
"veryBad": "Дуже погано",
|
||||
"veryGood": "Дуже добре"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Панель видів"
|
||||
}
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "Нічого не знайдено :(",
|
||||
"search": "Пошук GIPHY"
|
||||
},
|
||||
"helpView": {
|
||||
"title": "Довідка"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Відповісти",
|
||||
"audioCallTitle": "Вхідний дзвінок",
|
||||
@@ -563,7 +586,6 @@
|
||||
"lobby": {
|
||||
"admit": "Допустити",
|
||||
"admitAll": "Допустити всіх",
|
||||
"allow": "Дозволити",
|
||||
"backToKnockModeButton": "Запитати дозволу",
|
||||
"chat": "Чат",
|
||||
"dialogTitle": "Приймальна",
|
||||
@@ -649,8 +671,11 @@
|
||||
"connectedOneMember": "{{name}} на зв'язку",
|
||||
"connectedThreePlusMembers": "{{name}} та {{count}} інших учасників приєдналися до зустрічі",
|
||||
"connectedTwoMembers": "{{first}} та {{second}} приєдналися до зустрічі",
|
||||
"dataChannelClosed": "Погіршення якості відео",
|
||||
"dataChannelClosedDescription": "Канал мультимедійного мосту відключено; якість відео знижена до мінімуму.",
|
||||
"disconnected": "з'єднання розірване",
|
||||
"displayNotifications": "Показувати сповіщення:",
|
||||
"dontRemindMe": "Не нагадувати",
|
||||
"focus": "Фокус зустрічі",
|
||||
"focusFail": "{{component}} недоступний - повторіть спробу через {{ms}} мс",
|
||||
"gifsMenu": "GIPHY",
|
||||
@@ -659,6 +684,7 @@
|
||||
"invitedOneMember": "{{name}} запрошено",
|
||||
"invitedThreePlusMembers": "Запрошено {{name}} та {{count}} інших користувачів",
|
||||
"invitedTwoMembers": "{{first}} та {{second}} запрошено до зустрічі",
|
||||
"joinMeeting": "Приєднатися",
|
||||
"kickParticipant": "{{kicker}} від'єднав {{kicked}} від зустрічі",
|
||||
"leftOneMember": "{{name}} покинув зустріч",
|
||||
"leftThreePlusMembers": "{{name}} та багато інших учасників покинули зустріч",
|
||||
@@ -709,6 +735,8 @@
|
||||
"reactionSoundsForAll": "Вимкнути звукові сповіщення для всіх",
|
||||
"screenShareNoAudio": "На екрані вибору вікна не була ввімкнена опція «Поділитися аудіо».",
|
||||
"screenShareNoAudioTitle": "Не вдалося надати спільний доступ до аудіо!",
|
||||
"screenSharingAudioOnlyDescription": "Увага: увімкнення спільного перегляду екрана збільшить споживання пропускної здатності, що погіршить якість режиму \"Найкраща продуктивність\".",
|
||||
"screenSharingAudioOnlyTitle": "Режим \"Найкраща продуктивність\"",
|
||||
"selfViewTitle": "Ви завжди можете скасувати приховування виду на себе в налаштуваннях",
|
||||
"somebody": "Учасник",
|
||||
"startSilentDescription": "Повторно приєднайтеся до зустрічі, щоб увімкнути звук",
|
||||
@@ -746,6 +774,7 @@
|
||||
"headings": {
|
||||
"lobby": "Приймальна ({{count}})",
|
||||
"participantsList": "Учасники ({{count}})",
|
||||
"visitors": "Відвідувачі ({{count}})",
|
||||
"waitingLobby": "Очікують у приймальній ({{count}})"
|
||||
},
|
||||
"search": "Пошук учасників",
|
||||
@@ -753,6 +782,7 @@
|
||||
},
|
||||
"passwordDigitsOnly": "До {{number}} цифр",
|
||||
"passwordSetRemotely": "Встановлено іншим учасником",
|
||||
"pinParticipant": "{{participantName}} - Закріпити",
|
||||
"pinnedParticipant": "Учасник закріплений",
|
||||
"polls": {
|
||||
"answer": {
|
||||
@@ -858,12 +888,9 @@
|
||||
"rejected": "Відмовився",
|
||||
"ringing": "Дзвінок..."
|
||||
},
|
||||
"privacyView": {
|
||||
"title": "Конфіденційність"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "аватар",
|
||||
"setDisplayNameLabel": "Ім'я на екрані",
|
||||
"setDisplayNameLabel": "Ім'я",
|
||||
"setEmailInput": "Зазначте email",
|
||||
"setEmailLabel": "Email-адреса для Gravatar",
|
||||
"title": "Профіль"
|
||||
@@ -914,6 +941,7 @@
|
||||
"localRecordingVideoWarning": "Щоб записати ваше відео, камера має бути увімкнена до початку запису",
|
||||
"localRecordingWarning": "Виберіть поточну вкладку веб-браузера, щоб використовувати правильні налаштування камери та мікрофона. Запис наразі обмежений 1 ГБ, що становить приблизно 100 хв.",
|
||||
"loggedIn": "Ви ввійшли як {{userName}}",
|
||||
"noMicPermission": "Не вдалося створити мікрофонну доріжку. Надайте дозвіл на доступ до мікрофона.",
|
||||
"noStreams": "Аудіо чи відео потік не виявлено.",
|
||||
"off": "Запис зупинено",
|
||||
"offBy": "{{name}} зупинив запис",
|
||||
@@ -922,7 +950,7 @@
|
||||
"onlyRecordSelf": "Записувати лише мої аудіо та відео потоки",
|
||||
"pending": "Підготовка до запису зустрічі...",
|
||||
"rec": "REC",
|
||||
"saveLocalRecording": "Зберегти файл запису локально (бета-версія)",
|
||||
"saveLocalRecording": "Зберегти файл запису локально (ТЕСТУВАННЯ)",
|
||||
"serviceDescription": "Ваш запис буде збережено послугою запису",
|
||||
"serviceDescriptionCloud": "Хмарний запис",
|
||||
"serviceDescriptionCloudInfo": "Записані зустрічі будуть видалені автоматично через 24 години після їх запису.",
|
||||
@@ -947,6 +975,7 @@
|
||||
"title": "Параметри безпеки"
|
||||
},
|
||||
"settings": {
|
||||
"audio": "Аудіо",
|
||||
"buttonLabel": "Налаштування",
|
||||
"calendar": {
|
||||
"about": "Інтеграція календаря дає {{appName}} безпечний доступ до вашого календаря та запланованих подій.",
|
||||
@@ -964,12 +993,14 @@
|
||||
"incomingMessage": "Вхідне повідомлення",
|
||||
"language": "Мова",
|
||||
"loggedIn": "Увійшли як {{name}}",
|
||||
"maxStageParticipants": "Максимальна кількість учасників, яку можна закріпити на головній сцені",
|
||||
"maxStageParticipants": "Максимальна кількість учасників, яку можна закріпити на головній сцені (ТЕСТУВАННЯ)",
|
||||
"microphones": "Мікрофони",
|
||||
"moderator": "Модератор",
|
||||
"more": "Додаткові параметри",
|
||||
"moderatorOptions": "Параметри модерації",
|
||||
"more": "Загальні параметри",
|
||||
"name": "Ім'я",
|
||||
"noDevice": "Немає",
|
||||
"notifications": "Сповіщення",
|
||||
"participantJoined": "Учасник приєднався до зустрічі",
|
||||
"participantKnocking": "Учасник зайшов у приймальну",
|
||||
"participantLeft": "Учасник покинув зустріч",
|
||||
@@ -980,13 +1011,14 @@
|
||||
"selectCamera": "Камера",
|
||||
"selectMic": "Мікрофон",
|
||||
"selfView": "Вид на себе",
|
||||
"sounds": "Звукові сповіщення",
|
||||
"shortcuts": "Комбінації клавіш",
|
||||
"speakers": "Динаміки",
|
||||
"startAudioMuted": "Усі починають з вимкненим мікрофоном",
|
||||
"startReactionsMuted": "Вимкнути звуки реакції для всіх",
|
||||
"startVideoMuted": "Усі починають з вимкненим відео",
|
||||
"talkWhileMuted": "Спроба говорити, коли мікрофон вимкнено",
|
||||
"title": "Налаштування"
|
||||
"title": "Налаштування",
|
||||
"video": "Відео"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Додатково",
|
||||
@@ -1003,6 +1035,7 @@
|
||||
"displayName": "Ім'я на екрані",
|
||||
"displayNamePlaceholderText": "Наприклад: Іван Безіменний",
|
||||
"email": "Електронна пошта",
|
||||
"emailPlaceholderText": "email@example.com",
|
||||
"goTo": "Гаразд",
|
||||
"header": "Налаштування",
|
||||
"help": "Довідка",
|
||||
@@ -1066,18 +1099,29 @@
|
||||
"cc": "Субтитри",
|
||||
"chat": "Показати/приховати чат",
|
||||
"clap": "Овації",
|
||||
"closeChat": "Приховати чат",
|
||||
"closeMoreActions": "Приховати меню додаткових команд",
|
||||
"closeParticipantsPane": "Приховати панель учасників",
|
||||
"collapse": "Згорнути",
|
||||
"document": "Відкрити/закрити спільний документ",
|
||||
"documentClose": "Закрити спільний документ",
|
||||
"documentOpen": "Відкрити спільний документ",
|
||||
"download": "Звантажити мобільний застосунок",
|
||||
"embedMeeting": "Вставити зустріч",
|
||||
"endConference": "Завершити зустріч для всіх",
|
||||
"enterFullScreen": "Показати на весь екран",
|
||||
"enterTileView": "Показати плитки",
|
||||
"exitFullScreen": "Вийти з режиму на весь екран",
|
||||
"exitTileView": "Вийти з режиму плиток",
|
||||
"expand": "Розгорнути",
|
||||
"feedback": "Залишити відгук",
|
||||
"fullScreen": "На весь екран",
|
||||
"giphy": "Показати/приховати меню GIPHY",
|
||||
"grantModerator": "Надати права модератора",
|
||||
"hangup": "Покинути зустріч",
|
||||
"heading": "Панель інструментів",
|
||||
"help": "Довідка",
|
||||
"hideWhiteboard": "Приховати дошку",
|
||||
"invite": "Запросити на зустріч",
|
||||
"kick": "Від'єднати учасника",
|
||||
"laugh": "Сміюся",
|
||||
@@ -1087,21 +1131,23 @@
|
||||
"lobbyButton": "Увімкнути/вимкнути приймальну",
|
||||
"localRecording": "Показати/приховати панель керування відеозаписом",
|
||||
"lockRoom": "Встановити/прибрати пароль",
|
||||
"lowerHand": "Опустити руку",
|
||||
"moreActions": "Додаткові команди",
|
||||
"moreActionsMenu": "Меню додаткових команд",
|
||||
"moreOptions": "Додаткові параметри",
|
||||
"mute": "Увімкнути/вимкнути мікрофон",
|
||||
"mute": "Вимкнути мікрофон",
|
||||
"muteEveryone": "Вимкнути мікрофони всім",
|
||||
"muteEveryoneElse": "Вимкнути мікрофони всім іншим",
|
||||
"muteEveryoneElsesVideoStream": "Вимкнути камери всім іншим",
|
||||
"muteEveryonesVideoStream": "Вимкнути камери всім",
|
||||
"noiseSuppression": "Придушення шуму",
|
||||
"participants": "Показати/приховати панель учасників",
|
||||
"openChat": "Показати чат",
|
||||
"participants": "Показати панель учасників",
|
||||
"pip": "Увімкнути/вимкнути режим «Картинка в картинці».",
|
||||
"privateMessage": "Надіслати приватне повідомлення",
|
||||
"profile": "Редагувати профіль",
|
||||
"raiseHand": "Підняти/опустити руку",
|
||||
"reactionsMenu": "Відкрити/закрити меню реакцій",
|
||||
"raiseHand": "Підняти руку",
|
||||
"reactionsMenu": "Меню реакцій",
|
||||
"recording": "Увімкнути/вимкнути відеозапис",
|
||||
"remoteMute": "Вимкнути мікрофон учасника",
|
||||
"remoteVideoMute": "Вимкнути камеру учасника",
|
||||
@@ -1111,18 +1157,22 @@
|
||||
"shareRoom": "Запросити на зустріч",
|
||||
"shareYourScreen": "Спільний перегляд екрана",
|
||||
"shareaudio": "Поділитися аудіо",
|
||||
"sharedvideo": "Почати/зупинити спільне відео",
|
||||
"sharedvideo": "Почати спільне відео",
|
||||
"shortcuts": "Показати/приховати комбінації клавіш",
|
||||
"show": "Показати на сцені",
|
||||
"showWhiteboard": "Показати дошку",
|
||||
"silence": "Тиша",
|
||||
"speakerStats": "Показати/приховати статистику спілкування",
|
||||
"stopScreenSharing": "Вимкнути спільний перегляд екрана",
|
||||
"stopSharedVideo": "Зупинити спільне відео",
|
||||
"surprised": "Подив",
|
||||
"tileView": "Увімкнути/вимкнути плитки",
|
||||
"toggleCamera": "Увімкнути/вимкнути камеру",
|
||||
"toggleFilmstrip": "Показати/приховати панель видів",
|
||||
"unmute": "Увімкнути мікрофон",
|
||||
"videoblur": "Увімкнути/вимкнути розмиття фону",
|
||||
"videomute": "Увімкнути/вимкнути камеру",
|
||||
"whiteboard": "Показати/приховати дошку"
|
||||
"videomute": "Вимкнути камеру",
|
||||
"videounmute": "Увімкнути камеру"
|
||||
},
|
||||
"addPeople": "Додати учасників до зустрічі",
|
||||
"audioOnlyOff": "Вимкнути режим економії",
|
||||
@@ -1135,6 +1185,7 @@
|
||||
"chat": "Показати/приховати чат",
|
||||
"clap": "овації",
|
||||
"closeChat": "Панель чату",
|
||||
"closeParticipantsPane": "Приховати панель учасників",
|
||||
"closeReactionsMenu": "Закрити меню реакцій",
|
||||
"disableNoiseSuppression": "Вимкнути придушення шуму",
|
||||
"disableReactionSounds": "Ви можете вимкнути звуки реакції для цієї зустрічі",
|
||||
@@ -1143,6 +1194,7 @@
|
||||
"download": "Звантажити мобільний застосунок",
|
||||
"e2ee": "Наскрізне шифрування",
|
||||
"embedMeeting": "Вставити зустріч",
|
||||
"enableNoiseSuppression": "Увімкнути придушення шуму",
|
||||
"endConference": "Завершити зустріч для всіх",
|
||||
"enterFullScreen": "На весь екран",
|
||||
"enterTileView": "Режим плиток",
|
||||
@@ -1167,7 +1219,7 @@
|
||||
"lowerYourHand": "Опустити руку",
|
||||
"moreActions": "Додаткові команди",
|
||||
"moreOptions": "Додаткові параметри",
|
||||
"mute": "Мікрофон",
|
||||
"mute": "Вимкнути мікрофон",
|
||||
"muteEveryone": "Вимкнути мікрофони всім",
|
||||
"muteEveryonesVideo": "Вимкнути камери всім",
|
||||
"noAudioSignalDesc": "Якщо ви не вимикали мікрофон у системних або апаратних налаштуваннях, спробуйте перемикнути його.",
|
||||
@@ -1184,7 +1236,7 @@
|
||||
"pip": "Режим «Картинка-у-картинці»",
|
||||
"privateMessage": "Надіслати приватне повідомлення",
|
||||
"profile": "Редагувати профіль",
|
||||
"raiseHand": "Підняти/опустити руку",
|
||||
"raiseHand": "Підняти руку",
|
||||
"raiseYourHand": "Підняти руку",
|
||||
"reactionBoo": "Надіслати реакцію «невдоволення»",
|
||||
"reactionClap": "Надіслати реакцію «овації»",
|
||||
@@ -1211,8 +1263,10 @@
|
||||
"talkWhileMutedPopup": "Намагаєтесь говорити? Ваш мікрофон вимкнено.",
|
||||
"tileViewToggle": "Плитки",
|
||||
"toggleCamera": "Увімкнути/вимкнути камеру",
|
||||
"unmute": "Увімкнути мікрофон",
|
||||
"videoSettings": "Налаштування камери",
|
||||
"videomute": "Камера"
|
||||
"videomute": "Вимкнути камеру",
|
||||
"videounmute": "Увімкнути камеру"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Субтитри",
|
||||
@@ -1230,6 +1284,7 @@
|
||||
"subtitlesOff": "Вимкнені",
|
||||
"tr": "TR"
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Відкріпити",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Виберіть <b><i>«Дозволити»</i></b>, коли ваш веб-браузер запитає дозволи.",
|
||||
"chromeGrantPermissions": "Виберіть <b><i>«Дозволити»</i></b>, коли ваш веб-браузер запитає дозволи.",
|
||||
@@ -1268,9 +1323,11 @@
|
||||
"ldTooltip": "Відео низької якості",
|
||||
"lowDefinition": "Низька якість (LD)",
|
||||
"performanceSettings": "Параметри продуктивності",
|
||||
"recording": "Триває запис",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Відео стандартної якості",
|
||||
"standardDefinition": "Стандартна якість (SD)"
|
||||
"standardDefinition": "Стандартна якість (SD)",
|
||||
"streaming": "Триває трансляція"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Інформація про з'єднання",
|
||||
@@ -1282,6 +1339,7 @@
|
||||
"grantModerator": "Надати права модератора",
|
||||
"hideSelfView": "Приховати вид на себе",
|
||||
"kick": "Від'єднати",
|
||||
"mirrorVideo": "Віддзеркалити моє відео",
|
||||
"moderator": "Модератор",
|
||||
"mute": "Мікрофон учасника вимкнено",
|
||||
"muted": "Вимкнено мікрофон",
|
||||
@@ -1291,6 +1349,7 @@
|
||||
"show": "Показати на сцені",
|
||||
"showSelfView": "Показати вид на себе",
|
||||
"unpinFromStage": "Відкріпити",
|
||||
"verify": "Підтвердити особу учасника",
|
||||
"videoMuted": "Камера вимкнена",
|
||||
"videomute": "Учасник вимкнув камеру"
|
||||
},
|
||||
@@ -1312,12 +1371,13 @@
|
||||
"none": "Немає",
|
||||
"pleaseWait": "Будь ласка, зачекайте...",
|
||||
"removeBackground": "Прибрати фон",
|
||||
"slightBlur": "Легке розмиття",
|
||||
"slightBlur": "Напіврозмиття",
|
||||
"title": "Віртуальні фони",
|
||||
"uploadedImage": "Завантажена картинка {{index}}",
|
||||
"webAssemblyWarning": "WebAssembly не підтримується",
|
||||
"webAssemblyWarningDescription": "WebAssembly вимкнено або не підтримується цим веб-браузером"
|
||||
},
|
||||
"visitorsLabel": "Кількість відвідувачів: {{count}}",
|
||||
"volumeSlider": "Регулятор гучності",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -1350,6 +1410,7 @@
|
||||
"microsoftLogo": "Логотип Microsoft",
|
||||
"policyLogo": "Логотип політики"
|
||||
},
|
||||
"meetingsAccessibilityLabel": "Зустрічі",
|
||||
"mobileDownLoadLinkAndroid": "Завантажте мобільний застосунок для Android",
|
||||
"mobileDownLoadLinkFDroid": "Завантажте мобільний застосунок для F-Droid",
|
||||
"mobileDownLoadLinkIos": "Завантажте мобільний застосунок для iOS",
|
||||
@@ -1358,6 +1419,7 @@
|
||||
"recentList": "Нещодавні",
|
||||
"recentListDelete": "Вилучити",
|
||||
"recentListEmpty": "Зараз ваш список нещодавніх зустрічей порожній. Починайте спілкування, і ви знайдете тут усі свої нещодавні зустрічі.",
|
||||
"recentMeetings": "Нещодавні зустрічі",
|
||||
"reducedUIText": "Вітаємо у {{app}}!",
|
||||
"roomNameAllowedChars": "Назва зустрічі не повинна містити такі символи: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Зазначте назву кімнати",
|
||||
@@ -1366,6 +1428,12 @@
|
||||
"settings": "Налаштування",
|
||||
"startMeeting": "Почати зустріч",
|
||||
"terms": "Умови користування",
|
||||
"title": "Захищена, повнофункціональна та безкоштовна система відеоконференцій"
|
||||
"title": "Захищена, повнофункціональна та безкоштовна система відеоконференцій",
|
||||
"upcomingMeetings": "Заплановані зустрічі"
|
||||
},
|
||||
"whiteboard": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Дошка"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
105
lang/main.json
105
lang/main.json
@@ -68,9 +68,9 @@
|
||||
},
|
||||
"join": "Join",
|
||||
"joinTooltip": "Join the meeting",
|
||||
"nextMeeting": "next meeting",
|
||||
"nextMeeting": "Next meeting",
|
||||
"noEvents": "There are no upcoming events scheduled.",
|
||||
"ongoingMeeting": "ongoing meeting",
|
||||
"ongoingMeeting": "Ongoing meeting",
|
||||
"permissionButton": "Open settings",
|
||||
"permissionMessage": "The Calendar permission is required to see your meetings in the app.",
|
||||
"refresh": "Refresh calendar",
|
||||
@@ -184,13 +184,21 @@
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "You need the {{app}} mobile app to join this meeting on your phone.",
|
||||
"description": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. Try again or launch it in the {{app}} web app.",
|
||||
"descriptionNew": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. <br /><br /> You can try again or launch it on web.",
|
||||
"descriptionWithoutWeb": "Nothing happened? We tried launching your meeting in the {{app}} desktop app.",
|
||||
"downloadApp": "Download the app",
|
||||
"downloadMobileApp": "Download from App Store",
|
||||
"ifDoNotHaveApp": "If you don't have the app yet:",
|
||||
"ifHaveApp": "If you already have the app:",
|
||||
"joinInApp": "Join this meeting using the app",
|
||||
"joinInAppNew": "Join in app",
|
||||
"joinInBrowser": "Join in browser",
|
||||
"launchMeetingLabel": "How do you want to join this meeting?",
|
||||
"launchWebButton": "Launch in web",
|
||||
"noMobileApp": "You don’t have the app?",
|
||||
"termsAndConditions": "By continuing you agree to our <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a>",
|
||||
"title": "Launching your meeting in {{app}}...",
|
||||
"titleNew": "Launching your meeting ...",
|
||||
"tryAgainButton": "Try again in desktop",
|
||||
"unsupportedBrowser": "It looks like you're using a browser we don't support."
|
||||
},
|
||||
@@ -203,10 +211,16 @@
|
||||
"microphonePermission": "Error obtaining microphone permission"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"hid": {
|
||||
"callControl": "Call control",
|
||||
"connectedDevices": "Connected devices:",
|
||||
"deleteDevice": "Delete device",
|
||||
"pairDevice": "Pair device"
|
||||
},
|
||||
"noPermission": "Permission not granted",
|
||||
"previewUnavailable": "Preview unavailable",
|
||||
"selectADevice": "Select a device",
|
||||
"testAudio": "Play a test sound"
|
||||
"testAudio": "Test"
|
||||
},
|
||||
"dialIn": {
|
||||
"screenTitle": "Dial-in summary"
|
||||
@@ -226,7 +240,9 @@
|
||||
"WaitingForHostTitle": "Waiting for the host ...",
|
||||
"Yes": "Yes",
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Live Stream"
|
||||
"close": "Close dialog",
|
||||
"liveStreaming": "Live Stream",
|
||||
"sharingTabs": "Sharing options"
|
||||
},
|
||||
"add": "Add",
|
||||
"addMeetingNote": "Add a note about this meeting",
|
||||
@@ -438,6 +454,11 @@
|
||||
"veryBad": "Very Bad",
|
||||
"veryGood": "Very Good"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Video thumbnails"
|
||||
}
|
||||
},
|
||||
"giphy": {
|
||||
"noResults": "No results found :(",
|
||||
"search": "Search GIPHY"
|
||||
@@ -654,6 +675,7 @@
|
||||
"dataChannelClosedDescription": "The bridge channel has been disconnected and thus video quality is limited to its lowest setting.",
|
||||
"disconnected": "disconnected",
|
||||
"displayNotifications": "Display notifications for",
|
||||
"dontRemindMe": "Do not remind me",
|
||||
"focus": "Conference focus",
|
||||
"focusFail": "{{component}} not available - retry in {{ms}} sec",
|
||||
"gifsMenu": "GIPHY",
|
||||
@@ -662,6 +684,7 @@
|
||||
"invitedOneMember": "{{name}} has been invited",
|
||||
"invitedThreePlusMembers": "{{name}} and {{count}} others have been invited",
|
||||
"invitedTwoMembers": "{{first}} and {{second}} have been invited",
|
||||
"joinMeeting": "Join",
|
||||
"kickParticipant": "{{kicked}} was kicked by {{kicker}}",
|
||||
"leftOneMember": "{{name}} left the meeting",
|
||||
"leftThreePlusMembers": "{{name}} and many others left the meeting",
|
||||
@@ -751,6 +774,7 @@
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"participantsList": "Meeting participants ({{count}})",
|
||||
"visitors": "Visitors ({{count}})",
|
||||
"waitingLobby": "Waiting in lobby ({{count}})"
|
||||
},
|
||||
"search": "Search participants",
|
||||
@@ -758,6 +782,7 @@
|
||||
},
|
||||
"passwordDigitsOnly": "Up to {{number}} digits",
|
||||
"passwordSetRemotely": "Set by another participant",
|
||||
"pinParticipant": "{{participantName}} - Pin",
|
||||
"pinnedParticipant": "The participant is pinned",
|
||||
"polls": {
|
||||
"answer": {
|
||||
@@ -865,9 +890,9 @@
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Set your display name",
|
||||
"setDisplayNameLabel": "Name",
|
||||
"setEmailInput": "Enter email",
|
||||
"setEmailLabel": "Set your gravatar email",
|
||||
"setEmailLabel": "Gravatar email",
|
||||
"title": "Profile"
|
||||
},
|
||||
"raisedHand": "Would like to speak",
|
||||
@@ -950,6 +975,7 @@
|
||||
"title": "Security Options"
|
||||
},
|
||||
"settings": {
|
||||
"audio": "Audio",
|
||||
"buttonLabel": "Settings",
|
||||
"calendar": {
|
||||
"about": "The {{appName}} calendar integration is used to securely access your calendar so it can read upcoming events.",
|
||||
@@ -970,9 +996,11 @@
|
||||
"maxStageParticipants": "Maximum number of participants who can be pinned to the main stage (EXPERIMENTAL)",
|
||||
"microphones": "Microphones",
|
||||
"moderator": "Moderator",
|
||||
"more": "More",
|
||||
"moderatorOptions": "Moderator options",
|
||||
"more": "General",
|
||||
"name": "Name",
|
||||
"noDevice": "None",
|
||||
"notifications": "Notifications",
|
||||
"participantJoined": "Participant Joined",
|
||||
"participantKnocking": "Participant entered lobby",
|
||||
"participantLeft": "Participant Left",
|
||||
@@ -983,13 +1011,14 @@
|
||||
"selectCamera": "Camera",
|
||||
"selectMic": "Microphone",
|
||||
"selfView": "Self view",
|
||||
"sounds": "Sounds",
|
||||
"shortcuts": "Shortcuts",
|
||||
"speakers": "Speakers",
|
||||
"startAudioMuted": "Everyone starts muted",
|
||||
"startReactionsMuted": "Mute reaction sounds for everyone",
|
||||
"startVideoMuted": "Everyone starts hidden",
|
||||
"talkWhileMuted": "Talk while muted",
|
||||
"title": "Settings"
|
||||
"title": "Settings",
|
||||
"video": "Video"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Advanced",
|
||||
@@ -1070,18 +1099,29 @@
|
||||
"cc": "Toggle subtitles",
|
||||
"chat": "Open / Close chat",
|
||||
"clap": "Clap",
|
||||
"closeChat": "Close chat",
|
||||
"closeMoreActions": "Close more actions menu",
|
||||
"closeParticipantsPane": "Close participants pane",
|
||||
"collapse": "Collapse",
|
||||
"document": "Toggle shared document",
|
||||
"documentClose": "Close shared document",
|
||||
"documentOpen": "Open shared document",
|
||||
"download": "Download our apps",
|
||||
"embedMeeting": "Embed meeting",
|
||||
"endConference": "End meeting for all",
|
||||
"enterFullScreen": "View full screen",
|
||||
"enterTileView": "Enter tile view",
|
||||
"exitFullScreen": "Exit full screen",
|
||||
"exitTileView": "Exit tile view",
|
||||
"expand": "Expand",
|
||||
"feedback": "Leave feedback",
|
||||
"fullScreen": "Toggle full screen",
|
||||
"giphy": "Toggle GIPHY menu",
|
||||
"grantModerator": "Grant Moderator Rights",
|
||||
"hangup": "Leave the meeting",
|
||||
"heading": "Toolbar",
|
||||
"help": "Help",
|
||||
"hideWhiteboard": "Hide whiteboard",
|
||||
"invite": "Invite people",
|
||||
"kick": "Kick participant",
|
||||
"laugh": "Laugh",
|
||||
@@ -1091,21 +1131,23 @@
|
||||
"lobbyButton": "Enable/disable lobby mode",
|
||||
"localRecording": "Toggle local recording controls",
|
||||
"lockRoom": "Toggle meeting password",
|
||||
"lowerHand": "Lower your hand",
|
||||
"moreActions": "More actions",
|
||||
"moreActionsMenu": "More actions menu",
|
||||
"moreOptions": "Show more options",
|
||||
"mute": "Mute / Unmute",
|
||||
"mute": "Mute",
|
||||
"muteEveryone": "Mute everyone",
|
||||
"muteEveryoneElse": "Mute everyone else",
|
||||
"muteEveryoneElsesVideoStream": "Stop everyone else's video",
|
||||
"muteEveryonesVideoStream": "Stop everyone's video",
|
||||
"noiseSuppression": "Noise suppression",
|
||||
"participants": "Participants",
|
||||
"openChat": "Open chat",
|
||||
"participants": "Open participants pane",
|
||||
"pip": "Toggle Picture-in-Picture mode",
|
||||
"privateMessage": "Send private message",
|
||||
"profile": "Edit your profile",
|
||||
"raiseHand": "Raise / Lower your hand",
|
||||
"reactionsMenu": "Open / Close reactions menu",
|
||||
"raiseHand": "Raise your hand",
|
||||
"reactionsMenu": "Reactions menu",
|
||||
"recording": "Toggle recording",
|
||||
"remoteMute": "Mute participant",
|
||||
"remoteVideoMute": "Disable camera of participant",
|
||||
@@ -1113,20 +1155,24 @@
|
||||
"selectBackground": "Select Background",
|
||||
"selfView": "Toggle self view",
|
||||
"shareRoom": "Invite someone",
|
||||
"shareYourScreen": "Start / Stop sharing your screen",
|
||||
"shareYourScreen": "Start sharing your screen",
|
||||
"shareaudio": "Share audio",
|
||||
"sharedvideo": "Toggle video sharing",
|
||||
"sharedvideo": "Share video",
|
||||
"shortcuts": "Toggle shortcuts",
|
||||
"show": "Show on stage",
|
||||
"showWhiteboard": "Show whiteboard",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "Toggle participants statistics",
|
||||
"stopScreenSharing": "Stop sharing your screen",
|
||||
"stopSharedVideo": "Stop video",
|
||||
"surprised": "Surprised",
|
||||
"tileView": "Toggle tile view",
|
||||
"toggleCamera": "Toggle camera",
|
||||
"toggleFilmstrip": "Toggle filmstrip",
|
||||
"unmute": "Unmute",
|
||||
"videoblur": "Toggle video blur",
|
||||
"videomute": "Start / Stop camera",
|
||||
"whiteboard": "Show / Hide whiteboard"
|
||||
"videomute": "Stop camera",
|
||||
"videounmute": "Start camera"
|
||||
},
|
||||
"addPeople": "Add people to your call",
|
||||
"audioOnlyOff": "Disable low bandwidth mode",
|
||||
@@ -1139,6 +1185,7 @@
|
||||
"chat": "Open / Close chat",
|
||||
"clap": "Clap",
|
||||
"closeChat": "Close chat",
|
||||
"closeParticipantsPane": "Close participants pane",
|
||||
"closeReactionsMenu": "Close reactions menu",
|
||||
"disableNoiseSuppression": "Disable noise suppression",
|
||||
"disableReactionSounds": "You can disable reaction sounds for this meeting",
|
||||
@@ -1147,6 +1194,7 @@
|
||||
"download": "Download our apps",
|
||||
"e2ee": "End-to-End Encryption",
|
||||
"embedMeeting": "Embed meeting",
|
||||
"enableNoiseSuppression": "Enable noise suppression",
|
||||
"endConference": "End meeting for all",
|
||||
"enterFullScreen": "View full screen",
|
||||
"enterTileView": "Enter tile view",
|
||||
@@ -1171,7 +1219,7 @@
|
||||
"lowerYourHand": "Lower your hand",
|
||||
"moreActions": "More actions",
|
||||
"moreOptions": "More options",
|
||||
"mute": "Mute / Unmute",
|
||||
"mute": "Mute",
|
||||
"muteEveryone": "Mute everyone",
|
||||
"muteEveryonesVideo": "Disable everyone's camera",
|
||||
"noAudioSignalDesc": "If you did not purposely mute it from system settings or hardware, consider switching the device.",
|
||||
@@ -1188,7 +1236,7 @@
|
||||
"pip": "Enter Picture-in-Picture mode",
|
||||
"privateMessage": "Send private message",
|
||||
"profile": "Edit your profile",
|
||||
"raiseHand": "Raise / Lower your hand",
|
||||
"raiseHand": "Raise your hand",
|
||||
"raiseYourHand": "Raise your hand",
|
||||
"reactionBoo": "Send boo reaction",
|
||||
"reactionClap": "Send clap reaction",
|
||||
@@ -1215,8 +1263,10 @@
|
||||
"talkWhileMutedPopup": "Trying to speak? You are muted.",
|
||||
"tileViewToggle": "Toggle tile view",
|
||||
"toggleCamera": "Toggle camera",
|
||||
"unmute": "Unmute",
|
||||
"videoSettings": "Video settings",
|
||||
"videomute": "Start / Stop camera"
|
||||
"videomute": "Stop camera",
|
||||
"videounmute": "Start camera"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Start / Stop subtitles",
|
||||
@@ -1234,6 +1284,7 @@
|
||||
"subtitlesOff": "Off",
|
||||
"tr": "TR"
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Unpin",
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
|
||||
"chromeGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
|
||||
@@ -1272,9 +1323,11 @@
|
||||
"ldTooltip": "Viewing low definition video",
|
||||
"lowDefinition": "Low definition",
|
||||
"performanceSettings": "Performance settings",
|
||||
"recording": "Recording in progress",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Viewing standard definition video",
|
||||
"standardDefinition": "Standard definition"
|
||||
"standardDefinition": "Standard definition",
|
||||
"streaming": "Streaming in progress"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Connection Info",
|
||||
@@ -1286,6 +1339,7 @@
|
||||
"grantModerator": "Grant Moderator Rights",
|
||||
"hideSelfView": "Hide self view",
|
||||
"kick": "Kick out",
|
||||
"mirrorVideo": "Mirror my video",
|
||||
"moderator": "Moderator",
|
||||
"mute": "Participant is muted",
|
||||
"muted": "Muted",
|
||||
@@ -1317,12 +1371,13 @@
|
||||
"none": "None",
|
||||
"pleaseWait": "Please wait...",
|
||||
"removeBackground": "Remove background",
|
||||
"slightBlur": "Slight Blur",
|
||||
"slightBlur": "Half Blur",
|
||||
"title": "Virtual backgrounds",
|
||||
"uploadedImage": "Uploaded image {{index}}",
|
||||
"webAssemblyWarning": "WebAssembly not supported",
|
||||
"webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser"
|
||||
},
|
||||
"visitorsLabel": "Number of visitors: {{count}}",
|
||||
"volumeSlider": "Volume slider",
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -1355,6 +1410,7 @@
|
||||
"microsoftLogo": "Microsoft logo",
|
||||
"policyLogo": "Policy logo"
|
||||
},
|
||||
"meetingsAccessibilityLabel": "Meetings",
|
||||
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
|
||||
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
|
||||
"mobileDownLoadLinkIos": "Download mobile app for iOS",
|
||||
@@ -1374,5 +1430,10 @@
|
||||
"terms": "Terms",
|
||||
"title": "Secure, fully featured, and completely free video conferencing",
|
||||
"upcomingMeetings": "Your upcoming meetings"
|
||||
},
|
||||
"whiteboard": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Whiteboard"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -71,8 +71,13 @@ import {
|
||||
import { appendSuffix } from '../../react/features/display-name';
|
||||
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
|
||||
import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/actions';
|
||||
import { addStageParticipant, resizeFilmStrip, setVolume } from '../../react/features/filmstrip/actions.web';
|
||||
import { isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web';
|
||||
import {
|
||||
addStageParticipant,
|
||||
resizeFilmStrip,
|
||||
setVolume,
|
||||
togglePinStageParticipant
|
||||
} from '../../react/features/filmstrip/actions.web';
|
||||
import { getPinnedActiveParticipants, isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web';
|
||||
import { invite } from '../../react/features/invite';
|
||||
import {
|
||||
selectParticipantInLargeVideo
|
||||
@@ -101,6 +106,8 @@ import { startAudioScreenShareFlow, startScreenShareFlow } from '../../react/fea
|
||||
import { isScreenAudioSupported } from '../../react/features/screen-share/functions';
|
||||
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture';
|
||||
import { isScreenshotCaptureEnabled } from '../../react/features/screenshot-capture/functions';
|
||||
import SettingsDialog from '../../react/features/settings/components/web/SettingsDialog';
|
||||
import { SETTINGS_TABS } from '../../react/features/settings/constants';
|
||||
import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';
|
||||
import { extractYoutubeIdOrURL } from '../../react/features/shared-video/functions';
|
||||
import { setRequestingSubtitles, toggleRequestingSubtitles } from '../../react/features/subtitles/actions';
|
||||
@@ -108,7 +115,6 @@ import { isAudioMuteButtonDisabled } from '../../react/features/toolbox/function
|
||||
import { setTileView, toggleTileView } from '../../react/features/video-layout';
|
||||
import { muteAllParticipants } from '../../react/features/video-menu/actions';
|
||||
import { setVideoQuality } from '../../react/features/video-quality';
|
||||
import VirtualBackgroundDialog from '../../react/features/virtual-background/components/VirtualBackgroundDialog';
|
||||
import { getJitsiMeetTransport } from '../transport';
|
||||
|
||||
import { API_ID, ENDPOINT_TEXT_MESSAGE_NAME } from './constants';
|
||||
@@ -241,6 +247,22 @@ function initCommands() {
|
||||
logger.debug('Pin participant command received');
|
||||
|
||||
const state = APP.store.getState();
|
||||
|
||||
// if id not provided, unpin everybody.
|
||||
if (!id) {
|
||||
if (isStageFilmstripAvailable(state)) {
|
||||
const pinnedParticipants = getPinnedActiveParticipants(state);
|
||||
|
||||
pinnedParticipants?.forEach(p => {
|
||||
APP.store.dispatch(togglePinStageParticipant(p.participantId));
|
||||
});
|
||||
} else {
|
||||
APP.store.dispatch(pinParticipant());
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const participant = videoType === VIDEO_TYPE.DESKTOP
|
||||
? getVirtualScreenshareParticipantByOwnerId(state, id) : getParticipantById(state, id);
|
||||
|
||||
@@ -254,7 +276,7 @@ function initCommands() {
|
||||
|
||||
const participantId = participant.id;
|
||||
|
||||
if (isStageFilmstripAvailable(APP.store.getState())) {
|
||||
if (isStageFilmstripAvailable(state)) {
|
||||
APP.store.dispatch(addStageParticipant(participantId, true));
|
||||
} else {
|
||||
APP.store.dispatch(pinParticipant(participantId));
|
||||
@@ -777,7 +799,8 @@ function initCommands() {
|
||||
APP.store.dispatch(overwriteConfig(whitelistedConfig));
|
||||
},
|
||||
'toggle-virtual-background': () => {
|
||||
APP.store.dispatch(toggleDialog(VirtualBackgroundDialog));
|
||||
APP.store.dispatch(toggleDialog(SettingsDialog, {
|
||||
defaultTab: SETTINGS_TABS.VIRTUAL_BACKGROUND }));
|
||||
},
|
||||
'end-conference': () => {
|
||||
APP.store.dispatch(endConference());
|
||||
@@ -1208,6 +1231,22 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external app that a notification has been triggered.
|
||||
*
|
||||
* @param {string} title - The notification title.
|
||||
* @param {string} description - The notification description.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyNotificationTriggered(title: string, description: string) {
|
||||
this._sendEvent({
|
||||
description,
|
||||
name: 'notification-triggered',
|
||||
title
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application that the video quality setting has changed.
|
||||
*
|
||||
|
||||
10
modules/API/external/external_api.js
vendored
10
modules/API/external/external_api.js
vendored
@@ -127,6 +127,7 @@ const events = {
|
||||
'mouse-enter': 'mouseEnter',
|
||||
'mouse-leave': 'mouseLeave',
|
||||
'mouse-move': 'mouseMove',
|
||||
'notification-triggered': 'notificationTriggered',
|
||||
'outgoing-message': 'outgoingMessage',
|
||||
'participant-joined': 'participantJoined',
|
||||
'participant-kicked-out': 'participantKickedOut',
|
||||
@@ -392,7 +393,14 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
this._frame.name = frameName;
|
||||
this._frame.id = frameName;
|
||||
this._setSize(height, width);
|
||||
this._frame.sandbox = 'allow-scripts allow-same-origin allow-popups allow-forms allow-downloads';
|
||||
this._frame.sandbox = [
|
||||
'allow-scripts',
|
||||
'allow-same-origin',
|
||||
'allow-popups',
|
||||
'allow-forms',
|
||||
'allow-downloads',
|
||||
'allow-top-navigation-by-user-activation'
|
||||
].join(' ');
|
||||
this._frame.setAttribute('allowFullScreen', 'true');
|
||||
this._frame.style.border = 0;
|
||||
|
||||
|
||||
@@ -292,17 +292,6 @@ UI.showToolbar = timeout => APP.store.dispatch(showToolbox(timeout));
|
||||
// Used by torture.
|
||||
UI.dockToolbar = dock => APP.store.dispatch(dockToolbox(dock));
|
||||
|
||||
/**
|
||||
* Updates the displayed avatar for participant.
|
||||
*
|
||||
* @param {string} id - User id whose avatar should be updated.
|
||||
* @param {string} avatarURL - The URL to avatar image to display.
|
||||
* @returns {void}
|
||||
*/
|
||||
UI.refreshAvatarDisplay = function(id) {
|
||||
VideoLayout.changeUserAvatar(id);
|
||||
};
|
||||
|
||||
/**
|
||||
* Notify user that connection failed.
|
||||
* @param {string} stropheErrorMsg raw Strophe error message
|
||||
|
||||
@@ -6,9 +6,8 @@ import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
|
||||
import { browser } from '../../../react/features/base/lib-jitsi-meet';
|
||||
import { isTestModeEnabled } from '../../../react/features/base/testing';
|
||||
import { FILMSTRIP_BREAKPOINT } from '../../../react/features/filmstrip';
|
||||
import { LargeVideoBackground, ORIENTATION, updateLastLargeVideoMediaEvent } from '../../../react/features/large-video';
|
||||
import { LargeVideoBackground, ORIENTATION } from '../../../react/features/large-video';
|
||||
import { setLargeVideoDimensions } from '../../../react/features/large-video/actions.any';
|
||||
import { LAYOUTS, getCurrentLayout } from '../../../react/features/video-layout';
|
||||
/* eslint-enable no-unused-vars */
|
||||
@@ -22,15 +21,6 @@ export const VIDEO_CONTAINER_TYPE = 'camera';
|
||||
|
||||
const FADE_DURATION_MS = 300;
|
||||
|
||||
/**
|
||||
* List of container events that we are going to process, will be added as listener to the
|
||||
* container for every event in the list. The latest event will be stored in redux.
|
||||
*/
|
||||
const containerEvents = [
|
||||
'abort', 'canplay', 'canplaythrough', 'emptied', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart',
|
||||
'pause', 'play', 'playing', 'ratechange', 'stalled', 'suspend', 'waiting'
|
||||
];
|
||||
|
||||
/**
|
||||
* Returns an array of the video dimensions, so that it keeps it's aspect
|
||||
* ratio and fits available area with it's larger dimension. This method
|
||||
@@ -266,14 +256,6 @@ export class VideoContainer extends LargeContainer {
|
||||
this._resizeListeners = new Set();
|
||||
|
||||
this.$video[0].onresize = this._onResize.bind(this);
|
||||
|
||||
if (isTestModeEnabled(APP.store.getState())) {
|
||||
const cb = name => APP.store.dispatch(updateLastLargeVideoMediaEvent(name));
|
||||
|
||||
containerEvents.forEach(event => {
|
||||
this.$video[0].addEventListener(event, cb.bind(this, event));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -139,12 +139,6 @@ const VideoLayout = {
|
||||
}
|
||||
},
|
||||
|
||||
changeUserAvatar(id, avatarUrl) {
|
||||
if (this.isCurrentlyOnLarge(id)) {
|
||||
largeVideo.updateAvatar(avatarUrl);
|
||||
}
|
||||
},
|
||||
|
||||
isLargeVideoVisible() {
|
||||
return this.isLargeContainerTypeVisible(VIDEO_CONTAINER_TYPE);
|
||||
},
|
||||
|
||||
@@ -8,10 +8,9 @@ import {
|
||||
createShortcutEvent,
|
||||
sendAnalytics
|
||||
} from '../../react/features/analytics';
|
||||
import { toggleDialog } from '../../react/features/base/dialog';
|
||||
import { clickOnVideo } from '../../react/features/filmstrip/actions';
|
||||
import { KeyboardShortcutsDialog }
|
||||
from '../../react/features/keyboard-shortcuts';
|
||||
import { openSettingsDialog } from '../../react/features/settings/actions';
|
||||
import { SETTINGS_TABS } from '../../react/features/settings/constants';
|
||||
|
||||
const logger = Logger.getLogger(__filename);
|
||||
|
||||
@@ -120,15 +119,17 @@ const KeyboardShortcut = {
|
||||
return jitsiLocalStorage.getItem(_enableShortcutsKey) === 'false' ? false : true;
|
||||
},
|
||||
|
||||
getShortcutsDescriptions() {
|
||||
return _shortcutsHelp;
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens the {@KeyboardShortcutsDialog} dialog.
|
||||
* Opens the {@SettingsDialog} dialog on the Shortcuts page.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
openDialog() {
|
||||
APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, {
|
||||
shortcutDescriptions: _shortcutsHelp
|
||||
}));
|
||||
APP.store.dispatch(openSettingsDialog(SETTINGS_TABS.SHORTCUTS, false));
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
703
package-lock.json
generated
703
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
19
package.json
19
package.json
@@ -16,16 +16,10 @@
|
||||
"readmeFilename": "README.md",
|
||||
"dependencies": {
|
||||
"@amplitude/react-native": "2.7.0",
|
||||
"@atlaskit/flag": "14.1.0",
|
||||
"@atlaskit/icon": "21.2.0",
|
||||
"@atlaskit/inline-dialog": "13.0.9",
|
||||
"@atlaskit/inline-message": "11.0.8",
|
||||
"@atlaskit/modal-dialog": "11.2.4",
|
||||
"@atlaskit/multi-select": "15.0.5",
|
||||
"@atlaskit/spinner": "15.0.6",
|
||||
"@atlaskit/tabs": "12.1.2",
|
||||
"@atlaskit/theme": "11.0.2",
|
||||
"@atlaskit/tooltip": "17.1.2",
|
||||
"@emotion/react": "11.10.0",
|
||||
"@emotion/styled": "11.10.0",
|
||||
"@giphy/js-fetch-api": "4.7.1",
|
||||
@@ -57,6 +51,7 @@
|
||||
"@types/amplitude-js": "8.16.2",
|
||||
"@types/audioworklet": "0.0.29",
|
||||
"@types/w3c-image-capture": "1.0.6",
|
||||
"@types/w3c-web-hid": "1.0.3",
|
||||
"@vladmandic/human": "2.6.5",
|
||||
"@vladmandic/human-models": "2.5.9",
|
||||
"@xmldom/xmldom": "0.7.9",
|
||||
@@ -78,7 +73,7 @@
|
||||
"js-md5": "0.6.1",
|
||||
"js-sha512": "0.8.0",
|
||||
"jwt-decode": "2.2.0",
|
||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1578.0.0+5855ca72/lib-jitsi-meet.tgz",
|
||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1598.0.0+4733465e/lib-jitsi-meet.tgz",
|
||||
"lodash": "4.17.21",
|
||||
"moment": "2.29.4",
|
||||
"moment-duration-format": "2.2.2",
|
||||
@@ -92,7 +87,7 @@
|
||||
"react-focus-lock": "2.5.1",
|
||||
"react-i18next": "10.11.4",
|
||||
"react-linkify": "1.0.0-alpha",
|
||||
"react-native": "0.68.5",
|
||||
"react-native": "0.68.6",
|
||||
"react-native-background-timer": "2.4.1",
|
||||
"react-native-calendar-events": "2.2.0",
|
||||
"react-native-callstats": "3.73.7",
|
||||
@@ -117,12 +112,11 @@
|
||||
"react-native-url-polyfill": "1.3.0",
|
||||
"react-native-video": "https://git@github.com/react-native-video/react-native-video#7c48ae7c8544b2b537fb60194e9620b9fcceae52",
|
||||
"react-native-watch-connectivity": "1.0.11",
|
||||
"react-native-webrtc": "106.0.5",
|
||||
"react-native-webrtc": "106.0.7",
|
||||
"react-native-webview": "11.15.1",
|
||||
"react-native-youtube-iframe": "2.2.1",
|
||||
"react-redux": "7.1.0",
|
||||
"react-textarea-autosize": "8.3.0",
|
||||
"react-transition-group": "2.4.0",
|
||||
"react-window": "1.8.6",
|
||||
"react-youtube": "10.1.0",
|
||||
"redux": "4.0.4",
|
||||
@@ -145,7 +139,6 @@
|
||||
"@babel/preset-env": "7.16.0",
|
||||
"@babel/preset-flow": "7.16.0",
|
||||
"@babel/preset-react": "7.16.0",
|
||||
"@babel/runtime": "7.16.0",
|
||||
"@jitsi/eslint-config": "4.1.5",
|
||||
"@types/js-md5": "0.4.3",
|
||||
"@types/lodash": "4.14.182",
|
||||
@@ -165,20 +158,18 @@
|
||||
"circular-dependency-plugin": "5.2.0",
|
||||
"clean-css-cli": "4.3.0",
|
||||
"css-loader": "3.6.0",
|
||||
"eslint": "8.25.0",
|
||||
"eslint": "8.35.0",
|
||||
"eslint-plugin-flowtype": "8.0.3",
|
||||
"eslint-plugin-import": "2.25.2",
|
||||
"eslint-plugin-jsdoc": "37.0.3",
|
||||
"eslint-plugin-react": "7.26.1",
|
||||
"eslint-plugin-react-native": "3.11.0",
|
||||
"eslint-plugin-typescript-sort-keys": "2.1.0",
|
||||
"imports-loader": "0.7.1",
|
||||
"jetifier": "1.6.4",
|
||||
"metro-react-native-babel-preset": "0.67.0",
|
||||
"patch-package": "6.4.7",
|
||||
"process": "0.11.10",
|
||||
"sass": "1.26.8",
|
||||
"string-replace-loader": "3.0.3",
|
||||
"style-loader": "3.3.1",
|
||||
"traverse": "0.6.6",
|
||||
"ts-loader": "9.4.1",
|
||||
|
||||
@@ -199,7 +199,7 @@ export default class AlwaysOnTop extends Component<*, State> {
|
||||
color = { getAvatarColor(displayName, customAvatarBackgrounds) }
|
||||
id = 'avatar'
|
||||
initials = { getInitials(displayName) }
|
||||
url = { displayName ? null : avatarURL } />)
|
||||
url = { avatarURL } />)
|
||||
</div>
|
||||
<div
|
||||
className = 'displayname'
|
||||
|
||||
@@ -887,7 +887,7 @@ export function createVpaasConferenceJoinedEvent(tenant: string) {
|
||||
* @returns {Object} The event in a format suitable for sending via
|
||||
* sendAnalytics.
|
||||
*/
|
||||
export function createWelcomePageEvent(action: string, actionSubject: string, attributes = {}) {
|
||||
export function createWelcomePageEvent(action: string, actionSubject?: string, attributes = {}) {
|
||||
return {
|
||||
action,
|
||||
actionSubject,
|
||||
|
||||
@@ -30,12 +30,10 @@ import {
|
||||
// @ts-ignore
|
||||
import { screen } from '../mobile/navigation/routes';
|
||||
import { clearNotifications } from '../notifications/actions';
|
||||
// @ts-ignore
|
||||
import { setFatalError } from '../overlay';
|
||||
|
||||
import { addTrackStateToURL, getDefaultURL } from './functions.native';
|
||||
import logger from './logger';
|
||||
import { IStore } from './types';
|
||||
import { IReloadNowOptions, IStore } from './types';
|
||||
|
||||
export * from './actions.any';
|
||||
|
||||
@@ -46,9 +44,10 @@ export * from './actions.any';
|
||||
* @param {string|undefined} uri - The URI to which to navigate. It may be a
|
||||
* full URL with an HTTP(S) scheme, a full or partial URI with the app-specific
|
||||
* scheme, or a mere room name.
|
||||
* @param {Object} [options] - Options.
|
||||
* @returns {Function}
|
||||
*/
|
||||
export function appNavigate(uri?: string) {
|
||||
export function appNavigate(uri?: string, options: IReloadNowOptions = {}) {
|
||||
logger.info(`appNavigate to ${uri}`);
|
||||
|
||||
return async (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||
@@ -144,7 +143,10 @@ export function appNavigate(uri?: string) {
|
||||
dispatch(createDesiredLocalTracks());
|
||||
dispatch(clearNotifications());
|
||||
|
||||
if (isPrejoinPageEnabled(getState())) {
|
||||
// @ts-ignore
|
||||
const { hidePrejoin } = options;
|
||||
|
||||
if (!hidePrejoin && isPrejoinPageEnabled(getState())) {
|
||||
navigateRoot(screen.preJoin);
|
||||
} else {
|
||||
dispatch(connect());
|
||||
@@ -177,7 +179,6 @@ export function maybeRedirectToWelcomePage(options: any) { // eslint-disable-lin
|
||||
*/
|
||||
export function reloadNow() {
|
||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||
dispatch(setFatalError(undefined));
|
||||
|
||||
const state = getState();
|
||||
const { locationURL } = state['features/base/connection'];
|
||||
@@ -188,6 +189,8 @@ export function reloadNow() {
|
||||
|
||||
logger.info(`Reloading the conference using URL: ${locationURL}`);
|
||||
|
||||
dispatch(appNavigate(toURLString(newURL)));
|
||||
dispatch(appNavigate(toURLString(newURL), {
|
||||
hidePrejoin: true
|
||||
}));
|
||||
};
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import {
|
||||
import { isVpaasMeeting } from '../jaas/functions';
|
||||
import { clearNotifications, showNotification } from '../notifications/actions';
|
||||
import { NOTIFICATION_TIMEOUT_TYPE } from '../notifications/constants';
|
||||
import { setFatalError } from '../overlay/actions';
|
||||
import { isWelcomePageEnabled } from '../welcome/functions';
|
||||
|
||||
import {
|
||||
@@ -222,7 +221,6 @@ export function maybeRedirectToWelcomePage(options: { feedbackSubmitted?: boolea
|
||||
*/
|
||||
export function reloadNow() {
|
||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||
dispatch(setFatalError(undefined));
|
||||
|
||||
const state = getState();
|
||||
const { locationURL } = state['features/base/connection'];
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
// @flow
|
||||
|
||||
import React, { Fragment } from 'react';
|
||||
import React from 'react';
|
||||
|
||||
import { BaseApp } from '../../base/app';
|
||||
import { toURLString } from '../../base/util';
|
||||
import { OverlayContainer } from '../../overlay';
|
||||
import { appNavigate } from '../actions';
|
||||
import { getDefaultURL } from '../functions';
|
||||
|
||||
@@ -73,23 +70,7 @@ export class AbstractApp extends BaseApp<Props, *> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an extra {@link ReactElement}s to be added (unconditionally)
|
||||
* alongside the main element.
|
||||
*
|
||||
* @abstract
|
||||
* @protected
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
_createExtraElement() {
|
||||
return (
|
||||
<Fragment>
|
||||
<OverlayContainer />
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
_createMainElement: (React$Element<*>, Object) => ?React$Element<*>;
|
||||
_createMainElement: (React.ReactElement, Object) => ?React.ReactElement;
|
||||
|
||||
/**
|
||||
* Gets the default URL to be opened when this {@code App} mounts.
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// @flow
|
||||
|
||||
import { AtlasKitThemeProvider } from '@atlaskit/theme';
|
||||
import React from 'react';
|
||||
import React, { Fragment } from 'react';
|
||||
|
||||
import GlobalStyles from '../../base/ui/components/GlobalStyles.web';
|
||||
import JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider.web';
|
||||
import DialogContainer from '../../base/ui/components/web/DialogContainer';
|
||||
import { ChromeExtensionBanner } from '../../chrome-extension-banner';
|
||||
import OverlayContainer from '../../overlay/components/web/OverlayContainer';
|
||||
|
||||
import { AbstractApp } from './AbstractApp';
|
||||
|
||||
@@ -14,12 +13,30 @@ import { AbstractApp } from './AbstractApp';
|
||||
import '../middlewares';
|
||||
import '../reducers';
|
||||
|
||||
|
||||
/**
|
||||
* Root app {@code Component} on Web/React.
|
||||
*
|
||||
* @augments AbstractApp
|
||||
*/
|
||||
export class App extends AbstractApp {
|
||||
|
||||
/**
|
||||
* Creates an extra {@link ReactElement}s to be added (unconditionally)
|
||||
* alongside the main element.
|
||||
*
|
||||
* @abstract
|
||||
* @protected
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
_createExtraElement() {
|
||||
return (
|
||||
<Fragment>
|
||||
<OverlayContainer />
|
||||
</Fragment>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the parent method to inject {@link AtlasKitThemeProvider} as
|
||||
* the top most component.
|
||||
|
||||
@@ -48,5 +48,6 @@ import '../transcribing/middleware';
|
||||
import '../video-layout/middleware';
|
||||
import '../video-quality/middleware';
|
||||
import '../videosipgw/middleware';
|
||||
import '../visitors/middleware';
|
||||
|
||||
import './middleware';
|
||||
|
||||
@@ -5,7 +5,6 @@ import '../base/media/middleware';
|
||||
import '../dynamic-branding/middleware';
|
||||
import '../e2ee/middleware';
|
||||
import '../external-api/middleware';
|
||||
import '../keyboard-shortcuts/middleware';
|
||||
import '../no-audio-signal/middleware';
|
||||
import '../notifications/middleware';
|
||||
import '../noise-detection/middleware';
|
||||
@@ -15,12 +14,12 @@ import '../prejoin/middleware';
|
||||
import '../remote-control/middleware';
|
||||
import '../screen-share/middleware';
|
||||
import '../shared-video/middleware';
|
||||
import '../web-hid/middleware';
|
||||
import '../settings/middleware';
|
||||
import '../talk-while-muted/middleware';
|
||||
import '../toolbox/middleware';
|
||||
import '../face-landmarks/middleware';
|
||||
import '../gifs/middleware';
|
||||
import '../whiteboard/middleware';
|
||||
import '../base/dialog/middleware';
|
||||
|
||||
import './middlewares.any';
|
||||
|
||||
@@ -56,3 +56,4 @@ import '../transcribing/reducer';
|
||||
import '../video-layout/reducer';
|
||||
import '../video-quality/reducer';
|
||||
import '../videosipgw/reducer';
|
||||
import '../visitors/reducer';
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
// @flow
|
||||
|
||||
import '../base/devices/reducer';
|
||||
import '../base/tooltip/reducer';
|
||||
import '../e2ee/reducer';
|
||||
import '../face-landmarks/reducer';
|
||||
import '../feedback/reducer';
|
||||
@@ -16,5 +15,6 @@ import '../screenshot-capture/reducer';
|
||||
import '../talk-while-muted/reducer';
|
||||
import '../virtual-background/reducer';
|
||||
import '../whiteboard/reducer';
|
||||
import '../web-hid/reducer';
|
||||
|
||||
import './reducers.any';
|
||||
|
||||
@@ -24,6 +24,7 @@ import { IResponsiveUIState } from '../base/responsive-ui/reducer';
|
||||
import { ISettingsState } from '../base/settings/reducer';
|
||||
import { ISoundsState } from '../base/sounds/reducer';
|
||||
import { ITestingState } from '../base/testing/reducer';
|
||||
import { ITooltipState } from '../base/tooltip/reducer';
|
||||
import { INoSrcDataState, ITracksState } from '../base/tracks/reducer';
|
||||
import { IUserInteractionState } from '../base/user-interaction/reducer';
|
||||
import { IBreakoutRoomsState } from '../breakout-rooms/reducer';
|
||||
@@ -76,6 +77,8 @@ import { IVideoLayoutState } from '../video-layout/reducer';
|
||||
import { IVideoQualityPersistedState, IVideoQualityState } from '../video-quality/reducer';
|
||||
import { IVideoSipGW } from '../videosipgw/reducer';
|
||||
import { IVirtualBackground } from '../virtual-background/reducer';
|
||||
import { IVisitorsState } from '../visitors/reducer';
|
||||
import { IWebHid } from '../web-hid/reducer';
|
||||
import { IWhiteboardState } from '../whiteboard/reducer';
|
||||
|
||||
export interface IStore {
|
||||
@@ -109,6 +112,7 @@ export interface IReduxState {
|
||||
'features/base/responsive-ui': IResponsiveUIState;
|
||||
'features/base/settings': ISettingsState;
|
||||
'features/base/sounds': ISoundsState;
|
||||
'features/base/tooltip': ITooltipState;
|
||||
'features/base/tracks': ITracksState;
|
||||
'features/base/user-interaction': IUserInteractionState;
|
||||
'features/breakout-rooms': IBreakoutRoomsState;
|
||||
@@ -163,5 +167,11 @@ export interface IReduxState {
|
||||
'features/video-quality-persistent-storage': IVideoQualityPersistedState;
|
||||
'features/videosipgw': IVideoSipGW;
|
||||
'features/virtual-background': IVirtualBackground;
|
||||
'features/visitors': IVisitorsState;
|
||||
'features/web-hid': IWebHid;
|
||||
'features/whiteboard': IWhiteboardState;
|
||||
}
|
||||
|
||||
export interface IReloadNowOptions {
|
||||
hidePrejoin?: boolean;
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ function _upgradeRoleFinished(
|
||||
name: authenticationError || connectionError,
|
||||
...other
|
||||
};
|
||||
progress = authenticationError ? 0.5 : 0;
|
||||
progress = 0;
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import React, { Component } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
import type { Dispatch } from 'redux';
|
||||
|
||||
import { ConfirmDialog } from '../../../base/dialog';
|
||||
import { translate } from '../../../base/i18n';
|
||||
import { connect } from '../../../base/redux';
|
||||
import { cancelWaitForOwner, openLoginDialog } from '../../actions.native';
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import React, { Component } from 'react';
|
||||
import { WithTranslation } from 'react-i18next';
|
||||
import { connect as reduxConnect } from 'react-redux';
|
||||
|
||||
// @ts-expect-error
|
||||
import { connect } from '../../../../../connection';
|
||||
@@ -9,7 +10,6 @@ import { IConfig } from '../../../base/config/configType';
|
||||
import { toJid } from '../../../base/connection/functions';
|
||||
import { translate, translateToHTML } from '../../../base/i18n/functions';
|
||||
import { JitsiConnectionErrors } from '../../../base/lib-jitsi-meet';
|
||||
import { connect as reduxConnect } from '../../../base/redux/functions';
|
||||
import Dialog from '../../../base/ui/components/web/Dialog';
|
||||
import Input from '../../../base/ui/components/web/Input';
|
||||
import {
|
||||
@@ -26,7 +26,7 @@ interface IProps extends WithTranslation {
|
||||
* {@link JitsiConference} That needs authentication - will hold a valid
|
||||
* value in XMPP login + guest access mode.
|
||||
*/
|
||||
_conference: IJitsiConference;
|
||||
_conference?: IJitsiConference;
|
||||
|
||||
/**
|
||||
* The server hosts specified in the global config.
|
||||
@@ -47,7 +47,7 @@ interface IProps extends WithTranslation {
|
||||
* The progress in the floating range between 0 and 1 of the authenticating
|
||||
* and upgrading the role of the local participant/user.
|
||||
*/
|
||||
_progress: number;
|
||||
_progress?: number;
|
||||
|
||||
/**
|
||||
* Redux store dispatch method.
|
||||
@@ -207,7 +207,7 @@ class LoginDialog extends Component<IProps, IState> {
|
||||
let messageKey;
|
||||
|
||||
if (progress && progress < 1) {
|
||||
messageKey = t('connection.FETCH_SESSION_ID');
|
||||
messageKey = 'connection.FETCH_SESSION_ID';
|
||||
} else if (error) {
|
||||
const { name } = error;
|
||||
|
||||
@@ -218,14 +218,14 @@ class LoginDialog extends Component<IProps, IState> {
|
||||
&& credentials.jid === toJid(username, configHosts ?? { authdomain: '',
|
||||
domain: '' })
|
||||
&& credentials.password === password) {
|
||||
messageKey = t('dialog.incorrectPassword');
|
||||
messageKey = 'dialog.incorrectPassword';
|
||||
}
|
||||
} else if (name) {
|
||||
messageKey = t('dialog.connectErrorWithMsg');
|
||||
messageKey = 'dialog.connectErrorWithMsg';
|
||||
messageOptions.msg = `${name} ${error.message}`;
|
||||
}
|
||||
} else if (connecting) {
|
||||
messageKey = t('connection.CONNECTING');
|
||||
messageKey = 'connection.CONNECTING';
|
||||
}
|
||||
|
||||
if (messageKey) {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import React, { PureComponent } from 'react';
|
||||
import { WithTranslation } from 'react-i18next';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { IStore } from '../../../app/types';
|
||||
import { translate } from '../../../base/i18n/functions';
|
||||
import { connect } from '../../../base/redux/functions';
|
||||
import Dialog from '../../../base/ui/components/web/Dialog';
|
||||
import { cancelWaitForOwner } from '../../actions.web';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// @flow
|
||||
|
||||
import React, { PureComponent } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { getParticipantById } from '../../participants';
|
||||
import { connect } from '../../redux';
|
||||
import { getAvatarColor, getInitials, isCORSAvatarURL } from '../functions';
|
||||
|
||||
import { StatelessAvatar } from './';
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
import { Theme } from '@mui/material';
|
||||
import { withStyles } from '@mui/styles';
|
||||
import clsx from 'clsx';
|
||||
import React from 'react';
|
||||
|
||||
import Icon from '../../../icons/components/Icon';
|
||||
import { IconUser } from '../../../icons/svg';
|
||||
import { withPixelLineHeight } from '../../../styles/functions.web';
|
||||
import AbstractStatelessAvatar, { type IProps as AbstractProps } from '../AbstractStatelessAvatar';
|
||||
import { PRESENCE_AVAILABLE_COLOR, PRESENCE_AWAY_COLOR, PRESENCE_BUSY_COLOR, PRESENCE_IDLE_COLOR } from '../styles';
|
||||
|
||||
@@ -47,17 +50,21 @@ interface IProps extends AbstractProps {
|
||||
/**
|
||||
* Creates the styles for the component.
|
||||
*
|
||||
* @param {Theme} theme - The MUI theme.
|
||||
* @returns {Object}
|
||||
*/
|
||||
const styles = () => {
|
||||
const styles = (theme: Theme) => {
|
||||
return {
|
||||
avatar: {
|
||||
backgroundColor: '#AAA',
|
||||
borderRadius: '50%',
|
||||
color: 'rgba(255, 255, 255, 1)',
|
||||
fontWeight: '100',
|
||||
fontWeight: '600',
|
||||
color: theme.palette?.text01 || '#fff',
|
||||
...withPixelLineHeight(theme.typography?.heading1 ?? {}),
|
||||
fontSize: 'inherit',
|
||||
objectFit: 'cover' as const,
|
||||
textAlign: 'center' as const,
|
||||
overflow: 'hidden',
|
||||
|
||||
'&.avatar-small': {
|
||||
height: '28px !important',
|
||||
@@ -79,6 +86,14 @@ const styles = () => {
|
||||
}
|
||||
},
|
||||
|
||||
initialsContainer: {
|
||||
width: '100%',
|
||||
height: '100%',
|
||||
display: 'flex',
|
||||
justifyContent: 'center',
|
||||
alignItems: 'center'
|
||||
},
|
||||
|
||||
badge: {
|
||||
position: 'relative' as const,
|
||||
|
||||
@@ -173,35 +188,23 @@ class StatelessAvatar extends AbstractStatelessAvatar<IProps> {
|
||||
data-testid = { this.props.testId }
|
||||
id = { this.props.id }
|
||||
style = { this._getAvatarStyle(this.props.color) }>
|
||||
<svg
|
||||
className = 'avatar-svg'
|
||||
viewBox = '0 0 100 100'
|
||||
xmlns = 'http://www.w3.org/2000/svg'
|
||||
xmlnsXlink = 'http://www.w3.org/1999/xlink'>
|
||||
<text
|
||||
dominantBaseline = 'central'
|
||||
fill = 'rgba(255,255,255,1)'
|
||||
fontSize = '40pt'
|
||||
textAnchor = 'middle'
|
||||
x = '50'
|
||||
y = '50'>
|
||||
{ initials }
|
||||
</text>
|
||||
</svg>
|
||||
<div className = { this.props.classes.initialsContainer }>
|
||||
{initials}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
// default avatar
|
||||
return (
|
||||
<div className = { this._getBadgeClassName() }>
|
||||
<img
|
||||
alt = 'avatar'
|
||||
className = { this._getAvatarClassName('defaultAvatar') }
|
||||
data-testid = { this.props.testId }
|
||||
id = { this.props.id }
|
||||
src = { this.props.defaultAvatar || 'images/avatar.png' }
|
||||
style = { this._getAvatarStyle() } />
|
||||
<div
|
||||
className = { clsx(this._getAvatarClassName('defaultAvatar'), this._getBadgeClassName()) }
|
||||
data-testid = { this.props.testId }
|
||||
id = { this.props.id }
|
||||
style = { this._getAvatarStyle() }>
|
||||
<Icon
|
||||
size = { '50%' }
|
||||
src = { IconUser } />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@@ -217,7 +220,7 @@ class StatelessAvatar extends AbstractStatelessAvatar<IProps> {
|
||||
|
||||
return {
|
||||
background: color || undefined,
|
||||
fontSize: size ? size * 0.5 : '180%',
|
||||
fontSize: size ? size * 0.4 : '180%',
|
||||
height: size || '100%',
|
||||
width: size || '100%'
|
||||
};
|
||||
|
||||
@@ -88,7 +88,7 @@ const useStyles = makeStyles()(theme => {
|
||||
boxShadow: 'inset 0px -1px 0px rgba(255, 255, 255, 0.15)',
|
||||
minHeight: '40px',
|
||||
|
||||
'&:hover': {
|
||||
'&:hover, &:focus-within': {
|
||||
backgroundColor: theme.palette.ui02,
|
||||
|
||||
'& .indicators': {
|
||||
@@ -97,6 +97,8 @@ const useStyles = makeStyles()(theme => {
|
||||
|
||||
'& .actions': {
|
||||
display: 'flex',
|
||||
position: 'relative',
|
||||
top: 'auto',
|
||||
boxShadow: `-15px 0px 10px -5px ${theme.palette.ui02}`,
|
||||
backgroundColor: theme.palette.ui02
|
||||
}
|
||||
@@ -154,7 +156,8 @@ const useStyles = makeStyles()(theme => {
|
||||
},
|
||||
|
||||
actionsContainer: {
|
||||
display: 'none',
|
||||
position: 'absolute',
|
||||
top: '-1000px',
|
||||
boxShadow: `-15px 0px 10px -5px ${theme.palette.ui02}`,
|
||||
backgroundColor: theme.palette.ui02
|
||||
},
|
||||
|
||||
@@ -93,15 +93,15 @@ export interface IJitsiConference {
|
||||
setReceiverConstraints: Function;
|
||||
setSenderVideoConstraint: Function;
|
||||
setSubject: Function;
|
||||
startRecording: Function;
|
||||
startVerification: Function;
|
||||
stopRecording: Function;
|
||||
}
|
||||
|
||||
export interface IConferenceState {
|
||||
authEnabled?: boolean;
|
||||
authLogin?: string;
|
||||
authRequired?: {
|
||||
join: Function;
|
||||
};
|
||||
authRequired?: IJitsiConference;
|
||||
conference?: IJitsiConference;
|
||||
conferenceTimestamp?: number;
|
||||
e2eeSupported?: boolean;
|
||||
|
||||
@@ -98,7 +98,7 @@ export function overwriteConfig(config: Object) {
|
||||
* base/config.
|
||||
* @returns {Function}
|
||||
*/
|
||||
export function setConfig(config: Object = {}) {
|
||||
export function setConfig(config: IConfig = {}) {
|
||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||
const { locationURL } = getState()['features/base/connection'];
|
||||
|
||||
@@ -119,6 +119,26 @@ export function setConfig(config: Object = {}) {
|
||||
window.interfaceConfig,
|
||||
locationURL);
|
||||
|
||||
let { bosh } = config;
|
||||
|
||||
if (bosh) {
|
||||
// Normalize the BOSH URL.
|
||||
if (bosh.startsWith('//')) {
|
||||
// By default our config.js doesn't include the protocol.
|
||||
bosh = `${locationURL?.protocol}${bosh}`;
|
||||
} else if (bosh.startsWith('/')) {
|
||||
// Handle relative URLs, which won't work on mobile.
|
||||
const {
|
||||
protocol,
|
||||
host,
|
||||
contextRoot
|
||||
} = parseURIString(locationURL?.href);
|
||||
|
||||
bosh = `${protocol}//${host}${contextRoot || '/'}${bosh.substr(1)}`;
|
||||
}
|
||||
config.bosh = bosh;
|
||||
}
|
||||
|
||||
dispatch({
|
||||
type: SET_CONFIG,
|
||||
config
|
||||
|
||||
@@ -117,6 +117,14 @@ export interface IDeeplinkingConfig {
|
||||
ios?: IDeeplinkingMobileConfig;
|
||||
}
|
||||
|
||||
export interface INoiseSuppressionConfig {
|
||||
krisp?: {
|
||||
debugLogs?: boolean;
|
||||
enabled?: boolean;
|
||||
logProcessStats?: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IConfig {
|
||||
_desktopSharingSourceDevice?: string;
|
||||
analytics?: {
|
||||
@@ -316,6 +324,7 @@ export interface IConfig {
|
||||
enableSaveLogs?: boolean;
|
||||
enableTcc?: boolean;
|
||||
enableUnifiedOnChrome?: boolean;
|
||||
enableWebHIDFeature?: boolean;
|
||||
enableWelcomePage?: boolean;
|
||||
etherpad_base?: string;
|
||||
faceLandmarks?: {
|
||||
@@ -388,6 +397,11 @@ export interface IConfig {
|
||||
lastNLimits?: {
|
||||
[key: number]: number;
|
||||
};
|
||||
legalUrls?: {
|
||||
helpCentre: string;
|
||||
privacy: string;
|
||||
terms: string;
|
||||
};
|
||||
liveStreaming?: {
|
||||
dataPrivacyLink?: string;
|
||||
enabled?: boolean;
|
||||
@@ -411,6 +425,7 @@ export interface IConfig {
|
||||
microsoftApiApplicationClientID?: string;
|
||||
moderatedRoomServiceUrl?: string;
|
||||
mouseMoveCallbackInterval?: number;
|
||||
noiseSuppression?: INoiseSuppressionConfig;
|
||||
noticeMessage?: string;
|
||||
notificationTimeouts?: {
|
||||
long?: number;
|
||||
|
||||
@@ -61,6 +61,11 @@ export const PREMEETING_BUTTONS = [ 'microphone', 'camera', 'select-background',
|
||||
*/
|
||||
export const THIRD_PARTY_PREJOIN_BUTTONS = [ 'microphone', 'camera', 'select-background' ];
|
||||
|
||||
/**
|
||||
* The toolbar buttons to show when in visitors mode.
|
||||
*/
|
||||
export const VISITORS_MODE_BUTTONS = [ 'hangup', 'tileview' ];
|
||||
|
||||
/**
|
||||
* The set of feature flags.
|
||||
*
|
||||
@@ -70,3 +75,18 @@ export const THIRD_PARTY_PREJOIN_BUTTONS = [ 'microphone', 'camera', 'select-bac
|
||||
export const FEATURE_FLAGS = {
|
||||
SSRC_REWRITING: 'ssrcRewritingEnabled'
|
||||
};
|
||||
|
||||
/**
|
||||
* The URL at which the terms (of service/use) are available to the user.
|
||||
*/
|
||||
export const DEFAULT_TERMS_URL = 'https://jitsi.org/meet/terms';
|
||||
|
||||
/**
|
||||
* The URL at which the privacy policy is available to the user.
|
||||
*/
|
||||
export const DEFAULT_PRIVACY_URL = 'https://jitsi.org/meet/privacy';
|
||||
|
||||
/**
|
||||
* The URL at which the help centre is available to the user.
|
||||
*/
|
||||
export const DEFAULT_HELP_CENTRE_URL = 'https://web-cdn.jitsi.net/faq/meet-faq.html';
|
||||
|
||||
@@ -11,7 +11,13 @@ import { parseURLParams } from '../util/parseURLParams';
|
||||
|
||||
import { IConfig } from './configType';
|
||||
import CONFIG_WHITELIST from './configWhitelist';
|
||||
import { FEATURE_FLAGS, _CONFIG_STORE_PREFIX } from './constants';
|
||||
import {
|
||||
DEFAULT_HELP_CENTRE_URL,
|
||||
DEFAULT_PRIVACY_URL,
|
||||
DEFAULT_TERMS_URL,
|
||||
FEATURE_FLAGS,
|
||||
_CONFIG_STORE_PREFIX
|
||||
} from './constants';
|
||||
import INTERFACE_CONFIG_WHITELIST from './interfaceConfigWhitelist';
|
||||
import logger from './logger';
|
||||
|
||||
@@ -326,3 +332,24 @@ export function getDialOutUrl(state: IReduxState) {
|
||||
export function getSecurityUiConfig(state: IReduxState) {
|
||||
return state['features/base/config']?.securityUi || {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the terms, privacy and help centre URL's.
|
||||
*
|
||||
* @param {IReduxState} state - The state of the application.
|
||||
* @returns {{
|
||||
* privacy: string,
|
||||
* helpCentre: string,
|
||||
* terms: string
|
||||
* }}
|
||||
*/
|
||||
export function getLegalUrls(state: IReduxState) {
|
||||
const helpCentreURL = state['features/base/config']?.helpCentreURL;
|
||||
const configLegalUrls = state['features/base/config']?.legalUrls;
|
||||
|
||||
return {
|
||||
privacy: configLegalUrls?.privacy || DEFAULT_PRIVACY_URL,
|
||||
helpCentre: helpCentreURL || configLegalUrls?.helpCentre || DEFAULT_HELP_CENTRE_URL,
|
||||
terms: configLegalUrls?.terms || DEFAULT_TERMS_URL
|
||||
};
|
||||
}
|
||||
|
||||
@@ -44,6 +44,16 @@ export function getToolbarButtons(state: IReduxState): Array<string> {
|
||||
return buttons;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the configuration value of web-hid feature.
|
||||
*
|
||||
* @param {Object} state - The state of the app.
|
||||
* @returns {boolean} True if web-hid feature should be enabled, otherwise false.
|
||||
*/
|
||||
export function getWebHIDFeatureConfig(state: IReduxState): boolean {
|
||||
return state['features/base/config'].enableWebHIDFeature || false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the specified button is enabled.
|
||||
*
|
||||
|
||||
@@ -52,9 +52,7 @@ function _setConfig({ dispatch, getState }: IStore, next: Function, action: AnyA
|
||||
const settings = state['features/base/settings'];
|
||||
const config: IConfig = {};
|
||||
|
||||
// FIXME: P2P is currently temporality disabled on mobile.
|
||||
// eslint-disable-next-line no-constant-condition
|
||||
if (false && typeof settings.disableP2P !== 'undefined') {
|
||||
if (typeof settings.disableP2P !== 'undefined') {
|
||||
config.p2p = { enabled: !settings.disableP2P };
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,8 @@ const INITIAL_RN_STATE: IConfig = {
|
||||
// than requiring this override here...
|
||||
|
||||
p2p: {
|
||||
// Temporarily disable P2P on mobile while we sort out some (codec?) issues.
|
||||
enabled: false,
|
||||
disabledCodec: 'vp9',
|
||||
preferredCodec: 'h264'
|
||||
preferredCodec: 'vp8'
|
||||
},
|
||||
|
||||
videoQuality: {
|
||||
|
||||
@@ -3,8 +3,7 @@ import _ from 'lodash';
|
||||
import { IReduxState } from '../../app/types';
|
||||
import {
|
||||
appendURLParam,
|
||||
getBackendSafeRoomName,
|
||||
parseURIString
|
||||
getBackendSafeRoomName
|
||||
} from '../util/uri';
|
||||
|
||||
import {
|
||||
@@ -145,7 +144,8 @@ export function constructOptions(state: IReduxState) {
|
||||
// redux store.
|
||||
const options = _.cloneDeep(state['features/base/config']);
|
||||
|
||||
let { bosh, websocket } = options;
|
||||
const { bosh } = options;
|
||||
let { websocket } = options;
|
||||
|
||||
// TESTING: Only enable WebSocket for some percentage of users.
|
||||
if (websocket && navigator.product === 'ReactNative') {
|
||||
@@ -154,25 +154,6 @@ export function constructOptions(state: IReduxState) {
|
||||
}
|
||||
}
|
||||
|
||||
// Normalize the BOSH URL.
|
||||
if (bosh && !websocket) {
|
||||
const { locationURL } = state['features/base/connection'];
|
||||
|
||||
if (bosh.startsWith('//')) {
|
||||
// By default our config.js doesn't include the protocol.
|
||||
bosh = `${locationURL?.protocol}${bosh}`;
|
||||
} else if (bosh.startsWith('/')) {
|
||||
// Handle relative URLs, which won't work on mobile.
|
||||
const {
|
||||
protocol,
|
||||
host,
|
||||
contextRoot
|
||||
} = parseURIString(locationURL?.href);
|
||||
|
||||
bosh = `${protocol}//${host}${contextRoot || '/'}${bosh.substr(1)}`;
|
||||
}
|
||||
}
|
||||
|
||||
// WebSocket is preferred over BOSH.
|
||||
const serviceUrl = websocket || bosh;
|
||||
|
||||
|
||||
@@ -74,7 +74,7 @@ export function openDialog(component: ComponentType<any>, componentProps?: Objec
|
||||
* componentProps: (Object | undefined)
|
||||
* }}
|
||||
*/
|
||||
export function openSheet(component: ComponentType, componentProps?: Object) {
|
||||
export function openSheet(component: ComponentType<any>, componentProps?: Object) {
|
||||
return {
|
||||
type: OPEN_SHEET,
|
||||
component,
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { Container, Text } from '../../react';
|
||||
import { type StyleType } from '../../styles';
|
||||
|
||||
import styles from './styles';
|
||||
|
||||
type Props = {
|
||||
|
||||
/**
|
||||
* Children of the component.
|
||||
*/
|
||||
children: string | React$Node,
|
||||
|
||||
style: ?StyleType
|
||||
};
|
||||
|
||||
/**
|
||||
* Generic dialog content container to provide the same styling for all custom
|
||||
* dialogs.
|
||||
*/
|
||||
export default class DialogContent extends Component<Props> {
|
||||
/**
|
||||
* Implements {@code Component#render}.
|
||||
*
|
||||
* @inheritdoc
|
||||
*/
|
||||
render() {
|
||||
const { children, style } = this.props;
|
||||
|
||||
const childrenComponent = typeof children === 'string'
|
||||
? <Text style = { style }>{ children }</Text>
|
||||
: children;
|
||||
|
||||
return (
|
||||
<Container style = { styles.dialogContainer }>
|
||||
{ childrenComponent }
|
||||
</Container>
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,3 @@
|
||||
// @flow
|
||||
|
||||
export * from './_';
|
||||
|
||||
export { default as DialogContent } from './DialogContent';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import React from 'react';
|
||||
import Dialog from 'react-native-dialog';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { translate } from '../../../i18n';
|
||||
import { connect } from '../../../redux';
|
||||
import { _abstractMapStateToProps } from '../../functions';
|
||||
import AbstractDialog, { type Props as AbstractProps } from '../AbstractDialog';
|
||||
import { renderHTML } from '../functions.native';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import React, { type Node, PureComponent } from 'react';
|
||||
import { SafeAreaView, ScrollView, View } from 'react-native';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { SlidingView } from '../../../react';
|
||||
import { connect } from '../../../redux';
|
||||
import { hideSheet } from '../../actions';
|
||||
|
||||
import { bottomSheetStyles as styles } from './styles';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import React from 'react';
|
||||
import Dialog from 'react-native-dialog';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { translate } from '../../../i18n';
|
||||
import { connect } from '../../../redux';
|
||||
import AbstractDialog from '../AbstractDialog';
|
||||
import { renderHTML } from '../functions.native';
|
||||
|
||||
@@ -48,7 +48,7 @@ type Props = {
|
||||
/**
|
||||
* Dialog title.
|
||||
*/
|
||||
title?: string,
|
||||
title?: string
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import React, { Fragment } from 'react';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { ReactionEmoji } from '../../../../reactions/components';
|
||||
import { getReactionsQueue } from '../../../../reactions/functions.any';
|
||||
import { connect } from '../../../redux';
|
||||
import AbstractDialogContainer, {
|
||||
abstractMapStateToProps
|
||||
} from '../AbstractDialogContainer';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import React from 'react';
|
||||
import Dialog from 'react-native-dialog';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { translate } from '../../../i18n';
|
||||
import { connect } from '../../../redux';
|
||||
import { _abstractMapStateToProps } from '../../functions';
|
||||
import AbstractDialog, {
|
||||
type Props as AbstractProps,
|
||||
|
||||
@@ -0,0 +1,230 @@
|
||||
/* eslint-disable lines-around-comment */
|
||||
|
||||
// @ts-ignore
|
||||
import { randomInt } from '@jitsi/js-utils/random';
|
||||
import React, { Component } from 'react';
|
||||
import { WithTranslation } from 'react-i18next';
|
||||
import { connect } from 'react-redux';
|
||||
|
||||
import { appNavigate, reloadNow } from '../../../../app/actions.native';
|
||||
import { IReduxState, IStore } from '../../../../app/types';
|
||||
import { translate } from '../../../i18n/functions';
|
||||
import { isFatalJitsiConnectionError } from '../../../lib-jitsi-meet/functions.native';
|
||||
import { hideDialog } from '../../actions';
|
||||
// @ts-ignore
|
||||
import logger from '../../logger';
|
||||
|
||||
// @ts-ignore
|
||||
import ConfirmDialog from './ConfirmDialog';
|
||||
|
||||
|
||||
/**
|
||||
* The type of the React {@code Component} props of
|
||||
* {@link PageReloadDialog}.
|
||||
*/
|
||||
interface IPageReloadDialogProps extends WithTranslation {
|
||||
dispatch: IStore['dispatch'];
|
||||
isNetworkFailure: boolean;
|
||||
reason?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* The type of the React {@code Component} state of
|
||||
* {@link PageReloadDialog}.
|
||||
*/
|
||||
interface IPageReloadDialogState {
|
||||
timeLeft: number;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements a React Component that is shown before the
|
||||
* conference is reloaded.
|
||||
* Shows a warning message and counts down towards the re-load.
|
||||
*/
|
||||
class PageReloadDialog extends Component<IPageReloadDialogProps, IPageReloadDialogState> {
|
||||
|
||||
// @ts-ignore
|
||||
_interval: IntervalID;
|
||||
_timeoutSeconds: number;
|
||||
|
||||
/**
|
||||
* Initializes a new PageReloadOverlay instance.
|
||||
*
|
||||
* @param {Object} props - The read-only properties with which the new
|
||||
* instance is to be initialized.
|
||||
* @public
|
||||
*/
|
||||
constructor(props: IPageReloadDialogProps) {
|
||||
super(props);
|
||||
|
||||
this._timeoutSeconds = 10 + randomInt(0, 20);
|
||||
|
||||
this.state = {
|
||||
timeLeft: this._timeoutSeconds
|
||||
};
|
||||
|
||||
this._onCancel = this._onCancel.bind(this);
|
||||
this._onReloadNow = this._onReloadNow.bind(this);
|
||||
this._onReconnecting = this._onReconnecting.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* React Component method that executes once component is mounted.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {void}
|
||||
*/
|
||||
componentDidMount() {
|
||||
const { timeLeft } = this.state;
|
||||
|
||||
logger.info(
|
||||
`The conference will be reloaded after ${timeLeft} seconds.`
|
||||
);
|
||||
|
||||
this._interval = setInterval(() =>
|
||||
this._onReconnecting(), 1000);
|
||||
}
|
||||
|
||||
/**
|
||||
* Clears the timer interval.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {void}
|
||||
*/
|
||||
componentWillUnmount() {
|
||||
if (this._interval) {
|
||||
clearInterval(this._interval);
|
||||
this._interval = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle clicking of the "Cancel" button. It will navigate back to the
|
||||
* welcome page.
|
||||
*
|
||||
* @private
|
||||
* @returns {boolean}
|
||||
*/
|
||||
_onCancel() {
|
||||
const { dispatch } = this.props;
|
||||
|
||||
clearInterval(this._interval);
|
||||
dispatch(appNavigate(undefined));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles automatic reconnection.
|
||||
*
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_onReconnecting() {
|
||||
const { dispatch } = this.props;
|
||||
const { timeLeft } = this.state;
|
||||
|
||||
if (timeLeft === 0) {
|
||||
if (this._interval) {
|
||||
dispatch(hideDialog());
|
||||
this._onReloadNow();
|
||||
this._interval = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
this.setState({
|
||||
timeLeft: timeLeft - 1
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle clicking on the "Reload Now" button. It will navigate to the same
|
||||
* conference URL as before immediately, without waiting for the timer to
|
||||
* kick in.
|
||||
*
|
||||
* @private
|
||||
* @returns {boolean}
|
||||
*/
|
||||
_onReloadNow() {
|
||||
const { dispatch } = this.props;
|
||||
|
||||
clearInterval(this._interval);
|
||||
dispatch(reloadNow());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements React's {@link Component#render()}.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
render() {
|
||||
const { isNetworkFailure, t } = this.props;
|
||||
const { timeLeft } = this.state;
|
||||
|
||||
let message, title;
|
||||
|
||||
if (isNetworkFailure) {
|
||||
title = 'dialog.conferenceDisconnectTitle';
|
||||
message = 'dialog.conferenceDisconnectMsg';
|
||||
} else {
|
||||
title = 'dialog.conferenceReloadTitle';
|
||||
message = 'dialog.conferenceReloadMsg';
|
||||
}
|
||||
|
||||
return (
|
||||
<ConfirmDialog
|
||||
cancelLabel = 'dialog.Cancel'
|
||||
confirmLabel = 'dialog.rejoinNow'
|
||||
descriptionKey = { `${t(message, { seconds: timeLeft })}` }
|
||||
onCancel = { this._onCancel }
|
||||
onSubmit = { this._onReloadNow }
|
||||
title = { title } />
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps (parts of) the redux state to the associated component's props.
|
||||
*
|
||||
* @param {Object} state - The redux state.
|
||||
* @protected
|
||||
* @returns {{
|
||||
* isNetworkFailure: boolean,
|
||||
* reason: string
|
||||
* }}
|
||||
*/
|
||||
function mapStateToProps(state: IReduxState) {
|
||||
const { error: conferenceError } = state['features/base/conference'];
|
||||
const { error: configError } = state['features/base/config'];
|
||||
const { error: connectionError } = state['features/base/connection'];
|
||||
const { fatalError } = state['features/overlay'];
|
||||
|
||||
const fatalConnectionError
|
||||
// @ts-ignore
|
||||
= connectionError && isFatalJitsiConnectionError(connectionError);
|
||||
const fatalConfigError = fatalError === configError;
|
||||
|
||||
const isNetworkFailure = Boolean(fatalConfigError || fatalConnectionError);
|
||||
|
||||
let reason;
|
||||
|
||||
if (conferenceError) {
|
||||
reason = `error.conference.${conferenceError.name}`;
|
||||
} else if (connectionError) {
|
||||
reason = `error.conference.${connectionError.name}`;
|
||||
} else if (configError) {
|
||||
reason = `error.config.${configError.name}`;
|
||||
} else {
|
||||
logger.error('No reload reason defined!');
|
||||
}
|
||||
|
||||
return {
|
||||
isNetworkFailure,
|
||||
reason
|
||||
};
|
||||
}
|
||||
|
||||
export default translate(connect(mapStateToProps)(PageReloadDialog));
|
||||
@@ -5,6 +5,7 @@ export { default as ConfirmDialog } from './ConfirmDialog';
|
||||
export { default as DialogContainer } from './DialogContainer';
|
||||
export { default as AlertDialog } from './AlertDialog';
|
||||
export { default as InputDialog } from './InputDialog';
|
||||
export { default as PageReloadDialog } from './PageReloadDialog';
|
||||
|
||||
// NOTE: Some dialogs reuse the style of these base classes for consistency
|
||||
// and as we're in a /native namespace, it's safe to export the styles.
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
import { BoxModel, createStyleSheet } from '../../styles';
|
||||
|
||||
/**
|
||||
* The React {@code Component} styles of {@code Dialog}.
|
||||
*/
|
||||
export default createStyleSheet({
|
||||
/**
|
||||
* Unified container for a consistent Dialog style.
|
||||
*/
|
||||
dialogContainer: {
|
||||
paddingHorizontal: BoxModel.padding,
|
||||
paddingVertical: 1.5 * BoxModel.padding
|
||||
}
|
||||
});
|
||||
@@ -1,5 +0,0 @@
|
||||
/**
|
||||
* Placeholder styles for web to be able to use cross platform components
|
||||
* unmodified such as {@code DialogContent}.
|
||||
*/
|
||||
export default {};
|
||||
@@ -5,11 +5,6 @@ import { Component } from 'react';
|
||||
*/
|
||||
export interface IProps {
|
||||
|
||||
/**
|
||||
* Function that closes the dialog.
|
||||
*/
|
||||
closeDialog: Function;
|
||||
|
||||
/**
|
||||
* Callback to invoke on change.
|
||||
*/
|
||||
|
||||
@@ -1,93 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import React from 'react';
|
||||
|
||||
import { connect } from '../../../redux';
|
||||
import AbstractDialog from '../AbstractDialog';
|
||||
import type { Props as AbstractDialogProps, State } from '../AbstractDialog';
|
||||
|
||||
import StatelessDialog from './StatelessDialog';
|
||||
|
||||
/**
|
||||
* The type of the React {@code Component} props of {@link Dialog}.
|
||||
*/
|
||||
type Props = AbstractDialogProps & {
|
||||
|
||||
/**
|
||||
* True if listening for the Enter key should be disabled.
|
||||
*/
|
||||
disableEnter: boolean,
|
||||
|
||||
/**
|
||||
* Whether the dialog is modal. This means clicking on the blanket will
|
||||
* leave the dialog open. No cancel button.
|
||||
*/
|
||||
isModal: boolean,
|
||||
|
||||
/**
|
||||
* Disables rendering of the submit button.
|
||||
*/
|
||||
submitDisabled: boolean,
|
||||
|
||||
/**
|
||||
* Width of the dialog, can be:
|
||||
* - 'small' (400px), 'medium' (600px), 'large' (800px),
|
||||
* 'x-large' (968px)
|
||||
* - integer value for pixel width
|
||||
* - string value for percentage.
|
||||
*/
|
||||
width: string
|
||||
};
|
||||
|
||||
/**
|
||||
* Web dialog that uses atlaskit modal-dialog to display dialogs.
|
||||
*/
|
||||
class Dialog extends AbstractDialog<Props, State> {
|
||||
/**
|
||||
* Initializes a new Dialog instance.
|
||||
*
|
||||
* @param {Object} props - The read-only properties with which the new
|
||||
* instance is to be initialized.
|
||||
*/
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
|
||||
// Bind event handlers so they are only bound once per instance.
|
||||
this._onCancel = this._onCancel.bind(this);
|
||||
this._onSubmit = this._onSubmit.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements React's {@link Component#render()}.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
render() {
|
||||
const props = {
|
||||
...this.props,
|
||||
onCancel: this._onCancel,
|
||||
onSubmit: this._onSubmit
|
||||
};
|
||||
|
||||
// $FlowExpectedError
|
||||
delete props.dispatch;
|
||||
|
||||
return <StatelessDialog { ...props } />;
|
||||
}
|
||||
|
||||
_onCancel: () => void;
|
||||
|
||||
/**
|
||||
* Dispatches action to hide the dialog.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
_onCancel() {
|
||||
this.props.isModal || super._onCancel();
|
||||
}
|
||||
|
||||
_onSubmit: (?string) => void;
|
||||
}
|
||||
|
||||
export default connect()(Dialog);
|
||||
@@ -1,256 +0,0 @@
|
||||
// @flow
|
||||
|
||||
import Tabs from '@atlaskit/tabs';
|
||||
import React, { Component } from 'react';
|
||||
|
||||
import { translate } from '../../../i18n/functions';
|
||||
import logger from '../../logger';
|
||||
|
||||
import StatelessDialog from './StatelessDialog';
|
||||
|
||||
/**
|
||||
* The type of the React {@code Component} props of {@link DialogWithTabs}.
|
||||
*/
|
||||
export type Props = {
|
||||
|
||||
/**
|
||||
* Function that closes the dialog.
|
||||
*/
|
||||
closeDialog: Function,
|
||||
|
||||
/**
|
||||
* Css class name that will be added to the dialog.
|
||||
*/
|
||||
cssClassName: string,
|
||||
|
||||
/**
|
||||
* Which settings tab should be initially displayed. If not defined then
|
||||
* the first tab will be displayed.
|
||||
*/
|
||||
defaultTab: number,
|
||||
|
||||
/**
|
||||
* Disables dismissing the dialog when the blanket is clicked. Enabled
|
||||
* by default.
|
||||
*/
|
||||
disableBlanketClickDismiss: boolean,
|
||||
|
||||
/**
|
||||
* Callback invoked when the Save button has been pressed.
|
||||
*/
|
||||
onSubmit: Function,
|
||||
|
||||
|
||||
/**
|
||||
* Invoked to obtain translated strings.
|
||||
*/
|
||||
t: Function,
|
||||
|
||||
/**
|
||||
* Information about the tabs that will be rendered.
|
||||
*/
|
||||
tabs: Array<Object>,
|
||||
|
||||
/**
|
||||
* Key to use for showing a title.
|
||||
*/
|
||||
titleKey: string
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* The type of the React {@code Component} state of {@link DialogWithTabs}.
|
||||
*/
|
||||
type State = {
|
||||
|
||||
/**
|
||||
* The index of the tab that should be displayed.
|
||||
*/
|
||||
selectedTab: number,
|
||||
|
||||
/**
|
||||
* An array of the states of the tabs.
|
||||
*/
|
||||
tabStates: Array<Object>
|
||||
};
|
||||
|
||||
/**
|
||||
* A React {@code Component} for displaying a dialog with tabs.
|
||||
*
|
||||
* @augments Component
|
||||
*/
|
||||
class DialogWithTabs extends Component<Props, State> {
|
||||
/**
|
||||
* Initializes a new {@code DialogWithTabs} instance.
|
||||
*
|
||||
* @param {Object} props - The read-only React {@code Component} props with
|
||||
* which the new instance is to be initialized.
|
||||
*/
|
||||
constructor(props: Props) {
|
||||
super(props);
|
||||
this.state = {
|
||||
selectedTab: this.props.defaultTab || 0,
|
||||
tabStates: this.props.tabs.map(tab => tab.props)
|
||||
};
|
||||
this._onSubmit = this._onSubmit.bind(this);
|
||||
this._onTabSelected = this._onTabSelected.bind(this);
|
||||
this._onTabStateChange = this._onTabStateChange.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements React's {@link Component#render()}.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
render() {
|
||||
const onCancel = this.props.closeDialog;
|
||||
|
||||
return (
|
||||
<StatelessDialog
|
||||
disableBlanketClickDismiss
|
||||
= { this.props.disableBlanketClickDismiss }
|
||||
onCancel = { onCancel }
|
||||
onSubmit = { this._onSubmit }
|
||||
titleKey = { this.props.titleKey } >
|
||||
<div className = { this.props.cssClassName } >
|
||||
{ this._renderTabs() }
|
||||
</div>
|
||||
</StatelessDialog>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the props to pass into the tab component.
|
||||
*
|
||||
* @param {number} tabId - The index of the tab configuration within
|
||||
* {@link this.state.tabStates}.
|
||||
* @returns {Object}
|
||||
*/
|
||||
_getTabProps(tabId) {
|
||||
const { tabs } = this.props;
|
||||
const { tabStates } = this.state;
|
||||
const tabConfiguration = tabs[tabId];
|
||||
const currentTabState = tabStates[tabId];
|
||||
|
||||
if (tabConfiguration.propsUpdateFunction) {
|
||||
return tabConfiguration.propsUpdateFunction(
|
||||
currentTabState,
|
||||
tabConfiguration.props);
|
||||
}
|
||||
|
||||
return { ...currentTabState };
|
||||
}
|
||||
|
||||
_onTabSelected: (Object, number) => void;
|
||||
|
||||
/**
|
||||
* Callback invoked when the desired tab to display should be changed.
|
||||
*
|
||||
* @param {Object} tab - The configuration passed into atlaskit tabs to
|
||||
* describe how to display the selected tab.
|
||||
* @param {number} tabIndex - The index of the tab within the array of
|
||||
* displayed tabs.
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_onTabSelected(tab, tabIndex) { // eslint-disable-line no-unused-vars
|
||||
this.setState({ selectedTab: tabIndex });
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders the tabs from the tab information passed on props.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
_renderTabs() {
|
||||
const { t, tabs } = this.props;
|
||||
|
||||
if (tabs.length === 1) {
|
||||
return this._renderTab({
|
||||
...tabs[0],
|
||||
tabId: 0
|
||||
});
|
||||
}
|
||||
|
||||
if (tabs.length > 1) {
|
||||
return (
|
||||
<Tabs
|
||||
onSelect = { this._onTabSelected }
|
||||
selected = { this.state.selectedTab }
|
||||
tabs = {
|
||||
tabs.map(({ component, label, styles }, idx) => {
|
||||
return {
|
||||
content: this._renderTab({
|
||||
component,
|
||||
styles,
|
||||
tabId: idx
|
||||
}),
|
||||
label: t(label)
|
||||
};
|
||||
})
|
||||
} />);
|
||||
}
|
||||
|
||||
logger.warn('No settings tabs configured to display.');
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a tab from the tab information passed as parameters.
|
||||
*
|
||||
* @param {Object} tabInfo - Information about the tab.
|
||||
* @returns {Component} - The tab.
|
||||
*/
|
||||
_renderTab({ component, styles, tabId }) {
|
||||
const { closeDialog } = this.props;
|
||||
const TabComponent = component;
|
||||
|
||||
return (
|
||||
<div className = { styles }>
|
||||
<TabComponent
|
||||
closeDialog = { closeDialog }
|
||||
mountCallback = { this.props.tabs[tabId].onMount }
|
||||
onTabStateChange
|
||||
= { this._onTabStateChange }
|
||||
tabId = { tabId }
|
||||
{ ...this._getTabProps(tabId) } />
|
||||
</div>);
|
||||
}
|
||||
|
||||
_onTabStateChange: (number, Object) => void;
|
||||
|
||||
/**
|
||||
* Changes the state for a tab.
|
||||
*
|
||||
* @param {number} tabId - The id of the tab which state will be changed.
|
||||
* @param {Object} state - The new state.
|
||||
* @returns {void}
|
||||
*/
|
||||
_onTabStateChange(tabId, state) {
|
||||
const tabStates = [ ...this.state.tabStates ];
|
||||
|
||||
tabStates[tabId] = state;
|
||||
this.setState({ tabStates });
|
||||
}
|
||||
|
||||
_onSubmit: () => void;
|
||||
|
||||
/**
|
||||
* Submits the information filled in the dialog.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
_onSubmit() {
|
||||
const { onSubmit, tabs } = this.props;
|
||||
|
||||
tabs.forEach(({ submit }, idx) => {
|
||||
submit && submit(this.state.tabStates[idx]);
|
||||
});
|
||||
|
||||
onSubmit();
|
||||
}
|
||||
}
|
||||
|
||||
export default translate(DialogWithTabs);
|
||||
@@ -1,172 +0,0 @@
|
||||
/* eslint-disable lines-around-comment */
|
||||
/* eslint-disable react/no-multi-comp */
|
||||
import ErrorIcon from '@atlaskit/icon/glyph/error';
|
||||
import WarningIcon from '@atlaskit/icon/glyph/warning';
|
||||
import {
|
||||
Header,
|
||||
Title,
|
||||
TitleText,
|
||||
titleIconWrapperStyles
|
||||
// @ts-ignore
|
||||
} from '@atlaskit/modal-dialog/dist/es2019/styled/Content';
|
||||
import { Theme } from '@mui/material';
|
||||
import { withStyles } from '@mui/styles';
|
||||
import React from 'react';
|
||||
import { WithTranslation } from 'react-i18next';
|
||||
|
||||
import { translate } from '../../../i18n/functions';
|
||||
import { IconCloseLarge } from '../../../icons/svg';
|
||||
import { withPixelLineHeight } from '../../../styles/functions.web';
|
||||
import Button from '../../../ui/components/web/Button';
|
||||
import { BUTTON_TYPES } from '../../../ui/constants.web';
|
||||
|
||||
const TitleIcon = ({ appearance }: { appearance?: 'danger' | 'warning'; }) => {
|
||||
if (!appearance) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const IconSymbol = appearance === 'danger' ? ErrorIcon : WarningIcon;
|
||||
|
||||
return (
|
||||
<span css = { titleIconWrapperStyles(appearance) }>
|
||||
<IconSymbol label = { `${appearance} icon` } />
|
||||
</span>
|
||||
);
|
||||
};
|
||||
|
||||
interface IProps extends WithTranslation {
|
||||
appearance?: 'danger' | 'warning';
|
||||
classes: any;
|
||||
heading: string;
|
||||
hideCloseIconButton: boolean;
|
||||
id?: string;
|
||||
isHeadingMultiline: boolean;
|
||||
onClose: (e?: any) => void;
|
||||
showKeyline: boolean;
|
||||
testId?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the styles for the component.
|
||||
*
|
||||
* @param {Object} theme - The current UI theme.
|
||||
*
|
||||
* @returns {Object}
|
||||
*/
|
||||
const styles = (theme: Theme) => {
|
||||
return {
|
||||
closeButton: {
|
||||
borderRadius: theme.shape.borderRadius,
|
||||
cursor: 'pointer',
|
||||
padding: 13,
|
||||
|
||||
[theme.breakpoints.down(480)]: {
|
||||
background: theme.palette.action02
|
||||
},
|
||||
|
||||
'&:hover': {
|
||||
background: theme.palette.ui04
|
||||
}
|
||||
},
|
||||
header: {
|
||||
boxShadow: 'none',
|
||||
|
||||
'& h4': {
|
||||
...withPixelLineHeight(theme.typography.heading5),
|
||||
color: theme.palette.text01
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* A default header for modal-dialog components.
|
||||
*
|
||||
* @class ModalHeader
|
||||
* @augments {React.Component<IProps>}
|
||||
*/
|
||||
class ModalHeader extends React.Component<IProps> {
|
||||
static defaultProps = {
|
||||
isHeadingMultiline: true
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes a new {@code ModalHeader} instance.
|
||||
*
|
||||
* @param {*} props - The read-only properties with which the new instance
|
||||
* is to be initialized.
|
||||
*/
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
|
||||
// Bind event handler so it is only bound once for every instance.
|
||||
this._onKeyPress = this._onKeyPress.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* KeyPress handler for accessibility.
|
||||
*
|
||||
* @param {Object} e - The key event to handle.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
_onKeyPress(e: React.KeyboardEvent) {
|
||||
if (this.props.onClose && (e.key === ' ' || e.key === 'Enter')) {
|
||||
e.preventDefault();
|
||||
this.props.onClose();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements React's {@link Component#render()}.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
render() {
|
||||
const {
|
||||
id,
|
||||
appearance,
|
||||
classes,
|
||||
heading,
|
||||
hideCloseIconButton,
|
||||
onClose,
|
||||
showKeyline,
|
||||
isHeadingMultiline,
|
||||
testId,
|
||||
t
|
||||
} = this.props;
|
||||
|
||||
if (!heading) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Header
|
||||
className = { classes.header }
|
||||
showKeyline = { showKeyline }>
|
||||
<Title>
|
||||
<TitleIcon appearance = { appearance } />
|
||||
<TitleText
|
||||
data-testid = { testId && `${testId}-heading` }
|
||||
id = { id }
|
||||
isHeadingMultiline = { isHeadingMultiline }>
|
||||
{heading}
|
||||
</TitleText>
|
||||
</Title>
|
||||
|
||||
{
|
||||
!hideCloseIconButton && <Button
|
||||
accessibilityLabel = { t('dialog.close') }
|
||||
icon = { IconCloseLarge }
|
||||
id = 'modal-header-close-button'
|
||||
onClick = { onClose }
|
||||
size = 'large'
|
||||
type = { BUTTON_TYPES.TERTIARY } />
|
||||
}
|
||||
</Header>
|
||||
);
|
||||
}
|
||||
}
|
||||
export default translate(withStyles(styles)(ModalHeader));
|
||||
@@ -1,377 +0,0 @@
|
||||
/* eslint-disable lines-around-comment */
|
||||
import Modal, { ModalFooter } from '@atlaskit/modal-dialog';
|
||||
import { Theme } from '@mui/material';
|
||||
import { withStyles } from '@mui/styles';
|
||||
import React, { Component, ReactElement } from 'react';
|
||||
import { WithTranslation } from 'react-i18next';
|
||||
|
||||
import { translate } from '../../../i18n/functions';
|
||||
import Button from '../../../ui/components/web/Button';
|
||||
import { BUTTON_TYPES } from '../../../ui/constants.web';
|
||||
import type { DialogProps } from '../../constants';
|
||||
|
||||
import ModalHeader from './ModalHeader';
|
||||
|
||||
/**
|
||||
* The ID to be used for the cancel button if enabled.
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
const CANCEL_BUTTON_ID = 'modal-dialog-cancel-button';
|
||||
|
||||
/**
|
||||
* The ID to be used for the ok button if enabled.
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
const OK_BUTTON_ID = 'modal-dialog-ok-button';
|
||||
|
||||
/**
|
||||
* The type of the React {@code Component} props of {@link StatelessDialog}.
|
||||
*
|
||||
* @static
|
||||
*/
|
||||
interface IProps extends DialogProps, WithTranslation {
|
||||
|
||||
/**
|
||||
* An object containing the CSS classes.
|
||||
*/
|
||||
classes: any;
|
||||
|
||||
/**
|
||||
* Custom dialog header that replaces the standard heading.
|
||||
*/
|
||||
customHeader?: ReactElement<any> | Function;
|
||||
|
||||
/**
|
||||
* Disables dismissing the dialog when the blanket is clicked. Enabled
|
||||
* by default.
|
||||
*/
|
||||
disableBlanketClickDismiss: boolean;
|
||||
|
||||
/*
|
||||
* True if listening for the Enter key should be disabled.
|
||||
*/
|
||||
disableEnter: boolean;
|
||||
|
||||
/**
|
||||
* If true, no footer will be displayed.
|
||||
*/
|
||||
disableFooter?: boolean;
|
||||
|
||||
/**
|
||||
* If true, the cancel button will not display but cancel actions, like
|
||||
* clicking the blanket, will cancel.
|
||||
*/
|
||||
hideCancelButton: boolean;
|
||||
|
||||
/**
|
||||
* If true, the close icon button will not be displayed.
|
||||
*/
|
||||
hideCloseIconButton: boolean;
|
||||
|
||||
/**
|
||||
* Whether the dialog is modal. This means clicking on the blanket will
|
||||
* leave the dialog open. No cancel button.
|
||||
*/
|
||||
isModal: boolean;
|
||||
|
||||
/**
|
||||
* The handler for the event when clicking the 'confirmNo' button.
|
||||
* Defaults to onCancel if absent.
|
||||
*/
|
||||
onDecline?: () => void;
|
||||
|
||||
/**
|
||||
* Callback invoked when setting the ref of the Dialog.
|
||||
*/
|
||||
onDialogRef?: Function;
|
||||
|
||||
/**
|
||||
* Disables rendering of the submit button.
|
||||
*/
|
||||
submitDisabled: boolean;
|
||||
|
||||
/**
|
||||
* Width of the dialog, can be:
|
||||
* - 'small' (400px), 'medium' (600px), 'large' (800px),
|
||||
* 'x-large' (968px)
|
||||
* - integer value for pixel width
|
||||
* - string value for percentage.
|
||||
*/
|
||||
width: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the styles for the component.
|
||||
*
|
||||
* @param {Object} theme - The theme.
|
||||
* @returns {Object}
|
||||
*/
|
||||
const styles = (theme: Theme) => {
|
||||
return {
|
||||
footer: {
|
||||
boxShadow: 'none'
|
||||
},
|
||||
|
||||
buttonContainer: {
|
||||
display: 'flex',
|
||||
|
||||
'& > button:first-child': {
|
||||
marginRight: theme.spacing(2)
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Web dialog that uses atlaskit modal-dialog to display dialogs.
|
||||
*/
|
||||
class StatelessDialog extends Component<IProps> {
|
||||
static defaultProps = {
|
||||
hideCloseIconButton: false
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializes a new {@code StatelessDialog} instance.
|
||||
*
|
||||
* @param {Object} props - The read-only properties with which the new
|
||||
* instance is to be initialized.
|
||||
*/
|
||||
constructor(props: IProps) {
|
||||
super(props);
|
||||
|
||||
// Bind event handlers so they are only bound once for every instance.
|
||||
this._onCancel = this._onCancel.bind(this);
|
||||
this._onDialogDismissed = this._onDialogDismissed.bind(this);
|
||||
this._onKeyPress = this._onKeyPress.bind(this);
|
||||
this._onSubmit = this._onSubmit.bind(this);
|
||||
this._renderFooter = this._renderFooter.bind(this);
|
||||
this._onDialogRef = this._onDialogRef.bind(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements React's {@link Component#render()}.
|
||||
*
|
||||
* @inheritdoc
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
render() {
|
||||
const {
|
||||
customHeader,
|
||||
children,
|
||||
hideCloseIconButton,
|
||||
t,
|
||||
titleString,
|
||||
titleKey,
|
||||
width
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<Modal
|
||||
autoFocus = { true }
|
||||
components = {{
|
||||
// @ts-ignore
|
||||
Header: customHeader ? customHeader : props => (
|
||||
// @ts-ignore
|
||||
<ModalHeader
|
||||
{ ...props }
|
||||
heading = { titleString || t(titleKey ?? '') }
|
||||
hideCloseIconButton = { hideCloseIconButton } />
|
||||
)
|
||||
}}
|
||||
footer = { this._renderFooter }
|
||||
i18n = { this.props.i18n }
|
||||
onClose = { this._onDialogDismissed }
|
||||
onDialogDismissed = { this._onDialogDismissed }
|
||||
shouldCloseOnEscapePress = { true }
|
||||
width = { width || 'medium' }>
|
||||
<div
|
||||
onKeyPress = { this._onKeyPress }
|
||||
ref = { this._onDialogRef }>
|
||||
<form
|
||||
className = 'modal-dialog-form'
|
||||
id = 'modal-dialog-form'
|
||||
onSubmit = { this._onSubmit }>
|
||||
{ children }
|
||||
</form>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a ReactElement to display buttons for closing the modal.
|
||||
*
|
||||
* @param {Object} propsFromModalFooter - The props passed in from the
|
||||
* {@link ModalFooter} component.
|
||||
* @private
|
||||
* @returns {ReactElement}
|
||||
*/
|
||||
_renderFooter(propsFromModalFooter: any) {
|
||||
// Filter out falsy (null) values because {@code ButtonGroup} will error
|
||||
// if passed in anything but buttons with valid type props.
|
||||
const buttons = [
|
||||
this._renderCancelButton(),
|
||||
this._renderOKButton()
|
||||
].filter(Boolean);
|
||||
|
||||
if (this.props.disableFooter) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<ModalFooter
|
||||
className = { this.props.classes.footer }
|
||||
showKeyline = { propsFromModalFooter.showKeyline } >
|
||||
{
|
||||
|
||||
/**
|
||||
* Atlaskit has this empty span (JustifySim) so...
|
||||
*/
|
||||
}
|
||||
<span />
|
||||
<div className = { this.props.classes.buttonContainer }>
|
||||
{ buttons }
|
||||
</div>
|
||||
</ModalFooter>
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Dispatches action to hide the dialog.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
_onCancel() {
|
||||
if (!this.props.isModal) {
|
||||
const { onCancel } = this.props;
|
||||
|
||||
onCancel?.();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles click on the blanket area.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
_onDialogDismissed() {
|
||||
if (!this.props.disableBlanketClickDismiss) {
|
||||
this._onCancel();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Dispatches the action when submitting the dialog.
|
||||
*
|
||||
* @private
|
||||
* @param {string} value - The submitted value if any.
|
||||
* @returns {void}
|
||||
*/
|
||||
_onSubmit(value?: any) {
|
||||
const { onSubmit } = this.props;
|
||||
|
||||
onSubmit?.(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders Cancel button.
|
||||
*
|
||||
* @private
|
||||
* @returns {ReactElement|null} The Cancel button if enabled and dialog is
|
||||
* not modal.
|
||||
*/
|
||||
_renderCancelButton() {
|
||||
if (this.props.cancelDisabled
|
||||
|| this.props.isModal
|
||||
|| this.props.hideCancelButton) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const {
|
||||
t,
|
||||
onDecline
|
||||
} = this.props;
|
||||
|
||||
return (
|
||||
<Button
|
||||
accessibilityLabel = { t(this.props.cancelKey || 'dialog.Cancel') }
|
||||
id = { CANCEL_BUTTON_ID }
|
||||
key = { CANCEL_BUTTON_ID }
|
||||
label = { t(this.props.cancelKey || 'dialog.Cancel') }
|
||||
onClick = { onDecline || this._onCancel }
|
||||
size = 'small'
|
||||
type = { BUTTON_TYPES.TERTIARY } />
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders OK button.
|
||||
*
|
||||
* @private
|
||||
* @returns {ReactElement|null} The OK button if enabled.
|
||||
*/
|
||||
_renderOKButton() {
|
||||
const {
|
||||
submitDisabled,
|
||||
t
|
||||
} = this.props;
|
||||
|
||||
if (submitDisabled) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return (
|
||||
<Button
|
||||
accessibilityLabel = { t(this.props.okKey || 'dialog.Ok') }
|
||||
disabled = { this.props.okDisabled }
|
||||
id = { OK_BUTTON_ID }
|
||||
key = { OK_BUTTON_ID }
|
||||
label = { t(this.props.okKey || 'dialog.Ok') }
|
||||
onClick = { this._onSubmit }
|
||||
size = 'small' />
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback invoked when setting the ref of the dialog's child passing the Modal ref.
|
||||
* It is done this way because we cannot directly access the ref of the Modal component.
|
||||
*
|
||||
* @param {HTMLElement} element - The DOM element for the dialog.
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_onDialogRef(element?: any) {
|
||||
this.props.onDialogRef?.(element?.parentNode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles 'Enter' key in the dialog to submit/hide dialog depending on
|
||||
* the available buttons and their disabled state.
|
||||
*
|
||||
* @param {Object} event - The key event.
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_onKeyPress(event: React.KeyboardEvent) {
|
||||
// If the event coming to the dialog has been subject to preventDefault
|
||||
// we don't handle it here.
|
||||
if (event.defaultPrevented) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.key === 'Enter' && !this.props.disableEnter) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
|
||||
if (this.props.submitDisabled && !this.props.cancelDisabled) {
|
||||
this._onCancel();
|
||||
} else if (!this.props.okDisabled) {
|
||||
this._onSubmit();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default translate(withStyles(styles)(StatelessDialog));
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user