mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-03-08 04:30:19 +00:00
Compare commits
122 Commits
dockerisms
...
android-sd
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5b2d28490b | ||
|
|
62ad7d3451 | ||
|
|
5bc3128c71 | ||
|
|
b91d6b97a9 | ||
|
|
ce812591f9 | ||
|
|
f32140c4b7 | ||
|
|
7d513738d2 | ||
|
|
8d1bde3cb1 | ||
|
|
95825dcdd7 | ||
|
|
a61f272303 | ||
|
|
3538761543 | ||
|
|
f22d5ed629 | ||
|
|
f30dd9d881 | ||
|
|
4a3cd2596a | ||
|
|
4e1f42a665 | ||
|
|
1fff5d2567 | ||
|
|
bbcc40a97e | ||
|
|
bbf76296ed | ||
|
|
e0b3a81a41 | ||
|
|
1c122705bf | ||
|
|
29c16e42bd | ||
|
|
8a19a34d19 | ||
|
|
d5832f226d | ||
|
|
4cfc8cd7a2 | ||
|
|
873ede0e06 | ||
|
|
f73e9947c0 | ||
|
|
82711b3f23 | ||
|
|
2f841fab73 | ||
|
|
b3a2905849 | ||
|
|
5f579e9a15 | ||
|
|
ea2ea89ef7 | ||
|
|
a5f17a8033 | ||
|
|
4c6e9e7788 | ||
|
|
a7e0df2623 | ||
|
|
da9a70129e | ||
|
|
6d3d15a64b | ||
|
|
b10a45bf98 | ||
|
|
858a3d953c | ||
|
|
1ff27b7298 | ||
|
|
bc43f00d28 | ||
|
|
bfd5db355d | ||
|
|
a4ca247056 | ||
|
|
eac891585b | ||
|
|
7d62020787 | ||
|
|
7d18183bf9 | ||
|
|
346dac476a | ||
|
|
b4ecef429a | ||
|
|
ea07515138 | ||
|
|
79231914b9 | ||
|
|
0e1ecd3256 | ||
|
|
0d15c01077 | ||
|
|
216801720a | ||
|
|
312813e677 | ||
|
|
2b5787163e | ||
|
|
28632752ba | ||
|
|
7dfff1b455 | ||
|
|
99e7d636b7 | ||
|
|
4b1743bb2f | ||
|
|
3b1ad9faff | ||
|
|
87b14c3711 | ||
|
|
5811e0476c | ||
|
|
59750ba1f1 | ||
|
|
b3de7fd52b | ||
|
|
f68b9b7df9 | ||
|
|
b534c4f624 | ||
|
|
ab1c5805f4 | ||
|
|
0c6b0641f5 | ||
|
|
093254d948 | ||
|
|
0494200383 | ||
|
|
16f1c167b8 | ||
|
|
97fd36a19a | ||
|
|
701d34248b | ||
|
|
e72dae5c32 | ||
|
|
811ee40d99 | ||
|
|
76eabf1f29 | ||
|
|
01a8cc1478 | ||
|
|
047c9b43ea | ||
|
|
22d040ab76 | ||
|
|
4ac9ea258c | ||
|
|
6bd64ee552 | ||
|
|
7a1595f162 | ||
|
|
07cad2a98f | ||
|
|
6fbba52c6d | ||
|
|
311d1c67ba | ||
|
|
0aa54d8650 | ||
|
|
74e0e10928 | ||
|
|
4f169988a3 | ||
|
|
ec6ed6e8ec | ||
|
|
7b429afee6 | ||
|
|
cab830aad1 | ||
|
|
bd42c81cb8 | ||
|
|
f230fd4d04 | ||
|
|
eed57e7999 | ||
|
|
8115f86f59 | ||
|
|
28e5edfb50 | ||
|
|
e936c6dc2c | ||
|
|
8efd0f0829 | ||
|
|
a49f04f25b | ||
|
|
bcffe0bba5 | ||
|
|
482ba23954 | ||
|
|
e87167dd2d | ||
|
|
cf047a3c90 | ||
|
|
a8b8612304 | ||
|
|
95a5b8a8c1 | ||
|
|
5867eaf560 | ||
|
|
9143bb42d1 | ||
|
|
0e5dac623e | ||
|
|
0c09ded76b | ||
|
|
929622b27c | ||
|
|
430125a8bd | ||
|
|
66505666df | ||
|
|
e5cffc71c4 | ||
|
|
e3d66db3d7 | ||
|
|
e8e2b3c341 | ||
|
|
abb724e173 | ||
|
|
6e679f952f | ||
|
|
80d7e5fb7f | ||
|
|
7646618e5a | ||
|
|
6533071c4c | ||
|
|
6aed9bc0c8 | ||
|
|
b7b861259b | ||
|
|
df64dd8f18 |
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
5
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
<!--
|
||||
Thank you for your pull request. Please provide a thorough description below.
|
||||
|
||||
Contributors guide: https://github.com/jitsi/jitsi-meet/blob/master/CONTRIBUTING.md
|
||||
-->
|
||||
@@ -123,3 +123,32 @@ in the agreement, unfortunately, we cannot accept your contribution.
|
||||
respective variable, function, property is non-public i.e. private, protected,
|
||||
or internal. In contrast, the lack of an underscore at the beginning of a name
|
||||
signals public API.
|
||||
|
||||
### Feature layout
|
||||
|
||||
When adding a new feature, this would be the usual layout.
|
||||
|
||||
```
|
||||
react/features/sample/
|
||||
├── actionTypes.js
|
||||
├── actions.js
|
||||
├── components
|
||||
│ ├── AnotherComponent.js
|
||||
│ ├── OneComponent.js
|
||||
│ └── index.js
|
||||
├── middleware.js
|
||||
└── reducer.js
|
||||
```
|
||||
|
||||
The middleware must be imported in `react/features/app/` specifically
|
||||
in `middlewares.any`, `middlewares.native.js` or `middlewares.web.js` where appropriate.
|
||||
Likewise for the reducer.
|
||||
|
||||
An `index.js` file must not be provided for exporting actions, action types and
|
||||
component. Features / files requiring those must import them explicitly.
|
||||
|
||||
This has not always been the case and the entire codebase hasn't been migrated to
|
||||
this model but new features should follow this new layout.
|
||||
|
||||
When working on an old feature, adding the necessary changes to migrate to the new
|
||||
model is encouraged.
|
||||
|
||||
4
Makefile
4
Makefile
@@ -74,7 +74,7 @@ deploy-rnnoise-binary:
|
||||
|
||||
deploy-css:
|
||||
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
|
||||
$(CLEANCSS) $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
|
||||
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
|
||||
rm $(STYLES_BUNDLE)
|
||||
|
||||
deploy-local:
|
||||
@@ -82,7 +82,7 @@ deploy-local:
|
||||
|
||||
.NOTPARALLEL:
|
||||
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-lib-jitsi-meet deploy-libflac
|
||||
$(WEBPACK_DEV_SERVER)
|
||||
$(WEBPACK_DEV_SERVER) --detect-circular-deps
|
||||
|
||||
source-package:
|
||||
mkdir -p source_package/jitsi-meet/css && \
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Security
|
||||
|
||||
## Reporting security issuess
|
||||
## Reporting security issues
|
||||
|
||||
We take security very seriously and develop all Jitsi projects to be secure and safe.
|
||||
|
||||
If you find (or simply suspect) a security issue in any of the Jitsi projects, please send us an email to security@jitsi.org.
|
||||
If you find (or simply suspect) a security issue in any of the Jitsi projects, please report it to us via [HackerOne](https://hackerone.com/8x8) or send us an email to security@jitsi.org.
|
||||
|
||||
**We encourage responsible disclosure for the sake of our users, so please reach out before posting in a public space.**
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
android:label="@string/app_name"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
android:theme="@style/AppTheme">
|
||||
<meta-data
|
||||
android:name="android.content.APP_RESTRICTIONS"
|
||||
android:resource="@xml/app_restrictions" />
|
||||
<activity
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|screenSize|smallestScreenSize"
|
||||
android:label="@string/app_name"
|
||||
|
||||
@@ -16,9 +16,15 @@
|
||||
|
||||
package org.jitsi.meet;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.RestrictionEntry;
|
||||
import android.content.RestrictionsManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
@@ -31,6 +37,7 @@ import org.jitsi.meet.sdk.JitsiMeetConferenceOptions;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -48,6 +55,27 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
private static final int OVERLAY_PERMISSION_REQUEST_CODE
|
||||
= (int) (Math.random() * Short.MAX_VALUE);
|
||||
|
||||
/**
|
||||
* ServerURL configuration key for restriction configuration using {@link android.content.RestrictionsManager}
|
||||
*/
|
||||
public static final String RESTRICTION_SERVER_URL = "SERVER_URL";
|
||||
|
||||
/**
|
||||
* Broadcast receiver for restrictions handling
|
||||
*/
|
||||
private BroadcastReceiver broadcastReceiver;
|
||||
|
||||
/**
|
||||
* Flag if configuration is provided by RestrictionManager
|
||||
*/
|
||||
private boolean configurationByRestrictions = false;
|
||||
|
||||
/**
|
||||
* Default URL as could be obtained from RestrictionManager
|
||||
*/
|
||||
private String defaultURL;
|
||||
|
||||
|
||||
// JitsiMeetActivity overrides
|
||||
//
|
||||
|
||||
@@ -85,16 +113,67 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
|
||||
@Override
|
||||
protected void initialize() {
|
||||
broadcastReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// As new restrictions including server URL are received,
|
||||
// conference should be restarted with new configuration.
|
||||
leave();
|
||||
recreate();
|
||||
}
|
||||
};
|
||||
registerReceiver(broadcastReceiver,
|
||||
new IntentFilter(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED));
|
||||
|
||||
resolveRestrictions();
|
||||
setJitsiMeetConferenceDefaultOptions();
|
||||
super.initialize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
if (broadcastReceiver != null) {
|
||||
unregisterReceiver(broadcastReceiver);
|
||||
broadcastReceiver = null;
|
||||
}
|
||||
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
private void setJitsiMeetConferenceDefaultOptions() {
|
||||
// Set default options
|
||||
JitsiMeetConferenceOptions defaultOptions
|
||||
= new JitsiMeetConferenceOptions.Builder()
|
||||
.setWelcomePageEnabled(true)
|
||||
.setServerURL(buildURL("https://meet.jit.si"))
|
||||
.setFeatureFlag("call-integration.enabled", false)
|
||||
.build();
|
||||
.setWelcomePageEnabled(true)
|
||||
.setServerURL(buildURL(defaultURL))
|
||||
.setFeatureFlag("call-integration.enabled", false)
|
||||
.setFeatureFlag("resolution", 360)
|
||||
.setFeatureFlag("server-url-change.enabled", !configurationByRestrictions)
|
||||
.build();
|
||||
JitsiMeet.setDefaultConferenceOptions(defaultOptions);
|
||||
}
|
||||
|
||||
super.initialize();
|
||||
private void resolveRestrictions() {
|
||||
RestrictionsManager manager =
|
||||
(RestrictionsManager) getSystemService(Context.RESTRICTIONS_SERVICE);
|
||||
Bundle restrictions = manager.getApplicationRestrictions();
|
||||
Collection<RestrictionEntry> entries = manager.getManifestRestrictions(
|
||||
getApplicationContext().getPackageName());
|
||||
for (RestrictionEntry restrictionEntry : entries) {
|
||||
String key = restrictionEntry.getKey();
|
||||
if (RESTRICTION_SERVER_URL.equals(key)) {
|
||||
// If restrictions are passed to the application.
|
||||
if (restrictions != null &&
|
||||
restrictions.containsKey(RESTRICTION_SERVER_URL)) {
|
||||
defaultURL = restrictions.getString(RESTRICTION_SERVER_URL);
|
||||
configurationByRestrictions = true;
|
||||
// Otherwise use default URL from app-restrictions.xml.
|
||||
} else {
|
||||
defaultURL = restrictionEntry.getSelectedString();
|
||||
configurationByRestrictions = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
<resources>
|
||||
<string name="app_name">Jitsi Meet</string>
|
||||
<string name="restriction_server_url_description">URL of Jitsi Meet server instance to connect to</string>
|
||||
<string name="restriction_server_url_title">Server URL</string>
|
||||
</resources>
|
||||
|
||||
11
android/app/src/main/res/xml/app_restrictions.xml
Normal file
11
android/app/src/main/res/xml/app_restrictions.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<restrictions xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<!-- Server URL configuration -->
|
||||
<restriction
|
||||
android:defaultValue="https://meet.jit.si"
|
||||
android:description="@string/restriction_server_url_description"
|
||||
android:key="SERVER_URL"
|
||||
android:restrictionType="string"
|
||||
android:title="@string/restriction_server_url_title"/>
|
||||
</restrictions>
|
||||
@@ -1,6 +1,12 @@
|
||||
<network-security-config>
|
||||
<domain-config cleartextTrafficPermitted="true">
|
||||
<domain includeSubdomains="false">localhost</domain>
|
||||
<domain includeSubdomains="false">10.0.2.2</domain>
|
||||
</domain-config>
|
||||
<network-security-config>
|
||||
<base-config>
|
||||
<trust-anchors>
|
||||
<certificates src="system" />
|
||||
<certificates src="user" />
|
||||
</trust-anchors>
|
||||
</base-config>
|
||||
<domain-config cleartextTrafficPermitted="true">
|
||||
<domain includeSubdomains="false">localhost</domain>
|
||||
<domain includeSubdomains="false">10.0.2.2</domain>
|
||||
</domain-config>
|
||||
</network-security-config>
|
||||
|
||||
@@ -21,4 +21,4 @@ android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
appVersion=20.3.0
|
||||
sdkVersion=2.9.0
|
||||
sdkVersion=2.9.1
|
||||
|
||||
168
conference.js
168
conference.js
@@ -1,4 +1,4 @@
|
||||
/* global $, APP, JitsiMeetJS, config, interfaceConfig */
|
||||
/* global APP, JitsiMeetJS, config, interfaceConfig */
|
||||
|
||||
import EventEmitter from 'events';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
maybeRedirectToWelcomePage,
|
||||
redirectToStaticPage,
|
||||
reloadWithStoredParams
|
||||
} from './react/features/app';
|
||||
} from './react/features/app/actions';
|
||||
import {
|
||||
AVATAR_ID_COMMAND,
|
||||
AVATAR_URL_COMMAND,
|
||||
@@ -95,6 +95,8 @@ import {
|
||||
createLocalPresenterTrack,
|
||||
createLocalTracksF,
|
||||
destroyLocalTracks,
|
||||
getLocalJitsiAudioTrack,
|
||||
getLocalJitsiVideoTrack,
|
||||
isLocalVideoTrackMuted,
|
||||
isLocalTrackMuted,
|
||||
isUserInteractionRequiredForUnmute,
|
||||
@@ -119,9 +121,7 @@ import { suspendDetected } from './react/features/power-monitor';
|
||||
import {
|
||||
initPrejoin,
|
||||
isPrejoinPageEnabled,
|
||||
isPrejoinPageVisible,
|
||||
replacePrejoinAudioTrack,
|
||||
replacePrejoinVideoTrack
|
||||
isPrejoinPageVisible
|
||||
} from './react/features/prejoin';
|
||||
import { createRnnoiseProcessorPromise } from './react/features/rnnoise';
|
||||
import { toggleScreenshotCaptureEffect } from './react/features/screenshot-capture';
|
||||
@@ -1403,31 +1403,32 @@ export default {
|
||||
/**
|
||||
* Start using provided video stream.
|
||||
* Stops previous video stream.
|
||||
* @param {JitsiLocalTrack} [stream] new stream to use or null
|
||||
* @param {JitsiLocalTrack} newTrack - new track to use or null
|
||||
* @returns {Promise}
|
||||
*/
|
||||
useVideoStream(newStream) {
|
||||
useVideoStream(newTrack) {
|
||||
return new Promise((resolve, reject) => {
|
||||
_replaceLocalVideoTrackQueue.enqueue(onFinish => {
|
||||
/**
|
||||
* When the prejoin page is visible there is no conference object
|
||||
* created. The prejoin tracks are managed separately,
|
||||
* so this updates the prejoin video track.
|
||||
*/
|
||||
if (isPrejoinPageVisible(APP.store.getState())) {
|
||||
return APP.store.dispatch(replacePrejoinVideoTrack(newStream))
|
||||
const state = APP.store.getState();
|
||||
|
||||
// When the prejoin page is displayed localVideo is not set
|
||||
// so just replace the video track from the store with the new one.
|
||||
if (isPrejoinPageVisible(state)) {
|
||||
const oldTrack = getLocalJitsiVideoTrack(state);
|
||||
|
||||
return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))
|
||||
.then(resolve)
|
||||
.catch(reject)
|
||||
.then(onFinish);
|
||||
}
|
||||
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(this.localVideo, newStream, room))
|
||||
replaceLocalTrack(this.localVideo, newTrack, room))
|
||||
.then(() => {
|
||||
this.localVideo = newStream;
|
||||
this._setSharingScreen(newStream);
|
||||
if (newStream) {
|
||||
APP.UI.addLocalVideoStream(newStream);
|
||||
this.localVideo = newTrack;
|
||||
this._setSharingScreen(newTrack);
|
||||
if (newTrack) {
|
||||
APP.UI.addLocalVideoStream(newTrack);
|
||||
}
|
||||
this.setVideoMuteStatus(this.isLocalVideoMuted());
|
||||
})
|
||||
@@ -1468,28 +1469,29 @@ export default {
|
||||
/**
|
||||
* Start using provided audio stream.
|
||||
* Stops previous audio stream.
|
||||
* @param {JitsiLocalTrack} [stream] new stream to use or null
|
||||
* @param {JitsiLocalTrack} newTrack - new track to use or null
|
||||
* @returns {Promise}
|
||||
*/
|
||||
useAudioStream(newStream) {
|
||||
useAudioStream(newTrack) {
|
||||
return new Promise((resolve, reject) => {
|
||||
_replaceLocalAudioTrackQueue.enqueue(onFinish => {
|
||||
/**
|
||||
* When the prejoin page is visible there is no conference object
|
||||
* created. The prejoin tracks are managed separately,
|
||||
* so this updates the prejoin audio stream.
|
||||
*/
|
||||
if (isPrejoinPageVisible(APP.store.getState())) {
|
||||
return APP.store.dispatch(replacePrejoinAudioTrack(newStream))
|
||||
const state = APP.store.getState();
|
||||
|
||||
// When the prejoin page is displayed localAudio is not set
|
||||
// so just replace the audio track from the store with the new one.
|
||||
if (isPrejoinPageVisible(state)) {
|
||||
const oldTrack = getLocalJitsiAudioTrack(state);
|
||||
|
||||
return APP.store.dispatch(replaceLocalTrack(oldTrack, newTrack))
|
||||
.then(resolve)
|
||||
.catch(reject)
|
||||
.then(onFinish);
|
||||
}
|
||||
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(this.localAudio, newStream, room))
|
||||
replaceLocalTrack(this.localAudio, newTrack, room))
|
||||
.then(() => {
|
||||
this.localAudio = newStream;
|
||||
this.localAudio = newTrack;
|
||||
this.setAudioMuteStatus(this.isLocalAudioMuted());
|
||||
})
|
||||
.then(resolve)
|
||||
@@ -1669,8 +1671,6 @@ export default {
|
||||
* @private
|
||||
*/
|
||||
_createDesktopTrack(options = {}) {
|
||||
let externalInstallation = false;
|
||||
let DSExternalInstallationInProgress = false;
|
||||
const didHaveVideo = !this.isLocalVideoMuted();
|
||||
|
||||
const getDesktopStreamPromise = options.desktopStream
|
||||
@@ -1679,43 +1679,7 @@ export default {
|
||||
desktopSharingSourceDevice: options.desktopSharingSources
|
||||
? null : config._desktopSharingSourceDevice,
|
||||
desktopSharingSources: options.desktopSharingSources,
|
||||
devices: [ 'desktop' ],
|
||||
desktopSharingExtensionExternalInstallation: {
|
||||
interval: 500,
|
||||
checkAgain: () => DSExternalInstallationInProgress,
|
||||
listener: (status, url) => {
|
||||
switch (status) {
|
||||
case 'waitingForExtension': {
|
||||
DSExternalInstallationInProgress = true;
|
||||
externalInstallation = true;
|
||||
const listener = () => {
|
||||
// Wait a little bit more just to be sure that
|
||||
// we won't miss the extension installation
|
||||
setTimeout(() => {
|
||||
DSExternalInstallationInProgress = false;
|
||||
},
|
||||
500);
|
||||
APP.UI.removeListener(
|
||||
UIEvents.EXTERNAL_INSTALLATION_CANCELED,
|
||||
listener);
|
||||
};
|
||||
|
||||
APP.UI.addListener(
|
||||
UIEvents.EXTERNAL_INSTALLATION_CANCELED,
|
||||
listener);
|
||||
APP.UI.showExtensionExternalInstallationDialog(url);
|
||||
break;
|
||||
}
|
||||
case 'extensionFound':
|
||||
// Close the dialog.
|
||||
externalInstallation && $.prompt.close();
|
||||
break;
|
||||
default:
|
||||
|
||||
// Unknown status
|
||||
}
|
||||
}
|
||||
}
|
||||
devices: [ 'desktop' ]
|
||||
});
|
||||
|
||||
return getDesktopStreamPromise.then(desktopStreams => {
|
||||
@@ -1739,15 +1703,8 @@ export default {
|
||||
);
|
||||
}
|
||||
|
||||
// close external installation dialog on success.
|
||||
externalInstallation && $.prompt.close();
|
||||
|
||||
return desktopStreams;
|
||||
}, error => {
|
||||
DSExternalInstallationInProgress = false;
|
||||
|
||||
// close external installation dialog on success.
|
||||
externalInstallation && $.prompt.close();
|
||||
throw error;
|
||||
});
|
||||
},
|
||||
@@ -1951,70 +1908,36 @@ export default {
|
||||
/**
|
||||
* Handles {@link JitsiTrackError} returned by the lib-jitsi-meet when
|
||||
* trying to create screensharing track. It will either do nothing if
|
||||
* the dialog was canceled on user's request or display inline installation
|
||||
* dialog and ask the user to install the extension, once the extension is
|
||||
* installed it will switch the conference to screensharing. The last option
|
||||
* is that an unrecoverable error dialog will be displayed.
|
||||
* the dialog was canceled on user's request or display an error if
|
||||
* screensharing couldn't be started.
|
||||
* @param {JitsiTrackError} error - The error returned by
|
||||
* {@link _createDesktopTrack} Promise.
|
||||
* @private
|
||||
*/
|
||||
_handleScreenSharingError(error) {
|
||||
if (error.name === JitsiTrackErrors.CHROME_EXTENSION_USER_CANCELED) {
|
||||
if (error.name === JitsiTrackErrors.SCREENSHARING_USER_CANCELED) {
|
||||
return;
|
||||
}
|
||||
|
||||
logger.error('failed to share local desktop', error);
|
||||
|
||||
if (error.name
|
||||
=== JitsiTrackErrors.CHROME_EXTENSION_USER_GESTURE_REQUIRED) {
|
||||
// If start with screen sharing the extension will fail to install
|
||||
// (if not found), because the request has been triggered by the
|
||||
// script. Show a dialog which asks user to click "install" and try
|
||||
// again switching to the screen sharing.
|
||||
APP.UI.showExtensionInlineInstallationDialog(
|
||||
() => {
|
||||
// eslint-disable-next-line no-empty-function
|
||||
this.toggleScreenSharing().catch(() => {});
|
||||
}
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Handling:
|
||||
// JitsiTrackErrors.PERMISSION_DENIED
|
||||
// JitsiTrackErrors.CHROME_EXTENSION_INSTALLATION_ERROR
|
||||
// JitsiTrackErrors.CONSTRAINT_FAILED
|
||||
// JitsiTrackErrors.GENERAL
|
||||
// JitsiTrackErrors.PERMISSION_DENIED
|
||||
// JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR
|
||||
// and any other
|
||||
let descriptionKey;
|
||||
let titleKey;
|
||||
|
||||
if (error.name === JitsiTrackErrors.PERMISSION_DENIED) {
|
||||
|
||||
// in FF the only option for user is to deny access temporary or
|
||||
// permanently and we only receive permission_denied
|
||||
// we always show some info cause in case of permanently, no info
|
||||
// shown will be bad experience
|
||||
//
|
||||
// TODO: detect interval between requesting permissions and received
|
||||
// error, this way we can detect user interaction which will have
|
||||
// longer delay
|
||||
if (JitsiMeetJS.util.browser.isFirefox()) {
|
||||
descriptionKey
|
||||
= 'dialog.screenSharingFirefoxPermissionDeniedError';
|
||||
titleKey = 'dialog.screenSharingFirefoxPermissionDeniedTitle';
|
||||
} else {
|
||||
descriptionKey = 'dialog.screenSharingPermissionDeniedError';
|
||||
titleKey = 'dialog.screenSharingFailedToInstallTitle';
|
||||
}
|
||||
descriptionKey = 'dialog.screenSharingPermissionDeniedError';
|
||||
titleKey = 'dialog.screenSharingFailedTitle';
|
||||
} else if (error.name === JitsiTrackErrors.CONSTRAINT_FAILED) {
|
||||
descriptionKey = 'dialog.cameraConstraintFailedError';
|
||||
titleKey = 'deviceError.cameraError';
|
||||
} else {
|
||||
descriptionKey = 'dialog.screenSharingFailedToInstall';
|
||||
titleKey = 'dialog.screenSharingFailedToInstallTitle';
|
||||
} else if (error.name === JitsiTrackErrors.SCREENSHARING_GENERIC_ERROR) {
|
||||
descriptionKey = 'dialog.screenSharingFailed';
|
||||
titleKey = 'dialog.screenSharingFailedTitle';
|
||||
}
|
||||
|
||||
APP.UI.messageHandler.showError({
|
||||
@@ -2517,6 +2440,8 @@ export default {
|
||||
if (state === 'stop'
|
||||
|| state === 'start'
|
||||
|| state === 'playing') {
|
||||
const localParticipant = getLocalParticipant(APP.store.getState());
|
||||
|
||||
room.removeCommand(this.commands.defaults.SHARED_VIDEO);
|
||||
room.sendCommandOnce(this.commands.defaults.SHARED_VIDEO, {
|
||||
value: url,
|
||||
@@ -2524,7 +2449,8 @@ export default {
|
||||
state,
|
||||
time,
|
||||
muted: isMuted,
|
||||
volume
|
||||
volume,
|
||||
from: localParticipant.id
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
||||
50
config.js
50
config.js
@@ -44,6 +44,10 @@ var config = {
|
||||
//
|
||||
|
||||
testing: {
|
||||
// Disables the End to End Encryption feature. Useful for debugging
|
||||
// issues related to insertable streams.
|
||||
// disableE2EE: false,
|
||||
|
||||
// P2P test mode disables automatic switching to P2P when there are 2
|
||||
// participants in the conference.
|
||||
p2pTestMode: false
|
||||
@@ -154,22 +158,6 @@ var config = {
|
||||
|
||||
// Desktop sharing
|
||||
|
||||
// The ID of the jidesha extension for Chrome.
|
||||
desktopSharingChromeExtId: null,
|
||||
|
||||
// Whether desktop sharing should be disabled on Chrome.
|
||||
// desktopSharingChromeDisabled: false,
|
||||
|
||||
// The media sources to use when using screen sharing with the Chrome
|
||||
// extension.
|
||||
desktopSharingChromeSources: [ 'screen', 'window', 'tab' ],
|
||||
|
||||
// Required version of Chrome extension
|
||||
desktopSharingChromeMinExtVersion: '0.1',
|
||||
|
||||
// Whether desktop sharing should be disabled on Firefox.
|
||||
// desktopSharingFirefoxDisabled: false,
|
||||
|
||||
// Optional desktop sharing frame rate options. Default value: min:5, max:5.
|
||||
// desktopSharingFrameRate: {
|
||||
// min: 5,
|
||||
@@ -260,11 +248,14 @@ var config = {
|
||||
// is set in Jicofo and set to 2).
|
||||
// minParticipants: 2,
|
||||
|
||||
// Use XEP-0215 to fetch STUN and TURN servers.
|
||||
// Use the TURN servers discovered via XEP-0215 for the jitsi-videobridge
|
||||
// connection
|
||||
// useStunTurn: true,
|
||||
|
||||
// Enable IPv6 support.
|
||||
// useIPv6: true,
|
||||
// Use TURN/UDP servers for the jitsi-videobridge connection (by default
|
||||
// we filter out TURN/UDP because it is usually not needed since the
|
||||
// bridge itself is reachable via UDP)
|
||||
// useTurnUdp: false
|
||||
|
||||
// Enables / disables a data communication channel with the Videobridge.
|
||||
// Values can be 'datachannel', 'websocket', true (treat it as
|
||||
@@ -276,9 +267,6 @@ var config = {
|
||||
// UI
|
||||
//
|
||||
|
||||
// Use display name as XMPP nickname.
|
||||
// useNicks: false,
|
||||
|
||||
// Require users to always specify a display name.
|
||||
// requireDisplayName: true,
|
||||
|
||||
@@ -319,9 +307,14 @@ var config = {
|
||||
// and microsoftApiApplicationClientID
|
||||
// enableCalendarIntegration: false,
|
||||
|
||||
// When 'true', it shows an intermediate page before joining, where the user can configure its devices.
|
||||
// When 'true', it shows an intermediate page before joining, where the user can configure their devices.
|
||||
// prejoinPageEnabled: false,
|
||||
|
||||
// If true, shows the unsafe room name warning label when a room name is
|
||||
// deemed unsafe (due to the simplicity in the name) and a password is not
|
||||
// set or the lobby is not enabled.
|
||||
// enableInsecureRoomNameWarning: false,
|
||||
|
||||
// Stats
|
||||
//
|
||||
|
||||
@@ -339,10 +332,10 @@ var config = {
|
||||
// callStatsID: '',
|
||||
// callStatsSecret: '',
|
||||
|
||||
// enables sending participants display name to callstats
|
||||
// Enables sending participants' display names to callstats
|
||||
// enableDisplayNameInStats: false,
|
||||
|
||||
// enables sending participants email if available to callstats and other analytics
|
||||
// Enables sending participants' emails (if available) to callstats and other analytics
|
||||
// enableEmailInStats: false,
|
||||
|
||||
// Privacy
|
||||
@@ -372,7 +365,7 @@ var config = {
|
||||
// The STUN servers that will be used in the peer to peer connections
|
||||
stunServers: [
|
||||
|
||||
// { urls: 'stun:jitsi-meet.example.com:4446' },
|
||||
// { urls: 'stun:jitsi-meet.example.com:3478' },
|
||||
{ urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }
|
||||
]
|
||||
|
||||
@@ -529,6 +522,11 @@ var config = {
|
||||
*/
|
||||
// brandingDataUrl: '',
|
||||
|
||||
// The URL of the moderated rooms microservice, if available. If it
|
||||
// is present, a link to the service will be rendered on the welcome page,
|
||||
// otherwise the app doesn't render it.
|
||||
// moderatedRoomServiceUrl: 'https://moderated.jitsi-meet.example.com',
|
||||
|
||||
// List of undocumented settings used in jitsi-meet
|
||||
/**
|
||||
_immediateReloadThreshold
|
||||
|
||||
@@ -1,18 +1,19 @@
|
||||
/* global APP, JitsiMeetJS, config */
|
||||
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import { jitsiLocalStorage } from 'js-utils';
|
||||
|
||||
import AuthHandler from './modules/UI/authentication/AuthHandler';
|
||||
import {
|
||||
connectionEstablished,
|
||||
connectionFailed
|
||||
} from './react/features/base/connection';
|
||||
} from './react/features/base/connection/actions';
|
||||
import {
|
||||
isFatalJitsiConnectionError,
|
||||
JitsiConnectionErrors,
|
||||
JitsiConnectionEvents
|
||||
} from './react/features/base/lib-jitsi-meet';
|
||||
import { setPrejoinDisplayNameRequired } from './react/features/prejoin/actions';
|
||||
|
||||
const logger = Logger.getLogger(__filename);
|
||||
|
||||
@@ -113,6 +114,10 @@ function connect(id, password, roomName) {
|
||||
connection.addEventListener(
|
||||
JitsiConnectionEvents.CONNECTION_FAILED,
|
||||
connectionFailedHandler);
|
||||
connection.addEventListener(
|
||||
JitsiConnectionEvents.DISPLAY_NAME_REQUIRED,
|
||||
displayNameRequiredHandler
|
||||
);
|
||||
|
||||
/* eslint-disable max-params */
|
||||
/**
|
||||
@@ -166,6 +171,14 @@ function connect(id, password, roomName) {
|
||||
reject(err);
|
||||
}
|
||||
|
||||
/**
|
||||
* Marks the display name for the prejoin screen as required.
|
||||
* This can happen if a user tries to join a room with lobby enabled.
|
||||
*/
|
||||
function displayNameRequiredHandler() {
|
||||
APP.store.dispatch(setPrejoinDisplayNameRequired());
|
||||
}
|
||||
|
||||
checkForAttachParametersAndConnect(id, password, connection);
|
||||
});
|
||||
}
|
||||
|
||||
41
css/_e2ee.scss
Normal file
41
css/_e2ee.scss
Normal file
@@ -0,0 +1,41 @@
|
||||
#e2ee-section {
|
||||
.title {
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: 13px;
|
||||
margin: 15px 0;
|
||||
|
||||
.read-more {
|
||||
cursor: pointer;
|
||||
opacity: .7;
|
||||
}
|
||||
}
|
||||
|
||||
.key-field {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
label {
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
input {
|
||||
background-color: inherit;
|
||||
border: none;
|
||||
color: inherit;
|
||||
flex: 1;
|
||||
padding: 0 5px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #6FB1EA;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@
|
||||
top: 30px;
|
||||
right: 30px;
|
||||
transition: right 0.5s;
|
||||
z-index: $zindex3;
|
||||
z-index: $filmstripVideosZ + 1;
|
||||
|
||||
.circular-label {
|
||||
align-items: center;
|
||||
|
||||
@@ -34,6 +34,10 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.description {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.control-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
|
||||
@@ -96,6 +96,11 @@
|
||||
padding: 0 8px;
|
||||
}
|
||||
}
|
||||
|
||||
.prejoin-dialog-btn.primary,
|
||||
.action-btn.prejoin-dialog-btn.text {
|
||||
width: 310px;
|
||||
}
|
||||
}
|
||||
|
||||
.prejoin-dialog-callout {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* Shared style for full screen local track based dialogs/modals.
|
||||
*/
|
||||
.premeeting-screen {
|
||||
.premeeting-screen {
|
||||
align-items: stretch;
|
||||
background: #1C2025;
|
||||
bottom: 0;
|
||||
@@ -14,6 +14,66 @@
|
||||
top: 0;
|
||||
z-index: $toolbarZ + 1;
|
||||
|
||||
.action-btn {
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
margin-top: 16px;
|
||||
padding: 7px 16px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
width: 286px;
|
||||
|
||||
&.primary {
|
||||
background: #0376DA;
|
||||
border: 1px solid #0376DA;
|
||||
}
|
||||
|
||||
&.secondary {
|
||||
background: transparent;
|
||||
border: 1px solid #5E6D7A;
|
||||
}
|
||||
|
||||
&.text {
|
||||
width: auto;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
background: #5E6D7A;
|
||||
border: 1px solid #5E6D7A;
|
||||
color: #AFB6BC;
|
||||
cursor: initial;
|
||||
|
||||
.icon {
|
||||
& > svg {
|
||||
fill: #AFB6BC;
|
||||
}
|
||||
}
|
||||
|
||||
.options {
|
||||
border-left: 1px solid #AFB6BC;
|
||||
}
|
||||
}
|
||||
|
||||
.options {
|
||||
align-items: center;
|
||||
border-left: 1px solid #fff;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
align-items: center;
|
||||
background-image: linear-gradient(transparent, black);
|
||||
@@ -40,6 +100,7 @@
|
||||
font-weight: 300;
|
||||
justify-content: center;
|
||||
line-height: 24px;
|
||||
margin-bottom: 16px;
|
||||
|
||||
.url {
|
||||
display: flex;
|
||||
@@ -59,6 +120,13 @@
|
||||
}
|
||||
}
|
||||
|
||||
.copy-meeting-text {
|
||||
width: 266px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
align-self: stretch;
|
||||
}
|
||||
@@ -77,8 +145,9 @@
|
||||
border: 1px solid transparent;
|
||||
color: white;
|
||||
outline-width: 0;
|
||||
padding: 20px;
|
||||
padding: 8px 0;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
|
||||
&.focused {
|
||||
border-bottom: 1px solid white;
|
||||
@@ -88,66 +157,6 @@
|
||||
color: $defaultWarningColor;
|
||||
}
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
border-radius: 3px;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
margin: 10px;
|
||||
padding: 7px 16px;
|
||||
position: relative;
|
||||
text-align: center;
|
||||
width: 286px;
|
||||
|
||||
&.primary {
|
||||
background: #0376DA;
|
||||
border: 1px solid #0376DA;
|
||||
}
|
||||
|
||||
&.secondary {
|
||||
background: transparent;
|
||||
border: 1px solid #5E6D7A;
|
||||
}
|
||||
|
||||
&.text {
|
||||
width: auto;
|
||||
font-size: 13px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
background: #5E6D7A;
|
||||
border: 1px solid #5E6D7A;
|
||||
color: #AFB6BC;
|
||||
cursor: initial;
|
||||
|
||||
.icon {
|
||||
& > svg {
|
||||
fill: #AFB6BC;
|
||||
}
|
||||
}
|
||||
|
||||
.options {
|
||||
border-left: 1px solid #AFB6BC;
|
||||
}
|
||||
}
|
||||
|
||||
.options {
|
||||
align-items: center;
|
||||
border-left: 1px solid #fff;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.media-btn-container {
|
||||
@@ -191,4 +200,4 @@
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,6 +35,10 @@
|
||||
cursor: initial;
|
||||
color: #fff;
|
||||
background-color: #a4b8d1;
|
||||
|
||||
&:hover {
|
||||
background-color: #a4b8d1;
|
||||
}
|
||||
}
|
||||
|
||||
svg {
|
||||
|
||||
@@ -95,8 +95,12 @@ body.welcome-page {
|
||||
flex-direction: row;
|
||||
margin-top: 5px;
|
||||
|
||||
svg {
|
||||
fill: $defaultWarningColor
|
||||
.jitsi-icon {
|
||||
margin-right: 15px;
|
||||
|
||||
svg {
|
||||
fill: $defaultWarningColor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,6 +111,22 @@ body.welcome-page {
|
||||
|
||||
}
|
||||
|
||||
#moderated-meetings {
|
||||
max-width: calc(100% - 40px);
|
||||
padding: 16px 0 39px 0;
|
||||
width: $welcomePageEnterRoomWidth;
|
||||
|
||||
p {
|
||||
color: $welcomePageDescriptionColor;
|
||||
text-align: left;
|
||||
|
||||
a {
|
||||
color: inherit;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tab-container {
|
||||
font-size: 16px;
|
||||
position: relative;
|
||||
|
||||
@@ -98,5 +98,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'modals/invite/invite_more';
|
||||
@import 'modals/security/security';
|
||||
@import 'premeeting-screens';
|
||||
@import 'e2ee';
|
||||
|
||||
/* Modules END */
|
||||
|
||||
@@ -208,6 +208,12 @@
|
||||
padding: 8px 16px;
|
||||
background: #0376DA;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
& > a {
|
||||
pointer-events: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.stream {
|
||||
|
||||
@@ -8,6 +8,10 @@
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.description {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.password {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
@@ -21,18 +25,10 @@
|
||||
font-size: 14px;
|
||||
color: #6FB1EA;
|
||||
}
|
||||
|
||||
&>a+a {
|
||||
margin-left: 24px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&> :first-child:not(:last-child) {
|
||||
margin-right: 24px;
|
||||
}
|
||||
|
||||
.separator-line {
|
||||
margin: 24px 0 24px -20px;
|
||||
padding: 0 20px;
|
||||
@@ -47,13 +43,10 @@
|
||||
}
|
||||
}
|
||||
|
||||
.new-toolbox .toolbox-content .toolbox-icon.security-toolbar-button,
|
||||
.new-toolbox .toolbox-content .toolbox-icon.toggled.security-toolbar-button {
|
||||
background: rgba(241, 173, 51, 0.7);
|
||||
border: 1px solid rgba(255, 255, 255, 0.4);
|
||||
border-width: 0;
|
||||
|
||||
&:hover {
|
||||
background: rgba(241, 173, 51, 0.7);
|
||||
border: 1px solid rgba(255, 255, 255, 0.4);
|
||||
&:not(:hover) {
|
||||
background: unset;
|
||||
}
|
||||
}
|
||||
4
debian/jitsi-meet-turnserver.postinst
vendored
4
debian/jitsi-meet-turnserver.postinst
vendored
@@ -49,7 +49,7 @@ case "$1" in
|
||||
# nothing to do
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
echo "turnserver is listening on tcp 4445 as other nginx sites use port 443"
|
||||
echo "turnserver is listening on tcp 5349 as other nginx sites use port 443"
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
NGINX_MULTIPLEXING="false"
|
||||
@@ -152,7 +152,7 @@ case "$1" in
|
||||
PROSODY_HOST_CONFIG="/etc/prosody/conf.avail/$JVB_HOSTNAME.cfg.lua"
|
||||
if [ -f $PROSODY_HOST_CONFIG ] ; then
|
||||
# If we are not multiplexing we need to change the port in prosody config
|
||||
sed -i 's/"443"/"4445"/g' $PROSODY_HOST_CONFIG
|
||||
sed -i 's/"443"/"5349"/g' $PROSODY_HOST_CONFIG
|
||||
invoke-rc.d prosody restart || true
|
||||
fi
|
||||
fi
|
||||
|
||||
8
debian/jitsi-meet-web-config.postinst
vendored
8
debian/jitsi-meet-web-config.postinst
vendored
@@ -91,10 +91,14 @@ case "$1" in
|
||||
CERT_CRT="/etc/jitsi/meet/$JVB_HOSTNAME.crt"
|
||||
HOST="$( (hostname -s; echo localhost) | head -n 1)"
|
||||
DOMAIN="$( (hostname -d; echo localdomain) | head -n 1)"
|
||||
openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj \
|
||||
openssl req -new -newkey rsa:4096 -days 3650 -nodes -x509 -subj \
|
||||
"/O=$DOMAIN/OU=$HOST/CN=$JVB_HOSTNAME/emailAddress=webmaster@$HOST.$DOMAIN" \
|
||||
-keyout $CERT_KEY \
|
||||
-out $CERT_CRT
|
||||
-out $CERT_CRT \
|
||||
-reqexts SAN \
|
||||
-extensions SAN \
|
||||
-config <(cat /etc/ssl/openssl.cnf \
|
||||
<(printf "[SAN]\nsubjectAltName=DNS:localhost,DNS:$JVB_HOSTNAME"))
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# Documentation
|
||||
|
||||
The Jitsi documentation has been moved to [The Handbook](https://jitsi.github.io/handbook/).
|
||||
The Jitsi documentation has been moved to [The Handbook](https://jitsi.github.io/handbook/). The repo is https://github.com/jitsi/handbook.
|
||||
|
||||
@@ -6,8 +6,8 @@ muc_mapper_domain_base = "jitmeet.example.com";
|
||||
turncredentials_secret = "__turnSecret__";
|
||||
|
||||
turncredentials = {
|
||||
{ type = "stun", host = "jitmeet.example.com", port = "4446" },
|
||||
{ type = "turn", host = "jitmeet.example.com", port = "4446", transport = "udp" },
|
||||
{ type = "stun", host = "jitmeet.example.com", port = "3478" },
|
||||
{ type = "turn", host = "jitmeet.example.com", port = "3478", transport = "udp" },
|
||||
{ type = "turns", host = "jitmeet.example.com", port = "443", transport = "tcp" }
|
||||
};
|
||||
|
||||
|
||||
@@ -5,14 +5,31 @@ static-auth-secret=__turnSecret__
|
||||
realm=jitsi-meet.example.com
|
||||
cert=/etc/jitsi/meet/jitsi-meet.example.com.crt
|
||||
pkey=/etc/jitsi/meet/jitsi-meet.example.com.key
|
||||
|
||||
no-multicast-peers
|
||||
no-cli
|
||||
no-loopback-peers
|
||||
no-tcp-relay
|
||||
no-tcp
|
||||
listening-port=4446
|
||||
tls-listening-port=4445
|
||||
listening-port=3478
|
||||
tls-listening-port=5349
|
||||
external-ip=__external_ip_address__
|
||||
no-tlsv1
|
||||
no-tlsv1_1
|
||||
# https://ssl-config.mozilla.org/#server=haproxy&version=2.1&config=intermediate&openssl=1.1.0g&guideline=5.4
|
||||
cipher-list=ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
|
||||
|
||||
denied-peer-ip=0.0.0.0-0.255.255.255
|
||||
denied-peer-ip=10.0.0.0-10.255.255.255
|
||||
denied-peer-ip=100.64.0.0-100.127.255.255
|
||||
denied-peer-ip=127.0.0.0-127.255.255.255
|
||||
denied-peer-ip=169.254.0.0-169.254.255.255
|
||||
denied-peer-ip=127.0.0.0-127.255.255.255
|
||||
denied-peer-ip=172.16.0.0-172.31.255.255
|
||||
denied-peer-ip=192.0.0.0-192.0.0.255
|
||||
denied-peer-ip=192.0.2.0-192.0.2.255
|
||||
denied-peer-ip=192.88.99.0-192.88.99.255
|
||||
denied-peer-ip=192.168.0.0-192.168.255.255
|
||||
denied-peer-ip=198.18.0.0-198.19.255.255
|
||||
denied-peer-ip=198.51.100.0-198.51.100.255
|
||||
denied-peer-ip=203.0.113.0-203.0.113.255
|
||||
denied-peer-ip=240.0.0.0-255.255.255.255
|
||||
syslog
|
||||
|
||||
@@ -7,7 +7,7 @@ stream {
|
||||
server 127.0.0.1:4444;
|
||||
}
|
||||
upstream turn {
|
||||
server 127.0.0.1:4445;
|
||||
server 127.0.0.1:5349;
|
||||
}
|
||||
# since 1.13.10
|
||||
map $ssl_preread_alpn_protocols $upstream {
|
||||
|
||||
@@ -1,135 +1,23 @@
|
||||
/* eslint-disable no-unused-vars, no-var, max-len */
|
||||
/* eslint sort-keys: ["error", "asc", {"caseSensitive": false}] */
|
||||
|
||||
var interfaceConfig = {
|
||||
DEFAULT_BACKGROUND: '#474747',
|
||||
DEFAULT_LOGO_URL: '../images/watermark.png',
|
||||
|
||||
/**
|
||||
* Whether or not the blurred video background for large video should be
|
||||
* displayed on browsers that can support it.
|
||||
*/
|
||||
DISABLE_VIDEO_BACKGROUND: false,
|
||||
|
||||
INITIAL_TOOLBAR_TIMEOUT: 20000,
|
||||
TOOLBAR_TIMEOUT: 4000,
|
||||
TOOLBAR_ALWAYS_VISIBLE: false,
|
||||
DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
|
||||
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
|
||||
SHOW_JITSI_WATERMARK: true,
|
||||
JITSI_WATERMARK_LINK: 'https://jitsi.org',
|
||||
|
||||
// if watermark is disabled by default, it can be shown only for guests
|
||||
SHOW_WATERMARK_FOR_GUESTS: true,
|
||||
SHOW_BRAND_WATERMARK: false,
|
||||
BRAND_WATERMARK_LINK: '',
|
||||
SHOW_POWERED_BY: false,
|
||||
SHOW_DEEP_LINKING_IMAGE: false,
|
||||
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
|
||||
DISPLAY_WELCOME_PAGE_CONTENT: true,
|
||||
DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
|
||||
APP_NAME: 'Jitsi Meet',
|
||||
NATIVE_APP_NAME: 'Jitsi Meet',
|
||||
PROVIDER_NAME: 'Jitsi',
|
||||
LANG_DETECTION: true, // Allow i18n to detect the system language
|
||||
INVITATION_POWERED_BY: true,
|
||||
|
||||
/**
|
||||
* If we should show authentication block in profile
|
||||
*/
|
||||
AUTHENTICATION_ENABLE: true,
|
||||
|
||||
/**
|
||||
* The name of the toolbar buttons to display in the toolbar. If present,
|
||||
* the button will display. Exceptions are "livestreaming" and "recording"
|
||||
* which also require being a moderator and some values in config.js to be
|
||||
* enabled. Also, the "profile" button will not display for user's with a
|
||||
* jwt.
|
||||
*/
|
||||
TOOLBAR_BUTTONS: [
|
||||
'microphone', 'camera', 'closedcaptions', 'desktop', 'fullscreen',
|
||||
'fodeviceselection', 'hangup', 'profile', 'chat', 'recording',
|
||||
'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand',
|
||||
'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts',
|
||||
'tileview', 'videobackgroundblur', 'download', 'help', 'mute-everyone',
|
||||
'e2ee', 'security'
|
||||
],
|
||||
|
||||
SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar' ],
|
||||
|
||||
// Determines how the video would fit the screen. 'both' would fit the whole
|
||||
// screen, 'height' would fit the original video height to the height of the
|
||||
// screen, 'width' would fit the original video width to the width of the
|
||||
// screen respecting ratio.
|
||||
VIDEO_LAYOUT_FIT: 'both',
|
||||
|
||||
/**
|
||||
* Whether to only show the filmstrip (and hide the toolbar).
|
||||
*/
|
||||
filmStripOnly: false,
|
||||
|
||||
/**
|
||||
* Whether to show thumbnails in filmstrip as a column instead of as a row.
|
||||
*/
|
||||
VERTICAL_FILMSTRIP: true,
|
||||
|
||||
// A html text to be shown to guests on the close page, false disables it
|
||||
CLOSE_PAGE_GUEST_HINT: false,
|
||||
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
|
||||
RANDOM_AVATAR_URL_PREFIX: false,
|
||||
RANDOM_AVATAR_URL_SUFFIX: false,
|
||||
FILM_STRIP_MAX_HEIGHT: 120,
|
||||
|
||||
// Enables feedback star animation.
|
||||
ENABLE_FEEDBACK_ANIMATION: false,
|
||||
DISABLE_FOCUS_INDICATOR: false,
|
||||
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
|
||||
|
||||
/**
|
||||
* Whether the speech to text transcription subtitles panel is disabled.
|
||||
* If {@code undefined}, defaults to {@code false}.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
DISABLE_TRANSCRIPTION_SUBTITLES: false,
|
||||
|
||||
/**
|
||||
* Whether the ringing sound in the call/ring overlay is disabled. If
|
||||
* {@code undefined}, defaults to {@code false}.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
DISABLE_RINGING: false,
|
||||
AUDIO_LEVEL_PRIMARY_COLOR: 'rgba(255,255,255,0.4)',
|
||||
AUDIO_LEVEL_SECONDARY_COLOR: 'rgba(255,255,255,0.2)',
|
||||
POLICY_LOGO: null,
|
||||
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
|
||||
REMOTE_THUMBNAIL_RATIO: 1, // 1:1
|
||||
// Documentation reference for the live streaming feature.
|
||||
LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live',
|
||||
|
||||
/**
|
||||
* Whether the mobile app Jitsi Meet is to be promoted to participants
|
||||
* attempting to join a conference in a mobile Web browser. If
|
||||
* {@code undefined}, defaults to {@code true}.
|
||||
* A UX mode where the last screen share participant is automatically
|
||||
* pinned. Valid values are the string "remote-only" so remote participants
|
||||
* get pinned but not local, otherwise any truthy value for all participants,
|
||||
* and any falsy value to disable the feature.
|
||||
*
|
||||
* @type {boolean}
|
||||
* Note: this mode is experimental and subject to breakage.
|
||||
*/
|
||||
MOBILE_APP_PROMO: true,
|
||||
|
||||
/**
|
||||
* Maximum coeficient of the ratio of the large video to the visible area
|
||||
* after the large video is scaled to fit the window.
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
|
||||
|
||||
/*
|
||||
* If indicated some of the error dialogs may point to the support URL for
|
||||
* help.
|
||||
*/
|
||||
SUPPORT_URL: 'https://community.jitsi.org/',
|
||||
AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
|
||||
BRAND_WATERMARK_LINK: '',
|
||||
|
||||
CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
|
||||
/**
|
||||
* Whether the connection indicator icon should hide itself based on
|
||||
* connection strength. If true, the connection indicator will remain
|
||||
@@ -156,51 +44,114 @@ var interfaceConfig = {
|
||||
*/
|
||||
CONNECTION_INDICATOR_DISABLED: false,
|
||||
|
||||
/**
|
||||
* If true, hides the video quality label indicating the resolution status
|
||||
* of the current large video.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
VIDEO_QUALITY_LABEL_DISABLED: false,
|
||||
DEFAULT_BACKGROUND: '#474747',
|
||||
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
|
||||
DEFAULT_LOGO_URL: 'images/watermark.png',
|
||||
DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
|
||||
|
||||
/**
|
||||
* If true, will display recent list
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
RECENT_LIST_ENABLED: true,
|
||||
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
|
||||
|
||||
// Names of browsers which should show a warning stating the current browser
|
||||
// has a suboptimal experience. Browsers which are not listed as optimal or
|
||||
// unsupported are considered suboptimal. Valid values are:
|
||||
// chrome, chromium, edge, electron, firefox, nwjs, opera, safari
|
||||
OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ],
|
||||
|
||||
// Browsers, in addition to those which do not fully support WebRTC, that
|
||||
// are not supported and should show the unsupported browser page.
|
||||
UNSUPPORTED_BROWSERS: [],
|
||||
|
||||
/**
|
||||
* A UX mode where the last screen share participant is automatically
|
||||
* pinned. Valid values are the string "remote-only" so remote participants
|
||||
* get pinned but not local, otherwise any truthy value for all participants,
|
||||
* and any falsy value to disable the feature.
|
||||
*
|
||||
* Note: this mode is experimental and subject to breakage.
|
||||
*/
|
||||
AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
|
||||
|
||||
/**
|
||||
* If true, presence status: busy, calling, connected etc. is not displayed.
|
||||
*/
|
||||
DISABLE_PRESENCE_STATUS: false,
|
||||
DISABLE_FOCUS_INDICATOR: false,
|
||||
|
||||
/**
|
||||
* If true, notifications regarding joining/leaving are no longer displayed.
|
||||
*/
|
||||
DISABLE_JOIN_LEAVE_NOTIFICATIONS: false,
|
||||
|
||||
/**
|
||||
* If true, presence status: busy, calling, connected etc. is not displayed.
|
||||
*/
|
||||
DISABLE_PRESENCE_STATUS: false,
|
||||
|
||||
/**
|
||||
* Whether the ringing sound in the call/ring overlay is disabled. If
|
||||
* {@code undefined}, defaults to {@code false}.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
DISABLE_RINGING: false,
|
||||
|
||||
/**
|
||||
* Whether the speech to text transcription subtitles panel is disabled.
|
||||
* If {@code undefined}, defaults to {@code false}.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
DISABLE_TRANSCRIPTION_SUBTITLES: false,
|
||||
|
||||
/**
|
||||
* Whether or not the blurred video background for large video should be
|
||||
* displayed on browsers that can support it.
|
||||
*/
|
||||
DISABLE_VIDEO_BACKGROUND: false,
|
||||
|
||||
DISPLAY_WELCOME_PAGE_CONTENT: true,
|
||||
DISPLAY_WELCOME_PAGE_TOOLBAR_ADDITIONAL_CONTENT: false,
|
||||
|
||||
ENABLE_DIAL_OUT: true,
|
||||
|
||||
ENABLE_FEEDBACK_ANIMATION: false, // Enables feedback star animation.
|
||||
|
||||
FILM_STRIP_MAX_HEIGHT: 120,
|
||||
|
||||
/**
|
||||
* Whether to only show the filmstrip (and hide the toolbar).
|
||||
*/
|
||||
filmStripOnly: false,
|
||||
|
||||
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
|
||||
|
||||
/**
|
||||
* Hide the invite prompt in the header when alone in the meeting.
|
||||
*/
|
||||
HIDE_INVITE_MORE_HEADER: false,
|
||||
|
||||
INITIAL_TOOLBAR_TIMEOUT: 20000,
|
||||
JITSI_WATERMARK_LINK: 'https://jitsi.org',
|
||||
|
||||
LANG_DETECTION: true, // Allow i18n to detect the system language
|
||||
LIVE_STREAMING_HELP_LINK: 'https://jitsi.org/live', // Documentation reference for the live streaming feature.
|
||||
LOCAL_THUMBNAIL_RATIO: 16 / 9, // 16:9
|
||||
|
||||
/**
|
||||
* Maximum coefficient of the ratio of the large video to the visible area
|
||||
* after the large video is scaled to fit the window.
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
MAXIMUM_ZOOMING_COEFFICIENT: 1.3,
|
||||
|
||||
/**
|
||||
* Whether the mobile app Jitsi Meet is to be promoted to participants
|
||||
* attempting to join a conference in a mobile Web browser. If
|
||||
* {@code undefined}, defaults to {@code true}.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
MOBILE_APP_PROMO: true,
|
||||
|
||||
NATIVE_APP_NAME: 'Jitsi Meet',
|
||||
|
||||
// Names of browsers which should show a warning stating the current browser
|
||||
// has a suboptimal experience. Browsers which are not listed as optimal or
|
||||
// unsupported are considered suboptimal. Valid values are:
|
||||
// chrome, chromium, edge, electron, firefox, nwjs, opera, safari
|
||||
OPTIMAL_BROWSERS: [ 'chrome', 'chromium', 'firefox', 'nwjs', 'electron', 'safari' ],
|
||||
|
||||
POLICY_LOGO: null,
|
||||
PROVIDER_NAME: 'Jitsi',
|
||||
|
||||
/**
|
||||
* If true, will display recent list
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
RECENT_LIST_ENABLED: true,
|
||||
REMOTE_THUMBNAIL_RATIO: 1, // 1:1
|
||||
|
||||
SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar' ],
|
||||
SHOW_BRAND_WATERMARK: false,
|
||||
|
||||
/**
|
||||
* Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
|
||||
* If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
|
||||
@@ -208,6 +159,64 @@ var interfaceConfig = {
|
||||
*/
|
||||
SHOW_CHROME_EXTENSION_BANNER: false,
|
||||
|
||||
SHOW_DEEP_LINKING_IMAGE: false,
|
||||
SHOW_JITSI_WATERMARK: true,
|
||||
SHOW_POWERED_BY: false,
|
||||
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
|
||||
SHOW_WATERMARK_FOR_GUESTS: true, // if watermark is disabled by default, it can be shown only for guests
|
||||
|
||||
/*
|
||||
* If indicated some of the error dialogs may point to the support URL for
|
||||
* help.
|
||||
*/
|
||||
SUPPORT_URL: 'https://community.jitsi.org/',
|
||||
|
||||
TOOLBAR_ALWAYS_VISIBLE: false,
|
||||
|
||||
/**
|
||||
* The name of the toolbar buttons to display in the toolbar, including the
|
||||
* "More actions" menu. If present, the button will display. Exceptions are
|
||||
* "livestreaming" and "recording" which also require being a moderator and
|
||||
* some values in config.js to be enabled. Also, the "profile" button will
|
||||
* not display for users with a JWT.
|
||||
* Notes:
|
||||
* - it's impossible to choose which buttons go in the "More actions" menu
|
||||
* - it's impossible to control the placement of buttons
|
||||
* - 'desktop' controls the "Share your screen" button
|
||||
*/
|
||||
TOOLBAR_BUTTONS: [
|
||||
'microphone', 'camera', 'closedcaptions', 'desktop', 'fullscreen',
|
||||
'fodeviceselection', 'hangup', 'profile', 'chat', 'recording',
|
||||
'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand',
|
||||
'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts',
|
||||
'tileview', 'videobackgroundblur', 'download', 'help', 'mute-everyone', 'security'
|
||||
],
|
||||
|
||||
TOOLBAR_TIMEOUT: 4000,
|
||||
|
||||
// Browsers, in addition to those which do not fully support WebRTC, that
|
||||
// are not supported and should show the unsupported browser page.
|
||||
UNSUPPORTED_BROWSERS: [],
|
||||
|
||||
/**
|
||||
* Whether to show thumbnails in filmstrip as a column instead of as a row.
|
||||
*/
|
||||
VERTICAL_FILMSTRIP: true,
|
||||
|
||||
// Determines how the video would fit the screen. 'both' would fit the whole
|
||||
// screen, 'height' would fit the original video height to the height of the
|
||||
// screen, 'width' would fit the original video width to the width of the
|
||||
// screen respecting ratio.
|
||||
VIDEO_LAYOUT_FIT: 'both',
|
||||
|
||||
/**
|
||||
* If true, hides the video quality label indicating the resolution status
|
||||
* of the current large video.
|
||||
*
|
||||
* @type {boolean}
|
||||
*/
|
||||
VIDEO_QUALITY_LABEL_DISABLED: false,
|
||||
|
||||
/**
|
||||
* When enabled, the kick participant button will not be presented for users without a JWT
|
||||
*/
|
||||
@@ -260,15 +269,15 @@ var interfaceConfig = {
|
||||
// List of undocumented settings
|
||||
/**
|
||||
INDICATOR_FONT_SIZES
|
||||
MOBILE_DYNAMIC_LINK
|
||||
PHONE_NUMBER_REGEX
|
||||
*/
|
||||
|
||||
// Allow all above example options to include a trailing comma and
|
||||
// prevent fear when commenting out the last value.
|
||||
// eslint-disable-next-line sort-keys
|
||||
makeJsonParserHappy: 'even if last key had a trailing comma'
|
||||
|
||||
// no configuration value should follow this line.
|
||||
// No configuration value should follow this line.
|
||||
};
|
||||
|
||||
/* eslint-enable no-unused-vars, no-var, max-len */
|
||||
|
||||
@@ -293,7 +293,7 @@ PODS:
|
||||
- React
|
||||
- react-native-netinfo (4.1.5):
|
||||
- React
|
||||
- react-native-webrtc (1.75.3):
|
||||
- react-native-webrtc (1.84.0):
|
||||
- React
|
||||
- react-native-webview (7.4.1):
|
||||
- React
|
||||
@@ -569,7 +569,7 @@ SPEC CHECKSUMS:
|
||||
react-native-calendar-events: 1442fad71a00388f933cfa25512588fec300fcf8
|
||||
react-native-keep-awake: eba3137546b10003361b37c761f6c429b59814ae
|
||||
react-native-netinfo: 8d8db463bcc5db66a8ac5c48a7d86beb3b92f61a
|
||||
react-native-webrtc: 86d841823e66d68cc1f86712db1c2956056bf0c2
|
||||
react-native-webrtc: 9268ae9a2bc9730796b0968d012327e92c392adf
|
||||
react-native-webview: 4dbc1d2a4a6b9c5e9e723c62651917aa2b5e579e
|
||||
React-RCTActionSheet: b72ddbfbe15b44ce691d128e4b582f4bb9abb540
|
||||
React-RCTAnimation: cfaefba5024499d336b76ab850e6bd33b232b5e3
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
jitsiMeet.universalLinkDomains = @[@"meet.jit.si", @"alpha.jitsi.net", @"beta.meet.jit.si"];
|
||||
|
||||
jitsiMeet.defaultConferenceOptions = [JitsiMeetConferenceOptions fromBuilder:^(JitsiMeetConferenceOptionsBuilder *builder) {
|
||||
[builder setFeatureFlag:@"resolution" withValue:@(360)];
|
||||
builder.serverURL = [NSURL URLWithString:@"https://meet.jit.si"];
|
||||
builder.welcomePageEnabled = YES;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2.9.0</string>
|
||||
<string>2.9.1</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"en": "Anglès",
|
||||
"af": "Afrikaans",
|
||||
"ar": "Àrab",
|
||||
"bg": "Búlgar",
|
||||
"ca": "Català",
|
||||
"cs": "Txec",
|
||||
@@ -10,25 +11,36 @@
|
||||
"enGB": "Anglès (Regne Unit)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Espanyol",
|
||||
"esUS": "Espanyol (Amèrica llatina)",
|
||||
"esUS": "Espanyol (Amèrica Llatina)",
|
||||
"et": "Estonià",
|
||||
"eu": "Èuscar",
|
||||
"fi": "Finès",
|
||||
"fr": "Francès",
|
||||
"frCA": "Francès (Canadà)",
|
||||
"he": "Hebreu",
|
||||
"mr": "Marathi",
|
||||
"hr": "Croat",
|
||||
"hu": "Hongarès",
|
||||
"hy": "Armeni",
|
||||
"id": "Indonesi",
|
||||
"it": "Italià",
|
||||
"ja": "Japonès",
|
||||
"ko": "Coreà",
|
||||
"lt": "Lituà",
|
||||
"nl": "Neerlandès",
|
||||
"oc": "Occità",
|
||||
"pl": "Polonès",
|
||||
"ptBR": "Portuguès (Brasil)",
|
||||
"ru": "Rus",
|
||||
"ro": "Romanès",
|
||||
"sc": "Sard",
|
||||
"sk": "Eslovac",
|
||||
"sl": "Eslovè",
|
||||
"sv": "Suec",
|
||||
"th": "Tai",
|
||||
"tr": "Turc",
|
||||
"uk": "Ucraïnès",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Xinès (Xina)",
|
||||
"zhTW": "Xinès (Taiwan)",
|
||||
"et": "Estonià"
|
||||
"zhTW": "Xinès (Taiwan)"
|
||||
}
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
"it": "Taṭalyant",
|
||||
"ja": "Tajapunit",
|
||||
"ko": "Takurit",
|
||||
"kab": "Taqbaylit",
|
||||
"nb": "Tanurvijit Bukmal",
|
||||
"oc": "Tuksitant",
|
||||
"pl": "Tapulunit",
|
||||
@@ -23,5 +24,25 @@
|
||||
"sv": "Taswidit",
|
||||
"tr": "Taṭurkit",
|
||||
"vi": "Tavyitnamit",
|
||||
"zhCN": "Tavyitnamit"
|
||||
"zhCN": "Tavyitnamit",
|
||||
"ro": "Tarumanit",
|
||||
"ar": "Taɛrabt",
|
||||
"zhTW": "Tacinwat (Taiwan)",
|
||||
"uk": "Tukranit",
|
||||
"th": "Tayland",
|
||||
"sc": "Tasardit",
|
||||
"nl": "Tahulandit",
|
||||
"lt": "Taliṭwanit",
|
||||
"id": "Tandunizit",
|
||||
"hu": "Tahungrit",
|
||||
"hr": "Takrwasit",
|
||||
"he": "Taɛbrit",
|
||||
"frCA": "Tafṛansist (Kanada)",
|
||||
"fi": "Tafinit",
|
||||
"eu": "Tabaskit",
|
||||
"et": "Tastunit",
|
||||
"esUS": "Taspanit (Temrikt Talatinit)",
|
||||
"enGB": "Tagnizit (Tagldit i ddukklen)",
|
||||
"da": "Tadanit",
|
||||
"ca": "Takaṭalant"
|
||||
}
|
||||
|
||||
@@ -38,5 +38,11 @@
|
||||
"lt": "Lituanian",
|
||||
"id": "Indonesian",
|
||||
"he": "Ebrèu",
|
||||
"eu": "Basc"
|
||||
"eu": "Basc",
|
||||
"mr": "Marathi",
|
||||
"sl": "Eslovèn",
|
||||
"ro": "Romanian",
|
||||
"ar": "Arabi"
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,21 +1,36 @@
|
||||
{
|
||||
"addPeople": {
|
||||
"add": "Προσκάλεσε",
|
||||
"addContacts": "Προσκάλεσε τις επαφές σου",
|
||||
"copyInvite": "Αντίγραψε την πρόσκληση της συνάντησης",
|
||||
"copyLink": "Αντίγραψε το σύνδεσμο της συνάντησης",
|
||||
"copyStream": "Αντίγραψε το σύνδεσμο της ζωντανής μετάδοσης",
|
||||
"countryNotSupported": "Δεν υποστηρίζουμε αυτόν τον προορισμό ακόμα.",
|
||||
"countryReminder": "Κλήση εκτός ΗΠΑ; Παρακαλώ βεβαιωθείτε ότι ξεκινάτε με τον κωδικό της χώρας!",
|
||||
"defaultEmail": "Το προεπιλεγμένο Email σου",
|
||||
"disabled": "Δεν μπορείτε να προσκαλέσετε άτομα.",
|
||||
"failedToAdd": "Αποτυχία προσθήκης συμμετεχόντων",
|
||||
"footerText": "Η κλήση είναι απενεργοποιημένη.",
|
||||
"googleEmail": "Google Email",
|
||||
"inviteMoreHeader": "Είσαι ο μόναδικός συμμετέχων στη συνάντηση",
|
||||
"inviteMoreMailSubject": "Συμμετοχή στη συνάντηση {{appName}}",
|
||||
"inviteMorePrompt": "Πρόσκληση συμμετεχόντων",
|
||||
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
|
||||
"loading": "Αναζήτηση για ανθρώπους και αριθμούς τηλεφώνου",
|
||||
"loadingNumber": "Ο αριθμός τηλεφώνου επικυρώνεται",
|
||||
"loadingPeople": "Γίνεται αναζήτηση για ανθρώπους που θα καλεστούν",
|
||||
"noResults": "Δε βρέθηκαν αποτελέσματα αναζήτησης",
|
||||
"outlookEmail": "Outlook Email",
|
||||
"noValidNumbers": "Παρακαλώ εισάγετε έναν αριθμό τηλεφώνου",
|
||||
"searchNumbers": "Προσθέστε αριθμούς τηλεφώνου",
|
||||
"searchPeople": "Αναζήτηση για ανθρώπους",
|
||||
"searchPeopleAndNumbers": "Αναζήτηση για ανθρώπους ή προσθήκη των αριθμών τηλεφώνου τους",
|
||||
"shareInvite": "Κοινή χρήση πρόσκλησης συνάντησης",
|
||||
"shareLink": "Κοινή χρήση συνδέσμου συνάντησης για πρόσκληση άλλων",
|
||||
"shareStream": "Κοινή χρήση του συνδέσμου ζωντανής μετάδοσης",
|
||||
"telephone": "Τηλέφωνο: {{number}}",
|
||||
"title": "Καλέστε ανθρώπους σε αυτή τη συνάντηση"
|
||||
"title": "Καλέστε ανθρώπους σε αυτή τη συνάντηση",
|
||||
"yahooEmail": "Yahoo Email"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -79,7 +94,7 @@
|
||||
"ERROR": "Σφάλμα",
|
||||
"FETCH_SESSION_ID": "Απόκτηση session-id...",
|
||||
"GET_SESSION_ID_ERROR": "Λήψη session-id σφάλματος: {{code}}",
|
||||
"GOT_SESSION_ID": "Απόκτηση session-id... Κάνει",
|
||||
"GOT_SESSION_ID": "Απόκτηση session-id... Έγινε",
|
||||
"LOW_BANDWIDTH": "Το βίντεο για το {{displayName}} έχει απενεργοποιηθεί για να εξοικονομήσετε εύρος ζώνης"
|
||||
},
|
||||
"connectionindicator": {
|
||||
@@ -98,9 +113,9 @@
|
||||
"more": "Εμφάνιση περισσότερων",
|
||||
"packetloss": "Απώλεια πακέτων:",
|
||||
"quality": {
|
||||
"good": "Καλά",
|
||||
"inactive": "Ανενεργά",
|
||||
"lost": "Χαμένα",
|
||||
"good": "Καλή",
|
||||
"inactive": "Ανενεργό",
|
||||
"lost": "Χαμένη",
|
||||
"nonoptimal": "Μέτρια",
|
||||
"poor": "Κακή"
|
||||
},
|
||||
@@ -123,8 +138,10 @@
|
||||
"description": "Δεν έγινε τίποτα; Προσπαθήσαμε να κάνουμε έναρξη σύσκεψης στο {{app}} desktop app. Προσπαθήστε ξανά ή ξεκινήστε το {{app}} web app.",
|
||||
"descriptionWithoutWeb": "Δεν έγινε τίποτα; Προσπαθήσαμε να κάνουμε έναρξη σύσκεψης στο {{app}} desktop app.",
|
||||
"downloadApp": "Κατεβάστε την εφαρμογή",
|
||||
"ifDoNotHaveApp": "If you don't have the app yet:",
|
||||
"ifHaveApp": "If you already have the app:",
|
||||
"joinInApp": "Join this meeting using the app",
|
||||
"launchWebButton": "Έναρξη στο web",
|
||||
"openApp": "Συνεχίστε στην εφαρμογή",
|
||||
"title": "Γίνεται έναρξη της συνάντησής σας στο {{app}}...",
|
||||
"tryAgainButton": "Προσπαθήστε ξανά στην επιφάνεια εργασίας"
|
||||
},
|
||||
@@ -146,6 +163,7 @@
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Ζωντανή ροή"
|
||||
},
|
||||
"add": "Add",
|
||||
"allow": "Επίτρεψε",
|
||||
"alreadySharedVideoMsg": "Ένας άλλος συμμετέχων κάνει ήδη κοινή προβολή βίντεο. Η διάσκεψη αυτή επιτρέπει μόνο ένα κοινόχρηστο βίντεο τη φορά.",
|
||||
"alreadySharedVideoTitle": "Μόνο ένα κοινόχρηστο βίντεο επιτρέπεται τη φορά",
|
||||
@@ -174,22 +192,18 @@
|
||||
"copy": "Αντιγραφή",
|
||||
"dismiss": "Απόρριψη",
|
||||
"displayNameRequired": "Γεια σου! Ποιο είναι το όνομα σου;",
|
||||
"done": "Κάνει",
|
||||
"e2eeDescription": "<p>Η από άκρη σε άκρη κρυπτογράφηση είναι σήμερα <strong>σε ΠΕΙΡΑΜΑΤΙΚΟ στάδιο</strong>. Παρακαλώ δείτε <a href='https://jitsi.org/blog/e2ee/' target='_blank'>αυτήν την ανάρτηση</a> για λεπτομέρειες.</p><br/><p>Παρακαλώ να έχετε κατά νου ότι η ενεργοποίηση της από άκρη σε άκρη κρυπτογράφησης θα απενεργοποιήσει από την πλευρά του διακομιστή υπηρεσίες όπως: καταγραφή, live streaming και συμμετοχή μέσω τηλεφώνου. Επίσης, να έχετε κατά νου ότι η συνάντηση θα λειτουργήσει μόνο για τους ανθρώπους που συνδέονται από φυλλομετρητές με υποστήριξη για insertable streams.</p>",
|
||||
"e2eeLabel": "Κλειδί",
|
||||
"e2eeTitle": "Από άκρη σε άκρη κρυπτογράφηση",
|
||||
"e2eeWarning": "<br /><p><strong>ΠΡΟΕΙΔΟΠΟΊΗΣΗ:</strong> Δε φαίνεται να έχουν όλοι οι συμμετέχοντες στη συνάντηση αυτή υποστήριξη για από άκρη σε άκρη κρυπτογράφηση. Αν την ενεργοποιήσετε, δεν θα μπορέσουν να σας δουν ούτε να σας ακούσουν.</p>",
|
||||
"done": "Έγινε",
|
||||
"e2eeDescription": "Η από άκρη σε άκρη κρυπτογράφηση είναι σήμερα σε ΠΕΙΡΑΜΑΤΙΚΟ στάδιο. Παρακαλώ να έχετε κατά νου ότι η ενεργοποίηση της από άκρη σε άκρη κρυπτογράφησης θα απενεργοποιήσει από την πλευρά του διακομιστή υπηρεσίες όπως: καταγραφή, live streaming και συμμετοχή μέσω τηλεφώνου. Επίσης, να έχετε κατά νου ότι η συνάντηση θα λειτουργήσει μόνο για τους ανθρώπους που συνδέονται από φυλλομετρητές με υποστήριξη για insertable streams.",
|
||||
"e2eeNoKey": "None",
|
||||
"e2eeSet": "Set",
|
||||
"e2eeToggleSet": "Set key",
|
||||
"e2eeWarning": "ΠΡΟΕΙΔΟΠΟΊΗΣΗ: Δε φαίνεται να έχουν όλοι οι συμμετέχοντες στη συνάντηση αυτή υποστήριξη για από άκρη σε άκρη κρυπτογράφηση. Αν την ενεργοποιήσετε, δεν θα μπορέσουν να σας δουν ούτε να σας ακούσουν.",
|
||||
"enterDisplayName": "Παρακαλώ εισάγετε το όνομά σας εδώ",
|
||||
"error": "Σφάλμα",
|
||||
"externalInstallationMsg": "Θα πρέπει να εγκαταστήσετε την επέκτασή μας για διαμοιρασμό επιφάνειας εργασίας.",
|
||||
"externalInstallationTitle": "Απαιτείται επέκταση",
|
||||
"goToStore": "Μετάβαση στο webstore",
|
||||
"gracefulShutdown": "Μας υπηρεσία είναι προς το παρόν εκτός λειτουργίας για συντήρηση. Παρακαλώ προσπαθήστε ξανά αργότερα.",
|
||||
"IamHost": "Είμαι ο οικοδεσπότης",
|
||||
"incorrectRoomLockPassword": "Εσφαλμένος κωδικός πρόσβασης",
|
||||
"incorrectPassword": "Λανθασμένο όνομα χρήστη ή κωδικός πρόσβασης",
|
||||
"inlineInstallationMsg": "Θα πρέπει να εγκαταστήσετε την επέκτασή μας για διαμοιρασμό επιφάνειας εργασίας.",
|
||||
"inlineInstallExtension": "Εγκαταστήστε τώρα",
|
||||
"internalError": "Ουπς! Κάτι πήγε στραβά. Παρουσιάστηκε το παρακάτω σφάλμα: {{error}}",
|
||||
"internalErrorTitle": "Εσωτερικό σφάλμα",
|
||||
"kickMessage": "Μπορείτε να επικοινωνήσετε με το {{participantDisplayName}} για περισσότερες λεπτομέρειες.",
|
||||
@@ -198,6 +212,7 @@
|
||||
"kickParticipantTitle": "Θέλετε να αποβάλετε αυτόν τον συμμετέχοντα;",
|
||||
"kickTitle": "Ωχ! Ο/Η {{participantDisplayName}} σας απέβαλε από τη διάσκεψη",
|
||||
"liveStreaming": "Ζωντανή ροή",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Not possible while recording is active",
|
||||
"liveStreamingDisabledForGuestTooltip": "Οι επισκέπτες δεν μπορούν να ξεκινήσουν τη ζωντανή ροή",
|
||||
"liveStreamingDisabledTooltip": "Έναρξη ζωντανής ροής απενεργοποιημένη",
|
||||
"lockMessage": "Αποτυχία κλειδώματος της διάσκεψης.",
|
||||
@@ -231,6 +246,7 @@
|
||||
"popupError": "Ο φυλλομετρητής σας μπλοκάρει τα pop-up windows από αυτό το site. Παρακαλούμε ενεργοποιήστε τα pop-ups στις ρυθμίσεις ασφαλείας του προγράμματος περιήγησής σας και προσπαθήστε ξανά.",
|
||||
"popupErrorTitle": "Pop-up μπλοκαρίστηκε",
|
||||
"recording": "Γίνεται εγγραφή",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
|
||||
"recordingDisabledForGuestTooltip": "Οι επισκέπτες δεν μπορούν να ξεκινήσουν τις ηχογραφήσεις.",
|
||||
"recordingDisabledTooltip": "Έναρξη εγγραφής απενεργοποιημένη.",
|
||||
"rejoinNow": "Επανασύνδεση τώρα",
|
||||
@@ -251,8 +267,6 @@
|
||||
"screenSharingAudio": "Διαμοιρασμός ήχου",
|
||||
"screenSharingFailedToInstall": "Ουπς! Η εγκατάσταση της επέκταση κοινής χρήσης οθόνης απέτυχε.",
|
||||
"screenSharingFailedToInstallTitle": "Η εγκατάσταση της επέκταση κοινής χρήσης οθόνης απέτυχε",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Κάτι πήγε στραβά ενώ προσπαθούσατε να μοιραστείτε την οθόνη σας. Παρακαλούμε βεβαιωθείτε ότι μας έχετε δώσει την άδεια να το πράξουμε.",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Ουπς! Δεν ήμασταν σε θέση να ξεκινήσουμε την κοινή χρήση οθόνης!",
|
||||
"screenSharingPermissionDeniedError": "Ουπς! Κάτι πήγε στραβά με τα δικαιώματα της επέκτασης κοινής χρήσης οθόνης. Παρακαλώ ξαναφορτώστε και προσπαθήστε ξανά.",
|
||||
"sendPrivateMessage": "Πρόσφατα λάβατε ένα προσωπικό μήνυμα. Σκοπεύετε να απαντήσετε σε αυτό ιδιωτικά ή θέλετε να στείλετε το μήνυμά σας στην ομάδα;",
|
||||
"sendPrivateMessageCancel": "Στείλτε στην ομάδα",
|
||||
@@ -390,6 +404,8 @@
|
||||
"failedToStart": "Η ζωντανή ροή απέτυχε να ξεκινήσει",
|
||||
"getStreamKeyManually": "Δεν ήμασταν σε θέση να φέρουμε κάποια ζωντανή ροή. Προσπαθήστε να πάρετε το κλειδί της ζωντανής ροής από το YouTube.",
|
||||
"invalidStreamKey": "Το κλειδί της ζωντανής ροής μπορεί να είναι εσφαλμένο.",
|
||||
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Η ζωντανή ροή σταμάτησε",
|
||||
"offBy": "Ο/Η {{name}} σταμάτησε τη ζωντανή ροή",
|
||||
"on": "Ζωντανή ροή",
|
||||
@@ -476,6 +492,40 @@
|
||||
"passwordSetRemotely": "ορίστηκε από άλλον συμμετέχοντα",
|
||||
"passwordDigitsOnly": "Έως {{number}} ψηφία",
|
||||
"poweredby": "με τη δύναμη του",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Σφάλμα ήχου και βίντεο:",
|
||||
"audioOnlyError": "Σφάλμα ήχου:",
|
||||
"audioTrackError": "Δεν ήταν δυνατή η δημιουργία κομματιού ήχου.",
|
||||
"callMe": "Κάλεσέ με",
|
||||
"callMeAtNumber": "Κάλεσέ με σε αυτό το νούμερο:",
|
||||
"configuringDevices": "Γίνεται παραμετροποίηση συσκευών...",
|
||||
"connectedWithAudioQ": "Είστε συνδεδεμένοι με ήχο;",
|
||||
"copyAndShare": "Αντιγραφή και κοινή χρήση συνδέσμου συνάντησης",
|
||||
"dialInMeeting": "Κλήση στη συνάντηση",
|
||||
"dialInPin": "Κλήση στη συνάντηση και εισαγωγή κωδικού PIN:",
|
||||
"dialing": "Γίνεται κλήση",
|
||||
"doNotShow": "Να μην εμφανιστεί αυτό ξανά",
|
||||
"errorDialOut": "Η κλήση δεν ήταν δυνατή",
|
||||
"errorDialOutDisconnected": "Η κλήση δεν ήταν δυνατή. Έγινε αποσύνδεση",
|
||||
"errorDialOutFailed": "Η κλήση δεν ήταν δυνατή. Η κλήση απέτυχε",
|
||||
"errorDialOutStatus": "Σφάλμα λήψης κατάστασης κλήσης",
|
||||
"errorStatusCode": "Σφάλμα κλήσης, κωδικός κατάστασης: {{status}}",
|
||||
"errorValidation": "Η επικύρωση του αριθμού απέτυχε",
|
||||
"iWantToDialIn": "Θέλω να κάνω κλήση",
|
||||
"joinAudioByPhone": "Συμμετοχή με ήχο τηλεφώνου",
|
||||
"joinMeeting": "Συμμετοχή στη συνάντηση",
|
||||
"joinWithoutAudio": "Συμμετοχή χωρίς ήχο",
|
||||
"initiated": "Η κλήση ξεκίνησε",
|
||||
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
|
||||
"lookGood": "Ακούγεται ότι το μικρόφωνο σας λειτουργεί άψογα",
|
||||
"or": "ή",
|
||||
"calling": "Γίνεται κλήση",
|
||||
"startWithPhone": "Έναρξη με ήχο τηλεφώνου",
|
||||
"screenSharingError": "Σφάλμα διαμοιρασμού οθόνης:",
|
||||
"videoOnlyError": "Σφάλμα βίντεο:",
|
||||
"videoTrackError": "Δεν ήταν δυνατή η δημιουργία κομματιού βίντεο.",
|
||||
"viewAllNumbers": "προβολή όλων των αριθμών"
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "Απασχολημένος",
|
||||
"calling": "Γίνεται κλήση...",
|
||||
@@ -498,6 +548,8 @@
|
||||
},
|
||||
"raisedHand": "Θα ήθελα να μιλήσω",
|
||||
"recording": {
|
||||
"limitNotificationDescriptionWeb": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε το <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε <3>{{app}}</3>.",
|
||||
"authDropboxText": "Ανεβάστε στο Dropbox",
|
||||
"availableSpace": "Διαθέσιμος χώρος: {{spaceLeft}} MB (περίπου {{duration}} λεπτά εγγραφής)",
|
||||
"beta": "BETA",
|
||||
@@ -527,6 +579,11 @@
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Τραβήξτε για να ανανεώσετε"
|
||||
},
|
||||
"security": {
|
||||
"about": "Έχετε τη δυνατότητα να προσθέσετε κωδικό στη συνάντησή σας. Οι συμμετέχοντες θα πρέπει να τον εισάγουν για να τους δοθεί πρόσβαση στη συνάντηση.",
|
||||
"insecureRoomNameWarning": "Το όνομα του διαδρόμου δεν είναι ασφαλές. Ανεπιθύμητοι συμμετέχοντες μπορεί να συμμετάσχουν στη συνάντησή σας. Σκεφτείτε το να ασφαλίσετε τη συνάντηση σας χρησιμοποιώντας το κουμπί Ασφάλεια.",
|
||||
"securityOptions": "Επιλογές ασφαλείας"
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
"about": "H σύνδεση ημερολογίου του {{appName}} χρησιμοποιείται για την ασφαλή πρόσβαση του ημερολογίου σας, ώστε να μπορεί να διαβάσει τις επερχόμενες εκδηλώσεις.",
|
||||
@@ -585,7 +642,7 @@
|
||||
"name": "Όνομα",
|
||||
"seconds": "{{count}}δ",
|
||||
"speakerStats": "Στατιστικά ομιλητή",
|
||||
"speakerTime": "Ώρα ομιλητή"
|
||||
"speakerTime": "Χρόνος ομιλητή"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -612,6 +669,7 @@
|
||||
"help": "Βοήθεια",
|
||||
"invite": "Πρόσκληση συμμετεχόντων",
|
||||
"kick": "Αποβολή συμμετέχοντα",
|
||||
"lobbyButton": "Ενεργοποίηση/απενεργοποίηση λειτουργίας διαδρόμου",
|
||||
"localRecording": "Εναλλαγή ελέγχων τοπικής καταγραφής",
|
||||
"lockRoom": "Εναλλαγή κωδικού πρόσβασης συνάντησης",
|
||||
"moreActions": "Εναλλαγή μενού περισσότερων ενεργειών",
|
||||
@@ -625,6 +683,7 @@
|
||||
"raiseHand": "Εναλλαγή σηκώματος χεριού",
|
||||
"recording": "Εναλλαγή καταγραφής",
|
||||
"remoteMute": "Σίγαση συμμετέχοντα",
|
||||
"security": "Επιλογές ασφαλείας",
|
||||
"Settings": "Εναλλαγή ρυθμίσεων",
|
||||
"sharedvideo": "Εναλλαγή κοινής χρήσης βίντεο στο Youtube",
|
||||
"shareRoom": "Προσκαλέστε κάποιον",
|
||||
@@ -658,6 +717,8 @@
|
||||
"hangup": "Αποσύνδεση",
|
||||
"help": "Βοήθεια",
|
||||
"invite": "Πρόσκληση συμμετεχόντων",
|
||||
"lobbyButtonDisable": "Απενεργοποίηση λειτουργίας διαδρόμου",
|
||||
"lobbyButtonEnable": "Ενεργοποίηση λειτουργίας διαδρόμου",
|
||||
"login": "Είσοδος",
|
||||
"logout": "Αποσύνδεση",
|
||||
"lowerYourHand": "Κατεβάστε το χέρι σας",
|
||||
@@ -678,6 +739,7 @@
|
||||
"profile": "Επεξεργαστείτε το προφίλ σας",
|
||||
"raiseHand": "Σηκώστε / κατεβάστε το χέρι σας",
|
||||
"raiseYourHand": "Σηκώστε το χέρι σας",
|
||||
"security": "Επιλογές ασφαλείας",
|
||||
"Settings": "Ρυθμίσεις",
|
||||
"sharedvideo": "Μοιραστείτε βίντεο στο YouTube",
|
||||
"shareRoom": "Προσκαλέστε κάποιον",
|
||||
@@ -743,9 +805,6 @@
|
||||
"lowDefinition": "Χαμηλής ευκρίνειας",
|
||||
"onlyAudioAvailable": "Μόνο ο ήχος είναι διαθέσιμος",
|
||||
"onlyAudioSupported": "Υποστηρίζουμε μόνο ήχο σε αυτό το πρόγραμμα περιήγησης.",
|
||||
"p2pEnabled": "Λειτουργία Peer to Peer Ενεργοποιημένη",
|
||||
"p2pVideoQualityDescription": "Σε λειτουργία peer-to-peer, η ποιότητα του εισερχόμενου βίντεο μπορεί μόνο να εναλλάσσεται μεταξύ της υψηλής και μόνο ήχου. Οι υπόλοιπες ρυθμίσεις δεν θα ενεργοποιηθούν μέχρι να τερματιστεί η λειτουργία peer to peer.",
|
||||
"recHighDefinitionOnly": "Να προτιμηθεί υψηλή ευκρίνεια.",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Προβολή βίντεο τυπικής ανάλυσης",
|
||||
"standardDefinition": "Τυπική ανάλυση"
|
||||
@@ -800,32 +859,31 @@
|
||||
"helpView": {
|
||||
"header": "Κέντρο βοήθειας"
|
||||
},
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Σφάλμα ήχου και βίντεο:",
|
||||
"audioOnlyError": "Σφάλμα ήχου:",
|
||||
"audioTrackError": "Δεν ήταν δυνατό να δημιουργηθεί το κομμάτι ήχου.",
|
||||
"callMe": "Κάλεσέ με",
|
||||
"callMeAtNumber": "Κάλεσε με σε αυτό το νούμερο:",
|
||||
"configuringDevices": "Διαμόρφωση συσκευών",
|
||||
"connectedWithAudioQ": "Είστε συνδεδεμένοι με ήχο;",
|
||||
"copyAndShare": "Αντιγραφή & διαμοιρασμός συνδέσμου συνάντησης",
|
||||
"dialInMeeting": "Καλέστε στη συνάντηση",
|
||||
"dialInPin": "Καλέστε στη συνάντηση και εισάγετε κωδικό PIN:",
|
||||
"dialing": "Γίνεται κλήση",
|
||||
"doNotShow": "Να μην εμφανιστεί αυτό ξανά",
|
||||
"iWantToDialIn": "Θέλω να καλέσω",
|
||||
"joinAudioByPhone": "Σύνδεση με ήχο τηλεφώνου",
|
||||
"joinMeeting": "Σύνδεση στη συνάντηση",
|
||||
"joinWithoutAudio": "Σύνδεση χωρίς ήχο",
|
||||
"initiated": "Η κλήση ξεκίνησε",
|
||||
"linkCopied": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο",
|
||||
"lookGood": "Ακούγεται ότι το μικρόφωνό σας δουλεύει σωστά",
|
||||
"or": "ή",
|
||||
"calling": "Γίνεται κλήση...",
|
||||
"startWithPhone": "Έναρξη με ήχο τηλεφώνου",
|
||||
"screenSharingError": "Σφάλμα διαμοιρασμού οθόνης:",
|
||||
"videoOnlyError": "Σφάλμα βίντεο:",
|
||||
"videoTrackError": "Δεν μπορεί να δημιουργηθεί το βίντεο",
|
||||
"viewAllNumbers": "προβολή όλων των αριθμών"
|
||||
"lobby": {
|
||||
"allow": "Επίτρεψε",
|
||||
"backToKnockModeButton": "Χωρίς κωδικό, ζητήστε πρόσβαση αντί αυτού",
|
||||
"dialogTitle": "Λειτουργία διαδρόμου",
|
||||
"disableDialogContent": "Η λειτουργία διαδρόμου είναι ενεργοποιημένη. Αυτή η λειτουργία εξασφαλιζει ότι οι ανεπιθύμητοι συμμετέχοντες δεν μπορούν να προστεθούν στη συνάντηση. Θέλετε να την απαεργοποιήσετε;",
|
||||
"disableDialogSubmit": "Απενεργοποίηση",
|
||||
"emailField": "Εισάγετε τη διεύθυνση email σας",
|
||||
"enableDialogPasswordField": "Ορισμός κωδικού (προαιρετικός)",
|
||||
"enableDialogSubmit": "Ενεργοποίηση",
|
||||
"enableDialogText": "Η ενεργοποίηση λειτουργίας διαδρόμου σας επιτρέπει να προστατεύσετε τη συνάντηση σας, επιτρέποντας την είσοδο μόνο μετά από επίσημη έγκριση από έναν διαχειριστή.",
|
||||
"enterPasswordButton": "Εισαγωγή κωδικού συνάντησής",
|
||||
"enterPasswordTitle": "Εισάγετε κωδικό για να προστεθείτε στη συνομιλία",
|
||||
"invalidPassword": "Εσφαλμένος κωδικός",
|
||||
"joiningMessage": "Θα προστεθείτε στη συνάντηση μόλις κάποιος αποδεχτεί το αίτημά σας",
|
||||
"joinWithPasswordMessage": "Γίνεται προσπάθεια εισόδου με κωδικό, παρακαλώ περιμένετε...",
|
||||
"joinRejectedMessage": "Το αίτημα εισόδου σας απορρίφθηκε από έναν διαχειριστή.",
|
||||
"joinTitle": "Προσθήκη σε συνάντηση",
|
||||
"joiningTitle": "Γίνεται αίτηση εισόδου σε συνάντηση...",
|
||||
"joiningWithPasswordTitle": "Γίνεται είσοδος με κωδικό...",
|
||||
"knockButton": "Αίτημα εισόδου",
|
||||
"knockTitle": "Κάποιος θέλει να προστεθεί στη συνάντηση",
|
||||
"nameField": "Εισάγετε το όνομά σας",
|
||||
"passwordField": "Εισάγετε τον κωδικό συνάντησης",
|
||||
"passwordJoinButton": "Είσοδος",
|
||||
"reject": "Απόρριψη",
|
||||
"toggleLabel": "Ενεργοποίηση διαδρόμου"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,10 +195,8 @@
|
||||
"dismiss": "Descartar",
|
||||
"displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
|
||||
"done": "Listo",
|
||||
"e2eeDescription": "<p>El cifrado Extremo-a-Extremo es actualmente <strong>EXPERIMENTAL</strong>. Por favor lea<a href='https://jitsi.org/blog/e2ee/' target='_blank'>este artículo</a> para más detalles.</p><br/><p>Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.</p>",
|
||||
"e2eeLabel": "Clave",
|
||||
"e2eeTitle": "Cifrado Extremo-a-Extremo",
|
||||
"e2eeWarning": "<br /><p><strong>ATENCION:</strong> No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.</p>",
|
||||
"e2eeDescription": "El cifrado Extremo-a-Extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.",
|
||||
"e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
|
||||
"enterDisplayName": "Por favor ingresa tu nombre aquí",
|
||||
"error": "Error",
|
||||
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir escritorio.",
|
||||
|
||||
@@ -194,10 +194,8 @@
|
||||
"dismiss": "Descartar",
|
||||
"displayNameRequired": "¡Hola! ¿Cuál es tu nombre?",
|
||||
"done": "Listo",
|
||||
"e2eeDescription": "<p>El cifrado Extremo-a-Extremo es actualmente <strong>EXPERIMENTAL</strong>. Por favor lea<a href='https://jitsi.org/blog/e2ee/' target='_blank'>este artículo</a> para más detalles.</p><br/><p>Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.</p>",
|
||||
"e2eeLabel": "Clave",
|
||||
"e2eeTitle": "Cifrado Extremo-a-Exremo",
|
||||
"e2eeWarning": "<br /><p><strong>ATENCION:</strong> No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.</p>",
|
||||
"e2eeDescription": "El cifrado Extremo-a-Extremo es actualmente EXPERIMENTAL. Tenga en cuenta que activar el cifrado extremo-a-extremo puede deshabilitar servicios en el servidor como: grabación, transmisión en vivo y participación telefónica. Sin embargo tenga en cuenta que esta reunion solo funcionará con personas que se unan usando un navegador.",
|
||||
"e2eeWarning": "ATENCION: No todos los participantes de esta reunión soportan cifrado Extremo-a-Extremo. Si usted habilita el cifrado ellos no podrán verlo ni oirlo.",
|
||||
"enterDisplayName": "Por favor ingresa tu nombre aquí",
|
||||
"error": "Error",
|
||||
"externalInstallationMsg": "Necesita instalar nuestra extensión para compartir escritorio.",
|
||||
|
||||
@@ -175,9 +175,6 @@
|
||||
"dismiss": "Baztertu",
|
||||
"displayNameRequired": "Kaixo! Zein da zure izena?",
|
||||
"done": "Eginda",
|
||||
"e2eeDescription": "",
|
||||
"e2eeLabel": "",
|
||||
"e2eeTitle": "",
|
||||
"e2eeWarning": "",
|
||||
"enterDisplayName": "Sartu zure izena hemen",
|
||||
"error": "Errorea",
|
||||
|
||||
@@ -1,21 +1,36 @@
|
||||
{
|
||||
"addPeople": {
|
||||
"add": "Inviter",
|
||||
"addContacts": "Inviter vos contacts",
|
||||
"copyInvite": "Copier l'invitation à la réunion",
|
||||
"copyLink": "Copier le lien de la réunion",
|
||||
"copyStream": "Copier le lien de diffision en direct",
|
||||
"countryNotSupported": "Cette destination n'est pas actuellement supportée.",
|
||||
"countryReminder": "Appel hors des États-Unis ? Veuillez débuter par le code du pays !",
|
||||
"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}}",
|
||||
"inviteMorePrompt": "Inviter d'autres personnes",
|
||||
"linkCopied": "Lien copié dans le presse-papiers",
|
||||
"loading": "Rechercher des personnes et des numéros de téléphone",
|
||||
"loadingNumber": "Validation du numéro de téléphone",
|
||||
"loadingPeople": "Recherche de personnes à inviter",
|
||||
"noResults": "Aucun résultat de recherche correspondant",
|
||||
"noValidNumbers": "Veuillez entrer un numéro de téléphone",
|
||||
"outlookEmail": "Outlook",
|
||||
"searchNumbers": "Ajouter des numéros de téléphone",
|
||||
"searchPeople": "Rechercher une personne",
|
||||
"searchPeopleAndNumbers": "Rechercher des personnes ou ajouter leurs numéros de téléphone",
|
||||
"shareInvite": "Partager l'invitation à la réunion",
|
||||
"shareLink": "Partager le lien de la réunion pour inviter d'autres personnes",
|
||||
"shareStream": "Partager le lien de diffusion en direct",
|
||||
"telephone": "Téléphone : {{number}}",
|
||||
"title": "Inviter une personne à cette réunion"
|
||||
"title": "Inviter une personne à cette réunion",
|
||||
"yahooEmail": "Yahoo"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -81,7 +96,7 @@
|
||||
"FETCH_SESSION_ID": "Obtention d’un identifiant de session…",
|
||||
"GET_SESSION_ID_ERROR": "Obtenir une erreur d’identifiant de session : {{code}}",
|
||||
"GOT_SESSION_ID": "Obtention d’un identifiant de session… Terminée",
|
||||
"LOW_BANDWIDTH": "La vidéo de {{displayName}} a été désactivée pour économiser de la ba de passante"
|
||||
"LOW_BANDWIDTH": "La vidéo de {{displayName}} a été désactivée pour économiser de la bande passante"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Adresse :",
|
||||
@@ -147,6 +162,7 @@
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Diffusion en direct"
|
||||
},
|
||||
"add": "Ajouter",
|
||||
"allow": "Autoriser",
|
||||
"alreadySharedVideoMsg": "Un autre participant est en train de partager sa vidéo. Cette conférence ne permet de partager qu'une seule vidéo à la fois.",
|
||||
"alreadySharedVideoTitle": "Une seule vidéo partagée est autorisée à la fois",
|
||||
@@ -174,7 +190,7 @@
|
||||
"contactSupport": "Contacter le support",
|
||||
"copy": "Copier",
|
||||
"dismiss": "Rejeter",
|
||||
"displayNameRequired": "Salut! Quel est votre nom ?",
|
||||
"displayNameRequired": "Bonjour! Quel est votre nom ?",
|
||||
"done": "Terminé",
|
||||
"enterDisplayName": "Merci de saisir votre nom ici",
|
||||
"error": "Erreur",
|
||||
@@ -468,6 +484,40 @@
|
||||
"passwordSetRemotely": "défini par un autre participant",
|
||||
"passwordDigitsOnly": "Jusqu'à {{number}} chiffres",
|
||||
"poweredby": "produit par",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Erreur audio et video:",
|
||||
"audioOnlyError": "Erreur audio:",
|
||||
"audioTrackError": "N'a pas pu créer la piste audio.",
|
||||
"callMe": "Appelez-moi",
|
||||
"callMeAtNumber": "Appelez-moi à ce numéro:",
|
||||
"configuringDevices": "Configuration des appareils...",
|
||||
"connectedWithAudioQ": "Êtes-vous connecté avec le microphone?",
|
||||
"copyAndShare": "Copier & partager le lien",
|
||||
"dialInMeeting": "Participez à la réunion",
|
||||
"dialInPin": "Participez à la réunion et saisir le code PIN:",
|
||||
"dialing": "Numérotation",
|
||||
"doNotShow": "Ne plus afficher ceci",
|
||||
"errorDialOut": "Impossible de composer le numéro",
|
||||
"errorDialOutDisconnected": "Impossible de composer le numéro. Déconnecté",
|
||||
"errorDialOutFailed": "Impossible de composer le numéro. L'appel a échoué",
|
||||
"errorDialOutStatus": "Erreur lors de l'obtention de l'état d'appel sortant",
|
||||
"errorStatusCode": "Erreur de numérotation, code d'état: {{status}}",
|
||||
"errorValidation": "La validation du numéro a échoué",
|
||||
"iWantToDialIn": "Je veux me connecter",
|
||||
"joinAudioByPhone": "Rejoindre avec l'audio du téléphone",
|
||||
"joinMeeting": "Rejoindre la réunion",
|
||||
"joinWithoutAudio": "Rejoignez sans microphone",
|
||||
"initiated": "Appel lancé",
|
||||
"linkCopied": "Lien copié dans le presse-papiers",
|
||||
"lookGood": "Il semble que votre microphone fonctionne correctement",
|
||||
"or": "ou",
|
||||
"calling": "Appel",
|
||||
"startWithPhone": "Commencez avec l'audio du téléphone",
|
||||
"screenSharingError": "Erreur de partage d'écran:",
|
||||
"videoOnlyError": "Erreur vidéo:",
|
||||
"videoTrackError": "Impossible de créer une piste vidéo.",
|
||||
"viewAllNumbers": "voir tous les numéros"
|
||||
},
|
||||
"presenceStatus": {
|
||||
"busy": "Occupé",
|
||||
"calling": "Appel...",
|
||||
@@ -783,5 +833,39 @@
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Centre d'aide"
|
||||
},
|
||||
"lobby": {
|
||||
"knockingParticipantList" : "Liste des participants en attente",
|
||||
"allow": "Autoriser",
|
||||
"backToKnockModeButton": "Aucun mot de passe, demander à rejoindre plutôt",
|
||||
"dialogTitle": "Mode lobby",
|
||||
"disableDialogContent": "Le mode lobby est actuellement activé. Cette fonctionnalité garantit que les participants indésirables ne peuvent pas rejoindre votre réunion. Souhaitez-vous la désactiver?",
|
||||
"disableDialogSubmit": "Désactiver",
|
||||
"emailField": "Saisissez votre adresse email",
|
||||
"enableDialogPasswordField": "Définir le mot de passe (optionel)",
|
||||
"enableDialogSubmit": "Activer",
|
||||
"enableDialogText": "Le mode lobby vous permet de protéger votre réunion en autorisant les personnes à entrer qu'après l'approbation formelle d'un modérateur.",
|
||||
"enterPasswordButton": "Saisissez un mot de passe de réunion",
|
||||
"enterPasswordTitle": "Saisissez le mot de passe pour rejoindre la réunion",
|
||||
"invalidPassword": "Mot de passe invalide",
|
||||
"joiningMessage": "Vous allez rejoindre une réunion dès que quelqu'un aura accepté votre demande",
|
||||
"joinWithPasswordMessage": "Tentative de rejoindre avec mot de passe, patientez s'il vous plait...",
|
||||
"joinRejectedMessage": "Votre requête pour rejoindre une réunion a été refusée par un modérateur.",
|
||||
"joinTitle": "Rejoindre une réunion",
|
||||
"joiningTitle": "Demander à rejoindre une réunion...",
|
||||
"joiningWithPasswordTitle": "Rejoindre avec mot de passe...",
|
||||
"knockButton": "Demander à rejoindre",
|
||||
"knockTitle": "Quelqu'un souhaite rejoindre la réunion",
|
||||
"nameField": "Saisissez votre nom",
|
||||
"passwordField": "Saisissez le mot de passe de la réunion",
|
||||
"passwordJoinButton": "Rejoindre",
|
||||
"reject": "Refuser",
|
||||
"toggleLabel": "Activer le lobby"
|
||||
},
|
||||
"security": {
|
||||
"about": "Vous pouvez ajouter un mot de passe à votre réunion. Les participants devront fournir le mot de passe avant qu'ils soient autorisés à rejoindre la réunion.",
|
||||
"aboutReadOnly": "Les modérateurs peuvent ajouter un mot de passe à la réunion. Les participants devront fournir le mot de passe avant qu'ils soient autorisés à rejoindre la réunion.",
|
||||
"insecureRoomNameWarning": "Le nom de la salle est peu sûr. Des participants non désirés peuvent rejoindre votre réunion. Pensez à sécuriser votre réunion en cliquant sur le bouton de sécurité.",
|
||||
"securityOptions": "Options de sécurité"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
{
|
||||
"addPeople": {
|
||||
"add": "",
|
||||
"add": "Nced…",
|
||||
"countryNotSupported": "",
|
||||
"countryReminder": "",
|
||||
"disabled": "",
|
||||
"disabled": "insa",
|
||||
"failedToAdd": "",
|
||||
"footerText": "",
|
||||
"loading": "",
|
||||
"footerText": "aḍris n uḍar",
|
||||
"loading": "tulya",
|
||||
"loadingNumber": "",
|
||||
"loadingPeople": "",
|
||||
"noResults": "",
|
||||
"noResults": "ulac agemmuḍ",
|
||||
"noValidNumbers": "",
|
||||
"searchNumbers": "",
|
||||
"searchPeople": "",
|
||||
@@ -19,7 +19,7 @@
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"headphones": "",
|
||||
"headphones": "Aṣawaḍ uqeṛṛu",
|
||||
"phone": "Tiliɣri",
|
||||
"speaker": "Asawaḍ"
|
||||
},
|
||||
@@ -34,7 +34,7 @@
|
||||
"generic": "",
|
||||
"notSignedIn": ""
|
||||
},
|
||||
"join": "",
|
||||
"join": "Semlil",
|
||||
"joinTooltip": "",
|
||||
"nextMeeting": "",
|
||||
"noEvents": "",
|
||||
@@ -42,7 +42,7 @@
|
||||
"permissionButton": "",
|
||||
"permissionMessage": "",
|
||||
"refresh": "",
|
||||
"today": ""
|
||||
"today": "Ass-a"
|
||||
},
|
||||
"chat": {
|
||||
"error": "",
|
||||
@@ -51,7 +51,7 @@
|
||||
"popover": "Fren meffer isem",
|
||||
"title": ""
|
||||
},
|
||||
"title": ""
|
||||
"title": "Asqerdec"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": ""
|
||||
@@ -62,16 +62,16 @@
|
||||
"AUTHFAIL": "",
|
||||
"CONNECTED": "Yeqqen",
|
||||
"CONNECTING": "Tuqqna",
|
||||
"CONNFAIL": "",
|
||||
"DISCONNECTED": "Yeffeɣ",
|
||||
"DISCONNECTING": "Yeffeɣ",
|
||||
"ERROR": "",
|
||||
"RECONNECTING": ""
|
||||
"CONNFAIL": "La connexion a échoué",
|
||||
"DISCONNECTED": "Ur yeqqin ara",
|
||||
"DISCONNECTING": "Tufɣa",
|
||||
"ERROR": "Tuccḍa",
|
||||
"RECONNECTING": "Tulsa n tuqqna"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Tansa:",
|
||||
"bandwidth": "",
|
||||
"bitrate": "",
|
||||
"bitrate": "Aktum imisin",
|
||||
"bridgeCount": "",
|
||||
"connectedTo": "",
|
||||
"framerate": "",
|
||||
@@ -83,7 +83,7 @@
|
||||
"more": "Sken-d ugar",
|
||||
"packetloss": "",
|
||||
"quality": {
|
||||
"good": "Yelha",
|
||||
"good": "Telha",
|
||||
"inactive": "D arurmid",
|
||||
"lost": "Yexser",
|
||||
"nonoptimal": "",
|
||||
@@ -94,21 +94,21 @@
|
||||
"remoteport_plural": "",
|
||||
"remoteport": "",
|
||||
"resolution": "",
|
||||
"status": "Tuqqna",
|
||||
"status": "Tuqqna:",
|
||||
"transport_plural": "Tumnayt:",
|
||||
"transport": "Tumnayin:",
|
||||
"turn": ""
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "",
|
||||
"today": "",
|
||||
"yesterday": ""
|
||||
"today": "Ass-a",
|
||||
"yesterday": "Iḍelli"
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "",
|
||||
"description": "",
|
||||
"descriptionWithoutWeb": "",
|
||||
"downloadApp": "Zdem asnas",
|
||||
"downloadApp": "Sider-d asnas",
|
||||
"launchWebButton": "",
|
||||
"openApp": "",
|
||||
"title": "",
|
||||
@@ -116,9 +116,9 @@
|
||||
},
|
||||
"defaultLink": "md. {{url}}",
|
||||
"deviceError": {
|
||||
"cameraError": "Ugur deg unekcum i tkamirat-inek",
|
||||
"cameraError": "Ugur deg unekcum ɣer tkamirat-inek",
|
||||
"cameraPermission": "Ugur deg usɛay n tsiregt n tkamirat",
|
||||
"microphoneError": "Ugur deg unekcum i usawaḍ-inek",
|
||||
"microphoneError": "Ugur deg unekcum ɣer usawaḍ-inek",
|
||||
"microphonePermission": "Ugur deg usɛay n tsiregt n usawaḍ"
|
||||
},
|
||||
"deviceSelection": {
|
||||
@@ -135,33 +135,33 @@
|
||||
"alreadySharedVideoMsg": "",
|
||||
"alreadySharedVideoTitle": "",
|
||||
"applicationWindow": "",
|
||||
"Back": "",
|
||||
"Back": "Retour",
|
||||
"cameraConstraintFailedError": "",
|
||||
"cameraNotFoundError": "Ur tettwawef ara tkamirat.",
|
||||
"cameraNotFoundError": "Ur nufi ara takamirat.",
|
||||
"cameraNotSendingData": "",
|
||||
"cameraNotSendingDataTitle": "",
|
||||
"cameraPermissionDeniedError": "",
|
||||
"cameraUnknownError": "",
|
||||
"cameraUnsupportedResolutionError": "",
|
||||
"Cancel": "Semmet",
|
||||
"close": "",
|
||||
"Cancel": "Sefsex",
|
||||
"close": "Mdel",
|
||||
"conferenceDisconnectMsg": "",
|
||||
"conferenceDisconnectTitle": "",
|
||||
"conferenceDisconnectTitle": "Suffren-k.",
|
||||
"conferenceReloadMsg": "",
|
||||
"conferenceReloadTitle": "",
|
||||
"confirm": "",
|
||||
"confirmNo": "",
|
||||
"confirmYes": "",
|
||||
"confirm": "Sentem",
|
||||
"confirmNo": "Uhu",
|
||||
"confirmYes": "Ih",
|
||||
"connectError": "",
|
||||
"connectErrorWithMsg": "",
|
||||
"connecting": "Tuqqna",
|
||||
"connecting": "Yetteqqen",
|
||||
"contactSupport": "Anermis n tallelt",
|
||||
"copy": "Nɣel",
|
||||
"dismiss": "",
|
||||
"dismiss": "Agwi",
|
||||
"displayNameRequired": "",
|
||||
"done": "Ula d yiwen ",
|
||||
"enterDisplayName": "",
|
||||
"error": "",
|
||||
"error": "Tuccḍa",
|
||||
"externalInstallationMsg": "",
|
||||
"externalInstallationTitle": "",
|
||||
"goToStore": "",
|
||||
@@ -172,7 +172,7 @@
|
||||
"inlineInstallationMsg": "",
|
||||
"inlineInstallExtension": "Sbedd tura",
|
||||
"internalError": "",
|
||||
"internalErrorTitle": "",
|
||||
"internalErrorTitle": "Agul zdaxel",
|
||||
"kickMessage": "",
|
||||
"kickParticipantButton": "",
|
||||
"kickParticipantDialog": "",
|
||||
@@ -185,7 +185,7 @@
|
||||
"lockRoom": "",
|
||||
"lockTitle": "",
|
||||
"logoutQuestion": "",
|
||||
"logoutTitle": "",
|
||||
"logoutTitle": "Tufɣa",
|
||||
"maxUsersLimitReached": "",
|
||||
"maxUsersLimitReachedTitle": "",
|
||||
"micConstraintFailedError": "",
|
||||
@@ -198,14 +198,14 @@
|
||||
"muteParticipantButton": "Kkes imesli",
|
||||
"muteParticipantDialog": "",
|
||||
"muteParticipantTitle": "",
|
||||
"Ok": "",
|
||||
"Ok": "IH",
|
||||
"passwordLabel": "",
|
||||
"passwordNotSupported": "",
|
||||
"passwordNotSupportedTitle": "",
|
||||
"passwordRequired": "",
|
||||
"popupError": "",
|
||||
"popupErrorTitle": "",
|
||||
"recording": "",
|
||||
"recording": "Asekles",
|
||||
"recordingDisabledForGuestTooltip": "",
|
||||
"recordingDisabledTooltip": "",
|
||||
"rejoinNow": "",
|
||||
@@ -222,7 +222,7 @@
|
||||
"removeSharedVideoTitle": "",
|
||||
"reservationError": "",
|
||||
"reservationErrorMsg": "",
|
||||
"retry": "",
|
||||
"retry": "Ɛreḍ tikkelt nniḍen",
|
||||
"screenSharingFailedToInstall": "",
|
||||
"screenSharingFailedToInstallTitle": "",
|
||||
"screenSharingFirefoxPermissionDeniedError": "",
|
||||
@@ -230,7 +230,7 @@
|
||||
"screenSharingPermissionDeniedError": "",
|
||||
"serviceUnavailable": "",
|
||||
"sessTerminated": "",
|
||||
"Share": "",
|
||||
"Share": "Bḍu",
|
||||
"shareVideoLinkError": "",
|
||||
"shareVideoTitle": "Bḍu tavidyut",
|
||||
"shareYourScreen": "Bḍut agdil-nwen",
|
||||
@@ -244,8 +244,8 @@
|
||||
"stopRecordingWarning": "",
|
||||
"stopStreamingWarning": "",
|
||||
"streamKey": "",
|
||||
"Submit": "",
|
||||
"thankYou": "",
|
||||
"Submit": "Azen",
|
||||
"thankYou": "tanemmirt",
|
||||
"token": "",
|
||||
"tokenAuthFailed": "",
|
||||
"tokenAuthFailedTitle": "",
|
||||
@@ -255,8 +255,10 @@
|
||||
"WaitForHostMsg": "",
|
||||
"WaitForHostMsgWOk": "",
|
||||
"WaitingForHost": "",
|
||||
"Yes": "",
|
||||
"yourEntireScreen": ""
|
||||
"Yes": "Ih",
|
||||
"yourEntireScreen": "",
|
||||
"add": "Rnu",
|
||||
"e2eeLabel": "Tasarut"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": ""
|
||||
@@ -271,18 +273,18 @@
|
||||
"veryGood": "Yelha maḍi"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "",
|
||||
"answer": "Tiririt",
|
||||
"audioCallTitle": "",
|
||||
"decline": "",
|
||||
"decline": "Agwi",
|
||||
"productLabel": "",
|
||||
"videoCallTitle": ""
|
||||
},
|
||||
"info": {
|
||||
"accessibilityLabel": "",
|
||||
"accessibilityLabel": "Sken talɣut",
|
||||
"addPassword": "",
|
||||
"cancelPassword": "",
|
||||
"conferenceURL": "",
|
||||
"country": "",
|
||||
"conferenceURL": "Aseγwen:",
|
||||
"country": "Tamurt",
|
||||
"dialANumber": "",
|
||||
"dialInConferenceID": "",
|
||||
"dialInNotSupported": "",
|
||||
@@ -303,36 +305,36 @@
|
||||
"noRoom": "",
|
||||
"numbers": "",
|
||||
"password": "",
|
||||
"title": "",
|
||||
"title": "Bḍu",
|
||||
"tooltip": "",
|
||||
"label": ""
|
||||
},
|
||||
"inviteDialog": {
|
||||
"alertText": "",
|
||||
"header": "",
|
||||
"header": "Nced…",
|
||||
"searchCallOnlyPlaceholder": "",
|
||||
"searchPeopleOnlyPlaceholder": "",
|
||||
"searchPlaceholder": "",
|
||||
"send": ""
|
||||
"send": "Azen"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "Yewwet-aɣ-tt wugur ciṭṭuḥ",
|
||||
"retry": "Ɛreḍ daɣen",
|
||||
"msg": "Yewwet-aɣ-tt ciṭṭuḥ wugur.",
|
||||
"retry": "Ɛreḍ tikkelt nniḍen",
|
||||
"support": "Tallalt",
|
||||
"supportMsg": ""
|
||||
},
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Asersi n tavidiyut innu",
|
||||
"focusRemote": "Asersi n tivdyutin n wiyaḍ",
|
||||
"fullScreen": "Rmed neɣ kkes agdil aččuran",
|
||||
"fullScreen": "Rmed neɣ ffeɣ seg ugdil aččuran",
|
||||
"keyboardShortcuts": "Inegzumen n unasiw ",
|
||||
"localRecording": "Sken neɣ ffer isenqaden idiganen n usekles",
|
||||
"mute": "Rmed neɣ sens asawaḍ",
|
||||
"pushToTalk": "Sit akken ad temmeslayeḍ",
|
||||
"raiseHand": "sali neɣ ṣub afus-ik",
|
||||
"raiseHand": "Sali neɣ ṣub afus-ik",
|
||||
"showSpeakerStats": "Sken addaden n umendid",
|
||||
"toggleChat": "Ldi neɣ mdel agalis n usqardec",
|
||||
"toggleFilmstrip": "Sken neɣ ffer tinfulin n tvidyut",
|
||||
"toggleFilmstrip": "Sken neɣ ffer tinfulin n tvidyutin",
|
||||
"toggleScreensharing": "Uɣal gar tkamiṛat d beṭṭu n ugdil",
|
||||
"toggleShortcuts": "Sken neɣ ffer inegzumen n unasiw",
|
||||
"videoMute": "Sekker neɣ ḥbes takamiṛat innek"
|
||||
@@ -341,10 +343,10 @@
|
||||
"busy": "",
|
||||
"busyTitle": "",
|
||||
"changeSignIn": "",
|
||||
"choose": "",
|
||||
"choose": "fren",
|
||||
"chooseCTA": "",
|
||||
"enterStreamKey": "",
|
||||
"error": "",
|
||||
"error": "tuccḍa",
|
||||
"errorAPI": "",
|
||||
"errorLiveStreamNotEnabled": "",
|
||||
"expandedOff": "",
|
||||
@@ -353,28 +355,28 @@
|
||||
"failedToStart": "Ur yesmurres wusrid deg uqlaɛ",
|
||||
"getStreamKeyManually": "",
|
||||
"invalidStreamKey": "",
|
||||
"off": "",
|
||||
"on": "",
|
||||
"off": "sens",
|
||||
"on": "rmed",
|
||||
"pending": "",
|
||||
"serviceName": "",
|
||||
"signedInAs": "",
|
||||
"signIn": "",
|
||||
"signedInAs": "iqqen am",
|
||||
"signIn": "Qqen s Google",
|
||||
"signInCTA": "",
|
||||
"signOut": "",
|
||||
"signOut": "Ffeɣ",
|
||||
"start": "",
|
||||
"streamIdHelp": "",
|
||||
"streamIdHelp": "D acu wa?",
|
||||
"unavailableTitle": ""
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
"off": "",
|
||||
"on": "",
|
||||
"unknown": ""
|
||||
"off": "insa",
|
||||
"on": "irmed",
|
||||
"unknown": "D arussin"
|
||||
},
|
||||
"dialogTitle": "",
|
||||
"duration": "",
|
||||
"durationNA": "",
|
||||
"encoding": "",
|
||||
"duration": "Tanzagt",
|
||||
"durationNA": "N/A",
|
||||
"encoding": "Encodage",
|
||||
"label": "",
|
||||
"labelToolTip": "",
|
||||
"localRecording": "",
|
||||
@@ -385,17 +387,17 @@
|
||||
"finishedModerator": "",
|
||||
"notModerator": ""
|
||||
},
|
||||
"moderator": "",
|
||||
"no": "",
|
||||
"moderator": "Aseɣyad",
|
||||
"no": "uhu",
|
||||
"participant": "",
|
||||
"participantStats": "",
|
||||
"sessionToken": "",
|
||||
"start": "",
|
||||
"stop": "",
|
||||
"yes": ""
|
||||
"yes": "Ih"
|
||||
},
|
||||
"lockRoomPassword": "",
|
||||
"lockRoomPasswordUppercase": "",
|
||||
"lockRoomPassword": "awal uffir",
|
||||
"lockRoomPasswordUppercase": "Mot de passe",
|
||||
"me": "nek",
|
||||
"notify": {
|
||||
"connectedOneMember": "",
|
||||
@@ -411,7 +413,7 @@
|
||||
"kickParticipant": "",
|
||||
"me": "Nekk",
|
||||
"moderator": "",
|
||||
"muted": "Tebdam asqerdec deg tsusmi.",
|
||||
"muted": "Tebdiḍ asqerdec s tsusmi.",
|
||||
"mutedTitle": "",
|
||||
"mutedRemotelyTitle": "",
|
||||
"mutedRemotelyDescription": "",
|
||||
@@ -423,32 +425,32 @@
|
||||
"startSilentDescription": "",
|
||||
"suboptimalExperienceDescription": "",
|
||||
"suboptimalExperienceTitle": "",
|
||||
"unmute": "",
|
||||
"unmute": "Susem",
|
||||
"newDeviceCameraTitle": "",
|
||||
"newDeviceAudioTitle": "",
|
||||
"newDeviceAction": ""
|
||||
"newDeviceAction": "Seqdec"
|
||||
},
|
||||
"passwordSetRemotely": "Yettwaɛeyyen sɣur yimekki nniḍen",
|
||||
"passwordDigitsOnly": "",
|
||||
"poweredby": "Yemmug-d sɣur",
|
||||
"poweredby": "yemmug-d sɣur",
|
||||
"presenceStatus": {
|
||||
"busy": "",
|
||||
"calling": "",
|
||||
"connected": "Yeqqen",
|
||||
"connecting": "Tuqqna",
|
||||
"connecting2": "Tuqqna",
|
||||
"connecting": "Yetteqqen…",
|
||||
"connecting2": "Yetteqqen*…",
|
||||
"disconnected": "Yeffeɣ",
|
||||
"expired": "",
|
||||
"ignored": "",
|
||||
"expired": "Yemmut",
|
||||
"ignored": "Ignoré",
|
||||
"initializingCall": "",
|
||||
"invited": "",
|
||||
"rejected": "",
|
||||
"rejected": "Yerrad",
|
||||
"ringing": ""
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Fernet azun",
|
||||
"setEmailInput": "Sekcem amayel",
|
||||
"setEmailLabel": "Fernet amayel-nwen Gravatar",
|
||||
"setDisplayNameLabel": "Fren azun",
|
||||
"setEmailInput": "Sekcem-d imayl",
|
||||
"setEmailLabel": "Fren imayl-inek n Gravatar",
|
||||
"title": "Amaɣnu"
|
||||
},
|
||||
"recording": {
|
||||
@@ -466,13 +468,13 @@
|
||||
"live": "",
|
||||
"loggedIn": "",
|
||||
"off": "",
|
||||
"on": "",
|
||||
"on": "Asekles",
|
||||
"pending": "",
|
||||
"rec": "",
|
||||
"serviceDescription": "",
|
||||
"serviceName": "",
|
||||
"signIn": "",
|
||||
"signOut": "",
|
||||
"signIn": "Qqen",
|
||||
"signOut": "Ffeɣ",
|
||||
"unavailable": "",
|
||||
"unavailableTitle": ""
|
||||
},
|
||||
@@ -485,15 +487,15 @@
|
||||
"disconnect": "Yeffeɣ",
|
||||
"microsoftSignIn": "",
|
||||
"signedIn": "",
|
||||
"title": ""
|
||||
"title": "Awitay"
|
||||
},
|
||||
"devices": "",
|
||||
"followMe": "Yal amdan iy-ṭararen",
|
||||
"language": "",
|
||||
"devices": "Périphériques",
|
||||
"followMe": "Yal amdan iy-ṭṭafaren",
|
||||
"language": "Langue ",
|
||||
"loggedIn": "",
|
||||
"moderator": "",
|
||||
"more": "",
|
||||
"name": "",
|
||||
"moderator": "Aseɣyad",
|
||||
"more": "Ugar",
|
||||
"name": "ISem",
|
||||
"noDevice": "Ula d yiwen ",
|
||||
"selectAudioOutput": "",
|
||||
"selectCamera": "Takamiṛatt",
|
||||
@@ -503,19 +505,21 @@
|
||||
"title": "Iɣewwaren"
|
||||
},
|
||||
"settingsView": {
|
||||
"alertOk": "",
|
||||
"alertTitle": "",
|
||||
"alertOk": "IH",
|
||||
"alertTitle": "Asmigel",
|
||||
"alertURLText": "",
|
||||
"buildInfoSection": "",
|
||||
"conferenceSection": "",
|
||||
"displayName": "",
|
||||
"email": "",
|
||||
"displayName": "Isem n uskan",
|
||||
"email": "Imayl",
|
||||
"header": "Iɣewwaren",
|
||||
"profileSection": "Amaɣnu",
|
||||
"serverURL": "",
|
||||
"serverURL": "URL n uqeddac",
|
||||
"startWithAudioMuted": "",
|
||||
"startWithVideoMuted": "",
|
||||
"version": ""
|
||||
"version": "Version",
|
||||
"alertCancel": "Semmet",
|
||||
"advanced": "Talqayt"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "",
|
||||
@@ -523,20 +527,20 @@
|
||||
},
|
||||
"speaker": "Asawaḍ",
|
||||
"speakerStats": {
|
||||
"hours": "",
|
||||
"minutes": "",
|
||||
"name": "",
|
||||
"seconds": "",
|
||||
"hours": "isragen",
|
||||
"minutes": "tisedatin",
|
||||
"name": "Isem",
|
||||
"seconds": "tisnatin",
|
||||
"speakerStats": "",
|
||||
"speakerTime": ""
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": "",
|
||||
"policyText": " ",
|
||||
"title": "{{app}} yesra ad yesseqdec asawaḍ d tkamirat-inek."
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
"rejoinKeyTitle": "Kcem",
|
||||
"text": "Sit deg <i>Kcem</i> d taqeffalt ad teqqneḍ.",
|
||||
"text": "Sit deg taqeffalt <i>Kcem</i> akken ad teqqneḍ.",
|
||||
"title": "Asarag-inek s uvidyu yettwaseḥbes acku aselkim-agi igen."
|
||||
},
|
||||
"toolbar": {
|
||||
@@ -544,8 +548,8 @@
|
||||
"audioOnly": "Rmed/Sens imesli kan",
|
||||
"audioRoute": "",
|
||||
"callQuality": "",
|
||||
"cc": "",
|
||||
"chat": "Eg-d asfaylu n udiwenni",
|
||||
"cc": "Commuter les sous-titres",
|
||||
"chat": "Ffer/Sken-d asfaylu n udiwenni",
|
||||
"document": "Ldi / Mdel zzmam yettwabḍan",
|
||||
"feedback": "",
|
||||
"fullScreen": "",
|
||||
@@ -572,9 +576,11 @@
|
||||
"tileView": "",
|
||||
"toggleCamera": "",
|
||||
"videomute": "",
|
||||
"videoblur": ""
|
||||
"videoblur": "",
|
||||
"privateMessage": "Azen izen uslig",
|
||||
"help": "Tallelt"
|
||||
},
|
||||
"addPeople": "Rnut-d imdanen i tiɣri-nwen",
|
||||
"addPeople": "Rnu-d imdanen ɣer tiɣri-inek",
|
||||
"audioOnlyOff": "",
|
||||
"audioOnlyOn": "",
|
||||
"audioRoute": "",
|
||||
@@ -589,17 +595,17 @@
|
||||
"exitFullScreen": "",
|
||||
"exitTileView": "",
|
||||
"feedback": "",
|
||||
"hangup": "Eǧǧ",
|
||||
"hangup": "Ffeɣ",
|
||||
"invite": "",
|
||||
"login": "Kcem",
|
||||
"logout": "",
|
||||
"login": "Qqen",
|
||||
"logout": "Tufɣa",
|
||||
"lowerYourHand": "",
|
||||
"moreActions": "",
|
||||
"mute": "D asusam / D arasusam",
|
||||
"moreActions": "Ugar n tigawin",
|
||||
"mute": "Sgugem / Kkes tigugmi",
|
||||
"openChat": "",
|
||||
"pip": "",
|
||||
"profile": "Ẓreg amaɣnu-ik ",
|
||||
"raiseHand": "sali neɣ ṣub afus-ik",
|
||||
"raiseHand": "Sali / Ṣub afus-ik",
|
||||
"raiseYourHand": "",
|
||||
"Settings": "Iɣewwaren",
|
||||
"sharedvideo": "Bḍu tavidyut n Youtube",
|
||||
@@ -616,7 +622,10 @@
|
||||
"toggleCamera": "",
|
||||
"videomute": "Seqleɛ / Seḥbes takamirat",
|
||||
"startvideoblur": "",
|
||||
"stopvideoblur": ""
|
||||
"stopvideoblur": "",
|
||||
"privateMessage": "Azen izen uslig",
|
||||
"moreOptions": "Ugar n textirin",
|
||||
"help": "Tallelt"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "",
|
||||
@@ -631,16 +640,16 @@
|
||||
"tr": ""
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
|
||||
"chromeGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
|
||||
"edgeGrantPermissions": "Fren <b><i>OK</i></b> mara d-yessuter yiminig tisurag.",
|
||||
"androidGrantPermissions": "Fren <b><i>Sireg</i></b> mara d-yessuter yiminig-ik tisurag.",
|
||||
"chromeGrantPermissions": "Fren <b><i>Sireg</i></b> mara d-yessuter yiminig-ik tisurag.",
|
||||
"edgeGrantPermissions": "Fren <b><i>Ih</i></b> mara d-yessuter yiminig tisurag.",
|
||||
"electronGrantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik",
|
||||
"firefoxGrantPermissions": "Fren <b><i>Bḍu abenk yettwafernen</i></b> mara d-yessuter yiminig-ik tisurag.",
|
||||
"iexplorerGrantPermissions": "Fren <b><i>OK</i></b> mara d-yessuter yiminig tisurag.",
|
||||
"iexplorerGrantPermissions": "Fren <b><i>Ih</i></b> mara d-yessuter yiminig tisurag.",
|
||||
"nwjsGrantPermissions": "Ttxil-k efk-d tasiregt n beṭṭu n tkamiṛat d umikṛufun-ik",
|
||||
"operaGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
|
||||
"react-nativeGrantPermissions": "Fren <b><i>Sireg</i></b> Mara d-yessuter yiminig-ik tisurag.",
|
||||
"safariGrantPermissions": "Fren <b><i>OK</i></b> mara d-yessuter yiminig tisurag."
|
||||
"react-nativeGrantPermissions": "Fren <b><i>Sireg</i></b> mara d-yessuter yiminig-ik tisurag.",
|
||||
"safariGrantPermissions": "Fren <b><i>Ih</i></b> mara d-yessuter yiminig tisurag."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "",
|
||||
@@ -669,11 +678,11 @@
|
||||
},
|
||||
"videothumbnail": {
|
||||
"domute": "Kkes imesli",
|
||||
"flip": "",
|
||||
"flip": "Tuttya",
|
||||
"kick": "",
|
||||
"moderator": "",
|
||||
"moderator": "Aseɣyad",
|
||||
"mute": "",
|
||||
"muted": "Kkes imesli",
|
||||
"muted": "Tettwasgugem",
|
||||
"remoteControl": "Asenqed agemmaḍ",
|
||||
"show": "",
|
||||
"videomute": ""
|
||||
@@ -681,29 +690,35 @@
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
"join": "Sit iwakken ad tedduḍ",
|
||||
"roomname": "Aru isem n tzeqqa"
|
||||
"roomname": "Sekcem-d isem n tzeqqa"
|
||||
},
|
||||
"appDescription": "",
|
||||
"audioVideoSwitch": {
|
||||
"audio": "Taɣect",
|
||||
"video": "Tavidyut"
|
||||
},
|
||||
"calendar": "",
|
||||
"calendar": "Awitay",
|
||||
"connectCalendarButton": "Qqen awitay-inek",
|
||||
"connectCalendarText": "",
|
||||
"enterRoomTitle": "",
|
||||
"go": "DDU",
|
||||
"join": "KCEM",
|
||||
"info": "",
|
||||
"join": "SNULFU-D / KCEM",
|
||||
"info": "Talɣut",
|
||||
"privacy": "Tabaḍnit",
|
||||
"recentList": "",
|
||||
"recentListDelete": "",
|
||||
"recentList": "Melmi kan",
|
||||
"recentListDelete": "Kkes",
|
||||
"recentListEmpty": "",
|
||||
"reducedUIText": "",
|
||||
"roomname": "Aru isem n tzeqqa",
|
||||
"roomname": "Sekcem-d isem n tzeqqa",
|
||||
"roomnameHint": "Sekcem isem neɣ URL n texxamt wuɣur tebɣiḍ ad tedduḍ. Tzemreḍ ad tgeḍ isem, eǧǧ kan imdanen ara temlileḍ ad t-isinen iwakken ad skecmen yiwen n yisem.",
|
||||
"sendFeedback": "Azen rray-ik",
|
||||
"terms": "Tiwtilin",
|
||||
"title": ""
|
||||
"title": "",
|
||||
"goSmall": "Ddu",
|
||||
"getHelp": "Awi tallelt"
|
||||
},
|
||||
"prejoin": {
|
||||
"or": "neɣ",
|
||||
"doNotShow": "Ur d-skan ara tikkelt-nniḍen"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -175,10 +175,8 @@
|
||||
"dismiss": "Dismiss",
|
||||
"displayNameRequired": "हाय! तुझे नाव काय आहे?",
|
||||
"done": "पूर्ण झाले",
|
||||
"e2eeDescription": "<p>एंड-टू-एंड एनक्रिप्शन सध्या आहे <strong>प्रायोगिक</strong>. कृपया पहा <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a>तपशीलांसाठी.</p><br/><p>कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.</p>",
|
||||
"e2eeLabel": "Key",
|
||||
"e2eeTitle": "एंड-टू-एंड एनक्रिप्शन",
|
||||
"e2eeWarning": "<br /><p><strong>चेतावणी:</strong>या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.</p>",
|
||||
"e2eeDescription": "एंड-टू-एंड एनक्रिप्शन सध्या आहे प्रायोगिक. कृपया लक्षात ठेवा की एंड-टू-एंड एन्क्रिप्शन चालू केल्याने सर्व्हर-साइड प्रदान सेवा प्रभावीपणे अक्षम होईल: रेकॉर्डिंग, थेट प्रवाह आणि फोन सहभाग. हे देखील लक्षात ठेवा की मीटिंग केवळ समाविष्ट करण्यायोग्य प्रवाहांसाठी समर्थन असलेल्या ब्राउझरमधून सामील झालेल्या लोकांसाठीच कार्य करेल.",
|
||||
"e2eeWarning": "चेतावणी:या बैठकीतील सर्व सहभागींना एंड-टू-एंड एनक्रिप्शनसाठी समर्थन असल्याचे दिसत नाही. आपण सक्षम केल्यास ते आपल्याला पाहण्यास किंवा ऐकण्यास सक्षम राहणार नाहीत.",
|
||||
"enterDisplayName": "कृपया आपले नाव येथे प्रविष्ट करा",
|
||||
"error": "त्रुटी",
|
||||
"externalInstallationMsg": "आपल्याला आमचा डेस्कटॉप सामायिकरण विस्तार स्थापित करणे आवश्यक आहे.",
|
||||
|
||||
@@ -15,7 +15,22 @@
|
||||
"searchPeople": "Cercar de monde",
|
||||
"searchPeopleAndNumbers": "Cercar de monde o apondre lor numèros de telefòn",
|
||||
"telephone": "Telefòn : {{number}}",
|
||||
"title": "Convidatz de monde a vòstra conferéncia"
|
||||
"title": "Convidatz de monde a vòstra conferéncia",
|
||||
"shareStream": "Partejar la ligam de la difusion en dirècte",
|
||||
"copyStream": "Copiar lo ligam de la difusion en dirècte",
|
||||
"yahooEmail": "Yahoo Email",
|
||||
"outlookEmail": "Outlook Email",
|
||||
"shareLink": "Partejar lo ligam de la conferéncia per convidar de monde",
|
||||
"shareInvite": "Partejar invitacion conferéncia",
|
||||
"linkCopied": "Ligam copiat al quichapapièrs",
|
||||
"inviteMorePrompt": "Convidar mai de monde",
|
||||
"inviteMoreMailSubject": "Rejónher la conferéncia {{appName}}",
|
||||
"inviteMoreHeader": "Sètz l’unica persona de la conferéncia",
|
||||
"googleEmail": "Google Email",
|
||||
"defaultEmail": "Vòstre email per defaut",
|
||||
"copyLink": "Copiar lo ligam de la conferéncia",
|
||||
"copyInvite": "Copiar l’invitacion a la conferéncia",
|
||||
"addContacts": "Convidatz vòstres contactes"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -122,7 +137,10 @@
|
||||
"launchWebButton": "Lançar del navigador",
|
||||
"openApp": "Telecargar l’aplicacion",
|
||||
"title": "Aviada de vòstra conferéncia dins {{app}}…",
|
||||
"tryAgainButton": "Tornar ensajar del burèu"
|
||||
"tryAgainButton": "Tornar ensajar del burèu",
|
||||
"joinInApp": "Rejónher la conferéncia en utilizant l’aplicacion",
|
||||
"ifHaveApp": "S’avètz ja l’aplicacion :",
|
||||
"ifDoNotHaveApp": "S’avètz pas encara l’aplicacion :"
|
||||
},
|
||||
"defaultLink": "ex. {{url}}",
|
||||
"defaultNickname": "ex. Joan Delpuèch",
|
||||
@@ -238,7 +256,7 @@
|
||||
"screenSharingFailedToInstallTitle": "Fracàs de l'installacion de partatge d'ecran",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Quicòm a fach mèuca quand èrem a ensajar de partejar vòstre ecran. Mercés de verificar qu’avètz donat l’autorizacion de lo partejar.",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Ops ! Avèm pas pogut aviar lo partatge d’ecran.",
|
||||
"screenSharingPermissionDeniedError": "Òups ! Quicòm s'es pas ben passat amb l'autorizacion de vòstra extension de partatge d'ecran. Mercés de recargar e tornar ensajar.",
|
||||
"screenSharingPermissionDeniedError": "Òps ! Quicòm s'es pas ben passat amb l'autorizacion de vòstra autorizacion de partatge d'ecran. Mercés de recargar e tornar ensajar.",
|
||||
"sendPrivateMessage": "Avètz recentament recebut un messatge privat. Avètz ensajat d’i respondre en privat, o volètz enviar lo messatge al grop ?",
|
||||
"sendPrivateMessageCancel": "Enviar al grop",
|
||||
"sendPrivateMessageOk": "Enviar en privat",
|
||||
@@ -257,7 +275,7 @@
|
||||
"stopLiveStreaming": "Arrestar lo dirècte",
|
||||
"stopRecording": "Arrestar l'enregistrament",
|
||||
"stopRecordingWarning": "Sètz segur que volètz arrestar l'enregistrament?",
|
||||
"stopStreamingWarning": "Sètz segur que volètz arrestar lo dirècte?",
|
||||
"stopStreamingWarning": "Volètz vertadièrament arrestar lo dirècte ?",
|
||||
"streamKey": "Clau del dirècte",
|
||||
"Submit": "Validar",
|
||||
"thankYou": "Mercé d'aver utilizat {{appName}} !",
|
||||
@@ -273,14 +291,11 @@
|
||||
"Yes": "Òc",
|
||||
"yourEntireScreen": "Vòstre ecran complet",
|
||||
"screenSharingAudio": "Partejar l’àudio",
|
||||
"muteEveryoneStartMuted": "",
|
||||
"muteEveryoneSelf": "",
|
||||
"muteEveryoneTitle": "",
|
||||
"muteEveryoneDialog": "",
|
||||
"muteEveryoneElseTitle": "Copar lo son a totes levat {{whom}} ?",
|
||||
"muteEveryoneElseDialog": "",
|
||||
"e2eeTitle": "Chiframent del cap a la fin",
|
||||
"e2eeLabel": "Clau"
|
||||
"muteEveryoneStartMuted": "D'ara enlà tot lo monde comença mut",
|
||||
"muteEveryoneSelf": "vos",
|
||||
"muteEveryoneTitle": "Rendre mut tot lo monde ?",
|
||||
"muteEveryoneDialog": "Volètz vertadièrament copar lo son a tot lo monde ? Poiretz pas lo restablir, mas eles poiràn o far quora que vòlgan.",
|
||||
"muteEveryoneElseTitle": "Copar lo son a totes levat {{whom}} ?"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "ara es {{status}}"
|
||||
@@ -383,7 +398,7 @@
|
||||
"invalidStreamKey": "La clau de difusion en dirècte es benlèu pas corrècta.",
|
||||
"off": "La difusion en dirècte es estada arrestada",
|
||||
"offBy": "{{name}} a arrestat la difusion en dirècte",
|
||||
"on": "La difusion en dirècte es estada arrestada",
|
||||
"on": "Difusion en dirècte",
|
||||
"onBy": "{{name}} a començat la difusion en dirècte",
|
||||
"pending": "Començar lo dirècte…",
|
||||
"serviceName": "Servici de difusion en dirècte",
|
||||
@@ -460,7 +475,9 @@
|
||||
"newDeviceAudioTitle": "Nòu periferic àudio detectat",
|
||||
"newDeviceAction": "Utilizar",
|
||||
"oldElectronClientDescription3": " ara !",
|
||||
"oldElectronClientDescription2": "darrièra compilacion"
|
||||
"oldElectronClientDescription2": "darrièra compilacion",
|
||||
"oldElectronClientDescription1": "Sembla qu’utilizatz una version anciana del client Jitsi Meet qu’es conegut per conténer de problèmas de seguretat. Mercés de vos assegurar de metre a jorn ",
|
||||
"OldElectronAPPTitle": "Problèma de seguretat !"
|
||||
},
|
||||
"passwordSetRemotely": "causit per qualqu'un mai",
|
||||
"passwordDigitsOnly": "Fins a {{number}} chifras",
|
||||
@@ -559,7 +576,9 @@
|
||||
"startWithAudioMuted": "Començar sens son",
|
||||
"startWithVideoMuted": "Començar sens vièdo",
|
||||
"version": "Version",
|
||||
"alertCancel": "Anullar"
|
||||
"alertCancel": "Anullar",
|
||||
"disableCrashReportingWarning": "Volètz vertadièrament desactivar lo rapòrt de plantatge ? Lo paramètre serà aplicat aprèp la reaviada de l’aplicacion.",
|
||||
"disableCrashReporting": "Desactivar lo rapòrt de plantatge"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "\n\n=====\n\nVolètz sonar de vòstre telefòn estant ?\n\n{{defaultDialInNumber}}Clicatz lo ligam per veire los numèros de telefòn d’aquesta conferéncia\n{{dialInfoPageUrl}}",
|
||||
@@ -620,9 +639,10 @@
|
||||
"toggleCamera": "Passar a la camèra",
|
||||
"videomute": "Silenciar la vidèo",
|
||||
"videoblur": "Enfoscar o non la vidèo",
|
||||
"muteEveryone": "",
|
||||
"muteEveryone": "Rendre mut tot lo monde",
|
||||
"moreOptions": "Mostrar mai d’opcions",
|
||||
"e2ee": "Chiframent del cap a la fin"
|
||||
"e2ee": "Chiframent del cap a la fin",
|
||||
"security": "Opcions de seguretat"
|
||||
},
|
||||
"addPeople": "Ajustar de monde a vòstra sonada",
|
||||
"audioOnlyOff": "Desactivar lo mòde connexion febla",
|
||||
@@ -674,12 +694,13 @@
|
||||
"startvideoblur": "Trebolar mon rèire-plan",
|
||||
"stopvideoblur": "Desactivar lo borrolatge del rèire-plan",
|
||||
"noisyAudioInputDesc": "",
|
||||
"noisyAudioInputTitle": "",
|
||||
"noisyAudioInputTitle": "Vòstre microfòn sembla brusent !",
|
||||
"noAudioSignalDialInLinkDesc": "",
|
||||
"noAudioSignalDialInDesc": "",
|
||||
"muteEveryone": "",
|
||||
"muteEveryone": "Rendre mut tot lo monde",
|
||||
"moreOptions": "Autras opcions",
|
||||
"e2ee": "Chiframent del cap a la fin"
|
||||
"e2ee": "Chiframent del cap a la fin",
|
||||
"security": "Opcions de seguretat"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Aviar / Arrestat los sostítols",
|
||||
@@ -743,7 +764,7 @@
|
||||
"remoteControl": "Contraròtle alonhat",
|
||||
"show": "Mostrar davant",
|
||||
"videomute": "Lo participant a arrestat la camèra",
|
||||
"domuteOthers": ""
|
||||
"domuteOthers": "Rendre mut totes los autres"
|
||||
},
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -780,8 +801,8 @@
|
||||
"header": "Centre d’ajuda"
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"youAreAlone": "",
|
||||
"button": ""
|
||||
"youAreAlone": "Sètz l’unica persona de la conferéncia",
|
||||
"button": "Convidar d’autres"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"dontShowAgain": "Me mostrar pas mai aquò",
|
||||
@@ -798,6 +819,53 @@
|
||||
"callMe": "Sona-me",
|
||||
"audioTrackError": "Creacion impossibla de la pista àudio.",
|
||||
"audioOnlyError": "Error àudio :",
|
||||
"audioAndVideoError": "Error àudio e vidèo :"
|
||||
"audioAndVideoError": "Error àudio e vidèo :",
|
||||
"dialing": "A sonar",
|
||||
"viewAllNumbers": "veire totes los numèros",
|
||||
"videoTrackError": "Creacion d’una pista àudio impossibla.",
|
||||
"videoOnlyError": "Error vidèo :",
|
||||
"screenSharingError": "Error de partatge d’ecran :",
|
||||
"startWithPhone": "Començar amb l’àudio del telefòn",
|
||||
"calling": "A sonar",
|
||||
"lookGood": "Sembla que lo microfòn fonciona pas coma cal",
|
||||
"linkCopied": "Ligam copiat al quichapapièrs",
|
||||
"initiated": "Sonada aviada",
|
||||
"joinWithoutAudio": "Rejónher sens àudio",
|
||||
"joinMeeting": "Rejónher la conferéncia",
|
||||
"joinAudioByPhone": "Rejónher amb l’àudio del telefòn"
|
||||
},
|
||||
"lobby": {
|
||||
"reject": "Regetar",
|
||||
"passwordJoinButton": "Rejónher",
|
||||
"passwordField": "Picatz lo senhal de la conferéncia",
|
||||
"nameField": "Escrivètz vòstre nom",
|
||||
"knockTitle": "Qualqu’un vòl rejónher la conferéncia",
|
||||
"knockButton": "Demandar a rejónher",
|
||||
"joiningWithPasswordTitle": "A rejónher amb senhal...",
|
||||
"joiningTitle": "Demanda a rejónher la conferéncia...",
|
||||
"joinTitle": "Rejónher la conferéncia",
|
||||
"joinRejectedMessage": "Un moderator a regetat vòstra demanda de participacion.",
|
||||
"joinWithPasswordMessage": "Ensag de participacion amb senhal, volgatz esperar...",
|
||||
"joiningMessage": "Dintraretz dins la conferéncia tre que qualqu’un aurà acceptat vòstra demanda",
|
||||
"invalidPassword": "Senhal invalid",
|
||||
"enterPasswordTitle": "Dintratz lo senhal per rejónher la conferéncia",
|
||||
"enterPasswordButton": "Dintratz lo senhal de la conferéncia",
|
||||
"enableDialogSubmit": "Activar",
|
||||
"enableDialogPasswordField": "Definir un senhal (opcional)",
|
||||
"emailField": "Picata vòstra adreça electronica",
|
||||
"disableDialogSubmit": "Desactivar",
|
||||
"backToKnockModeButton": "Cap de senhal, demandar a participar a la plaça",
|
||||
"allow": "Autorizar"
|
||||
},
|
||||
"security": {
|
||||
"securityOptions": "Opcions de seguretat",
|
||||
"insecureRoomNameWarning": "Lo nom de la sala es pas segur. De monde indesirables poirián rejónher vòstra conferéncia.",
|
||||
"aboutReadOnly": "Los participants que son moderators pòdon ajustar un $t(lockRoomPassword) a la conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans d’aver l’autorizacion de rejónher la conferéncia.",
|
||||
"about": "Podètz ajustar un $t(lockRoomPassword) per rejónher una conferéncia. Los participants deuràn fornir lo $t(lockRoomPassword) abans d’obténer l’autorizacion de dintrar dins la conferéncia."
|
||||
},
|
||||
"e2ee": {
|
||||
"labelToolTip": "La comunicacion àudio e vidèo d’aquesta sonada es chifrada del cap a la fin"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -780,6 +780,33 @@
|
||||
"chromeExtensionBanner": {
|
||||
"dontShowAgain": "Não me mostre isso de novo",
|
||||
"buttonText": "Instalar extensão do Chrome",
|
||||
"installExtensionText": "Instale a extensão par integração com Google Calendar e Office 365"
|
||||
"installExtensionText": "Instale a extensão para integrar com Google Calendar e Office 365"
|
||||
},
|
||||
"lobby": {
|
||||
"allow": "Permitir",
|
||||
"backToKnockModeButton": "Sem senha, peça para se juntar",
|
||||
"dialogTitle": "modo Lobby",
|
||||
"disableDialogContent": "O modo Lobby está habilitado. Este recurso evita que particpantes não convidados juntem-se à sua conferência. Deseja desabilitar?",
|
||||
"disableDialogSubmit": "Desabilitar",
|
||||
"emailField": "Informe seu email",
|
||||
"enableDialogPasswordField": "Definir senha (opcional)",
|
||||
"enableDialogSubmit": "Habilitar",
|
||||
"enableDialogText": "O modo Lobby protege a sua conferência, permitindo a entrada de participantes apenas após a aprovação formal do moderador.",
|
||||
"enterPasswordButton": "Informe a senha da conferência",
|
||||
"enterPasswordTitle": "Informe a senha para se juntar à conferência",
|
||||
"invalidPassword": "Senha inválida",
|
||||
"joiningMessage": "Você se juntará à conferência tão logo alguém aprove sua solicitação",
|
||||
"joinWithPasswordMessage": "Tentando entrar com a senha, por favor aguarde...",
|
||||
"joinRejectedMessage": "Sua solicitação de participação foi rejeitada pelo moderador.",
|
||||
"joinTitle": "Junte-se à conferência",
|
||||
"joiningTitle": "Pedindo para se juntar à conferência...",
|
||||
"joiningWithPasswordTitle": "Participando com senha...",
|
||||
"knockButton": "Peça para participar",
|
||||
"knockTitle": "Alguém deseja participar da conferência",
|
||||
"nameField": "Informe seu nome",
|
||||
"passwordField": "Informe a senha da conferência",
|
||||
"passwordJoinButton": "Solicitar",
|
||||
"reject": "Rejeitar",
|
||||
"toggleLabel": "Habilitar lobby"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,10 +189,7 @@
|
||||
"dismiss": "Prekliči",
|
||||
"displayNameRequired": "Pozdravljeni! Kako vam je ime?",
|
||||
"done": "Končano",
|
||||
"e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.</p>",
|
||||
"e2eeLabel": "Key",
|
||||
"e2eeTitle": "End-to-End Encryption",
|
||||
"e2eeWarning": "<br /><p><strong>WARNING:</strong> Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.</p>",
|
||||
"e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
|
||||
"enterDisplayName": "Prosimo vnesite svoje ime",
|
||||
"error": "Napaka",
|
||||
"externalInstallationMsg": "Potrebno je namestiti razširitev za deljenje namizja.",
|
||||
|
||||
@@ -1,19 +1,33 @@
|
||||
{
|
||||
"addPeople": {
|
||||
"add": "Davet et",
|
||||
"addContacts": "Kişilerinizi davet edin",
|
||||
"copyInvite": "Toplantı davetini kopyala",
|
||||
"copyLink": "Toplantı bağlantısını kopyala",
|
||||
"copyStream": "Canlı akış bağlantısını kopyala",
|
||||
"countryNotSupported": "Ülke henüz desteklenmiyor",
|
||||
"countryReminder": "Dış bir ülkeyi mi arıyorsunuz? Lütfen ülke koduyla başlayın!",
|
||||
"defaultEmail": "Varsayılan E-postanız",
|
||||
"disabled": "Kişi davet edemezsiniz.",
|
||||
"failedToAdd": "Kişi eklenemedi",
|
||||
"footerText": "Dış arama devre dışı.",
|
||||
"loading": "Kişiler ve telefon numaraları aranıyor..",
|
||||
"googleEmail": "Google Email",
|
||||
"inviteMoreHeader": "Toplantıdaki tek kişisiniz",
|
||||
"inviteMoreMailSubject": "{{appName}} toplantısına katıl",
|
||||
"inviteMorePrompt": "Daha fazla kişi davet et",
|
||||
"linkCopied": "Bağlantı panoya kopyalandı",
|
||||
"loading": "Kişiler ve telefon numaraları aranıyor...",
|
||||
"loadingNumber": "Telefon numarası doğrulanıyor",
|
||||
"loadingPeople": "Davet edilecek kişi aranıyor",
|
||||
"noResults": "Eşleşen sonuç bulunamadı",
|
||||
"noValidNumbers": "Lütfen bir telefon numarası girin",
|
||||
"outlookEmail": "Outlook Email",
|
||||
"searchNumbers": "Telefon numarası ekle",
|
||||
"searchPeople": "Kişi ara",
|
||||
"searchPeopleAndNumbers": "Kişi arayın veya telefon numarası ekleyin",
|
||||
"shareInvite": "Toplantı davetini paylaş",
|
||||
"shareLink": "Katılımcıları davet etmek için toplantı bağlantısını paylaşın",
|
||||
"shareStream": "Canlı akış bağlantısını paylaşın",
|
||||
"telephone": "Telefon numarası: {{number}}",
|
||||
"title": "Bu toplantıya kişi davet edin"
|
||||
},
|
||||
@@ -22,13 +36,13 @@
|
||||
"headphones": "Kulaklık",
|
||||
"phone": "Telefon",
|
||||
"speaker": "Konuşmacı",
|
||||
"none": "Ses cihazı yok"
|
||||
"none": "Geçerli Ses cihazı yok"
|
||||
},
|
||||
"audioOnly": {
|
||||
"audioOnly": "Düşük bant genişliği"
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Toplantı bağlantısı ekle",
|
||||
"addMeetingURL": "Bir toplantı bağlantısı ekle",
|
||||
"confirmAddLink": "Bu etkinliğe bir toplantı bağlantısı eklensin mi?",
|
||||
"error": {
|
||||
"appConfiguration": "Takvim entegrasyonu doğru yapılandırılmadı.",
|
||||
@@ -47,20 +61,21 @@
|
||||
},
|
||||
"chat": {
|
||||
"error": "Hata: mesajınız gönderilmedi. Gerekçe: {{error}}",
|
||||
"fieldPlaceHolder": "Mesajınızı buraya yazın",
|
||||
"messagebox": "Bir mesaj yazın",
|
||||
"messageTo": "{{recipient}} adlı kişiye özel mesaj",
|
||||
"noMessagesMessage": "Toplantıda henüz mesaj yok. Burada bir konuşma başlatın!",
|
||||
"nickname": {
|
||||
"popover": "Bir takma ad seçin",
|
||||
"title": "Sohbette kullanmak için bir takma ad girin"
|
||||
},
|
||||
"privateNotice": "{{recipient}} için özel mesaj",
|
||||
"title": "Sohbet",
|
||||
"you": "sen",
|
||||
"privateNotice": "{{recipient}} için özel mesaj",
|
||||
"noMessagesMessage": "Toplantıda henüz mesaj yok. Buradan bir konuşma başlatın!",
|
||||
"messageTo": "{{recipient}} için özel mesaj",
|
||||
"fieldPlaceHolder": "Mesajınızı buraya yazın"
|
||||
"you": "sen"
|
||||
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Toplantınıza bağlanılıyor.."
|
||||
"joiningRoom": "Toplantıya bağlanılıyor..."
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Eklenmiş",
|
||||
@@ -70,7 +85,7 @@
|
||||
"CONNECTING": "Bağlanıyor",
|
||||
"CONNFAIL": "Bağlantı başarısız",
|
||||
"DISCONNECTED": "Bağlantı kesildi",
|
||||
"DISCONNECTING": "Bağlantı kesildi",
|
||||
"DISCONNECTING": "Bağlantı kesiliyor",
|
||||
"ERROR": "Hata",
|
||||
"RECONNECTING": "Bir bağlantı hatası oluştu. Tekrar bağlanıyor...",
|
||||
"LOW_BANDWIDTH": "Bant genişliğinden tasarruf etmek için {{displayName}} kişisinin videosu kapatıldı",
|
||||
@@ -83,7 +98,7 @@
|
||||
"bandwidth": "Tahmini bant genişliği:",
|
||||
"bitrate": "Bit hızı:",
|
||||
"bridgeCount": "Sunucu sayısı: ",
|
||||
"connectedTo": "Bağlandı:",
|
||||
"connectedTo": "Bağlandı şuna:",
|
||||
"framerate": "Çerçeve hızı:",
|
||||
"less": "Daha az göster",
|
||||
"localaddress": "Yerel adres:",
|
||||
@@ -117,8 +132,11 @@
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Bu toplantıya katılmak için {{app}} uygulamasına ihtiyacınız var.",
|
||||
"description": "Hiçbir şey olmadı mı? Toplantınızı {{app}} masaüstü uygulamasında başlatmaya çalıştık. Tekrar deneyin veya {{app}} web uygulamasını açın.",
|
||||
"descriptionWithoutWeb": "",
|
||||
"descriptionWithoutWeb": "Hiçbir şey olmadı? Toplantınızı {{app}} masaüstü uygulamasında başlatmayı denedik.",
|
||||
"downloadApp": "Uygulamayı indir",
|
||||
"ifDoNotHaveApp": "Henüz uygulamanız yoksa:",
|
||||
"ifHaveApp": "Uygulamanız zaten varsa: ",
|
||||
"joinInApp": "Uygulamayı kullanarak bu toplantıya katıl",
|
||||
"launchWebButton": "Web'de aç",
|
||||
"openApp": "Uygulamaya devam et",
|
||||
"title": "Toplantınız {{app}} uygulamasında açılıyor...",
|
||||
@@ -134,20 +152,22 @@
|
||||
"deviceSelection": {
|
||||
"noPermission": "İzin alınamadı",
|
||||
"previewUnavailable": "Önizleme mevcut değil",
|
||||
"selectADevice": "Cihaz seç",
|
||||
"selectADevice": "Bir cihaz seç",
|
||||
"testAudio": "Bir test sesi çal"
|
||||
},
|
||||
"dialog": {
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Canlı akış"
|
||||
},
|
||||
|
||||
"add": "Ekle",
|
||||
"allow": "İzin ver",
|
||||
"alreadySharedVideoMsg": "Başka zaten bir video paylaşıyor. Bu toplantı aynı anda yalnızca bir paylaşılan videoya izin veriyor.",
|
||||
"alreadySharedVideoTitle": "Yalnızca bir paylaşılan videoya izin veriliyor",
|
||||
"alreadySharedVideoMsg": "Başka bir katılımcı zaten bir video paylaşıyor. Bu konferans aynı anda yalnızca bir paylaşılan videoya izin verir.",
|
||||
"alreadySharedVideoTitle": "Aynı anda yalnızca bir paylaşılan videoya izin verilir.",
|
||||
"applicationWindow": "Uygulama penceresi",
|
||||
"Back": "Geri",
|
||||
"cameraConstraintFailedError": "Kameranız gerekli bazı özellikleri karşılayamıyor.",
|
||||
"cameraNotFoundError": "Kamera bulunamadı",
|
||||
"cameraNotFoundError": "Kamera bulunamadı.",
|
||||
"cameraNotSendingData": "Kameranıza erişemiyoruz. Lütfen başka bir uygulamanın bu cihazı kullanıp kullanmadığını kontrol edin, Ayarlar menüsünden başka bir cihaz seçin veya uygulamayı yeniden yüklemeyi deneyin.",
|
||||
"cameraNotSendingDataTitle": "Kameraya erişilemiyor",
|
||||
"cameraPermissionDeniedError": "Kamera kullanımına izin vermediniz. Yine de toplantıya katılabilirsiniz, ancak diğerleri sizi göremez. Bunu düzeltmek için kamera butonunu kullanın.",
|
||||
@@ -155,9 +175,9 @@
|
||||
"cameraUnsupportedResolutionError": "Kameranız gerekli video çözünürlüğünü desteklemiyor.",
|
||||
"Cancel": "İptal",
|
||||
"close": "Kapat",
|
||||
"conferenceDisconnectMsg": "Ağ bağlantınızı kontrol etmek isteyebilirsiniz. {{seconds}} saniye içinde yeniden bağlanıyor ...",
|
||||
"conferenceDisconnectMsg": "Ağ bağlantınızı kontrol etmek isteyebilirsiniz. {{seconds}} saniye içinde yeniden bağlanıyor...",
|
||||
"conferenceDisconnectTitle": "Bağlantınız kesildi.",
|
||||
"conferenceReloadMsg": "Bunu düzeltmeye çalışıyoruz. {{seconds}} saniye içinde yeniden bağlanıyor ...",
|
||||
"conferenceReloadMsg": "Bunu düzeltmeye çalışıyoruz. {{seconds}} saniye içinde yeniden bağlanıyor...",
|
||||
"conferenceReloadTitle": "Ne yazık ki bir şeyler ters gitti.",
|
||||
"confirm": "Onayla",
|
||||
"confirmNo": "Hayır",
|
||||
@@ -168,27 +188,28 @@
|
||||
"contactSupport": "Destek ekibine erişin",
|
||||
"copy": "Kopyala",
|
||||
"dismiss": "Son ver",
|
||||
"displayNameRequired": "Görünür ad gerekli",
|
||||
"displayNameRequired": "Merhaba, görünmesini istediğin ismin nedir?",
|
||||
"done": "Bitti",
|
||||
"enterDisplayName": "Lütfen bir görünür ad girin",
|
||||
"enterDisplayName": "Lütfen adınızı buraya girin...",
|
||||
"error": "Hata",
|
||||
"externalInstallationMsg": "Masaüstü paylaşım uzantımızı yüklemeniz gerekmektedir.",
|
||||
"externalInstallationTitle": "Uzantı gerekli",
|
||||
"goToStore": "Mağazaya git",
|
||||
"gracefulShutdown": "Hizmetimiz şu anda bakım için devre dışı. Lütfen daha sonra tekrar deneyiniz.",
|
||||
"IamHost": "Toplantı sahibiyim",
|
||||
"incorrectRoomLockPassword": "",
|
||||
"incorrectRoomLockPassword": "Yanlış paralo",
|
||||
"incorrectPassword": "Kullanıcı adı veya parola hatalı",
|
||||
"inlineInstallationMsg": "Masaüstü paylaşım uzantımızı yüklemeniz gerekmektedir.",
|
||||
"inlineInstallExtension": "Şimdi yükle",
|
||||
"internalError": "Hata! Bir şeyler ters gitti. Şu hata oluştu: {{error}}",
|
||||
"internalErrorTitle": "İç hata",
|
||||
"kickMessage": "Ah! Toplantıdan çıkarıldınız!",
|
||||
"kickMessage": "Daha fazla ayrıntı için {{participantDisplayName}} ile iletişime geçebilirsiniz.",
|
||||
"kickParticipantButton": "Çıkar",
|
||||
"kickParticipantDialog": "Bu katılımcıyı çıkarmak istediğinizden emin misiniz?",
|
||||
"kickParticipantTitle": "Bu katılımcı çıkarılsın mı?",
|
||||
"kickTitle": "Toplantıdan çıkarıldı",
|
||||
"kickTitle": "Ah! {{participantDisplayName}} sizi toplantıdan çıkardı.",
|
||||
"liveStreaming": "Canlı akış",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Kayıt etkinken mümkün değil",
|
||||
"liveStreamingDisabledForGuestTooltip": "Konuklar canlı akışa başlayamaz.",
|
||||
"liveStreamingDisabledTooltip": "Canlı akışı başlatma devre dışı.",
|
||||
"lockMessage": "Toplantı kilitlenemedi.",
|
||||
@@ -201,21 +222,22 @@
|
||||
"micConstraintFailedError": "Mikrofonunuz gerekli özelliklerin bazılarını karşılayamıyor.",
|
||||
"micNotFoundError": "Mikrofon bulunamadı.",
|
||||
"micNotSendingData": "Mikrofonunuza erişemiyoruz. Lütfen Ayarlar menüsünden başka bir cihaz seçin veya uygulamayı yeniden yüklemeyi deneyin.",
|
||||
"micNotSendingDataTitle": "Mikrofona erişilemiyor",
|
||||
"micNotSendingDataTitle": "Mikrofona erişilemiyor.",
|
||||
"micPermissionDeniedError": "Mikrofon kullanımına izin vermediniz. Yine de toplantıya katılabilirsiniz, ancak diğerleri sizi duyamaz. Bunu düzeltmek için mikrofon butonunu kullanın.",
|
||||
"micUnknownError": "Bilinmeyen bir nedenden dolayı mikrofon kullanılamıyor.",
|
||||
"muteParticipantBody": "Bunların sesini açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
|
||||
"muteParticipantBody": "Sesi açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
|
||||
"muteParticipantButton": "Sustur",
|
||||
"muteParticipantDialog": "Bu katılımcının sesini kapatmak istediğinizden emin misiniz? Bunların sesini açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
|
||||
"muteParticipantDialog": "Bu katılımcının sesini kapatmak istediğinizden emin misiniz? Sesini açamazsınız, ancak istedikleri zaman kendileri seslerini açabilirler.",
|
||||
"muteParticipantTitle": "Bu katılımcı susturulsun mu?",
|
||||
"Ok": "Tamam",
|
||||
"passwordLabel": "Parola",
|
||||
"passwordLabel": "Toplantı bir katılımcı tarafından kilitlendi. Lütfen giriş yapmak için $t(lockRoomPassword) giriniz.",
|
||||
"passwordNotSupported": "Toplantı parolası ayarlama desteklenmiyor.",
|
||||
"passwordNotSupportedTitle": "Parola desteklenmiyor",
|
||||
"passwordRequired": "Parola gerekli",
|
||||
"popupError": "Tarayıcınız bu siteden açılan pencereleri engelliyor. Lütfen tarayıcınızın güvenlik ayarlarından açılır pencereleri etkinleştirin ve tekrar deneyin.",
|
||||
"popupErrorTitle": "Açılır pencere engellendi",
|
||||
"recording": "Kaydediliyor",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Canlı akış etkinken mümkün değil...",
|
||||
"recordingDisabledForGuestTooltip": "Misafirler kayıt etmeye başlayamaz.",
|
||||
"recordingDisabledTooltip": "Kaydetmeye başlama devre dışı.",
|
||||
"rejoinNow": "Tekrar katıl",
|
||||
@@ -233,12 +255,17 @@
|
||||
"reservationError": "Rezervasyon sistemi hatası",
|
||||
"reservationErrorMsg": "Hata kodu: {{code}}, mesaj: {{msg}}",
|
||||
"retry": "Yeniden Dene",
|
||||
"screenSharingAudio": "Sesi paylaş",
|
||||
"screenSharingFailedToInstall": "Hata! Ekran paylaşım uzantınız yüklenemedi.",
|
||||
"screenSharingFailedToInstallTitle": "Ekran paylaşım uzantısı yüklenemedi",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Ekranınızı paylaşmaya çalışırken bir şeyler ters gitti. Lütfen bize izin verdiğinizden emin olun.",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Hata! Ekran paylaşımına başlayamadık!",
|
||||
"screenSharingPermissionDeniedError": "Hata! Ekran paylaşma uzantısı izinlerinizle ilgili bir sorun oluştu. Lütfen yeniden yükleyin ve tekrar deneyin.",
|
||||
"serviceUnavailable": "Hizmet kullanılamıyor",
|
||||
"sendPrivateMessage": "Kısa süre önce özel bir mesaj aldınız. Buna özel olarak cevap vermek ister misiniz yoksa mesajınızı gruba göndermek mi istiyorsunuz?",
|
||||
"sendPrivateMessageCancel": "Gruba gönder",
|
||||
"sendPrivateMessageOk": "Özel olarak gönder",
|
||||
"sendPrivateMessageTitle": "Özel olarak gönderilsin mi?",
|
||||
"serviceUnavailable": "Hizmet kullanılamıyor",
|
||||
"sessTerminated": "Arama sonlandırıldı",
|
||||
"Share": "Paylaş",
|
||||
"shareVideoLinkError": "Lütfen doğru bir Youtube bağlantısı sağlayın.",
|
||||
@@ -261,7 +288,7 @@
|
||||
"tokenAuthFailedTitle": "Kimlik doğrulama başarısız",
|
||||
"transcribing": "Deşifre ediliyor",
|
||||
"unlockRoom": "Toplantı parolasını kaldır",
|
||||
"userPassword": "kullancı parolası",
|
||||
"userPassword": "Kullancı parolası",
|
||||
"WaitForHostMsg": "<b>{{room}}</b> toplantısı henüz başlamadı. Toplantı sahibi sizseniz, lütfen kimlik doğrulaması yapın. Değilseniz lütfen toplantı sahibinin gelmesini bekleyin.",
|
||||
"WaitForHostMsgWOk": "<b>{{room}}</b> toplantısı henüz başlamadı. Toplantı sahibi sizseniz, kimlik doğrulaması için Tamam butonuna basın. Değilseniz lütfen toplantı sahibinin gelmesini bekleyin.",
|
||||
"WaitingForHost": "Toplantı sahibi bekleniyor...",
|
||||
@@ -271,6 +298,16 @@
|
||||
"dialOut": {
|
||||
"statusMessage": "şimdi {{status}}"
|
||||
},
|
||||
|
||||
"documentSharing": {
|
||||
"title": "Paylaşılan Döküman"
|
||||
},
|
||||
|
||||
|
||||
"e2ee": {
|
||||
"labelToolTip": "Bu görüşmedeki ses ve video iletişimi uçtan uca şifrelenmiştir."
|
||||
},
|
||||
|
||||
"feedback": {
|
||||
"average": "Orta",
|
||||
"bad": "Kötü",
|
||||
@@ -329,10 +366,10 @@
|
||||
"msg": "Biraz tökezledik.",
|
||||
"retry": "Tekrar dene",
|
||||
"support": "Destek",
|
||||
"supportMsg": "Bu olmaya devam ederse, ulaşın"
|
||||
"supportMsg": "Bu olmaya devam ederse, ulaşın."
|
||||
},
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Videoma odaklan",
|
||||
"focusLocal": "Videoya odaklan",
|
||||
"focusRemote": "Başka bir kişinin videosuna odaklan",
|
||||
"fullScreen": "Tam ekran görüntüle veya çık",
|
||||
"keyboardShortcuts": "Klavye kısayolları",
|
||||
@@ -345,7 +382,9 @@
|
||||
"toggleFilmstrip": "Video önizlemelerini göster veya gizle",
|
||||
"toggleScreensharing": "Kamera ve ekran paylaşımı arasında geçiş yap",
|
||||
"toggleShortcuts": "Klavye kısayollarını göster veya gizle",
|
||||
"videoMute": "Kamerayı aç veya kapat"
|
||||
"videoMute": "Kamerayı aç veya kapat",
|
||||
"videoQuality": "Çağrı kalitesini yönetin"
|
||||
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Akış kaynaklarını serbest bırakmaya çalışıyoruz. Lütfen birkaç dakika içinde tekrar deneyin.",
|
||||
@@ -364,7 +403,9 @@
|
||||
"getStreamKeyManually": "Canlı akış alınamadı. Canlı akış anahtarınızı Youtube'dan almayı deneyin.",
|
||||
"invalidStreamKey": "Canlı akış anahtarı yanlış olabilir.",
|
||||
"off": "Canlı Akış durduruldu",
|
||||
"offBy": "{{name}} canlı akışı durdurdu",
|
||||
"on": "Canlı Akış",
|
||||
"onBy": "{{name}} canlı akışı başlattı",
|
||||
"pending": "Canlı Akış başlatılıyor...",
|
||||
"serviceName": "Canlı Akış hizmeti",
|
||||
"signedInAs": "Şu anda oturum açmış durumdasınız:",
|
||||
@@ -373,7 +414,10 @@
|
||||
"signOut": "Çıkış yap",
|
||||
"start": "Bir canlı akış başlat",
|
||||
"streamIdHelp": "Bu nedir?",
|
||||
"unavailableTitle": "Canlı Akış kullanılamıyor"
|
||||
"unavailableTitle": "Canlı Akış kullanılamıyor",
|
||||
"youtubeTerms": "YouTube hizmet şartları",
|
||||
"googlePrivacyPolicy": "Google Gizlilik Politikası"
|
||||
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -427,20 +471,61 @@
|
||||
"mutedRemotelyDescription": "Konuşmaya hazır olduğun zaman, Kendi mikrofonunu açabilirsin. Görüşmeden gürültüyü uzak tutmak için kendini tekrar sessize almalısın.",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) başka bir katılımcı tarafından kaldırıldı",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) başka bir katılımcı tarafından ayarlandı",
|
||||
"raisedHand": "{{name}} konuşmak istiyor.",
|
||||
"raisedHand": "{{name}} söz hakkı istiyor.",
|
||||
"somebody": "Birisi",
|
||||
"startSilentTitle": "Ses çıkışı olmadan bağlandınız",
|
||||
"startSilentDescription": "Ses çıkışını açtıktan sonra tekrar bağlanın",
|
||||
"suboptimalExperienceDescription": "Mmm... {{appName}} ile olan deneyiminizin burada çok iyi olmayacağından korkuyoruz. Bunu iyileştirmenin yollarını arıyoruz, ancak o zamana kadar lütfen şunlardan birini deneyin: <a href='{{recommendedBrowserPageLink}}' target='_blank'>desteklenen tarayıcılar</a>.",
|
||||
"suboptimalBrowserWarning": "Toplantı deneyiminizin burada çok iyi olmayacağından korkuyoruz. Bunu iyileştirmenin yollarını arıyoruz, ancak o zamana kadar lütfen şunlardan birini deneyin: <a href='{{recommendedBrowserPageLink}}' target='_blank'>desteklenen tarayıcılar</a>.",
|
||||
"suboptimalExperienceTitle": "Tarayıcı Uyarısı",
|
||||
"unmute": "Sessizden çıkar",
|
||||
"newDeviceCameraTitle": "Yeni kamera algılandı",
|
||||
"newDeviceAudioTitle": "Yeni ses aygıtı algılandı",
|
||||
"newDeviceAction": "Kullan"
|
||||
"newDeviceAction": "Kullan",
|
||||
"OldElectronAPPTitle": "Güvenlik açığı!",
|
||||
"oldElectronClientDescription1": "Güvenlik açıkları bilinen Jitsi Meet istemcisinin eski bir sürümünü kullanıyor görünüyorsunuz. Lütfen güncellediğinizden emin olun.",
|
||||
"oldElectronClientDescription2": "son yapı",
|
||||
"oldElectronClientDescription3": " şimdi!"
|
||||
|
||||
},
|
||||
"passwordSetRemotely": "başka katılımcı tarafından ayarlandı",
|
||||
"passwordDigitsOnly": "{{number}} rakama kadar",
|
||||
"poweredby": "gücünün kaynağı",
|
||||
"poweredby": "",
|
||||
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "Ses ve video hatası:",
|
||||
"audioOnlyError": "Ses Hatası:",
|
||||
"audioTrackError": "Ses parçası oluşturulamadı.",
|
||||
"callMe": "Beni ara",
|
||||
"callMeAtNumber": "Beni şu numaradan arayın:",
|
||||
"configuringDevices": "Cihazlar yapılandırılıyor...",
|
||||
"connectedWithAudioQ": "Sese bağlı mısınız?",
|
||||
"copyAndShare": "Toplantı bağlantısını kopyala ve paylaş",
|
||||
"dialInMeeting": "Toplantıya telefon et",
|
||||
"dialInPin": "Toplantıya telefon edin ve PIN kodunu girin:",
|
||||
"dialing": "Arama",
|
||||
"doNotShow": "Bunu bir daha gösterme",
|
||||
"errorDialOut": "Dışarı arama yapılamadı",
|
||||
"errorDialOutDisconnected": "Dışarı arama yapılamadı. Bağlantı kesildi",
|
||||
"errorDialOutFailed": "Dışarı arama yapılamadı. Arama başarısız",
|
||||
"errorDialOutStatus": "Dışarı arama durumu alınırken hata oluştu",
|
||||
"errorStatusCode": "Dışarı arama hatası, durum kodu: {{status}}",
|
||||
"errorValidation": "Numara doğrulanamadı",
|
||||
"iWantToDialIn": "İçeri arama yapmak istiyorum",
|
||||
"joinAudioByPhone": "Join with phone audio",
|
||||
"joinMeeting": "Toplantıya katıl",
|
||||
"joinWithoutAudio": "Ses olmadan katıl",
|
||||
"initiated": "Çağrı başlatıldı",
|
||||
"linkCopied": "Bağlantı panoya kopyalandı",
|
||||
"lookGood": "Mikrofonunuz düzgün çalışıyor gibi görünüyor",
|
||||
"or": "veya",
|
||||
"calling": "Arama",
|
||||
"startWithPhone": "Telefon sesiyle başlayın",
|
||||
"screenSharingError": "Ekran paylaşma hatası:",
|
||||
"videoOnlyError": "Video hatası:",
|
||||
"videoTrackError": "Video izleme oluşturulamadı.",
|
||||
"viewAllNumbers": "tüm numaraları görüntüle"
|
||||
},
|
||||
|
||||
"presenceStatus": {
|
||||
"busy": "Meşgul",
|
||||
"calling": "Arıyor...",
|
||||
@@ -461,7 +546,10 @@
|
||||
"setEmailLabel": "Gravatar e-postanızı ayarlayın",
|
||||
"title": "Profil"
|
||||
},
|
||||
"raisedHand": "Konuşmak ister misiniz?",
|
||||
"recording": {
|
||||
"limitNotificationDescriptionWeb": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <3>{{app}}</3>.",
|
||||
"authDropboxText": "Dropbox'a yükle",
|
||||
"availableSpace": "Kullanılabilir alan: {{spaceLeft}} MB (yaklaşık {{duration}} dakika kayıt)",
|
||||
"beta": "BETA",
|
||||
@@ -489,6 +577,13 @@
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Yenilemek için çekin"
|
||||
},
|
||||
|
||||
"security": {
|
||||
"about": "Toplantınıza bir şifre ekleyebilirsiniz. Katılımcıların toplantıya katılmasına izin verilmeden önce şifreyi girmeleri gerekecektir.",
|
||||
"insecureRoomNameWarning": "Toplantı odası güvenli değil. Konferansınıza istenmeyen katılımcılar katılabilir.",
|
||||
"securityOptions": "Güvenlik Seçenekleri"
|
||||
},
|
||||
|
||||
"settings": {
|
||||
"calendar": {
|
||||
"about": "{{appName}} takvim entegrasyonu, yaklaşan etkinlikleri okuyabilmesi için takviminize güvenli bir şekilde erişmek için kullanılır.",
|
||||
@@ -513,16 +608,23 @@
|
||||
"title": "Ayarlar"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Gelişmiş",
|
||||
"alertOk": "Tamam",
|
||||
"alertCancel": "İptal",
|
||||
"alertTitle": "Uyarı",
|
||||
"alertURLText": "Girilen sunucu bağlantısı geçersiz",
|
||||
"buildInfoSection": "Yapı Bilgisi",
|
||||
"conferenceSection": "Toplantı",
|
||||
"disableCallIntegration": "Yerel arama entegrasyonunu devre dışı bırak",
|
||||
"disableP2P": "Peer-To-Peer modunu devre dışı bırak",
|
||||
"disableCrashReporting": "Çökme raporlamasını devre dışı bırak",
|
||||
"disableCrashReportingWarning": "Kilitlenme raporlamasını devre dışı bırakmak istediğinizden emin misiniz? Ayar, uygulamayı yeniden başlattıktan sonra uygulanacaktır.",
|
||||
"displayName": "Görünür ad",
|
||||
"email": "E-posta",
|
||||
"header": "Ayarlar",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Sunucu Bağlantısı",
|
||||
"showAdvanced": "Gelişmiş ayarları göster",
|
||||
"startWithAudioMuted": "Ses kapalı başla",
|
||||
"startWithVideoMuted": "Görüntü kapalı başla",
|
||||
"version": "Versiyon"
|
||||
@@ -557,17 +659,23 @@
|
||||
"cc": "Altyazıları aç/kapat",
|
||||
"chat": "Mesajlaşma penceresini aç/kapat",
|
||||
"document": "Paylaşılan dokümanı aç/kapat",
|
||||
"download": "Uygulamalarımızı indirin",
|
||||
"e2ee": "Uçtan uca şifreleme",
|
||||
"feedback": "Geri bildirim bırakın",
|
||||
"fullScreen": "Tam ekranı aç/kapat",
|
||||
"hangup": "Aramadan ayrıl",
|
||||
"help": "Yardım",
|
||||
"invite": "İnsanları davet et",
|
||||
"kick": "Katılımcı çıkar",
|
||||
"lobbyButton": "Lobi modunu etkinleştir / devre dışı bırak",
|
||||
"localRecording": "Kayıt denetimlerini aç/kapat",
|
||||
"lockRoom": "Toplantı parolasını aç/kapat",
|
||||
"moreActions": "Diğer işlemler menüsünü aç/kapat",
|
||||
"moreActionsMenu": "Diğer işlemler menüsü",
|
||||
"mute": "Sesi aç/kapat",
|
||||
"muteEveryone": "Herkesi sustur",
|
||||
"pip": "Resim içinde Resim modunu aç/kapat",
|
||||
"privateMessage": "Özel mesaj gönder",
|
||||
"profile": "Profilinizi düzenleyin",
|
||||
"raiseHand": "El kaldırmayı aç/kapat",
|
||||
"recording": "Kaydetmeyi aç/kapat",
|
||||
@@ -594,20 +702,35 @@
|
||||
"closeChat": "Mesajlaşmayı kapat",
|
||||
"documentClose": "Paylaşılan dokümanı kapat",
|
||||
"documentOpen": "Paylaşılan dokümanı aç",
|
||||
"download": "Uygulamalarımızı indirin",
|
||||
"e2ee": "Uçtan uca şifreleme",
|
||||
"enterFullScreen": "Tam ekran görüntüle",
|
||||
"enterTileView": "Döşeme görünümüne geç",
|
||||
"exitFullScreen": "Tam ekrandan çık",
|
||||
"exitTileView": "Döşeme görünümünden çık",
|
||||
"feedback": "Geri bildirim bırakın",
|
||||
"hangup": "Ayrıl",
|
||||
"help": "Yardım",
|
||||
"invite": "Kişi davet et",
|
||||
"lobbyButtonDisable": "Lobi modunu devre dışı bırak",
|
||||
"lobbyButtonEnable": "Lobi modunu devre aktifleştir",
|
||||
"login": "Oturum aç",
|
||||
"logout": "Oturum kapat",
|
||||
"lowerYourHand": "Elinizi indirin",
|
||||
"moreActions": "Daha fazla işlem",
|
||||
"moreOptions": "Daha fazla seçenek",
|
||||
"mute": "Sessiz / Sesli",
|
||||
"muteEveryone": "Mute everyone",
|
||||
"noAudioSignalTitle": "Mikrofonunuzdan hiçbir giriş gelmiyor!",
|
||||
"noAudioSignalDesc": "Sistem ayarlarından veya donanımdan sesi kapatmadıysanız, cihazınızı değiştirin.",
|
||||
"noAudioSignalDescSuggestion": "Sistem ayarlarından veya donanımdan kasıtlı olarak kapatmadıysanız, önerilen aygıta geçmeyi düşünün.",
|
||||
"noAudioSignalDialInDesc": "",
|
||||
"noAudioSignalDialInLinkDesc": "İçeri arama numaraları",
|
||||
"noisyAudioInputTitle": "Mikrofonunuz gürültülü görünüyor!",
|
||||
"noisyAudioInputDesc": "Mikrofonunuz gürültü yapıyor gibi görünüyor, lütfen cihazı kapatmayı veya değiştirmeyi düşünün.",
|
||||
"openChat": "Mesajlaşmayı aç",
|
||||
"pip": "Resim içinde Resim moduna gir",
|
||||
"privateMessage": "Özel mesajgönder",
|
||||
"profile": "Profilinizi düzenleyin",
|
||||
"raiseHand": "Elinizi kaldırın/indirin",
|
||||
"raiseYourHand": "Elinizi kaldırın",
|
||||
@@ -671,21 +794,24 @@
|
||||
"labelTooiltipNoVideo": "Görüntü yok",
|
||||
"labelTooltipAudioOnly": "Yalnızca ses modu etkin",
|
||||
"ld": "LD",
|
||||
"ldTooltip": "Düşük çözünürlüklü video görüntüleme",
|
||||
"lowDefinition": "Düşük çözünürlük",
|
||||
"onlyAudioAvailable": "Yalnızca ses kullanılabilir",
|
||||
"onlyAudioSupported": "Bu tarayıcıda yalnızca sesi destekliyoruz.",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Standart çözünürlüklü video görüntüleme",
|
||||
"standardDefinition": "Standart çözünürlük"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"domute": "Sustur",
|
||||
"domuteOthers": "Diğer herkesi sustur",
|
||||
"flip": "Döndür",
|
||||
"kick": "Çıkarıldı",
|
||||
"moderator": "Yönetici",
|
||||
"mute": "Katılımcı sessiz",
|
||||
"muted": "Sessiz",
|
||||
"remoteControl": "Uzaktan kontrol",
|
||||
"show": "",
|
||||
"show": "Sahnede göster",
|
||||
"videomute": "Katılımcı kamerayı durdurdu"
|
||||
},
|
||||
"welcomepage": {
|
||||
@@ -702,6 +828,9 @@
|
||||
"connectCalendarButton": "Takviminizi bağlayın",
|
||||
"connectCalendarText": "",
|
||||
"enterRoomTitle": "Yeni bir toplantı başlat",
|
||||
"getHelp": "Yardım alın",
|
||||
"roomNameAllowedChars": "Toplantı adı şu karakterlerden hiçbirini içermemelidir: ?, &, :, ', \", %, #.",
|
||||
|
||||
"go": "GİT",
|
||||
"join": "KATIL",
|
||||
"info": "Bilgi",
|
||||
@@ -714,13 +843,52 @@
|
||||
"roomnameHint": "Katılmak istediğiniz odanın adını veya bağlantısını girin. İstediğiniz oda adını uydurabilirsiniz. Aynı odada buluşmak için görüşmek istediğiniz kişilere bunu iletmeniz yeterli.",
|
||||
"sendFeedback": "Geri bildirim gönder",
|
||||
"terms": "Kurallar",
|
||||
"title": "Güvenli, tüm özelliklere erişimli ve tamamen ücretsiz görüntülü arama",
|
||||
"getHelp": "Yardım alın"
|
||||
"title": "Güvenli, tüm özelliklere erişimli ve tamamen ücretsiz görüntülü arama"
|
||||
|
||||
},
|
||||
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "Birilerini davet et",
|
||||
"youAreAlone": "Toplantıdaki tek kişisiniz"
|
||||
},
|
||||
|
||||
"helpView": {
|
||||
"header": "Yardım Merkezi"
|
||||
},
|
||||
|
||||
"defaultNickname": "örnek Jane Pink",
|
||||
"chromeExtensionBanner": {
|
||||
"dontShowAgain": "Bunu bir daha gösterme",
|
||||
"buttonText": "Chrome Eklentisi'ni indirin",
|
||||
"installExtensionText": "Google Takvim ve Office 365 entegrasyonu için uzantıyı yükleyin"
|
||||
},
|
||||
|
||||
"lobby": {
|
||||
"allow": "İzin ver",
|
||||
"backToKnockModeButton": "Şifre yok, bunun yerine katılmayı isteyin",
|
||||
"dialogTitle": "Lobi modu",
|
||||
"disableDialogContent": "Lobi modu şu anda etkin. Bu özellik, istenmeyen katılımcıların toplantınıza katılamamasını sağlar. Devre dışı bırakmak istiyor musunuz?",
|
||||
"disableDialogSubmit": "Devre Dışı",
|
||||
"emailField": "E-posta adresinizi giriniz",
|
||||
"enableDialogPasswordField": "Şifre belirleyin (isteğe bağlı)",
|
||||
"enableDialogSubmit": "Etkin",
|
||||
"enableDialogText": "Lobi modu, toplantınızı yalnızca kişilerin bir moderatör tarafından resmi olarak onaylandıktan sonra girmelerine izin vererek korumanıza izin verir.",
|
||||
"enterPasswordButton": "Toplantı şifresini girin",
|
||||
"enterPasswordTitle": "Toplantıya katılmak için şifre girin",
|
||||
"invalidPassword": "Geçersiz şifre",
|
||||
"joiningMessage": "Birisi isteğinizi kabul eder etmez toplantıya katılacaksınız",
|
||||
"joinWithPasswordMessage": "Şifre ile katılmaya çalışıyorsunuz lütfen bekleyin...",
|
||||
"joinRejectedMessage": "Katılma isteğiniz bir moderatör tarafından reddedildi.",
|
||||
"joinTitle": "Toplantıya katıl",
|
||||
"joiningTitle": "Toplantıya katılma isteniyor...",
|
||||
"joiningWithPasswordTitle": "Şifre ile katılıyor...",
|
||||
"knockButton": "Katılmak için sor",
|
||||
"knockTitle": "Birisi toplantıya katılmak istiyor",
|
||||
"nameField": "Adınızı giriniz",
|
||||
"passwordField": "Toplantı şifresini giriniz",
|
||||
"passwordJoinButton": "Katıl",
|
||||
"reject": "Reddet",
|
||||
"toggleLabel": "Lobiyi etkinleştir"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -180,10 +180,8 @@
|
||||
"dismiss": "Скасувати",
|
||||
"displayNameRequired": "Вітання! Як вас звати?",
|
||||
"done": "Готово",
|
||||
"e2eeDescription": "<p>Наскрізне шифрування зараз в режимі<strong>ТЕСТУВАННЯ</strong>. Будь ласка, перегляньте <a href='https://jitsi.org/blog/e2ee/' target='_blank'>цю публікацію</a> для докладної інформації.</p><br/><p>Зверніть увагу, що увімкнення наскрізного шифрування призведе до вимкнення таких служб на стороні сервера: запису, живої трансляції запису в онлайні та участі у конференції за допомогою вхідного телефонного дзвінка. Також, просимо звернути увагу, що приєднання до зустрічі в такому разі буде можливе лише з браузера, який має підтримувати потоки зі вставкою (insertable streams).</p>",
|
||||
"e2eeLabel": "Ключ",
|
||||
"e2eeTitle": "Наскрізне шифрування",
|
||||
"e2eeWarning": "<br /><p><strong>УВАГА:</strong> Схоже, що не всі учасники цієї зустрічі мають підтримку технології наскрізного шифрування. Якщо ви увімкнете цю функцію, то вони не зможуть ані чути, ані бачити вас.</p>",
|
||||
"e2eeDescription": "Наскрізне шифрування зараз в режимі ТЕСТУВАННЯ. Зверніть увагу, що увімкнення наскрізного шифрування призведе до вимкнення таких служб на стороні сервера: запису, живої трансляції запису в онлайні та участі у конференції за допомогою вхідного телефонного дзвінка. Також, просимо звернути увагу, що приєднання до зустрічі в такому разі буде можливе лише з браузера, який має підтримувати потоки зі вставкою (insertable streams).",
|
||||
"e2eeWarning": "УВАГА: Схоже, що не всі учасники цієї зустрічі мають підтримку технології наскрізного шифрування. Якщо ви увімкнете цю функцію, то вони не зможуть ані чути, ані бачити вас.",
|
||||
"enterDisplayName": "Будь ласка, зазначте ваше ім'я",
|
||||
"error": "Помилка",
|
||||
"externalInstallationMsg": "Вам потрібно встановити наше розширення для спільного доступу до стільниці.",
|
||||
|
||||
@@ -193,21 +193,18 @@
|
||||
"dismiss": "Dismiss",
|
||||
"displayNameRequired": "Hi! What’s your name?",
|
||||
"done": "Done",
|
||||
"e2eeDescription": "<p>End-to-End Encryption is currently <strong>EXPERIMENTAL</strong>. Please see <a href='https://jitsi.org/blog/e2ee/' target='_blank'>this post</a> for details.</p><br/><p>Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.</p>",
|
||||
"e2eeLabel": "Key",
|
||||
"e2eeTitle": "End-to-End Encryption",
|
||||
"e2eeWarning": "<br /><p><strong>WARNING:</strong> Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.</p>",
|
||||
"e2eeDescription": "End-to-End Encryption is currently EXPERIMENTAL. Please keep in mind that turning on end-to-end encryption will effectively disable server-side provided services such as: recording, live streaming and phone participation. Also keep in mind that the meeting will only work for people joining from browsers with support for insertable streams.",
|
||||
"e2eeLabel": "E2EE key",
|
||||
"e2eeNoKey": "None",
|
||||
"e2eeToggleSet": "Set key",
|
||||
"e2eeSet": "Set",
|
||||
"e2eeWarning": "WARNING: Not all participants in this meeting seem to have support for End-to-End encryption. If you enable it they won't be able to see nor hear you.",
|
||||
"enterDisplayName": "Please enter your name here",
|
||||
"error": "Error",
|
||||
"externalInstallationMsg": "You need to install our desktop sharing extension.",
|
||||
"externalInstallationTitle": "Extension required",
|
||||
"goToStore": "Go to the webstore",
|
||||
"gracefulShutdown": "Our service is currently down for maintenance. Please try again later.",
|
||||
"IamHost": "I am the host",
|
||||
"incorrectRoomLockPassword": "Incorrect password",
|
||||
"incorrectPassword": "Incorrect username or password",
|
||||
"inlineInstallationMsg": "You need to install our desktop sharing extension.",
|
||||
"inlineInstallExtension": "Install now",
|
||||
"internalError": "Oops! Something went wrong. The following error occurred: {{error}}",
|
||||
"internalErrorTitle": "Internal error",
|
||||
"kickMessage": "You can contact {{participantDisplayName}} for more details.",
|
||||
@@ -249,6 +246,7 @@
|
||||
"passwordRequired": "$t(lockRoomPasswordUppercase) required",
|
||||
"popupError": "Your browser is blocking pop-up windows from this site. Please enable pop-ups in your browser's security settings and try again.",
|
||||
"popupErrorTitle": "Pop-up blocked",
|
||||
"readMore": "more",
|
||||
"recording": "Recording",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
|
||||
"recordingDisabledForGuestTooltip": "Guests can't start recordings.",
|
||||
@@ -269,11 +267,9 @@
|
||||
"reservationErrorMsg": "Error code: {{code}}, message: {{msg}}",
|
||||
"retry": "Retry",
|
||||
"screenSharingAudio": "Share audio",
|
||||
"screenSharingFailedToInstall": "Oops! Your screen sharing extension failed to install.",
|
||||
"screenSharingFailedToInstallTitle": "Screen sharing extension failed to install",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Something went wrong while we were trying to share your screen. Please make sure that you have given us permission to do so.",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Oops! We weren’t able to start screen sharing!",
|
||||
"screenSharingPermissionDeniedError": "Oops! Something went wrong with your screen sharing extension permissions. Please reload and try again.",
|
||||
"screenSharingFailed": "Oops! Something went wrong, we weren’t able to start screen sharing!",
|
||||
"screenSharingFailedTitle": "Screen sharing failed!",
|
||||
"screenSharingPermissionDeniedError": "Oops! Something went wrong with your screen sharing permissions. Please reload and try again.",
|
||||
"sendPrivateMessage": "You recently received a private message. Did you intend to reply to that privately, or you want to send your message to the group?",
|
||||
"sendPrivateMessageCancel": "Send to the group",
|
||||
"sendPrivateMessageOk": "Send privately",
|
||||
@@ -586,8 +582,9 @@
|
||||
"pullToRefresh": "Pull to refresh"
|
||||
},
|
||||
"security": {
|
||||
"about": "You can add a passcode to your meeting. Participants will need to provide the passcode before they are allowed to join the meeting.",
|
||||
"insecureRoomNameWarning": "The room name is insecure. Unwanted participants may join your conference.",
|
||||
"about": "You can add a $t(lockRoomPassword) to your meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
|
||||
"aboutReadOnly": "Moderator participants can add a $t(lockRoomPassword) to the meeting. Participants will need to provide the $t(lockRoomPassword) before they are allowed to join the meeting.",
|
||||
"insecureRoomNameWarning": "The room name is unsafe. Unwanted participants may join your conference. Consider securing your meeting using the security button.",
|
||||
"securityOptions": "Security options"
|
||||
},
|
||||
"settings": {
|
||||
@@ -842,16 +839,17 @@
|
||||
"connectCalendarText": "Connect your calendar to view all your meetings in {{app}}. Plus, add {{provider}} meetings to your calendar and start them with one click.",
|
||||
"enterRoomTitle": "Start a new meeting",
|
||||
"getHelp": "Get help",
|
||||
"roomNameAllowedChars": "Meeting name should not contain any of these characters: ?, &, :, ', \", %, #.",
|
||||
"go": "GO",
|
||||
"goSmall": "GO",
|
||||
"join": "CREATE / JOIN",
|
||||
"info": "Info",
|
||||
"join": "CREATE / JOIN",
|
||||
"moderatedMessage": "Or <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">book a meeting URL</a> in advance where you are the only moderator.",
|
||||
"privacy": "Privacy",
|
||||
"recentList": "Recent",
|
||||
"recentListDelete": "Delete",
|
||||
"recentListEmpty": "Your recent list is currently empty. Chat with your team and you will find all your recent meetings here.",
|
||||
"reducedUIText": "Welcome to {{app}}!",
|
||||
"roomNameAllowedChars": "Meeting name should not contain any of these characters: ?, &, :, ', \", %, #.",
|
||||
"roomname": "Enter room name",
|
||||
"roomnameHint": "Enter the name or URL of the room you want to join. You may make a name up, just let the people you are meeting know it so that they enter the same name.",
|
||||
"sendFeedback": "Send feedback",
|
||||
@@ -866,6 +864,7 @@
|
||||
"header": "Help center"
|
||||
},
|
||||
"lobby": {
|
||||
"knockingParticipantList" : "Knocking participant list",
|
||||
"allow": "Allow",
|
||||
"backToKnockModeButton": "No password, ask to join instead",
|
||||
"dialogTitle": "Lobby mode",
|
||||
@@ -887,6 +886,11 @@
|
||||
"knockButton": "Ask to Join",
|
||||
"knockTitle": "Someone wants to join the meeting",
|
||||
"nameField": "Enter your name",
|
||||
"notificationLobbyAccessDenied": "{{targetParticipantName}} has been rejected to join by {{originParticipantName}}",
|
||||
"notificationLobbyAccessGranted": "{{targetParticipantName}} has been allowed to join by {{originParticipantName}}",
|
||||
"notificationLobbyDisabled": "Lobby has been disabled by {{originParticipantName}}",
|
||||
"notificationLobbyEnabled": "Lobby has been enabled by {{originParticipantName}}",
|
||||
"notificationTitle": "Lobby",
|
||||
"passwordField": "Enter meeting password",
|
||||
"passwordJoinButton": "Join",
|
||||
"reject": "Reject",
|
||||
|
||||
@@ -368,6 +368,9 @@ function initCommands() {
|
||||
case 'is-video-available':
|
||||
callback(videoAvailable);
|
||||
break;
|
||||
case 'is-sharing-screen':
|
||||
callback(Boolean(APP.conference.isSharingScreen));
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
11
modules/API/external/external_api.js
vendored
11
modules/API/external/external_api.js
vendored
@@ -760,6 +760,17 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns screen sharing status.
|
||||
*
|
||||
* @returns {Promise} - Resolves with screensharing status and rejects on failure.
|
||||
*/
|
||||
isSharingScreen() {
|
||||
return this._transport.sendRequest({
|
||||
name: 'is-sharing-screen'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the avatar URL of a participant.
|
||||
*
|
||||
|
||||
@@ -553,82 +553,6 @@ UI.getLargeVideo = function() {
|
||||
return VideoLayout.getLargeVideo();
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows "Please go to chrome webstore to install the desktop sharing extension"
|
||||
* 2 button dialog with buttons - cancel and go to web store.
|
||||
* @param url {string} the url of the extension.
|
||||
*/
|
||||
UI.showExtensionExternalInstallationDialog = function(url) {
|
||||
let openedWindow = null;
|
||||
|
||||
const submitFunction = function(e, v) {
|
||||
if (v) {
|
||||
e.preventDefault();
|
||||
if (openedWindow === null || openedWindow.closed) {
|
||||
openedWindow
|
||||
= window.open(
|
||||
url,
|
||||
'extension_store_window',
|
||||
'resizable,scrollbars=yes,status=1');
|
||||
} else {
|
||||
openedWindow.focus();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const closeFunction = function(e, v) {
|
||||
if (openedWindow) {
|
||||
// Ideally we would close the popup, but this does not seem to work
|
||||
// on Chrome. Leaving it uncommented in case it could work
|
||||
// in some version.
|
||||
openedWindow.close();
|
||||
openedWindow = null;
|
||||
}
|
||||
if (!v) {
|
||||
eventEmitter.emit(UIEvents.EXTERNAL_INSTALLATION_CANCELED);
|
||||
}
|
||||
};
|
||||
|
||||
messageHandler.openTwoButtonDialog({
|
||||
titleKey: 'dialog.externalInstallationTitle',
|
||||
msgKey: 'dialog.externalInstallationMsg',
|
||||
leftButtonKey: 'dialog.goToStore',
|
||||
submitFunction,
|
||||
loadedFunction: $.noop,
|
||||
closeFunction
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Shows a dialog which asks user to install the extension. This one is
|
||||
* displayed after installation is triggered from the script, but fails because
|
||||
* it must be initiated by user gesture.
|
||||
* @param callback {function} function to be executed after user clicks
|
||||
* the install button - it should make another attempt to install the extension.
|
||||
*/
|
||||
UI.showExtensionInlineInstallationDialog = function(callback) {
|
||||
const submitFunction = function(e, v) {
|
||||
if (v) {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
|
||||
const closeFunction = function(e, v) {
|
||||
if (!v) {
|
||||
eventEmitter.emit(UIEvents.EXTERNAL_INSTALLATION_CANCELED);
|
||||
}
|
||||
};
|
||||
|
||||
messageHandler.openTwoButtonDialog({
|
||||
titleKey: 'dialog.externalInstallationTitle',
|
||||
msgKey: 'dialog.inlineInstallationMsg',
|
||||
leftButtonKey: 'dialog.inlineInstallExtension',
|
||||
submitFunction,
|
||||
loadedFunction: $.noop,
|
||||
closeFunction
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Show shared video.
|
||||
* @param {string} id the id of the sender of the command
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* global $, APP, config */
|
||||
|
||||
import { toJid } from '../../../react/features/base/connection';
|
||||
import { toJid } from '../../../react/features/base/connection/functions';
|
||||
import {
|
||||
JitsiConnectionErrors
|
||||
} from '../../../react/features/base/lib-jitsi-meet';
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* global $, APP */
|
||||
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import { jitsiLocalStorage } from 'js-utils';
|
||||
|
||||
import {
|
||||
NOTIFICATION_TIMEOUT,
|
||||
|
||||
@@ -276,9 +276,12 @@ export default class LocalVideo extends SmallVideo {
|
||||
|
||||
// Ensure the video gets play() called on it. This may be necessary in the
|
||||
// case where the local video container was moved and re-attached, in which
|
||||
// case video does not autoplay.
|
||||
// case video does not autoplay. Also, set the playsinline attribute on the
|
||||
// video element so that local video doesn't open in full screen by default
|
||||
// in Safari browser on iOS.
|
||||
const video = this.container.querySelector('video');
|
||||
|
||||
video && video.setAttribute('playsinline', 'true');
|
||||
video && !config.testing?.noAutoPlayVideo && video.play();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// FIXME: change to '../API' when we update to webpack2. If we do this now all
|
||||
// files from API modules will be included in external_api.js.
|
||||
import { PostMessageTransportBackend, Transport } from 'js-utils/transport';
|
||||
import { PostMessageTransportBackend, Transport } from '@jitsi/js-utils/transport';
|
||||
|
||||
import { getJitsiMeetGlobalNS } from '../../react/features/base/util';
|
||||
import { API_ID } from '../API/constants';
|
||||
|
||||
1384
package-lock.json
generated
1384
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
13
package.json
13
package.json
@@ -32,6 +32,7 @@
|
||||
"@atlaskit/theme": "7.0.2",
|
||||
"@atlaskit/toggle": "5.0.14",
|
||||
"@atlaskit/tooltip": "12.1.13",
|
||||
"@jitsi/js-utils": "1.0.0",
|
||||
"@microsoft/microsoft-graph-client": "1.1.0",
|
||||
"@react-native-community/async-storage": "1.3.4",
|
||||
"@react-native-community/google-signin": "3.0.1",
|
||||
@@ -54,9 +55,8 @@
|
||||
"jquery-contextmenu": "2.4.5",
|
||||
"jquery-i18next": "1.2.1",
|
||||
"js-md5": "0.6.1",
|
||||
"js-utils": "github:jitsi/js-utils#cf11996bd866fdb47326c59a5d3bc24be17282d4",
|
||||
"jwt-decode": "2.2.0",
|
||||
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#6af8eee57d1ebdc0881c8c2875d4346e02d01549",
|
||||
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#cd008d726f1f57562eb5d8e6a3cd91c7e69826a0",
|
||||
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
|
||||
"lodash": "4.17.13",
|
||||
"moment": "2.19.4",
|
||||
@@ -81,14 +81,15 @@
|
||||
"react-native-svg-transformer": "0.13.0",
|
||||
"react-native-swipeout": "2.3.6",
|
||||
"react-native-watch-connectivity": "0.4.3",
|
||||
"react-native-webrtc": "1.75.3",
|
||||
"react-native-webrtc": "1.84.0",
|
||||
"react-native-webview": "7.4.1",
|
||||
"react-native-youtube-iframe": "1.2.3",
|
||||
"react-redux": "7.1.0",
|
||||
"react-textarea-autosize": "7.1.0",
|
||||
"react-transition-group": "2.4.0",
|
||||
"redux": "4.0.4",
|
||||
"redux-thunk": "2.2.0",
|
||||
"rnnoise-wasm": "github:jitsi/rnnoise-wasm.git#db96d11f175a22ef56c7db1ba9550835b716e615",
|
||||
"rnnoise-wasm": "github:jitsi/rnnoise-wasm.git#566a16885897704d6e6d67a1d5ac5d39781db2af",
|
||||
"styled-components": "3.4.9",
|
||||
"util": "0.12.1",
|
||||
"uuid": "3.1.0",
|
||||
@@ -111,8 +112,8 @@
|
||||
"babel-eslint": "10.0.1",
|
||||
"babel-loader": "8.0.4",
|
||||
"circular-dependency-plugin": "5.2.0",
|
||||
"clean-css": "3.4.25",
|
||||
"css-loader": "0.28.7",
|
||||
"clean-css-cli": "4.3.0",
|
||||
"css-loader": "3.6.0",
|
||||
"eslint": "5.6.1",
|
||||
"eslint-config-jitsi": "github:jitsi/eslint-config-jitsi#1.0.3",
|
||||
"eslint-plugin-flowtype": "2.50.3",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import { API_ID } from '../../../modules/API';
|
||||
import {
|
||||
checkChromeExtensionsInstalled,
|
||||
isMobileBrowser
|
||||
@@ -155,6 +156,12 @@ export function initAnalytics({ getState }: { getState: Function }, handlers: Ar
|
||||
// Report if user is using websocket
|
||||
permanentProperties.websocket = navigator.product !== 'ReactNative' && typeof config.websocket === 'string';
|
||||
|
||||
// permanentProperties is external api
|
||||
permanentProperties.externalApi = typeof API_ID === 'number';
|
||||
|
||||
// Report if we are loaded in iframe
|
||||
permanentProperties.inIframe = _inIframe();
|
||||
|
||||
// Optionally, include local deployment information based on the
|
||||
// contents of window.config.deploymentInfo.
|
||||
if (deploymentInfo) {
|
||||
@@ -184,6 +191,24 @@ export function initAnalytics({ getState }: { getState: Function }, handlers: Ar
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether we are loaded in iframe.
|
||||
*
|
||||
* @returns {boolean} Returns {@code true} if loaded in iframe.
|
||||
* @private
|
||||
*/
|
||||
function _inIframe() {
|
||||
if (navigator.product === 'ReactNative') {
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
return window.self !== window.top;
|
||||
} catch (e) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tries to load the scripts for the analytics handlers and creates them.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,2 @@
|
||||
export * from './AnalyticsEvents';
|
||||
export * from './functions';
|
||||
|
||||
import './middleware';
|
||||
import './reducer';
|
||||
|
||||
@@ -3,12 +3,8 @@
|
||||
import React, { Fragment } from 'react';
|
||||
|
||||
import { BaseApp } from '../../base/app';
|
||||
import '../../base/lastn'; // Register lastN middleware
|
||||
import { toURLString } from '../../base/util';
|
||||
import '../../follow-me';
|
||||
import { OverlayContainer } from '../../overlay';
|
||||
import '../../lobby'; // Import lobby function
|
||||
import '../../rejoin'; // Enable rejoin analytics
|
||||
import { appNavigate } from '../actions';
|
||||
import { getDefaultURL } from '../functions';
|
||||
|
||||
|
||||
@@ -2,32 +2,21 @@
|
||||
|
||||
import React from 'react';
|
||||
|
||||
import '../../analytics';
|
||||
import '../../authentication';
|
||||
import { setColorScheme } from '../../base/color-scheme';
|
||||
import { DialogContainer } from '../../base/dialog';
|
||||
import { CALL_INTEGRATION_ENABLED, updateFlags } from '../../base/flags';
|
||||
import '../../base/jwt';
|
||||
import { CALL_INTEGRATION_ENABLED, SERVER_URL_CHANGE_ENABLED, updateFlags } from '../../base/flags';
|
||||
import { Platform } from '../../base/react';
|
||||
import { DimensionsDetector, clientResized } from '../../base/responsive-ui';
|
||||
import { updateSettings } from '../../base/settings';
|
||||
import '../../google-api';
|
||||
import '../../mobile/audio-mode';
|
||||
import '../../mobile/back-button';
|
||||
import '../../mobile/background';
|
||||
import '../../mobile/call-integration';
|
||||
import '../../mobile/external-api';
|
||||
import '../../mobile/full-screen';
|
||||
import '../../mobile/permissions';
|
||||
import '../../mobile/picture-in-picture';
|
||||
import '../../mobile/proximity';
|
||||
import '../../mobile/wake-lock';
|
||||
import '../../mobile/watchos';
|
||||
import logger from '../logger';
|
||||
|
||||
import { AbstractApp } from './AbstractApp';
|
||||
import type { Props as AbstractAppProps } from './AbstractApp';
|
||||
|
||||
// Register middlewares and reducers.
|
||||
import '../middlewares';
|
||||
import '../reducers';
|
||||
|
||||
declare var __DEV__;
|
||||
|
||||
/**
|
||||
@@ -97,6 +86,20 @@ export class App extends AbstractApp {
|
||||
// We set these early enough so then we avoid any unnecessary re-renders.
|
||||
const { dispatch } = this.state.store;
|
||||
|
||||
// Check if serverURL is configured externally and not allowed to change.
|
||||
const serverURLChangeEnabled = this.props.flags[SERVER_URL_CHANGE_ENABLED];
|
||||
|
||||
if (!serverURLChangeEnabled) {
|
||||
// As serverURL is provided externally, so we push it to settings.
|
||||
if (typeof this.props.url !== 'undefined') {
|
||||
const { serverURL } = this.props.url;
|
||||
|
||||
if (typeof serverURL !== 'undefined') {
|
||||
dispatch(updateSettings({ serverURL }));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dispatch(setColorScheme(this.props.colorScheme));
|
||||
dispatch(updateFlags(this.props.flags));
|
||||
dispatch(updateSettings(this.props.userInfo || {}));
|
||||
|
||||
@@ -5,19 +5,13 @@ import React from 'react';
|
||||
|
||||
import { DialogContainer } from '../../base/dialog';
|
||||
import { ChromeExtensionBanner } from '../../chrome-extension-banner';
|
||||
import '../../base/user-interaction';
|
||||
import '../../chat';
|
||||
import '../../external-api';
|
||||
import '../../no-audio-signal';
|
||||
import '../../noise-detection';
|
||||
import '../../power-monitor';
|
||||
import '../../room-lock';
|
||||
import '../../talk-while-muted';
|
||||
import '../../video-layout';
|
||||
import '../../old-client-notification';
|
||||
|
||||
import { AbstractApp } from './AbstractApp';
|
||||
|
||||
// Register middlewares and reducers.
|
||||
import '../middlewares';
|
||||
import '../reducers';
|
||||
|
||||
/**
|
||||
* Root app {@code Component} on Web/React.
|
||||
*
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import { generateRoomWithoutSeparator } from 'js-utils/random';
|
||||
import { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';
|
||||
import type { Component } from 'react';
|
||||
|
||||
import { isRoomValid } from '../base/conference';
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
// @flow
|
||||
|
||||
export * from './actions';
|
||||
export * from './components';
|
||||
export * from './functions';
|
||||
|
||||
import './middleware';
|
||||
47
react/features/app/middlewares.any.js
Normal file
47
react/features/app/middlewares.any.js
Normal file
@@ -0,0 +1,47 @@
|
||||
// @flow
|
||||
|
||||
import '../analytics/middleware';
|
||||
import '../base/conference/middleware';
|
||||
import '../base/config/middleware';
|
||||
import '../base/jwt/middleware';
|
||||
import '../base/known-domains/middleware';
|
||||
import '../base/lastn/middleware';
|
||||
import '../base/lib-jitsi-meet/middleware';
|
||||
import '../base/logging/middleware';
|
||||
import '../base/media/middleware';
|
||||
import '../base/net-info/middleware';
|
||||
import '../base/participants/middleware';
|
||||
import '../base/redux/middleware';
|
||||
import '../base/responsive-ui/middleware';
|
||||
import '../base/settings/middleware';
|
||||
import '../base/sounds/middleware';
|
||||
import '../base/testing/middleware';
|
||||
import '../base/tracks/middleware';
|
||||
import '../base/user-interaction/middleware';
|
||||
import '../calendar-sync/middleware';
|
||||
import '../chat/middleware';
|
||||
import '../conference/middleware';
|
||||
import '../connection-indicator/middleware';
|
||||
import '../deep-linking/middleware';
|
||||
import '../device-selection/middleware';
|
||||
import '../display-name/middleware';
|
||||
import '../etherpad/middleware';
|
||||
import '../filmstrip/middleware';
|
||||
import '../follow-me/middleware';
|
||||
import '../invite/middleware';
|
||||
import '../large-video/middleware';
|
||||
import '../lobby/middleware';
|
||||
import '../notifications/middleware';
|
||||
import '../overlay/middleware';
|
||||
import '../recent-list/middleware';
|
||||
import '../recording/middleware';
|
||||
import '../rejoin/middleware';
|
||||
import '../room-lock/middleware';
|
||||
import '../subtitles/middleware';
|
||||
import '../toolbox/middleware';
|
||||
import '../transcribing/middleware';
|
||||
import '../video-layout/middleware';
|
||||
import '../video-quality/middleware';
|
||||
import '../videosipgw/middleware';
|
||||
|
||||
import './middleware';
|
||||
18
react/features/app/middlewares.native.js
Normal file
18
react/features/app/middlewares.native.js
Normal file
@@ -0,0 +1,18 @@
|
||||
// @flow
|
||||
|
||||
import '../authentication/middleware';
|
||||
import '../mobile/audio-mode/middleware';
|
||||
import '../mobile/back-button/middleware';
|
||||
import '../mobile/background/middleware';
|
||||
import '../mobile/call-integration/middleware';
|
||||
import '../mobile/external-api/middleware';
|
||||
import '../mobile/full-screen/middleware';
|
||||
import '../mobile/incoming-call/middleware';
|
||||
import '../mobile/permissions/middleware';
|
||||
import '../mobile/proximity/middleware';
|
||||
import '../mobile/wake-lock/middleware';
|
||||
import '../mobile/watchos/middleware';
|
||||
import '../share-room/middleware';
|
||||
import '../youtube-player/middleware';
|
||||
|
||||
import './middlewares.any';
|
||||
16
react/features/app/middlewares.web.js
Normal file
16
react/features/app/middlewares.web.js
Normal file
@@ -0,0 +1,16 @@
|
||||
// @flow
|
||||
|
||||
import '../base/devices/middleware';
|
||||
import '../e2ee/middleware';
|
||||
import '../external-api/middleware';
|
||||
import '../keyboard-shortcuts/middleware';
|
||||
import '../local-recording/middleware';
|
||||
import '../no-audio-signal/middleware';
|
||||
import '../noise-detection/middleware';
|
||||
import '../old-client-notification/middleware';
|
||||
import '../power-monitor/middleware';
|
||||
import '../prejoin/middleware';
|
||||
import '../shared-video/middleware';
|
||||
import '../talk-while-muted/middleware';
|
||||
|
||||
import './middlewares.any';
|
||||
49
react/features/app/reducers.any.js
Normal file
49
react/features/app/reducers.any.js
Normal file
@@ -0,0 +1,49 @@
|
||||
// @flow
|
||||
|
||||
import '../analytics/reducer';
|
||||
import '../base/app/reducer';
|
||||
import '../base/audio-only/reducer';
|
||||
import '../base/color-scheme/reducer';
|
||||
import '../base/conference/reducer';
|
||||
import '../base/config/reducer';
|
||||
import '../base/connection/reducer';
|
||||
import '../base/dialog/reducer';
|
||||
import '../base/flags/reducer';
|
||||
import '../base/jwt/reducer';
|
||||
import '../base/known-domains/reducer';
|
||||
import '../base/lib-jitsi-meet/reducer';
|
||||
import '../base/logging/reducer';
|
||||
import '../base/media/reducer';
|
||||
import '../base/modal/reducer';
|
||||
import '../base/net-info/reducer';
|
||||
import '../base/participants/reducer';
|
||||
import '../base/responsive-ui/reducer';
|
||||
import '../base/settings/reducer';
|
||||
import '../base/sounds/reducer';
|
||||
import '../base/testing/reducer';
|
||||
import '../base/tracks/reducer';
|
||||
import '../base/user-interaction/reducer';
|
||||
import '../blur/reducer';
|
||||
import '../calendar-sync/reducer';
|
||||
import '../chat/reducer';
|
||||
import '../deep-linking/reducer';
|
||||
import '../device-selection/reducer';
|
||||
import '../dropbox/reducer';
|
||||
import '../etherpad/reducer';
|
||||
import '../filmstrip/reducer';
|
||||
import '../follow-me/reducer';
|
||||
import '../google-api/reducer';
|
||||
import '../invite/reducer';
|
||||
import '../large-video/reducer';
|
||||
import '../lobby/reducer';
|
||||
import '../notifications/reducer';
|
||||
import '../overlay/reducer';
|
||||
import '../recent-list/reducer';
|
||||
import '../recording/reducer';
|
||||
import '../settings/reducer';
|
||||
import '../subtitles/reducer';
|
||||
import '../toolbox/reducer';
|
||||
import '../transcribing/reducer';
|
||||
import '../video-layout/reducer';
|
||||
import '../videosipgw/reducer';
|
||||
import '../welcome/reducer';
|
||||
12
react/features/app/reducers.native.js
Normal file
12
react/features/app/reducers.native.js
Normal file
@@ -0,0 +1,12 @@
|
||||
// @flow
|
||||
|
||||
import '../authentication/reducer';
|
||||
import '../mobile/audio-mode/reducer';
|
||||
import '../mobile/background/reducer';
|
||||
import '../mobile/call-integration/reducer';
|
||||
import '../mobile/full-screen/reducer';
|
||||
import '../mobile/incoming-call/reducer';
|
||||
import '../mobile/watchos/reducer';
|
||||
import '../youtube-player/reducer';
|
||||
|
||||
import './reducers.any';
|
||||
15
react/features/app/reducers.web.js
Normal file
15
react/features/app/reducers.web.js
Normal file
@@ -0,0 +1,15 @@
|
||||
// @flow
|
||||
|
||||
import '../base/devices/reducer';
|
||||
import '../e2ee/reducer';
|
||||
import '../feedback/reducer';
|
||||
import '../local-recording/reducer';
|
||||
import '../no-audio-signal/reducer';
|
||||
import '../noise-detection/reducer';
|
||||
import '../power-monitor/reducer';
|
||||
import '../prejoin/reducer';
|
||||
import '../screenshot-capture/reducer';
|
||||
import '../shared-video/reducer';
|
||||
import '../talk-while-muted/reducer';
|
||||
|
||||
import './reducers.any';
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import type { Dispatch } from 'redux';
|
||||
|
||||
import { appNavigate } from '../app';
|
||||
import { appNavigate } from '../app/actions';
|
||||
import { checkIfCanJoin, conferenceLeft } from '../base/conference';
|
||||
import { connectionFailed } from '../base/connection';
|
||||
import { openDialog } from '../base/dialog';
|
||||
|
||||
@@ -171,6 +171,7 @@ class LoginDialog extends Component<Props, State> {
|
||||
underlineColorAndroid = { FIELD_UNDERLINE }
|
||||
value = { this.state.username } />
|
||||
<TextInput
|
||||
autoCapitalize = { 'none' }
|
||||
onChangeText = { this._onPasswordChange }
|
||||
placeholder = { t('dialog.userPassword') }
|
||||
placeholderTextColor = { PLACEHOLDER_COLOR }
|
||||
@@ -263,7 +264,7 @@ class LoginDialog extends Component<Props, State> {
|
||||
*/
|
||||
_onUsernameChange(text) {
|
||||
this.setState({
|
||||
username: text
|
||||
username: text.trim()
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './components';
|
||||
|
||||
import './middleware';
|
||||
import './reducer';
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import type { Dispatch } from 'redux';
|
||||
|
||||
import { appNavigate } from '../app';
|
||||
import { appNavigate } from '../app/actions';
|
||||
import {
|
||||
CONFERENCE_FAILED,
|
||||
CONFERENCE_JOINED,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import { jitsiLocalStorage } from 'js-utils';
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import _ from 'lodash';
|
||||
import React, { Component, Fragment } from 'react';
|
||||
import { I18nextProvider } from 'react-i18next';
|
||||
@@ -11,11 +11,11 @@ import Thunk from 'redux-thunk';
|
||||
import { i18next } from '../../i18n';
|
||||
import {
|
||||
MiddlewareRegistry,
|
||||
PersistenceRegistry,
|
||||
ReducerRegistry,
|
||||
StateListenerRegistry
|
||||
} from '../../redux';
|
||||
import { SoundCollection } from '../../sounds';
|
||||
import { PersistenceRegistry } from '../../storage';
|
||||
import { appWillMount, appWillUnmount } from '../actions';
|
||||
import logger from '../logger';
|
||||
|
||||
|
||||
@@ -2,5 +2,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './components';
|
||||
export * from './functions';
|
||||
|
||||
import './reducer';
|
||||
|
||||
@@ -2,5 +2,3 @@
|
||||
|
||||
export * from './actions';
|
||||
export * from './actionTypes';
|
||||
|
||||
import './reducer';
|
||||
|
||||
@@ -4,5 +4,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './functions';
|
||||
export { default as ColorSchemeRegistry } from './ColorSchemeRegistry';
|
||||
|
||||
import './reducer';
|
||||
|
||||
@@ -6,7 +6,7 @@ import {
|
||||
createStartMutedConfigurationEvent,
|
||||
sendAnalytics
|
||||
} from '../../analytics';
|
||||
import { getName } from '../../app';
|
||||
import { getName } from '../../app/functions';
|
||||
import { endpointMessageReceived } from '../../subtitles';
|
||||
import { JITSI_CONNECTION_CONFERENCE_KEY } from '../connection';
|
||||
import { JitsiConferenceEvents } from '../lib-jitsi-meet';
|
||||
@@ -763,12 +763,12 @@ export function setStartMutedPolicy(
|
||||
* @param {string} subject - The new subject.
|
||||
* @returns {void}
|
||||
*/
|
||||
export function setSubject(subject: string = '') {
|
||||
export function setSubject(subject: string) {
|
||||
return (dispatch: Dispatch<any>, getState: Function) => {
|
||||
const { conference } = getState()['features/base/conference'];
|
||||
|
||||
if (conference) {
|
||||
conference.setSubject(subject);
|
||||
conference.setSubject(subject || '');
|
||||
} else {
|
||||
dispatch({
|
||||
type: SET_PENDING_SUBJECT_CHANGE,
|
||||
|
||||
@@ -42,7 +42,7 @@ export const JITSI_CONFERENCE_URL_KEY = Symbol('url');
|
||||
* @type {object}
|
||||
*/
|
||||
export const VIDEO_QUALITY_LEVELS = {
|
||||
HIGH: 1080,
|
||||
HIGH: 720,
|
||||
STANDARD: 360,
|
||||
LOW: 180
|
||||
};
|
||||
|
||||
@@ -2,6 +2,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './constants';
|
||||
export * from './functions';
|
||||
|
||||
import './middleware';
|
||||
import './reducer';
|
||||
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
getLocalParticipant,
|
||||
getParticipantById,
|
||||
getPinnedParticipant,
|
||||
PARTICIPANT_ROLE,
|
||||
PARTICIPANT_UPDATED,
|
||||
PIN_PARTICIPANT
|
||||
} from '../participants';
|
||||
@@ -116,14 +117,15 @@ StateListenerRegistry.register(
|
||||
maxReceiverVideoQuality,
|
||||
preferredVideoQuality
|
||||
} = currentState;
|
||||
const changedConference = conference !== previousState.conference;
|
||||
const changedPreferredVideoQuality
|
||||
= preferredVideoQuality !== previousState.preferredVideoQuality;
|
||||
const changedMaxVideoQuality = maxReceiverVideoQuality !== previousState.maxReceiverVideoQuality;
|
||||
|
||||
if (changedPreferredVideoQuality || changedMaxVideoQuality) {
|
||||
if (changedConference || changedPreferredVideoQuality || changedMaxVideoQuality) {
|
||||
_setReceiverVideoConstraint(conference, preferredVideoQuality, maxReceiverVideoQuality);
|
||||
}
|
||||
if (changedPreferredVideoQuality) {
|
||||
if (changedConference || changedPreferredVideoQuality) {
|
||||
_setSenderVideoConstraint(conference, preferredVideoQuality);
|
||||
}
|
||||
});
|
||||
@@ -459,7 +461,10 @@ function _sendTones({ getState }, next, action) {
|
||||
*/
|
||||
function _setReceiverVideoConstraint(conference, preferred, max) {
|
||||
if (conference) {
|
||||
conference.setReceiverVideoConstraint(Math.min(preferred, max));
|
||||
const value = Math.min(preferred, max);
|
||||
|
||||
conference.setReceiverVideoConstraint(value);
|
||||
logger.info(`setReceiverVideoConstraint: ${value}`);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -602,13 +607,27 @@ function _trackAddedOrRemoved(store, next, action) {
|
||||
* @private
|
||||
* @returns {Object} The value returned by {@code next(action)}.
|
||||
*/
|
||||
function _updateLocalParticipantInConference({ getState }, next, action) {
|
||||
function _updateLocalParticipantInConference({ dispatch, getState }, next, action) {
|
||||
const { conference } = getState()['features/base/conference'];
|
||||
const { participant } = action;
|
||||
const result = next(action);
|
||||
|
||||
if (conference && participant.local && 'name' in participant) {
|
||||
conference.setDisplayName(participant.name);
|
||||
const localParticipant = getLocalParticipant(getState);
|
||||
|
||||
if (conference && participant.id === localParticipant.id) {
|
||||
if ('name' in participant) {
|
||||
conference.setDisplayName(participant.name);
|
||||
}
|
||||
|
||||
if ('role' in participant && participant.role === PARTICIPANT_ROLE.MODERATOR) {
|
||||
const { pendingSubjectChange, subject } = getState()['features/base/conference'];
|
||||
|
||||
// When the local user role is updated to moderator and we have a pending subject change
|
||||
// which was not reflected we need to set it (the first time we tried was before becoming moderator).
|
||||
if (pendingSubjectChange !== subject) {
|
||||
dispatch(setSubject(pendingSubjectChange));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import { jitsiLocalStorage } from 'js-utils';
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import type { Dispatch } from 'redux';
|
||||
|
||||
import { addKnownDomains } from '../known-domains';
|
||||
|
||||
@@ -72,11 +72,6 @@ export default [
|
||||
'debug',
|
||||
'debugAudioLevels',
|
||||
'defaultLanguage',
|
||||
'desktopSharingChromeDisabled',
|
||||
'desktopSharingChromeExtId',
|
||||
'desktopSharingChromeMinExtVersion',
|
||||
'desktopSharingChromeSources',
|
||||
'desktopSharingFirefoxDisabled',
|
||||
'desktopSharingFrameRate',
|
||||
'desktopSharingSources',
|
||||
'disable1On1Mode',
|
||||
@@ -102,6 +97,7 @@ export default [
|
||||
'enableDisplayNameInStats',
|
||||
'enableEmailInStats',
|
||||
'enableIceRestart',
|
||||
'enableInsecureRoomNameWarning',
|
||||
'enableLayerSuspension',
|
||||
'enableLipSync',
|
||||
'enableRemb',
|
||||
@@ -147,9 +143,8 @@ export default [
|
||||
'stereo',
|
||||
'subject',
|
||||
'testing',
|
||||
'useIPv6',
|
||||
'useNicks',
|
||||
'useStunTurn',
|
||||
'useTurnUdp',
|
||||
'webrtcIceTcpDisable',
|
||||
'webrtcIceUdpDisable'
|
||||
].concat(extraConfigWhitelist);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import { jitsiLocalStorage } from 'js-utils';
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import _ from 'lodash';
|
||||
|
||||
import { parseURLParams } from '../util';
|
||||
|
||||
@@ -2,6 +2,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export { default as CONFIG_WHITELIST } from './configWhitelist';
|
||||
export * from './functions';
|
||||
|
||||
import './middleware';
|
||||
import './reducer';
|
||||
|
||||
@@ -5,20 +5,14 @@
|
||||
* @type Array
|
||||
*/
|
||||
export default [
|
||||
'ANDROID_APP_PACKAGE',
|
||||
'APP_NAME',
|
||||
'APP_SCHEME',
|
||||
'AUDIO_LEVEL_PRIMARY_COLOR',
|
||||
'AUDIO_LEVEL_SECONDARY_COLOR',
|
||||
'AUTHENTICATION_ENABLE',
|
||||
'AUTO_PIN_LATEST_SCREEN_SHARE',
|
||||
'BRAND_WATERMARK_LINK',
|
||||
'CLOSE_PAGE_GUEST_HINT',
|
||||
'CONNECTION_INDICATOR_AUTO_HIDE_ENABLED',
|
||||
'CONNECTION_INDICATOR_AUTO_HIDE_TIMEOUT',
|
||||
'CONNECTION_INDICATOR_DISABLED',
|
||||
'DEFAULT_BACKGROUND',
|
||||
'DEFAULT_LOGO_URL',
|
||||
'DISABLE_PRESENCE_STATUS',
|
||||
'DISABLE_JOIN_LEAVE_NOTIFICATIONS',
|
||||
'DEFAULT_LOCAL_DISPLAY_NAME',
|
||||
@@ -30,38 +24,28 @@ export default [
|
||||
'DISABLE_TRANSCRIPTION_SUBTITLES',
|
||||
'DISABLE_VIDEO_BACKGROUND',
|
||||
'DISPLAY_WELCOME_PAGE_CONTENT',
|
||||
'ENABLE_DIAL_OUT',
|
||||
'ENABLE_FEEDBACK_ANIMATION',
|
||||
'ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT',
|
||||
'FILM_STRIP_MAX_HEIGHT',
|
||||
'GENERATE_ROOMNAMES_ON_WELCOME_PAGE',
|
||||
'HIDE_INVITE_MORE_HEADER',
|
||||
'INDICATOR_FONT_SIZES',
|
||||
'INITIAL_TOOLBAR_TIMEOUT',
|
||||
'INVITATION_POWERED_BY',
|
||||
'JITSI_WATERMARK_LINK',
|
||||
'LANG_DETECTION',
|
||||
'LIVE_STREAMING_HELP_LINK',
|
||||
'LOCAL_THUMBNAIL_RATIO',
|
||||
'MAXIMUM_ZOOMING_COEFFICIENT',
|
||||
'MOBILE_APP_PROMO',
|
||||
'MOBILE_DOWNLOAD_LINK_ANDROID',
|
||||
'MOBILE_DOWNLOAD_LINK_IOS',
|
||||
'MOBILE_DYNAMIC_LINK',
|
||||
'NATIVE_APP_NAME',
|
||||
'OPTIMAL_BROWSERS',
|
||||
'PHONE_NUMBER_REGEX',
|
||||
'POLICY_LOGO',
|
||||
'PROVIDER_NAME',
|
||||
'RANDOM_AVATAR_URL_PREFIX',
|
||||
'RANDOM_AVATAR_URL_SUFFIX',
|
||||
'RECENT_LIST_ENABLED',
|
||||
'REMOTE_THUMBNAIL_RATIO',
|
||||
'SETTINGS_SECTIONS',
|
||||
'SHOW_BRAND_WATERMARK',
|
||||
'SHOW_CHROME_EXTENSION_BANNER',
|
||||
'SHOW_DEEP_LINKING_IMAGE',
|
||||
'SHOW_JITSI_WATERMARK',
|
||||
'SHOW_POWERED_BY',
|
||||
'SHOW_WATERMARK_FOR_GUESTS',
|
||||
'SUPPORT_URL',
|
||||
'TILE_VIEW_MAX_COLUMNS',
|
||||
'TOOLBAR_ALWAYS_VISIBLE',
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// @flow
|
||||
|
||||
import { jitsiLocalStorage } from 'js-utils';
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
|
||||
import { APP_WILL_MOUNT } from '../app';
|
||||
import { getFeatureFlag } from '../flags/functions';
|
||||
import { addKnownDomains } from '../known-domains';
|
||||
import { MiddlewareRegistry } from '../redux';
|
||||
import { parseURIString } from '../util';
|
||||
@@ -107,6 +108,12 @@ function _setConfig({ dispatch, getState }, next, action) {
|
||||
config.p2p = { enabled: !settings.disableP2P };
|
||||
}
|
||||
|
||||
const resolutionFlag = getFeatureFlag(state, 'resolution');
|
||||
|
||||
if (typeof resolutionFlag !== 'undefined') {
|
||||
config.resolution = resolutionFlag;
|
||||
}
|
||||
|
||||
dispatch({
|
||||
type: _UPDATE_CONFIG,
|
||||
config
|
||||
|
||||
@@ -3,11 +3,8 @@
|
||||
import _ from 'lodash';
|
||||
import type { Dispatch } from 'redux';
|
||||
|
||||
import {
|
||||
conferenceLeft,
|
||||
conferenceWillLeave,
|
||||
getCurrentConference
|
||||
} from '../conference';
|
||||
import { conferenceLeft, conferenceWillLeave } from '../conference/actions';
|
||||
import { getCurrentConference } from '../conference/functions';
|
||||
import JitsiMeetJS, { JitsiConnectionEvents } from '../lib-jitsi-meet';
|
||||
import {
|
||||
getBackendSafeRoomName,
|
||||
|
||||
@@ -4,5 +4,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './constants';
|
||||
export * from './functions';
|
||||
|
||||
import './reducer';
|
||||
|
||||
@@ -234,7 +234,7 @@ export function getVideoDeviceIds(state: Object) {
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if there are devices of a specific type.
|
||||
* Returns true if there are devices of a specific type or on native platform.
|
||||
*
|
||||
* @param {Object} state - The state of the application.
|
||||
* @param {string} type - The type of device: VideoOutput | audioOutput | audioInput.
|
||||
@@ -242,6 +242,10 @@ export function getVideoDeviceIds(state: Object) {
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export function hasAvailableDevices(state: Object, type: string) {
|
||||
if (state['features/base/devices'] === undefined) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return state['features/base/devices'].availableDevices[type].length > 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './functions';
|
||||
|
||||
import './middleware';
|
||||
import './reducer';
|
||||
|
||||
@@ -15,14 +15,19 @@ import {
|
||||
NOTIFY_CAMERA_ERROR,
|
||||
NOTIFY_MIC_ERROR,
|
||||
SET_AUDIO_INPUT_DEVICE,
|
||||
SET_VIDEO_INPUT_DEVICE
|
||||
SET_VIDEO_INPUT_DEVICE,
|
||||
UPDATE_DEVICE_LIST
|
||||
} from './actionTypes';
|
||||
import {
|
||||
removePendingDeviceRequests,
|
||||
setAudioInputDevice,
|
||||
setVideoInputDevice
|
||||
} from './actions';
|
||||
import { formatDeviceLabel, setAudioOutputDeviceId } from './functions';
|
||||
import {
|
||||
formatDeviceLabel,
|
||||
groupDevicesByKind,
|
||||
setAudioOutputDeviceId
|
||||
} from './functions';
|
||||
import logger from './logger';
|
||||
|
||||
const JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP = {
|
||||
@@ -41,6 +46,24 @@ const JITSI_TRACK_ERROR_TO_MESSAGE_KEY_MAP = {
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Logs the current device list.
|
||||
*
|
||||
* @param {Object} deviceList - Whatever is returned by {@link groupDevicesByKind}.
|
||||
* @returns {string}
|
||||
*/
|
||||
function logDeviceList(deviceList) {
|
||||
const devicesToStr = list => list.map(device => `\t\t${device.label}[${device.deviceId}]`).join('\n');
|
||||
const audioInputs = devicesToStr(deviceList.audioInput);
|
||||
const audioOutputs = devicesToStr(deviceList.audioOutput);
|
||||
const videoInputs = devicesToStr(deviceList.videoInput);
|
||||
|
||||
logger.debug('Device list updated:\n'
|
||||
+ `audioInput:\n${audioInputs}\n`
|
||||
+ `audioOutput:\n${audioOutputs}\n`
|
||||
+ `videoInput:\n${videoInputs}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Implements the middleware of the feature base/devices.
|
||||
*
|
||||
@@ -123,6 +146,9 @@ MiddlewareRegistry.register(store => next => action => {
|
||||
APP.UI.emitEvent(UIEvents.VIDEO_DEVICE_CHANGED, action.deviceId);
|
||||
}
|
||||
break;
|
||||
case UPDATE_DEVICE_LIST:
|
||||
logDeviceList(groupDevicesByKind(action.devices));
|
||||
break;
|
||||
case CHECK_AND_NOTIFY_FOR_NEW_DEVICE:
|
||||
_checkAndNotifyForNewDevice(store, action.newDevices, action.oldDevices);
|
||||
break;
|
||||
|
||||
@@ -19,24 +19,6 @@ const DEFAULT_STATE = {
|
||||
pendingRequests: []
|
||||
};
|
||||
|
||||
/**
|
||||
* Logs the current device list.
|
||||
*
|
||||
* @param {Object} deviceList - Whatever is returned by {@link groupDevicesByKind}.
|
||||
* @returns {string}
|
||||
*/
|
||||
function logDeviceList(deviceList) {
|
||||
const devicesToStr = list => list.map(device => `\t\t${device.label}[${device.deviceId}]`).join('\n');
|
||||
const audioInputs = devicesToStr(deviceList.audioInput);
|
||||
const audioOutputs = devicesToStr(deviceList.audioOutput);
|
||||
const videoInputs = devicesToStr(deviceList.videoInput);
|
||||
|
||||
logger.debug('Device list updated:\n'
|
||||
+ `audioInput:\n${audioInputs}\n`
|
||||
+ `audioOutput:\n${audioOutputs}\n`
|
||||
+ `videoInput:\n${videoInputs}`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Listen for actions which changes the state of known and used devices.
|
||||
*
|
||||
@@ -54,8 +36,6 @@ ReducerRegistry.register(
|
||||
case UPDATE_DEVICE_LIST: {
|
||||
const deviceList = groupDevicesByKind(action.devices);
|
||||
|
||||
logDeviceList(deviceList);
|
||||
|
||||
return {
|
||||
...state,
|
||||
availableDevices: deviceList
|
||||
|
||||
@@ -2,5 +2,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './components';
|
||||
export * from './functions';
|
||||
|
||||
import './reducer';
|
||||
|
||||
@@ -81,6 +81,19 @@ export const RAISE_HAND_ENABLED = 'raise-hand.enabled';
|
||||
*/
|
||||
export const RECORDING_ENABLED = 'recording.enabled';
|
||||
|
||||
/**
|
||||
* Flag indicating the local and (maximum) remote video resolution. Overrides
|
||||
* the server configuration.
|
||||
* Default: (unset).
|
||||
*/
|
||||
export const RESOLUTION = 'resolution';
|
||||
|
||||
/**
|
||||
* Flag indicating if server URL change is enabled.
|
||||
* Default: enabled (true)
|
||||
*/
|
||||
export const SERVER_URL_CHANGE_ENABLED = 'server-url-change.enabled';
|
||||
|
||||
/**
|
||||
* Flag indicating if tile view feature should be enabled.
|
||||
* Default: enabled.
|
||||
|
||||
@@ -2,5 +2,3 @@ export * from './actions';
|
||||
export * from './actionTypes';
|
||||
export * from './constants';
|
||||
export * from './functions';
|
||||
|
||||
import './reducer';
|
||||
|
||||
@@ -46,7 +46,6 @@ export { default as IconInfo } from './info.svg';
|
||||
export { default as IconInviteMore } from './user-plus.svg';
|
||||
export { default as IconKick } from './kick.svg';
|
||||
export { default as IconLiveStreaming } from './public.svg';
|
||||
export { default as IconLockPassword } from './lock.svg';
|
||||
export { default as IconMeetingLocked } from './meeting-locked.svg';
|
||||
export { default as IconMeetingUnlocked } from './meeting-unlocked.svg';
|
||||
export { default as IconMenu } from './menu.svg';
|
||||
@@ -75,6 +74,8 @@ export { default as IconReply } from './reply.svg';
|
||||
export { default as IconRestore } from './restore.svg';
|
||||
export { default as IconRoomLock } from './security.svg';
|
||||
export { default as IconRoomUnlock } from './security-locked.svg';
|
||||
export { default as IconSecurityOff } from './security-off.svg';
|
||||
export { default as IconSecurityOn } from './security-on.svg';
|
||||
export { default as IconSearch } from './search.svg';
|
||||
export { default as IconSettings } from './settings.svg';
|
||||
export { default as IconSignalLevel0 } from './signal_cellular_0.svg';
|
||||
@@ -87,7 +88,6 @@ export { default as IconShareVideo } from './shared-video.svg';
|
||||
export { default as IconSwitchCamera } from './switch-camera.svg';
|
||||
export { default as IconTileView } from './tiles-many.svg';
|
||||
export { default as IconToggleRecording } from './camera-take-picture.svg';
|
||||
export { default as IconUnlockPassword } from './unlock.svg';
|
||||
export { default as IconVideoQualityAudioOnly } from './AUD.svg';
|
||||
export { default as IconVideoQualityHD } from './HD.svg';
|
||||
export { default as IconVideoQualityLD } from './LD.svg';
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5 10H7H17H19V20H5V10ZM19 8H17V7C17 4.23858 14.7614 2 12 2C9.23858 2 7 4.23858 7 7V8H5C3.89543 8 3 8.89543 3 10V20C3 21.1046 3.89543 22 5 22H19C20.1046 22 21 21.1046 21 20V10C21 8.89543 20.1046 8 19 8ZM12.9686 15.7502C13.5837 15.4091 14 14.7532 14 14C14 12.8954 13.1046 12 12 12C10.8954 12 10 12.8954 10 14C10 14.7532 10.4163 15.4091 11.0314 15.7502C11.0109 15.8301 11 15.9138 11 16V17C11 17.5523 11.4477 18 12 18C12.5523 18 13 17.5523 13 17V16C13 15.9138 12.9891 15.8301 12.9686 15.7502ZM12 4C13.6569 4 15 5.34315 15 7V8H9V7C9 5.34315 10.3431 4 12 4Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 720 B |
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user