mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-09-10 11:18:39 +00:00
Compare commits
205 Commits
5526
...
release-56
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c2d2eace9f | ||
|
|
ea63b77326 | ||
|
|
88def9c1e3 | ||
|
|
bc77fafb50 | ||
|
|
e3fbbd7212 | ||
|
|
ada04a9495 | ||
|
|
a723dbcd97 | ||
|
|
b15316eb6f | ||
|
|
ce195d82d6 | ||
|
|
229e65133c | ||
|
|
11eb6689dc | ||
|
|
bf3cc65f4c | ||
|
|
75e6dd389f | ||
|
|
076113940b | ||
|
|
e6accd40e1 | ||
|
|
7f0cfed981 | ||
|
|
9279586e8c | ||
|
|
f8908c143e | ||
|
|
c705dbaa2f | ||
|
|
1fa43ca4e7 | ||
|
|
9528cbad0e | ||
|
|
a23d57b5ff | ||
|
|
ae5c364333 | ||
|
|
700c7c523d | ||
|
|
5dbf4845fb | ||
|
|
661a3d34be | ||
|
|
0e9b40c410 | ||
|
|
51b827ebb0 | ||
|
|
16a2c729e0 | ||
|
|
ed5bb871f4 | ||
|
|
d96ecc5b65 | ||
|
|
41f11e5adb | ||
|
|
c48aa44af3 | ||
|
|
085b07efcd | ||
|
|
60dcac96a6 | ||
|
|
2e22eb5169 | ||
|
|
e2beb2f3b1 | ||
|
|
664f23a395 | ||
|
|
dc20b2fafe | ||
|
|
00ae2dc6a9 | ||
|
|
a182f53cdc | ||
|
|
9b3f254c6b | ||
|
|
0188086dde | ||
|
|
340698a546 | ||
|
|
0920bda7b8 | ||
|
|
10e5b2f572 | ||
|
|
81e9d01921 | ||
|
|
0d5beb0c4e | ||
|
|
b890f34a53 | ||
|
|
b19e4d76b5 | ||
|
|
65589937ea | ||
|
|
a6bc51cff1 | ||
|
|
ae3fb20d65 | ||
|
|
bfc0567e32 | ||
|
|
0fb29a0c7a | ||
|
|
822850d888 | ||
|
|
64e6c5f461 | ||
|
|
a077043f1b | ||
|
|
646fdef6bb | ||
|
|
da0cb2b837 | ||
|
|
4401ea8818 | ||
|
|
449e226e23 | ||
|
|
ed6f6cf766 | ||
|
|
79b0360d2e | ||
|
|
322ec107cd | ||
|
|
3cbddb9d6a | ||
|
|
76667066e2 | ||
|
|
c172a27f24 | ||
|
|
40a76940ac | ||
|
|
be53c4c522 | ||
|
|
8ef48a8a1d | ||
|
|
827e8201d4 | ||
|
|
591eab7c97 | ||
|
|
d9f71ee238 | ||
|
|
054564ab0a | ||
|
|
3548485e84 | ||
|
|
8393118330 | ||
|
|
991a0e22a8 | ||
|
|
7a479b967c | ||
|
|
0be0d6a76e | ||
|
|
60b551a339 | ||
|
|
208586cead | ||
|
|
c7765cc1b7 | ||
|
|
d8487c25b2 | ||
|
|
2adb5dc7d6 | ||
|
|
cc931986f6 | ||
|
|
ce35a88299 | ||
|
|
58ef2974c9 | ||
|
|
43647f1302 | ||
|
|
599ed10325 | ||
|
|
fb9d28a667 | ||
|
|
b2d6054e1c | ||
|
|
2097d77666 | ||
|
|
4ed7211286 | ||
|
|
5c67e8b4ce | ||
|
|
00a74ca47a | ||
|
|
4a88ad098a | ||
|
|
dd20e8626e | ||
|
|
0fc381fc6f | ||
|
|
73fb586d59 | ||
|
|
6cd6c0a043 | ||
|
|
896e752113 | ||
|
|
c5920bb8a5 | ||
|
|
1623dc4989 | ||
|
|
41db8711f0 | ||
|
|
a0edf329ae | ||
|
|
c2ab8935c1 | ||
|
|
70b8ccc097 | ||
|
|
cc63ff1c3c | ||
|
|
4a5982da1f | ||
|
|
fc16bfa6cb | ||
|
|
9a2aa3848c | ||
|
|
0a65ec1dfa | ||
|
|
7bbc3bcf9e | ||
|
|
48b12b4e00 | ||
|
|
91413fbd96 | ||
|
|
03848fb3f8 | ||
|
|
e8cf932abb | ||
|
|
1a93da8c35 | ||
|
|
73e8f5703c | ||
|
|
a203a92060 | ||
|
|
ef93584c2b | ||
|
|
a618697e34 | ||
|
|
64e504f349 | ||
|
|
994f6307b9 | ||
|
|
d7b581e338 | ||
|
|
763d975445 | ||
|
|
42e62e013d | ||
|
|
04b085e062 | ||
|
|
83e22524bc | ||
|
|
909173cdb5 | ||
|
|
5d1bf9e649 | ||
|
|
14a422ba83 | ||
|
|
0106e68728 | ||
|
|
c843744df1 | ||
|
|
f6f7406d24 | ||
|
|
76a976b5d1 | ||
|
|
2e7c06d045 | ||
|
|
9fbbcbbd31 | ||
|
|
6101cd2c1a | ||
|
|
41d654b2dc | ||
|
|
c381a3eed4 | ||
|
|
f42fe0ce17 | ||
|
|
b277812e8e | ||
|
|
fad5ac9048 | ||
|
|
10d54498d0 | ||
|
|
cd166b5f19 | ||
|
|
b5faf9f62a | ||
|
|
d98ea3ca24 | ||
|
|
d2b7151f23 | ||
|
|
7fa72db384 | ||
|
|
d56b282c5d | ||
|
|
72e1dcb877 | ||
|
|
98b05a2529 | ||
|
|
2d0a70f2ab | ||
|
|
6243836b3e | ||
|
|
6520cc2496 | ||
|
|
61684b1071 | ||
|
|
e42db3c9c2 | ||
|
|
6f75226044 | ||
|
|
7e9d665697 | ||
|
|
9aa2bbe115 | ||
|
|
31e4a9c1a0 | ||
|
|
1106e71f03 | ||
|
|
d84ba85f58 | ||
|
|
1e706db114 | ||
|
|
c82cead5ae | ||
|
|
39d1ccff85 | ||
|
|
2e69ec71c5 | ||
|
|
be6adad61b | ||
|
|
23b8dd4860 | ||
|
|
c74bdf137c | ||
|
|
8ebca64af1 | ||
|
|
61025edb74 | ||
|
|
4e2fea1e12 | ||
|
|
f5cdd5fca1 | ||
|
|
eec8b9e58e | ||
|
|
a96a4ea336 | ||
|
|
876773ca2a | ||
|
|
bc6070b98d | ||
|
|
9ca0ee41b6 | ||
|
|
957bd8916a | ||
|
|
8f08a54fb2 | ||
|
|
28c793b3a9 | ||
|
|
243aa20912 | ||
|
|
2d27195652 | ||
|
|
bcb0fe919c | ||
|
|
981fc2f410 | ||
|
|
e6e808c764 | ||
|
|
01ae4c477b | ||
|
|
e0010def14 | ||
|
|
e77216f18e | ||
|
|
ba7b5fc996 | ||
|
|
162a67fe8b | ||
|
|
0aba61d5c6 | ||
|
|
5e4f09dd0a | ||
|
|
17c0298e59 | ||
|
|
6348840cbd | ||
|
|
6a7842ab7e | ||
|
|
b2894cc941 | ||
|
|
fc52105cf6 | ||
|
|
b47a263e5c | ||
|
|
15b677aa2a | ||
|
|
08fb232627 | ||
|
|
3c5017a66a |
@@ -8,8 +8,12 @@ libs/*
|
||||
resources/*
|
||||
react/features/stream-effects/virtual-background/vendor/*
|
||||
load-test/*
|
||||
react/features/facial-recognition/resources/*
|
||||
|
||||
# ESLint will by default ignore its own configuration file. However, there does
|
||||
# not seem to be a reason why we will want to risk being inconsistent with our
|
||||
# remaining JavaScript source code.
|
||||
!.eslintrc.js
|
||||
|
||||
# Not worth it.
|
||||
actionTypes.js
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
module.exports = {
|
||||
'extends': [
|
||||
'eslint-config-jitsi'
|
||||
'@jitsi/eslint-config'
|
||||
]
|
||||
};
|
||||
|
||||
12
Makefile
12
Makefile
@@ -7,6 +7,7 @@ OLM_DIR = node_modules/@matrix-org/olm
|
||||
RNNOISE_WASM_DIR = node_modules/rnnoise-wasm/dist/
|
||||
TFLITE_WASM = react/features/stream-effects/virtual-background/vendor/tflite
|
||||
MEET_MODELS_DIR = react/features/stream-effects/virtual-background/vendor/models/
|
||||
FACIAL_MODELS_DIR = react/features/facial-recognition/resources
|
||||
NODE_SASS = ./node_modules/.bin/sass
|
||||
NPM = npm
|
||||
OUTPUT_DIR = .
|
||||
@@ -28,7 +29,7 @@ clean:
|
||||
rm -fr $(BUILD_DIR)
|
||||
|
||||
.NOTPARALLEL:
|
||||
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-css deploy-local
|
||||
deploy: deploy-init deploy-appbundle deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-css deploy-local deploy-facial-expressions
|
||||
|
||||
deploy-init:
|
||||
rm -fr $(DEPLOY_DIR)
|
||||
@@ -51,6 +52,8 @@ deploy-appbundle:
|
||||
$(OUTPUT_DIR)/analytics-ga.js \
|
||||
$(BUILD_DIR)/analytics-ga.min.js \
|
||||
$(BUILD_DIR)/analytics-ga.min.js.map \
|
||||
$(BUILD_DIR)/facial-expressions-worker.min.js \
|
||||
$(BUILD_DIR)/facial-expressions-worker.min.js.map \
|
||||
$(DEPLOY_DIR)
|
||||
cp \
|
||||
$(BUILD_DIR)/close3.min.js \
|
||||
@@ -92,6 +95,11 @@ deploy-meet-models:
|
||||
$(MEET_MODELS_DIR)/*.tflite \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
deploy-facial-expressions:
|
||||
cp \
|
||||
$(FACIAL_MODELS_DIR)/* \
|
||||
$(DEPLOY_DIR)
|
||||
|
||||
deploy-css:
|
||||
$(NODE_SASS) $(STYLES_MAIN) $(STYLES_BUNDLE) && \
|
||||
$(CLEANCSS) --skip-rebase $(STYLES_BUNDLE) > $(STYLES_DESTINATION) ; \
|
||||
@@ -101,7 +109,7 @@ deploy-local:
|
||||
([ ! -x deploy-local.sh ] || ./deploy-local.sh)
|
||||
|
||||
.NOTPARALLEL:
|
||||
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm
|
||||
dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-models deploy-lib-jitsi-meet deploy-libflac deploy-olm deploy-facial-expressions
|
||||
$(WEBPACK_DEV_SERVER)
|
||||
|
||||
source-package:
|
||||
|
||||
7
android/app/proguard-rules.pro
vendored
7
android/app/proguard-rules.pro
vendored
@@ -85,4 +85,9 @@
|
||||
# ^^^ We added the above when we switched minifyEnabled on.
|
||||
|
||||
# Rule to avoid build errors related to SVGs.
|
||||
-keep public class com.horcrux.svg.** {*;}
|
||||
-keep public class com.horcrux.svg.** {*;}
|
||||
|
||||
# https://github.com/facebook/fresco/issues/2638
|
||||
-keep public class com.facebook.imageutils.** {
|
||||
public *;
|
||||
}
|
||||
|
||||
@@ -150,8 +150,8 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
// Set default options
|
||||
JitsiMeetConferenceOptions defaultOptions
|
||||
= new JitsiMeetConferenceOptions.Builder()
|
||||
.setWelcomePageEnabled(true)
|
||||
.setServerURL(buildURL(defaultURL))
|
||||
.setFeatureFlag("welcomepage.enabled", true)
|
||||
.setFeatureFlag("call-integration.enabled", false)
|
||||
.setFeatureFlag("resolution", 360)
|
||||
.setFeatureFlag("server-url-change.enabled", !configurationByRestrictions)
|
||||
@@ -182,11 +182,6 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onConferenceTerminated(HashMap<String, Object> extraData) {
|
||||
Log.d(TAG, "Conference terminated: " + extraData);
|
||||
}
|
||||
|
||||
// Activity lifecycle method overrides
|
||||
//
|
||||
|
||||
|
||||
@@ -26,5 +26,5 @@ android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
android.bundle.enableUncompressedNativeLibs=false
|
||||
|
||||
appVersion=21.5.0
|
||||
sdkVersion=4.0.0
|
||||
appVersion=21.6.0
|
||||
sdkVersion=4.1.0
|
||||
|
||||
@@ -68,9 +68,11 @@ dependencies {
|
||||
implementation project(':react-native-async-storage')
|
||||
implementation project(':react-native-background-timer')
|
||||
implementation project(':react-native-calendar-events')
|
||||
implementation project(':react-native-community_clipboard')
|
||||
implementation project(':react-native-community_netinfo')
|
||||
implementation project(':react-native-default-preference')
|
||||
implementation project(':react-native-gesture-handler')
|
||||
implementation project(':react-native-get-random-values')
|
||||
implementation project(':react-native-immersive')
|
||||
implementation project(':react-native-keep-awake')
|
||||
implementation project(':react-native-masked-view_masked-view')
|
||||
@@ -216,7 +218,7 @@ publishing {
|
||||
def groupId = it.moduleGroup
|
||||
def artifactId = it.moduleName
|
||||
|
||||
if (artifactId.startsWith('react-native-') && groupId.equals('jitsi-meet')) {
|
||||
if (artifactId.startsWith('react-native-')) {
|
||||
groupId = rootProject.ext.moduleGroupId
|
||||
}
|
||||
|
||||
|
||||
@@ -86,8 +86,8 @@ public class BroadcastEvent {
|
||||
PARTICIPANTS_INFO_RETRIEVED("org.jitsi.meet.PARTICIPANTS_INFO_RETRIEVED"),
|
||||
CHAT_MESSAGE_RECEIVED("org.jitsi.meet.CHAT_MESSAGE_RECEIVED"),
|
||||
CHAT_TOGGLED("org.jitsi.meet.CHAT_TOGGLED"),
|
||||
VIDEO_MUTED_CHANGED("org.jitsi.meet.VIDEO_MUTED_CHANGED");
|
||||
|
||||
VIDEO_MUTED_CHANGED("org.jitsi.meet.VIDEO_MUTED_CHANGED"),
|
||||
READY_TO_CLOSE("org.jitsi.meet.READY_TO_CLOSE");
|
||||
|
||||
private static final String CONFERENCE_WILL_JOIN_NAME = "CONFERENCE_WILL_JOIN";
|
||||
private static final String CONFERENCE_JOINED_NAME = "CONFERENCE_JOINED";
|
||||
@@ -101,6 +101,7 @@ public class BroadcastEvent {
|
||||
private static final String CHAT_MESSAGE_RECEIVED_NAME = "CHAT_MESSAGE_RECEIVED";
|
||||
private static final String CHAT_TOGGLED_NAME = "CHAT_TOGGLED";
|
||||
private static final String VIDEO_MUTED_CHANGED_NAME = "VIDEO_MUTED_CHANGED";
|
||||
private static final String READY_TO_CLOSE_NAME = "READY_TO_CLOSE";
|
||||
|
||||
private final String action;
|
||||
|
||||
@@ -147,6 +148,8 @@ public class BroadcastEvent {
|
||||
return CHAT_TOGGLED;
|
||||
case VIDEO_MUTED_CHANGED_NAME:
|
||||
return VIDEO_MUTED_CHANGED;
|
||||
case READY_TO_CLOSE_NAME:
|
||||
return READY_TO_CLOSE;
|
||||
}
|
||||
|
||||
return null;
|
||||
|
||||
@@ -194,7 +194,6 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
protected void onConferenceTerminated(HashMap<String, Object> extraData) {
|
||||
JitsiMeetLogger.i("Conference terminated: " + extraData);
|
||||
finish();
|
||||
}
|
||||
|
||||
protected void onConferenceWillJoin(HashMap<String, Object> extraData) {
|
||||
@@ -217,6 +216,11 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
}
|
||||
}
|
||||
|
||||
protected void onReadyToClose() {
|
||||
JitsiMeetLogger.i("SDK is ready to close");
|
||||
finish();
|
||||
}
|
||||
|
||||
// Activity lifecycle methods
|
||||
//
|
||||
|
||||
@@ -298,6 +302,9 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
case PARTICIPANT_LEFT:
|
||||
onParticipantLeft(event.getData());
|
||||
break;
|
||||
case READY_TO_CLOSE:
|
||||
onReadyToClose();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,11 +45,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
*/
|
||||
private String token;
|
||||
|
||||
/**
|
||||
* Color scheme override, see: https://github.com/jitsi/jitsi-meet/blob/dbedee5e22e5dcf9c92db96ef5bb3c9982fc526d/react/features/base/color-scheme/defaultScheme.js
|
||||
*/
|
||||
private Bundle colorScheme;
|
||||
|
||||
/**
|
||||
* Config. See: https://github.com/jitsi/jitsi-meet/blob/master/config.js
|
||||
*/
|
||||
@@ -77,10 +72,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
return token;
|
||||
}
|
||||
|
||||
public Bundle getColorScheme() {
|
||||
return colorScheme;
|
||||
}
|
||||
|
||||
public Bundle getFeatureFlags() {
|
||||
return featureFlags;
|
||||
}
|
||||
@@ -97,7 +88,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
private String room;
|
||||
private String token;
|
||||
|
||||
private Bundle colorScheme;
|
||||
private Bundle config;
|
||||
private Bundle featureFlags;
|
||||
|
||||
@@ -152,19 +142,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the color scheme override so the app is themed. See:
|
||||
* https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/color-scheme/defaultScheme.js
|
||||
* for the structure.
|
||||
* @param colorScheme - A color scheme to be applied to the app.
|
||||
* @return - The {@link Builder} object itself so the method calls can be chained.
|
||||
*/
|
||||
public Builder setColorScheme(Bundle colorScheme) {
|
||||
this.colorScheme = colorScheme;
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicates the conference will be joined with the microphone muted.
|
||||
* @param audioMuted - Muted indication.
|
||||
@@ -198,19 +175,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the welcome page enabled / disabled. The welcome page lists recent meetings and
|
||||
* calendar appointments and it's meant to be used by standalone applications. Defaults to
|
||||
* false.
|
||||
* @param enabled - Whether the welcome page should be enabled or not.
|
||||
* @return - The {@link Builder} object itself so the method calls can be chained.
|
||||
*/
|
||||
public Builder setWelcomePageEnabled(boolean enabled) {
|
||||
this.featureFlags.putBoolean("welcomepage.enabled", enabled);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setFeatureFlag(String flag, boolean value) {
|
||||
this.featureFlags.putBoolean(flag, value);
|
||||
|
||||
@@ -276,7 +240,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
options.serverURL = this.serverURL;
|
||||
options.room = this.room;
|
||||
options.token = this.token;
|
||||
options.colorScheme = this.colorScheme;
|
||||
options.config = this.config;
|
||||
options.featureFlags = this.featureFlags;
|
||||
options.userInfo = this.userInfo;
|
||||
@@ -292,7 +255,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
serverURL = (URL) in.readSerializable();
|
||||
room = in.readString();
|
||||
token = in.readString();
|
||||
colorScheme = in.readBundle();
|
||||
config = in.readBundle();
|
||||
featureFlags = in.readBundle();
|
||||
userInfo = new JitsiMeetUserInfo(in.readBundle());
|
||||
@@ -308,10 +270,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
|
||||
props.putBundle("flags", featureFlags);
|
||||
|
||||
if (colorScheme != null) {
|
||||
props.putBundle("colorScheme", colorScheme);
|
||||
}
|
||||
|
||||
Bundle urlProps = new Bundle();
|
||||
|
||||
// The room is fully qualified
|
||||
@@ -360,7 +318,6 @@ public class JitsiMeetConferenceOptions implements Parcelable {
|
||||
dest.writeSerializable(serverURL);
|
||||
dest.writeString(room);
|
||||
dest.writeString(token);
|
||||
dest.writeBundle(colorScheme);
|
||||
dest.writeBundle(config);
|
||||
dest.writeBundle(featureFlags);
|
||||
dest.writeBundle(userInfo != null ? userInfo.asBundle() : new Bundle());
|
||||
|
||||
@@ -180,6 +180,7 @@ class ReactInstanceManagerHolder {
|
||||
new com.calendarevents.CalendarEventsPackage(),
|
||||
new com.corbt.keepawake.KCKeepAwakePackage(),
|
||||
new com.facebook.react.shell.MainReactPackage(),
|
||||
new com.reactnativecommunity.clipboard.ClipboardPackage(),
|
||||
new com.reactnativecommunity.netinfo.NetInfoPackage(),
|
||||
new com.oblador.performance.PerformancePackage(),
|
||||
new com.reactnativecommunity.slider.ReactSliderPackage(),
|
||||
@@ -190,6 +191,7 @@ class ReactInstanceManagerHolder {
|
||||
new com.kevinresol.react_native_default_preference.RNDefaultPreferencePackage(),
|
||||
new com.learnium.RNDeviceInfo.RNDeviceInfo(),
|
||||
new com.swmansion.gesturehandler.react.RNGestureHandlerPackage(),
|
||||
new org.linusu.RNGetRandomValuesPackage(),
|
||||
new com.rnimmersive.RNImmersivePackage(),
|
||||
new com.swmansion.rnscreens.RNScreensPackage(),
|
||||
new com.zmxv.RNSound.RNSoundPackage(),
|
||||
|
||||
@@ -9,6 +9,8 @@ include ':react-native-background-timer'
|
||||
project(':react-native-background-timer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-background-timer/android')
|
||||
include ':react-native-calendar-events'
|
||||
project(':react-native-calendar-events').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-calendar-events/android')
|
||||
include ':react-native-community_clipboard'
|
||||
project(':react-native-community_clipboard').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/clipboard/android')
|
||||
include ':react-native-community_netinfo'
|
||||
project(':react-native-community_netinfo').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/netinfo/android')
|
||||
include ':react-native-default-preference'
|
||||
@@ -17,6 +19,8 @@ include ':react-native-device-info'
|
||||
project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android')
|
||||
include ':react-native-gesture-handler'
|
||||
project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
|
||||
include ':react-native-get-random-values'
|
||||
project(':react-native-get-random-values').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-get-random-values/android')
|
||||
include ':react-native-google-signin'
|
||||
project(':react-native-google-signin').projectDir = new File(rootProject.projectDir, '../node_modules/@react-native-community/google-signin/android')
|
||||
include ':react-native-immersive'
|
||||
|
||||
185
conference.js
185
conference.js
@@ -1,14 +1,15 @@
|
||||
/* global APP, JitsiMeetJS, config, interfaceConfig */
|
||||
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import Logger from '@jitsi/logger';
|
||||
import EventEmitter from 'events';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
|
||||
import { openConnection } from './connection';
|
||||
import { ENDPOINT_TEXT_MESSAGE_NAME } from './modules/API/constants';
|
||||
import { AUDIO_ONLY_SCREEN_SHARE_NO_TRACK } from './modules/UI/UIErrors';
|
||||
import AuthHandler from './modules/UI/authentication/AuthHandler';
|
||||
import UIUtil from './modules/UI/util/UIUtil';
|
||||
import VideoLayout from './modules/UI/videolayout/VideoLayout';
|
||||
import mediaDeviceHelper from './modules/devices/mediaDeviceHelper';
|
||||
import Recorder from './modules/recorder/Recorder';
|
||||
import { createTaskQueue } from './modules/util/helpers';
|
||||
@@ -29,6 +30,7 @@ import { shouldShowModeratedNotification } from './react/features/av-moderation/
|
||||
import {
|
||||
AVATAR_URL_COMMAND,
|
||||
EMAIL_COMMAND,
|
||||
_conferenceWillJoin,
|
||||
authStatusChanged,
|
||||
commonUserJoinedHandling,
|
||||
commonUserLeftHandling,
|
||||
@@ -47,7 +49,7 @@ import {
|
||||
onStartMutedPolicyChanged,
|
||||
p2pStatusChanged,
|
||||
sendLocalParticipant,
|
||||
_conferenceWillJoin
|
||||
nonParticipantMessageReceived
|
||||
} from './react/features/base/conference';
|
||||
import { getReplaceParticipant } from './react/features/base/config/functions';
|
||||
import {
|
||||
@@ -69,7 +71,8 @@ import {
|
||||
JitsiMediaDevicesEvents,
|
||||
JitsiParticipantConnectionStatus,
|
||||
JitsiTrackErrors,
|
||||
JitsiTrackEvents
|
||||
JitsiTrackEvents,
|
||||
JitsiRecordingConstants
|
||||
} from './react/features/base/lib-jitsi-meet';
|
||||
import {
|
||||
getStartWithAudioMuted,
|
||||
@@ -78,14 +81,15 @@ import {
|
||||
MEDIA_TYPE,
|
||||
setAudioAvailable,
|
||||
setAudioMuted,
|
||||
setAudioUnmutePermissions,
|
||||
setVideoAvailable,
|
||||
setVideoMuted
|
||||
setVideoMuted,
|
||||
setVideoUnmutePermissions
|
||||
} from './react/features/base/media';
|
||||
import {
|
||||
dominantSpeakerChanged,
|
||||
getLocalParticipant,
|
||||
getNormalizedDisplayName,
|
||||
getParticipantById,
|
||||
localParticipantConnectionStatusChanged,
|
||||
localParticipantRoleChanged,
|
||||
participantConnectionStatusChanged,
|
||||
@@ -122,7 +126,11 @@ import {
|
||||
maybeOpenFeedbackDialog,
|
||||
submitFeedback
|
||||
} from './react/features/feedback';
|
||||
import { isModerationNotificationDisplayed, showNotification } from './react/features/notifications';
|
||||
import {
|
||||
isModerationNotificationDisplayed,
|
||||
showNotification,
|
||||
NOTIFICATION_TIMEOUT_TYPE
|
||||
} from './react/features/notifications';
|
||||
import { mediaPermissionPromptVisibilityChanged, toggleSlowGUMOverlay } from './react/features/overlay';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import {
|
||||
@@ -133,6 +141,7 @@ import {
|
||||
setJoiningInProgress,
|
||||
setPrejoinPageVisibility
|
||||
} from './react/features/prejoin';
|
||||
import { getActiveSession } from './react/features/recording/functions';
|
||||
import { disableReceiver, stopReceiver } from './react/features/remote-control';
|
||||
import { setScreenAudioShareState, isScreenAudioShared } from './react/features/screen-share/';
|
||||
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture';
|
||||
@@ -230,17 +239,6 @@ function sendData(command, value) {
|
||||
room.sendCommand(command, { value });
|
||||
}
|
||||
|
||||
/**
|
||||
* Get user nickname by user id.
|
||||
* @param {string} id user id
|
||||
* @returns {string?} user nickname or undefined if user is unknown.
|
||||
*/
|
||||
function getDisplayName(id) {
|
||||
const participant = getParticipantById(APP.store.getState(), id);
|
||||
|
||||
return participant && participant.name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mute or unmute local audio stream if it exists.
|
||||
* @param {boolean} muted - if audio stream should be muted or unmuted.
|
||||
@@ -356,7 +354,10 @@ class ConferenceConnector {
|
||||
case JitsiConferenceErrors.FOCUS_DISCONNECTED: {
|
||||
const [ focus, retrySec ] = params;
|
||||
|
||||
APP.UI.notifyFocusDisconnected(focus, retrySec);
|
||||
APP.store.dispatch(showNotification({
|
||||
descriptionKey: focus,
|
||||
titleKey: retrySec
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.SHORT));
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -754,13 +755,13 @@ export default {
|
||||
APP.store.dispatch(showNotification({
|
||||
descriptionKey: 'notify.startSilentDescription',
|
||||
titleKey: 'notify.startSilentTitle'
|
||||
}));
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.LONG));
|
||||
}
|
||||
|
||||
// XXX The API will take care of disconnecting from the XMPP
|
||||
// server (and, thus, leaving the room) on unload.
|
||||
return new Promise((resolve, reject) => {
|
||||
(new ConferenceConnector(resolve, reject)).connect();
|
||||
new ConferenceConnector(resolve, reject).connect();
|
||||
});
|
||||
},
|
||||
|
||||
@@ -1015,6 +1016,14 @@ export default {
|
||||
* dialogs in case of media permissions error.
|
||||
*/
|
||||
muteVideo(mute, showUI = true) {
|
||||
if (this.videoSwitchInProgress) {
|
||||
// Turning the camera on while the screen sharing mode is being turned off is causing issues around
|
||||
// the presenter mode handling. It should be okay for the user to click the button again once that's done.
|
||||
console.warn('muteVideo - unable to perform operations while video switch is in progress');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mute
|
||||
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
|
||||
logger.error('Unmuting video requires user interaction');
|
||||
@@ -1202,14 +1211,6 @@ export default {
|
||||
return room.isConnectionInterrupted();
|
||||
},
|
||||
|
||||
/**
|
||||
* Obtains the local display name.
|
||||
* @returns {string|undefined}
|
||||
*/
|
||||
getLocalDisplayName() {
|
||||
return getDisplayName(this.getMyUserId());
|
||||
},
|
||||
|
||||
/**
|
||||
* Finds JitsiParticipant for given id.
|
||||
*
|
||||
@@ -1222,29 +1223,6 @@ export default {
|
||||
return room ? room.getParticipantById(id) : null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Gets the display name foe the <tt>JitsiParticipant</tt> identified by
|
||||
* the given <tt>id</tt>.
|
||||
*
|
||||
* @param id {string} the participant's id(MUC nickname/JVB endpoint id)
|
||||
*
|
||||
* @return {string} the participant's display name or the default string if
|
||||
* absent.
|
||||
*/
|
||||
getParticipantDisplayName(id) {
|
||||
const displayName = getDisplayName(id);
|
||||
|
||||
if (displayName) {
|
||||
return displayName;
|
||||
}
|
||||
if (APP.conference.isLocalId(id)) {
|
||||
return APP.translation.generateTranslationHTML(
|
||||
interfaceConfig.DEFAULT_LOCAL_DISPLAY_NAME);
|
||||
}
|
||||
|
||||
return interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME;
|
||||
},
|
||||
|
||||
getMyUserId() {
|
||||
return room && room.myUserId();
|
||||
},
|
||||
@@ -1352,11 +1330,40 @@ export default {
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Used by the Breakout Rooms feature to join a breakout room or go back to the main room.
|
||||
*/
|
||||
async joinRoom(roomName, options) {
|
||||
// Reset VideoLayout. It's destroyed in features/video-layout/middleware.web.js so re-initialize it.
|
||||
VideoLayout.initLargeVideo();
|
||||
VideoLayout.resizeVideoArea();
|
||||
|
||||
// Restore initial state.
|
||||
this._localTracksInitialized = false;
|
||||
this.isSharingScreen = false;
|
||||
this.localPresenterVideo = null;
|
||||
|
||||
this.roomName = roomName;
|
||||
|
||||
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options);
|
||||
const localTracks = await tryCreateLocalTracks;
|
||||
|
||||
this._displayErrorsForCreateInitialLocalTracks(errors);
|
||||
localTracks.forEach(track => {
|
||||
if ((track.isAudioTrack() && this.isLocalAudioMuted())
|
||||
|| (track.isVideoTrack() && this.isLocalVideoMuted())) {
|
||||
track.mute();
|
||||
}
|
||||
});
|
||||
this._createRoom(localTracks);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
new ConferenceConnector(resolve, reject).connect();
|
||||
});
|
||||
},
|
||||
|
||||
_createRoom(localTracks) {
|
||||
room
|
||||
= connection.initJitsiConference(
|
||||
APP.conference.roomName,
|
||||
this._getConferenceOptions());
|
||||
room = connection.initJitsiConference(APP.conference.roomName, this._getConferenceOptions());
|
||||
|
||||
// Filter out the tracks that are muted (except on Safari).
|
||||
const tracks = browser.isWebKitBased() ? localTracks : localTracks.filter(track => !track.isMuted());
|
||||
@@ -1644,7 +1651,7 @@ export default {
|
||||
async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}, ignoreDidHaveVideo) {
|
||||
logger.debug(`toggleScreenSharing: ${toggle}`);
|
||||
if (this.videoSwitchInProgress) {
|
||||
return Promise.reject('Switch in progress.');
|
||||
return Promise.reject(`toggleScreenSharing: ${toggle} aborted - video switch in progress.`);
|
||||
}
|
||||
if (!JitsiMeetJS.isDesktopSharingEnabled()) {
|
||||
return Promise.reject('Cannot toggle screen sharing: not supported.');
|
||||
@@ -1704,10 +1711,10 @@ export default {
|
||||
= this._turnScreenSharingOff.bind(this, didHaveVideo);
|
||||
|
||||
const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);
|
||||
const dekstopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
|
||||
const desktopAudioStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
|
||||
|
||||
if (dekstopAudioStream) {
|
||||
dekstopAudioStream.on(
|
||||
if (desktopAudioStream) {
|
||||
desktopAudioStream.on(
|
||||
JitsiTrackEvents.LOCAL_TRACK_STOPPED,
|
||||
() => {
|
||||
logger.debug(`Local screensharing audio track stopped. ${this.isSharingScreen}`);
|
||||
@@ -1929,7 +1936,9 @@ export default {
|
||||
.then(() => {
|
||||
this.videoSwitchInProgress = false;
|
||||
if (config.enableScreenshotCapture) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
|
||||
if (getActiveSession(APP.store.getState(), JitsiRecordingConstants.mode.FILE)) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
|
||||
}
|
||||
}
|
||||
sendAnalytics(createScreenSharingEvent('started'));
|
||||
logger.log('Screen sharing started');
|
||||
@@ -2127,6 +2136,8 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
room.on(JitsiConferenceEvents.TRACK_UNMUTE_REJECTED, track => APP.store.dispatch(destroyLocalTracks(track)));
|
||||
|
||||
room.on(JitsiConferenceEvents.SUBJECT_CHANGED,
|
||||
subject => APP.store.dispatch(conferenceSubjectChanged(subject)));
|
||||
|
||||
@@ -2168,6 +2179,10 @@ export default {
|
||||
(id, displayName) => {
|
||||
const formattedDisplayName
|
||||
= getNormalizedDisplayName(displayName);
|
||||
const state = APP.store.getState();
|
||||
const {
|
||||
defaultRemoteDisplayName
|
||||
} = state['features/base/config'];
|
||||
|
||||
APP.store.dispatch(participantUpdated({
|
||||
conference: room,
|
||||
@@ -2179,7 +2194,7 @@ export default {
|
||||
formattedDisplayName:
|
||||
appendSuffix(
|
||||
formattedDisplayName
|
||||
|| interfaceConfig.DEFAULT_REMOTE_DISPLAY_NAME)
|
||||
|| defaultRemoteDisplayName)
|
||||
});
|
||||
}
|
||||
);
|
||||
@@ -2214,6 +2229,10 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.NON_PARTICIPANT_MESSAGE_RECEIVED,
|
||||
(...args) => APP.store.dispatch(nonParticipantMessageReceived(...args)));
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.LOCK_STATE_CHANGED,
|
||||
(...args) => APP.store.dispatch(lockStateChanged(room, ...args)));
|
||||
@@ -2247,6 +2266,17 @@ export default {
|
||||
APP.store.dispatch(suspendDetected());
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.AUDIO_UNMUTE_PERMISSIONS_CHANGED,
|
||||
disableAudioMuteChange => {
|
||||
APP.store.dispatch(setAudioUnmutePermissions(disableAudioMuteChange));
|
||||
});
|
||||
room.on(
|
||||
JitsiConferenceEvents.VIDEO_UNMUTE_PERMISSIONS_CHANGED,
|
||||
disableVideoMuteChange => {
|
||||
APP.store.dispatch(setVideoUnmutePermissions(disableVideoMuteChange));
|
||||
});
|
||||
|
||||
APP.UI.addListener(UIEvents.AUDIO_MUTED, muted => {
|
||||
this.muteAudio(muted);
|
||||
});
|
||||
@@ -2313,7 +2343,12 @@ export default {
|
||||
}
|
||||
|
||||
Promise.allSettled(promises)
|
||||
.then(() => APP.UI.notifyInitiallyMuted());
|
||||
.then(() => {
|
||||
APP.store.dispatch(showNotification({
|
||||
titleKey: 'notify.mutedTitle',
|
||||
descriptionKey: 'notify.muted'
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.SHORT));
|
||||
});
|
||||
});
|
||||
|
||||
room.on(
|
||||
@@ -2878,7 +2913,7 @@ export default {
|
||||
|
||||
Promise.all([
|
||||
requestFeedbackPromise,
|
||||
this.leaveRoomAndDisconnect()
|
||||
this.leaveRoom()
|
||||
])
|
||||
.then(values => {
|
||||
this._room = undefined;
|
||||
@@ -2897,18 +2932,25 @@ export default {
|
||||
},
|
||||
|
||||
/**
|
||||
* Leaves the room and calls JitsiConnection.disconnect.
|
||||
* Leaves the room.
|
||||
*
|
||||
* @param {boolean} doDisconnect - Wether leaving the room should also terminate the connection.
|
||||
* @returns {Promise}
|
||||
*/
|
||||
leaveRoomAndDisconnect() {
|
||||
async leaveRoom(doDisconnect = true) {
|
||||
APP.store.dispatch(conferenceWillLeave(room));
|
||||
|
||||
if (room && room.isJoined()) {
|
||||
return room.leave().then(disconnect, disconnect);
|
||||
return room.leave().finally(() => {
|
||||
if (doDisconnect) {
|
||||
return disconnect();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return disconnect();
|
||||
if (doDisconnect) {
|
||||
return disconnect();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -2990,6 +3032,15 @@ export default {
|
||||
room.sendEndpointMessage(to, payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Sends a facial expression as a string and its duration as a number
|
||||
* @param {object} payload - Object containing the {string} facialExpression
|
||||
* and {number} duration
|
||||
*/
|
||||
sendFacialExpression(payload) {
|
||||
room.sendFacialExpression(payload);
|
||||
},
|
||||
|
||||
/**
|
||||
* Adds new listener.
|
||||
* @param {String} eventName the name of the event
|
||||
|
||||
122
config.js
122
config.js
@@ -80,9 +80,15 @@ var config = {
|
||||
// Disables the reactions feature.
|
||||
// disableReactions: true,
|
||||
|
||||
// Disables the reactions moderation feature.
|
||||
// disableReactionsModeration: false,
|
||||
|
||||
// Disables polls feature.
|
||||
// disablePolls: false,
|
||||
|
||||
// Disables self-view tile. (hides it from tile view and from filmstrip)
|
||||
// disableSelfView: false,
|
||||
|
||||
// Disables ICE/UDP by filtering out local and remote UDP candidates in
|
||||
// signalling.
|
||||
// webrtcIceUdpDisable: false,
|
||||
@@ -279,6 +285,7 @@ var config = {
|
||||
// autoHide: true,
|
||||
// autoHideTimeout: 5000,
|
||||
// disabled: false,
|
||||
// disableDetails: false,
|
||||
// inactiveDisabled: false
|
||||
// },
|
||||
|
||||
@@ -374,6 +381,13 @@ var config = {
|
||||
// resizeDesktopForPresenter: false
|
||||
// },
|
||||
|
||||
// Notification timeouts
|
||||
// notificationTimeouts: {
|
||||
// short: 2500,
|
||||
// medium: 5000,
|
||||
// long: 10000
|
||||
// },
|
||||
|
||||
// // Options for the recording limit notification.
|
||||
// recordingLimit: {
|
||||
//
|
||||
@@ -392,6 +406,9 @@ var config = {
|
||||
// Disables or enables RTX (RFC 4588) (defaults to false).
|
||||
// disableRtx: false,
|
||||
|
||||
// Moves all Jitsi Meet 'beforeunload' logic (cleanup, leaving, disconnecting, etc) to the 'unload' event.
|
||||
// disableBeforeUnloadHandlers: true,
|
||||
|
||||
// Disables or enables TCC support in this client (default: enabled).
|
||||
// enableTcc: true,
|
||||
|
||||
@@ -429,6 +446,12 @@ var config = {
|
||||
// Hides lobby button
|
||||
// hideLobbyButton: false,
|
||||
|
||||
// If Lobby is enabled starts knocking automatically.
|
||||
// autoKnockLobby: false,
|
||||
|
||||
// Hides add breakout room button
|
||||
// hideAddRoomButton: false,
|
||||
|
||||
// Require users to always specify a display name.
|
||||
// requireDisplayName: true,
|
||||
|
||||
@@ -452,12 +475,21 @@ var config = {
|
||||
// when the toolbar is shown on mouse movements
|
||||
// disable1On1Mode: null | false | true,
|
||||
|
||||
// Default local name to be displayed
|
||||
// defaultLocalDisplayName: 'me',
|
||||
|
||||
// Default remote name to be displayed
|
||||
// defaultRemoteDisplayName: 'Fellow Jitster',
|
||||
|
||||
// Default language for the user interface.
|
||||
// defaultLanguage: 'en',
|
||||
|
||||
// Disables profile and the edit of all fields from the profile settings (display name and email)
|
||||
// disableProfile: false,
|
||||
|
||||
// Hides the email section under profile settings.
|
||||
// hideEmailInSettings: false,
|
||||
|
||||
// Whether or not some features are checked based on token.
|
||||
// enableFeaturesBasedOnToken: false,
|
||||
|
||||
@@ -473,8 +505,14 @@ var config = {
|
||||
// and microsoftApiApplicationClientID
|
||||
// enableCalendarIntegration: false,
|
||||
|
||||
// When 'true', it shows an intermediate page before joining, where the user can configure their devices.
|
||||
// prejoinPageEnabled: false,
|
||||
// Configs for prejoin page.
|
||||
// prejoinConfig: {
|
||||
// // When 'true', it shows an intermediate page before joining, where the user can configure their devices.
|
||||
// // This replaces `prejoinPageEnabled`.
|
||||
// enabled: true,
|
||||
// // List of buttons to hide from the extra join options dropdown.
|
||||
// hideExtraJoinButtons: ['no-audio', 'by-phone']
|
||||
// },
|
||||
|
||||
// When 'true', the user cannot edit the display name.
|
||||
// (Mainly useful when used in conjuction with the JWT so the JWT name becomes read only.)
|
||||
@@ -648,6 +686,9 @@ var config = {
|
||||
// Enables sending participants' emails (if available) to callstats and other analytics
|
||||
// enableEmailInStats: false,
|
||||
|
||||
// Enables detecting faces of participants and get their expression and send it to other participants
|
||||
// enableFacialRecognition: true,
|
||||
|
||||
// Controls the percentage of automatic feedback shown to participants when callstats is enabled.
|
||||
// The default value is 100%. If set to 0, no automatic feedback will be requested
|
||||
// feedbackPercentage: 100,
|
||||
@@ -730,7 +771,7 @@ var config = {
|
||||
// module connects to the provided rtcstatsEndpoint and sends statistics regarding
|
||||
// PeerConnection states along with getStats metrics polled at the specified
|
||||
// interval.
|
||||
// rtcstatsEnabled: true,
|
||||
// rtcstatsEnabled: false,
|
||||
|
||||
// In order to enable rtcstats one needs to provide a endpoint url.
|
||||
// rtcstatsEndpoint: wss://rtcstats-server-pilot.jitsi.net/,
|
||||
@@ -825,6 +866,10 @@ var config = {
|
||||
// format: 'flac'
|
||||
//
|
||||
|
||||
// },
|
||||
// e2ee: {
|
||||
// labels,
|
||||
// externallyManagedKey: false
|
||||
// },
|
||||
|
||||
// Options related to end-to-end (participant to participant) ping.
|
||||
@@ -895,25 +940,55 @@ var config = {
|
||||
If there is no url set or there are missing fields, the defaults are applied.
|
||||
The config file should be in JSON.
|
||||
None of the fields are mandatory and the response must have the shape:
|
||||
{
|
||||
// The domain url to apply (will replace the domain in the sharing conference link/embed section)
|
||||
inviteDomain: 'example-company.org,
|
||||
// The hex value for the colour used as background
|
||||
backgroundColor: '#fff',
|
||||
// The url for the image used as background
|
||||
backgroundImageUrl: 'https://example.com/background-img.png',
|
||||
// The anchor url used when clicking the logo image
|
||||
logoClickUrl: 'https://example-company.org',
|
||||
// The url used for the image used as logo
|
||||
logoImageUrl: 'https://example.com/logo-img.png',
|
||||
// Overwrite for pool of background images for avatars
|
||||
avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
|
||||
// The lobby/prejoin screen background
|
||||
premeetingBackground: 'url(https://example.com/premeeting-background.png)',
|
||||
// A list of images that can be used as video backgrounds.
|
||||
// When this field is present, the default images will be replaced with those provided.
|
||||
virtualBackgrounds: ['https://example.com/img.jpg']
|
||||
}
|
||||
{
|
||||
// The domain url to apply (will replace the domain in the sharing conference link/embed section)
|
||||
inviteDomain: 'example-company.org,
|
||||
// The hex value for the colour used as background
|
||||
backgroundColor: '#fff',
|
||||
// The url for the image used as background
|
||||
backgroundImageUrl: 'https://example.com/background-img.png',
|
||||
// The anchor url used when clicking the logo image
|
||||
logoClickUrl: 'https://example-company.org',
|
||||
// The url used for the image used as logo
|
||||
logoImageUrl: 'https://example.com/logo-img.png',
|
||||
// Overwrite for pool of background images for avatars
|
||||
avatarBackgrounds: ['url(https://example.com/avatar-background-1.png)', '#FFF'],
|
||||
// The lobby/prejoin screen background
|
||||
premeetingBackground: 'url(https://example.com/premeeting-background.png)',
|
||||
// A list of images that can be used as video backgrounds.
|
||||
// When this field is present, the default images will be replaced with those provided.
|
||||
virtualBackgrounds: ['https://example.com/img.jpg'],
|
||||
// Object containing a theme's properties. It also supports partial overwrites of the main theme.
|
||||
// For a list of all possible theme tokens and their current defaults, please check:
|
||||
// https://github.com/jitsi/jitsi-meet/tree/master/resources/custom-theme/custom-theme.json
|
||||
// For a short explanations on each of the tokens, please check:
|
||||
// https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/ui/Tokens.js
|
||||
// IMPORTANT!: This is work in progress so many of the various tokens are not yet applied in code
|
||||
// or they are partially applied.
|
||||
customTheme: {
|
||||
palette: {
|
||||
ui01: "orange !important",
|
||||
ui02: "maroon",
|
||||
surface02: 'darkgreen',
|
||||
ui03: "violet",
|
||||
ui04: "magenta",
|
||||
ui05: "blueviolet",
|
||||
field02Hover: 'red',
|
||||
action01: 'green',
|
||||
action01Hover: 'lightgreen',
|
||||
action02Disabled: 'beige',
|
||||
success02: 'cadetblue',
|
||||
action02Hover: 'aliceblue'
|
||||
},
|
||||
typography: {
|
||||
labelRegular: {
|
||||
fontSize: 25,
|
||||
lineHeight: 30,
|
||||
fontWeight: 500
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
// dynamicBrandingUrl: '',
|
||||
|
||||
@@ -935,6 +1010,9 @@ var config = {
|
||||
// If true, tile view will not be enabled automatically when the participants count threshold is reached.
|
||||
// disableTileView: true,
|
||||
|
||||
// If true, the tiles will be displayed contained within the available space rather than enlarged to cover it.
|
||||
// disableTileEnlargement: true,
|
||||
|
||||
// Controls the visibility and behavior of the top header conference info labels.
|
||||
// If a label's id is not in any of the 2 arrays, it will not be visible at all on the header.
|
||||
// conferenceInfo: {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* global APP, JitsiMeetJS, config */
|
||||
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
import { redirectToTokenAuthService } from './modules/UI/authentication/AuthHandler';
|
||||
import { LoginDialog } from './react/features/authentication/components';
|
||||
|
||||
@@ -103,3 +103,20 @@ div.Tooltip {
|
||||
line-height: 14px;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
// make modal full screen on landscape orientation
|
||||
@media (max-height: 420px) {
|
||||
.atlaskit-portal {
|
||||
.css-1oc7v0j {
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
max-width: 100%;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
|
||||
&> div {
|
||||
height: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,14 +77,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
.toolbox-button {
|
||||
color: $toolbarButtonColor;
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
line-height: $newToolbarSize;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.toolbar-button-with-badge {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
@@ -115,86 +107,6 @@
|
||||
padding-bottom: env(safe-area-inset-bottom, 0);
|
||||
}
|
||||
|
||||
.toolbox-content-items {
|
||||
background: $newToolbarBackgroundColor;
|
||||
border-radius: 6px;
|
||||
margin: 0 auto;
|
||||
padding: 6px;
|
||||
text-align: center;
|
||||
pointer-events: all;
|
||||
box-shadow: 0px 2px 8px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.15);
|
||||
|
||||
>div {
|
||||
margin-left: 8px;
|
||||
|
||||
&:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.overflow-menu {
|
||||
font-size: 14px;
|
||||
list-style-type: none;
|
||||
padding: 8px 0;
|
||||
background-color: $menuBG;
|
||||
|
||||
.profile-text {
|
||||
max-width: 150px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
.overflow-menu-item {
|
||||
align-items: center;
|
||||
color: $overflowMenuItemColor;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
height: 40px;
|
||||
line-height: 24px;
|
||||
padding: 8px 16px;
|
||||
box-sizing: border-box;
|
||||
|
||||
@media (hover: hover) and (pointer: fine) {
|
||||
&:hover {
|
||||
background: $overflowMenuItemBackground;
|
||||
}
|
||||
}
|
||||
|
||||
div {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
&.unclickable {
|
||||
cursor: default;
|
||||
}
|
||||
&.disabled {
|
||||
cursor: initial;
|
||||
color: #929292;
|
||||
|
||||
&:hover {
|
||||
background: none;
|
||||
}
|
||||
|
||||
svg {
|
||||
fill: #929292;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@media (hover: hover) and (pointer: fine) {
|
||||
&.unclickable:hover {
|
||||
background: inherit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.beta-tag {
|
||||
background: #36383C;
|
||||
border-radius: 3px;
|
||||
@@ -205,73 +117,12 @@
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.overflow-menu-item-icon {
|
||||
margin-right: 16px;
|
||||
|
||||
i {
|
||||
display: inline;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
@media (hover: hover) and (pointer: fine) {
|
||||
i:hover {
|
||||
background-color: initial;
|
||||
}
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 24px;
|
||||
max-height: 24px;
|
||||
}
|
||||
|
||||
svg {
|
||||
fill: #fff;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.overflow-menu-hr {
|
||||
border-top: 1px solid #4C4D50;
|
||||
border-bottom: 0;
|
||||
margin: 8px 0;
|
||||
}
|
||||
|
||||
.toolbox-icon {
|
||||
display: flex;
|
||||
border-radius: 3px;
|
||||
flex-direction: column;
|
||||
font-size: 24px;
|
||||
height: $newToolbarSize;
|
||||
justify-content: center;
|
||||
width: $newToolbarSize;
|
||||
|
||||
@media (hover: hover) and (pointer: fine) {
|
||||
&:hover {
|
||||
background: $newToolbarButtonHoverColor;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 320px) {
|
||||
height: 36px;
|
||||
width: 36px;
|
||||
}
|
||||
|
||||
&.toggled {
|
||||
background: $newToolbarButtonToggleColor;
|
||||
}
|
||||
|
||||
&.disabled {
|
||||
cursor: initial !important;
|
||||
background-color: #36383c !important;
|
||||
|
||||
svg {
|
||||
fill: #929292 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.hangup-button {
|
||||
background-color: $hangupColor;
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
.copy-button {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 8px 8px 8px 16px;
|
||||
margin-top: 5px;
|
||||
width: calc(100% - 24px);
|
||||
height: 24px;
|
||||
|
||||
background: #0376DA;
|
||||
border-radius: 4px;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background: #278ADF;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
&-content {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
max-width: 292px;
|
||||
margin-right: 16px;
|
||||
|
||||
&.selected {
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
|
||||
&.clicked {
|
||||
background: #31B76A;
|
||||
}
|
||||
|
||||
& > div > svg > path {
|
||||
fill: #fff;
|
||||
}
|
||||
}
|
||||
@@ -33,7 +33,6 @@ $flagsImagePath: "../images/";
|
||||
@import 'inlay';
|
||||
@import 'reload_overlay/reload_overlay';
|
||||
@import 'mini_toolbox';
|
||||
@import 'buttons/copy.scss';
|
||||
@import 'modals/desktop-picker/desktop-picker';
|
||||
@import 'modals/device-selection/device-selection';
|
||||
@import 'modals/dialog';
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
}
|
||||
|
||||
.profile-edit-field {
|
||||
flex: 1;
|
||||
flex: .5;
|
||||
}
|
||||
.settings-sub-pane {
|
||||
flex: 1;
|
||||
@@ -65,6 +65,11 @@
|
||||
text-align: left;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.moderator-settings-wrapper {
|
||||
padding-top: 20px;
|
||||
}
|
||||
|
||||
.profile-edit-field {
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,10 @@
|
||||
|
||||
.speaker-stats-item__status,
|
||||
.speaker-stats-item__name,
|
||||
.speaker-stats-item__time {
|
||||
.speaker-stats-item__time,
|
||||
.speaker-stats-item__name_expressions_on,
|
||||
.speaker-stats-item__time_expressions_on,
|
||||
.speaker-stats-item__expression {
|
||||
display: inline-block;
|
||||
margin: 5px 0;
|
||||
vertical-align: middle;
|
||||
@@ -41,9 +44,35 @@
|
||||
.speaker-stats-item__time {
|
||||
width: 55%;
|
||||
}
|
||||
.speaker-stats-item__name_expressions_on {
|
||||
width: 20%;
|
||||
}
|
||||
.speaker-stats-item__time_expressions_on {
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
.speaker-stats-item__expression {
|
||||
width: 7%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media(max-width: 750px) {
|
||||
.speaker-stats-item__name_expressions_on {
|
||||
width: 25%;
|
||||
}
|
||||
.speaker-stats-item__time_expressions_on {
|
||||
width: 30%;
|
||||
}
|
||||
.speaker-stats-item__expression {
|
||||
width: 10%;
|
||||
}
|
||||
}
|
||||
|
||||
.speaker-stats-item__name,
|
||||
.speaker-stats-item__time {
|
||||
.speaker-stats-item__time,
|
||||
.speaker-stats-item__name_expressions_on,
|
||||
.speaker-stats-item__time_expressions_on,
|
||||
.speaker-stats-item__expression {
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
|
||||
@@ -138,7 +138,6 @@
|
||||
|
||||
.toolbox-content-items {
|
||||
background: transparent;
|
||||
border-radius: 0;
|
||||
box-shadow: none;
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
@@ -171,6 +170,19 @@
|
||||
}
|
||||
}
|
||||
|
||||
// mobile phone landscape
|
||||
@media (max-height: 420px) {
|
||||
flex-direction: row;
|
||||
|
||||
div.content {
|
||||
padding: 16px 16px 0 16px;
|
||||
}
|
||||
|
||||
.con-status {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 400px) {
|
||||
.content {
|
||||
padding: 16px;
|
||||
|
||||
@@ -52,10 +52,12 @@ VirtualHost "jitmeet.example.com"
|
||||
"external_services";
|
||||
"conference_duration";
|
||||
"muc_lobby_rooms";
|
||||
"muc_breakout_rooms";
|
||||
"av_moderation";
|
||||
}
|
||||
c2s_require_encryption = false
|
||||
lobby_muc = "lobby.jitmeet.example.com"
|
||||
breakout_rooms_muc = "breakout.jitmeet.example.com"
|
||||
main_muc = "conference.jitmeet.example.com"
|
||||
-- muc_lobby_whitelist = { "recorder.jitmeet.example.com" } -- Here we can whitelist jibri to enter lobby enabled rooms
|
||||
|
||||
@@ -73,6 +75,19 @@ Component "conference.jitmeet.example.com" "muc"
|
||||
muc_room_locking = false
|
||||
muc_room_default_public_jids = true
|
||||
|
||||
Component "breakout.jitmeet.example.com" "muc"
|
||||
restrict_room_creation = true
|
||||
storage = "memory"
|
||||
modules_enabled = {
|
||||
"muc_meeting_id";
|
||||
"muc_domain_mapper";
|
||||
--"token_verification";
|
||||
"muc_rate_limit";
|
||||
}
|
||||
admins = { "focusUser@auth.jitmeet.example.com" }
|
||||
muc_room_locking = false
|
||||
muc_room_default_public_jids = true
|
||||
|
||||
-- internal muc component
|
||||
Component "internal.auth.jitmeet.example.com" "muc"
|
||||
storage = "memory"
|
||||
@@ -107,3 +122,6 @@ Component "lobby.jitmeet.example.com" "muc"
|
||||
restrict_room_creation = true
|
||||
muc_room_locking = false
|
||||
muc_room_default_public_jids = true
|
||||
modules_enabled = {
|
||||
"muc_rate_limit";
|
||||
}
|
||||
|
||||
102
flow-typed/npm/uuid_v3.x.x.js
vendored
102
flow-typed/npm/uuid_v3.x.x.js
vendored
@@ -1,102 +0,0 @@
|
||||
// flow-typed signature: 609c1622fc97de96d59519934aa5ce87
|
||||
// flow-typed version: c6154227d1/uuid_v3.x.x/flow_>=v0.32.x <=v0.103.x
|
||||
|
||||
declare module "uuid" {
|
||||
declare class uuid {
|
||||
static (
|
||||
options?: {|
|
||||
random?: number[],
|
||||
rng?: () => number[] | Buffer
|
||||
|},
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string,
|
||||
|
||||
static v1(
|
||||
options?: {|
|
||||
node?: number[],
|
||||
clockseq?: number,
|
||||
msecs?: number | Date,
|
||||
nsecs?: number
|
||||
|},
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string,
|
||||
|
||||
static v4(
|
||||
options?: {|
|
||||
random?: number[],
|
||||
rng?: () => number[] | Buffer
|
||||
|},
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string
|
||||
}
|
||||
declare module.exports: Class<uuid>;
|
||||
}
|
||||
|
||||
declare module "uuid/v1" {
|
||||
declare class v1 {
|
||||
static (
|
||||
options?: {|
|
||||
node?: number[],
|
||||
clockseq?: number,
|
||||
msecs?: number | Date,
|
||||
nsecs?: number
|
||||
|},
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string
|
||||
}
|
||||
|
||||
declare module.exports: Class<v1>;
|
||||
}
|
||||
|
||||
declare module "uuid/v3" {
|
||||
declare class v3 {
|
||||
static (
|
||||
name?: string | number[],
|
||||
namespace?: string | number[],
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string,
|
||||
|
||||
static name: string,
|
||||
static DNS: string,
|
||||
static URL: string
|
||||
}
|
||||
|
||||
declare module.exports: Class<v3>;
|
||||
}
|
||||
|
||||
declare module "uuid/v4" {
|
||||
declare class v4 {
|
||||
static (
|
||||
options?: {|
|
||||
random?: number[],
|
||||
rng?: () => number[] | Buffer
|
||||
|},
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string
|
||||
}
|
||||
|
||||
declare module.exports: Class<v4>;
|
||||
}
|
||||
|
||||
declare module "uuid/v5" {
|
||||
declare class v5 {
|
||||
static (
|
||||
name?: string | number[],
|
||||
namespace?: string | number[],
|
||||
buffer?: number[] | Buffer,
|
||||
offset?: number
|
||||
): string,
|
||||
|
||||
static name: string,
|
||||
static DNS: string,
|
||||
static URL: string
|
||||
}
|
||||
|
||||
declare module.exports: Class<v5>;
|
||||
}
|
||||
71
flow-typed/npm/uuid_v8.x.x.js
vendored
Normal file
71
flow-typed/npm/uuid_v8.x.x.js
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
declare module 'uuid' {
|
||||
// v1 (Timestamp)
|
||||
declare type V1Options = {|
|
||||
node?: $ReadOnlyArray<number>,
|
||||
clockseq?: number,
|
||||
msecs?: number,
|
||||
nsecs?: number,
|
||||
random?: $ReadOnlyArray<number>,
|
||||
rng?: () => $ReadOnlyArray<number>,
|
||||
|};
|
||||
|
||||
declare export function v1(options?: V1Options): string;
|
||||
|
||||
declare export function v1(
|
||||
options: V1Options | null,
|
||||
buffer: Array<number>,
|
||||
offset?: number
|
||||
): Array<number>;
|
||||
|
||||
// v3 (Namespace)
|
||||
declare function v3Impl(
|
||||
name: string | $ReadOnlyArray<number>,
|
||||
namespace: string | $ReadOnlyArray<number>
|
||||
): string;
|
||||
|
||||
declare function v3Impl(
|
||||
name: string | $ReadOnlyArray<number>,
|
||||
namespace: string | $ReadOnlyArray<number>,
|
||||
buffer: Array<number>,
|
||||
offset?: number
|
||||
): Array<number>;
|
||||
|
||||
declare export var v3: {|
|
||||
[[call]]: typeof v3Impl,
|
||||
DNS: string,
|
||||
URL: string,
|
||||
|};
|
||||
|
||||
// v4 (Random)
|
||||
declare type V4Options = {|
|
||||
random?: $ReadOnlyArray<number>,
|
||||
rng?: () => $ReadOnlyArray<number>,
|
||||
|};
|
||||
|
||||
declare export function v4(options?: V4Options): string;
|
||||
|
||||
declare export function v4(
|
||||
options: V4Options | null,
|
||||
buffer: Array<number>,
|
||||
offset?: number
|
||||
): Array<number>;
|
||||
|
||||
// v5 (Namespace)
|
||||
declare function v5Impl(
|
||||
name: string | $ReadOnlyArray<number>,
|
||||
namespace: string | $ReadOnlyArray<number>
|
||||
): string;
|
||||
|
||||
declare function v5Impl(
|
||||
name: string | $ReadOnlyArray<number>,
|
||||
namespace: string | $ReadOnlyArray<number>,
|
||||
buffer: Array<number>,
|
||||
offset?: number
|
||||
): Array<number>;
|
||||
|
||||
declare export var v5: {|
|
||||
[[call]]: typeof v5Impl,
|
||||
DNS: string,
|
||||
URL: string,
|
||||
|};
|
||||
}
|
||||
0
fonts.html
Normal file
0
fonts.html
Normal file
@@ -9,6 +9,7 @@
|
||||
|
||||
<link rel="apple-touch-icon" href="images/apple-touch-icon.png">
|
||||
<link rel="stylesheet" href="css/all.css">
|
||||
<!--#include virtual="fonts.html"-->
|
||||
<link rel="manifest" id="manifest-placeholder">
|
||||
|
||||
<script>
|
||||
|
||||
@@ -27,9 +27,7 @@ var interfaceConfig = {
|
||||
CLOSE_PAGE_GUEST_HINT: false, // A html text to be shown to guests on the close page, false disables it
|
||||
|
||||
DEFAULT_BACKGROUND: '#474747',
|
||||
DEFAULT_LOCAL_DISPLAY_NAME: 'me',
|
||||
DEFAULT_LOGO_URL: 'images/watermark.svg',
|
||||
DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
|
||||
DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.svg',
|
||||
|
||||
DISABLE_DOMINANT_SPEAKER_INDICATOR: false,
|
||||
@@ -225,13 +223,6 @@ var interfaceConfig = {
|
||||
*/
|
||||
// ANDROID_APP_PACKAGE: 'org.jitsi.meet',
|
||||
|
||||
/**
|
||||
* Override the behavior of some notifications to remain displayed until
|
||||
* explicitly dismissed through a user action. The value is how long, in
|
||||
* milliseconds, those notifications should remain displayed.
|
||||
*/
|
||||
// ENFORCE_NOTIFICATION_AUTO_DISMISS_TIMEOUT: 15000,
|
||||
|
||||
// List of undocumented settings
|
||||
/**
|
||||
INDICATOR_FONT_SIZES
|
||||
@@ -248,6 +239,12 @@ var interfaceConfig = {
|
||||
// Please use disableModeratorIndicator from config.js
|
||||
// DISABLE_FOCUS_INDICATOR: false,
|
||||
|
||||
// Please use defaultLocalDisplayName from config.js
|
||||
// DEFAULT_LOCAL_DISPLAY_NAME: 'me',
|
||||
|
||||
// Please use defaultRemoteDisplayName from config.js
|
||||
// DEFAULT_REMOTE_DISPLAY_NAME: 'Fellow Jitster',
|
||||
|
||||
// Moved to config.js as `toolbarConfig.initialTimeout`.
|
||||
// INITIAL_TOOLBAR_TIMEOUT: 20000,
|
||||
|
||||
|
||||
14
ios/Podfile
14
ios/Podfile
@@ -57,26 +57,28 @@ target 'JitsiMeetSDK' do
|
||||
pod 'amplitude-react-native', :path => '../node_modules/@amplitude/react-native'
|
||||
pod 'react-native-background-timer', :path => '../node_modules/react-native-background-timer'
|
||||
pod 'react-native-calendar-events', :path => '../node_modules/react-native-calendar-events'
|
||||
pod 'react-native-get-random-values', :path => '../node_modules/react-native-get-random-values'
|
||||
pod 'react-native-keep-awake', :path => '../node_modules/react-native-keep-awake'
|
||||
pod 'react-native-netinfo', :path => '../node_modules/@react-native-community/netinfo'
|
||||
pod 'react-native-performance', :path => '../node_modules/react-native-performance/ios'
|
||||
pod 'react-native-safe-area-context', :path => '../node_modules/react-native-safe-area-context'
|
||||
pod 'react-native-slider', :path => '../node_modules/@react-native-community/slider'
|
||||
pod 'react-native-splash-screen', :path => '../node_modules/react-native-splash-screen'
|
||||
pod 'react-native-video', :path => '../node_modules/react-native-video/react-native-video.podspec'
|
||||
pod 'react-native-webview', :path => '../node_modules/react-native-webview'
|
||||
pod 'react-native-webrtc', :path => '../node_modules/react-native-webrtc'
|
||||
pod 'RNCAsyncStorage', :path => '../node_modules/@react-native-async-storage/async-storage'
|
||||
pod 'RNCClipboard', :path => '../node_modules/@react-native-community/clipboard'
|
||||
pod 'RNCMaskedView', :path => '../node_modules/@react-native-masked-view/masked-view'
|
||||
pod 'RNDefaultPreference', :path => '../node_modules/react-native-default-preference'
|
||||
pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info'
|
||||
pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'
|
||||
pod 'RNGoogleSignin', :path => '../node_modules/@react-native-community/google-signin'
|
||||
pod 'RNReanimated', :path => '../node_modules/react-native-reanimated'
|
||||
pod 'RNScreens', :path => '../node_modules/react-native-screens'
|
||||
pod 'RNSound', :path => '../node_modules/react-native-sound'
|
||||
pod 'RNSVG', :path => '../node_modules/react-native-svg'
|
||||
pod 'RNWatch', :path => '../node_modules/react-native-watch-connectivity'
|
||||
pod 'RNDefaultPreference', :path => '../node_modules/react-native-default-preference'
|
||||
pod 'RNGestureHandler', :path => '../node_modules/react-native-gesture-handler'
|
||||
pod 'RNReanimated', :path => '../node_modules/react-native-reanimated'
|
||||
pod 'RNScreens', :path => '../node_modules/react-native-screens'
|
||||
pod 'react-native-safe-area-context', :path => '../node_modules/react-native-safe-area-context'
|
||||
pod 'RNCMaskedView', :path => '../node_modules/@react-native-masked-view/masked-view'
|
||||
|
||||
# Native pod dependencies
|
||||
#
|
||||
|
||||
@@ -284,6 +284,8 @@ PODS:
|
||||
- React
|
||||
- react-native-calendar-events (2.0.0):
|
||||
- React
|
||||
- react-native-get-random-values (1.7.0):
|
||||
- React-Core
|
||||
- react-native-keep-awake (4.0.0):
|
||||
- React
|
||||
- react-native-netinfo (4.1.5):
|
||||
@@ -301,7 +303,7 @@ PODS:
|
||||
- react-native-video/Video (= 5.1.1)
|
||||
- react-native-video/Video (5.1.1):
|
||||
- React-Core
|
||||
- react-native-webrtc (1.92.2):
|
||||
- react-native-webrtc (1.94.1):
|
||||
- React-Core
|
||||
- react-native-webview (11.0.2):
|
||||
- React-Core
|
||||
@@ -361,6 +363,8 @@ PODS:
|
||||
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.2)
|
||||
- RNCAsyncStorage (1.15.5):
|
||||
- React-Core
|
||||
- RNCClipboard (1.5.1):
|
||||
- React-Core
|
||||
- RNCMaskedView (0.2.6):
|
||||
- React-Core
|
||||
- RNDefaultPreference (1.4.2):
|
||||
@@ -412,6 +416,7 @@ DEPENDENCIES:
|
||||
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
|
||||
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
|
||||
- react-native-calendar-events (from `../node_modules/react-native-calendar-events`)
|
||||
- react-native-get-random-values (from `../node_modules/react-native-get-random-values`)
|
||||
- react-native-keep-awake (from `../node_modules/react-native-keep-awake`)
|
||||
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
|
||||
- react-native-performance (from `../node_modules/react-native-performance/ios`)
|
||||
@@ -432,6 +437,7 @@ DEPENDENCIES:
|
||||
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
|
||||
- ReactCommon/turbomodule (from `../node_modules/react-native/ReactCommon`)
|
||||
- "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)"
|
||||
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
|
||||
- "RNCMaskedView (from `../node_modules/@react-native-masked-view/masked-view`)"
|
||||
- RNDefaultPreference (from `../node_modules/react-native-default-preference`)
|
||||
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
|
||||
@@ -502,6 +508,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native-background-timer"
|
||||
react-native-calendar-events:
|
||||
:path: "../node_modules/react-native-calendar-events"
|
||||
react-native-get-random-values:
|
||||
:path: "../node_modules/react-native-get-random-values"
|
||||
react-native-keep-awake:
|
||||
:path: "../node_modules/react-native-keep-awake"
|
||||
react-native-netinfo:
|
||||
@@ -542,6 +550,8 @@ EXTERNAL SOURCES:
|
||||
:path: "../node_modules/react-native/ReactCommon"
|
||||
RNCAsyncStorage:
|
||||
:path: "../node_modules/@react-native-async-storage/async-storage"
|
||||
RNCClipboard:
|
||||
:path: "../node_modules/@react-native-community/clipboard"
|
||||
RNCMaskedView:
|
||||
:path: "../node_modules/@react-native-masked-view/masked-view"
|
||||
RNDefaultPreference:
|
||||
@@ -603,6 +613,7 @@ SPEC CHECKSUMS:
|
||||
React-jsinspector: 92ceee6c66dc19886289b52436ade7e020b89602
|
||||
react-native-background-timer: 029c606b3fd6dd476b153e177c518b6ade4c169f
|
||||
react-native-calendar-events: 82dc6c915653a1a8a266e43fdbbfdb3b1022ca99
|
||||
react-native-get-random-values: 237bffb1c7e05fb142092681531810a29ba53015
|
||||
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
|
||||
react-native-netinfo: 0e563248a4b9a99c33ec29bd03c2d50767db22a6
|
||||
react-native-performance: 6bd6cfac80594775fb782405fceaaf206becf53b
|
||||
@@ -610,7 +621,7 @@ SPEC CHECKSUMS:
|
||||
react-native-slider: e99fc201cefe81270fc9d81714a7a0f5e566b168
|
||||
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
|
||||
react-native-video: 0bb76b6d6b77da3009611586c7dbf817b947f30e
|
||||
react-native-webrtc: 41526e4060dac373c18676f866962d4180ee47b9
|
||||
react-native-webrtc: 2f20515f3ebb9dbf1f2aad638cc7573396cf948f
|
||||
react-native-webview: dfd7202ff115c44d3ea401c2f36122fb3ac79f07
|
||||
React-RCTActionSheet: bcbc311dc3b47bc8efb2737ff0940239a45789a9
|
||||
React-RCTAnimation: 65f61080ce632f6dea23d52e354ffac9948396c6
|
||||
@@ -623,6 +634,7 @@ SPEC CHECKSUMS:
|
||||
React-RCTVibration: c1041024893fdfdb8371e7c720c437751b711676
|
||||
ReactCommon: 18014e1d98dbeb9141e935cfe35fc93bd511ffb6
|
||||
RNCAsyncStorage: 56a3355a10b5d660c48c6e37325ac85ebfd09885
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
|
||||
RNDefaultPreference: 1f8133ec0bc0f9453cdada578564ba1ef551fb44
|
||||
RNDeviceInfo: 87d2d175c760f6bcf58acd036f887e8b2392802c
|
||||
@@ -635,6 +647,6 @@ SPEC CHECKSUMS:
|
||||
RNWatch: a5320c959c75e72845c07985f3e935e58998f1d3
|
||||
Yoga: 96b469c5e81ff51b917b92e8c3390642d4ded30c
|
||||
|
||||
PODFILE CHECKSUM: 42be6796ba6ac039dae5c02125677728ecd0df0d
|
||||
PODFILE CHECKSUM: 0cfc1f35e2872ceb0a86252e14e226bd489a2602
|
||||
|
||||
COCOAPODS: 1.11.2
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>$(PRODUCT_BUNDLE_PACKAGE_TYPE)</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.5.0</string>
|
||||
<string>21.6.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>NSExtension</key>
|
||||
|
||||
@@ -34,10 +34,10 @@
|
||||
jitsiMeet.universalLinkDomains = @[@"meet.jit.si", @"alpha.jitsi.net", @"beta.meet.jit.si"];
|
||||
|
||||
jitsiMeet.defaultConferenceOptions = [JitsiMeetConferenceOptions fromBuilder:^(JitsiMeetConferenceOptionsBuilder *builder) {
|
||||
[builder setFeatureFlag:@"welcomepage.enabled" withBoolean:YES];
|
||||
[builder setFeatureFlag:@"resolution" withValue:@(360)];
|
||||
[builder setFeatureFlag:@"ios.screensharing.enabled" withBoolean:YES];
|
||||
builder.serverURL = [NSURL URLWithString:@"https://meet.jit.si"];
|
||||
builder.welcomePageEnabled = YES;
|
||||
|
||||
// Apple rejected our app because they claim requiring a
|
||||
// Dropbox account for recording is not acceptable.
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.5.0</string>
|
||||
<string>21.6.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
|
||||
@@ -91,10 +91,13 @@
|
||||
#if 0
|
||||
- (void)enterPictureInPicture:(NSDictionary *)data {
|
||||
[self _onJitsiMeetViewDelegateEvent:@"ENTER_PICTURE_IN_PICTURE" withData:data];
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
- (void)readyToClose:(NSDictionary *)data {
|
||||
[self _onJitsiMeetViewDelegateEvent:@"READY_TO_CLOSE" withData:data];
|
||||
}
|
||||
|
||||
- (void)participantJoined:(NSDictionary *)data {
|
||||
NSLog(@"%@%@", @"Participant joined: ", data[@"participantId"]);
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.5.0</string>
|
||||
<string>21.6.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>21.5.0</string>
|
||||
<string>21.6.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>1</string>
|
||||
<key>CLKComplicationPrincipalClass</key>
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>FMWK</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>4.0.0</string>
|
||||
<string>4.1.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
|
||||
@@ -34,12 +34,6 @@
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSString *token;
|
||||
|
||||
/**
|
||||
* Color scheme override, see:
|
||||
* https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/color-scheme/defaultScheme.js
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSDictionary *colorScheme;
|
||||
|
||||
/**
|
||||
* Feature flags. See: https://github.com/jitsi/jitsi-meet/blob/master/react/features/base/flags/constants.js
|
||||
*/
|
||||
@@ -47,12 +41,6 @@
|
||||
|
||||
@property (nonatomic, readonly, nonnull) NSDictionary *config;
|
||||
|
||||
/**
|
||||
* Set to YES to enable the welcome page. Typically SDK users won't need this enabled
|
||||
* since the host application decides which meeting to join.
|
||||
*/
|
||||
@property (nonatomic) BOOL welcomePageEnabled;
|
||||
|
||||
/**
|
||||
* Information about the local user. It will be used in absence of a token.
|
||||
*/
|
||||
@@ -82,11 +70,8 @@
|
||||
@property (nonatomic, copy, nullable, readonly) NSString *room;
|
||||
@property (nonatomic, copy, nullable, readonly) NSString *token;
|
||||
|
||||
@property (nonatomic, copy, nullable) NSDictionary *colorScheme;
|
||||
@property (nonatomic, readonly, nonnull) NSDictionary *featureFlags;
|
||||
|
||||
@property (nonatomic, readonly) BOOL welcomePageEnabled;
|
||||
|
||||
@property (nonatomic, nullable) JitsiMeetUserInfo *userInfo;
|
||||
|
||||
+ (instancetype _Nonnull)fromBuilder:(void (^_Nonnull)(JitsiMeetConferenceOptionsBuilder *_Nonnull))initBlock;
|
||||
|
||||
@@ -19,26 +19,17 @@
|
||||
#import "JitsiMeetConferenceOptions+Private.h"
|
||||
#import "JitsiMeetUserInfo+Private.h"
|
||||
|
||||
/**
|
||||
* Backwards compatibility: turn the boolean property into a feature flag.
|
||||
*/
|
||||
static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
|
||||
|
||||
@implementation JitsiMeetConferenceOptionsBuilder {
|
||||
NSMutableDictionary *_featureFlags;
|
||||
NSMutableDictionary *_config;
|
||||
}
|
||||
|
||||
@dynamic welcomePageEnabled;
|
||||
|
||||
- (instancetype)init {
|
||||
if (self = [super init]) {
|
||||
_serverURL = nil;
|
||||
_room = nil;
|
||||
_token = nil;
|
||||
|
||||
_colorScheme = nil;
|
||||
_config = [[NSMutableDictionary alloc] init];
|
||||
_featureFlags = [[NSMutableDictionary alloc] init];
|
||||
|
||||
@@ -96,19 +87,6 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
_config[config] = value;
|
||||
}
|
||||
|
||||
#pragma mark - Dynamic properties
|
||||
|
||||
- (void)setWelcomePageEnabled:(BOOL)welcomePageEnabled {
|
||||
[self setFeatureFlag:WelcomePageEnabledFeatureFlag
|
||||
withBoolean:welcomePageEnabled];
|
||||
}
|
||||
|
||||
- (BOOL)welcomePageEnabled {
|
||||
NSNumber *n = _featureFlags[WelcomePageEnabledFeatureFlag];
|
||||
|
||||
return n != nil ? [n boolValue] : NO;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation JitsiMeetConferenceOptions {
|
||||
@@ -116,16 +94,6 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
NSDictionary *_config;
|
||||
}
|
||||
|
||||
@dynamic welcomePageEnabled;
|
||||
|
||||
#pragma mark - Dynamic properties
|
||||
|
||||
- (BOOL)welcomePageEnabled {
|
||||
NSNumber *n = _featureFlags[WelcomePageEnabledFeatureFlag];
|
||||
|
||||
return n != nil ? [n boolValue] : NO;
|
||||
}
|
||||
|
||||
#pragma mark - Internal initializer
|
||||
|
||||
- (instancetype)initWithBuilder:(JitsiMeetConferenceOptionsBuilder *)builder {
|
||||
@@ -134,8 +102,6 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
_room = builder.room;
|
||||
_token = builder.token;
|
||||
|
||||
_colorScheme = builder.colorScheme;
|
||||
|
||||
_config = builder.config;
|
||||
|
||||
_featureFlags = [NSDictionary dictionaryWithDictionary:builder.featureFlags];
|
||||
@@ -161,10 +127,6 @@ static NSString *const WelcomePageEnabledFeatureFlag = @"welcomepage.enabled";
|
||||
|
||||
props[@"flags"] = [NSMutableDictionary dictionaryWithDictionary:_featureFlags];
|
||||
|
||||
if (_colorScheme != nil) {
|
||||
props[@"colorScheme"] = self.colorScheme;
|
||||
}
|
||||
|
||||
NSMutableDictionary *urlProps = [[NSMutableDictionary alloc] init];
|
||||
|
||||
// The room is fully qualified.
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSString *displayName;
|
||||
/**
|
||||
* User e-mail.
|
||||
* User email.
|
||||
*/
|
||||
@property (nonatomic, copy, nullable) NSString *email;
|
||||
/**
|
||||
|
||||
@@ -111,4 +111,9 @@
|
||||
*/
|
||||
- (void)videoMutedChanged:(NSDictionary *)data;
|
||||
|
||||
/**
|
||||
* Called when the SDK is ready to be closed. No meeting is happening at this point.
|
||||
*/
|
||||
- (void)readyToClose:(NSDictionary *)data;
|
||||
|
||||
@end
|
||||
|
||||
@@ -114,6 +114,7 @@ RCT_EXPORT_METHOD(setProviderConfiguration:(NSDictionary *)dictionary) {
|
||||
DDLogInfo(@"[RNCallKit][setProviderConfiguration:] dictionary = %@", dictionary);
|
||||
|
||||
if (![JMCallKitProxy isProviderConfigured]) {
|
||||
JMCallKitProxy.enabled = true;
|
||||
[self configureProviderFromDictionary:dictionary];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright @ 2019-present 8x8, Inc.
|
||||
* Copyright @ 2018-2019 Atlassian Pty Ltd
|
||||
* Copyright @ 2018-present 8x8, Inc.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,7 +17,7 @@
|
||||
import CallKit
|
||||
import Foundation
|
||||
|
||||
public protocol CXProviderProtocol: class {
|
||||
public protocol CXProviderProtocol: AnyObject {
|
||||
var configuration: CXProviderConfiguration { get set }
|
||||
func setDelegate(_ delegate: CXProviderDelegate?, queue: DispatchQueue?)
|
||||
func reportNewIncomingCall(with UUID: UUID, update: CXCallUpdate, completion: @escaping (Error?) -> Void)
|
||||
@@ -29,7 +28,7 @@ public protocol CXProviderProtocol: class {
|
||||
func invalidate()
|
||||
}
|
||||
|
||||
public protocol CXCallControllerProtocol: class {
|
||||
public protocol CXCallControllerProtocol: AnyObject {
|
||||
var calls: [CXCall] { get }
|
||||
func request(_ transaction: CXTransaction, completion: @escaping (Error?) -> Swift.Void)
|
||||
}
|
||||
@@ -53,7 +52,9 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
public static var callKitProvider: CXProviderProtocol?
|
||||
public static var callKitCallController: CXCallControllerProtocol?
|
||||
|
||||
private static var provider: CXProviderProtocol {
|
||||
private static var defaultProvider: CXProvider?
|
||||
|
||||
private static var provider: CXProviderProtocol? {
|
||||
callKitProvider ?? defaultProvider
|
||||
}
|
||||
|
||||
@@ -64,8 +65,8 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
private static var providerConfiguration: CXProviderConfiguration? {
|
||||
didSet {
|
||||
guard let configuration = providerConfiguration else { return }
|
||||
provider.configuration = configuration
|
||||
provider.setDelegate(emitter, queue: nil)
|
||||
provider?.configuration = configuration
|
||||
provider?.setDelegate(emitter, queue: nil)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,32 +74,27 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
return CXCallController()
|
||||
}()
|
||||
|
||||
private static var defaultProvider: CXProvider = {
|
||||
let configuration = CXProviderConfiguration(localizedName: "")
|
||||
return CXProvider(configuration: configuration)
|
||||
}()
|
||||
|
||||
private static let emitter: JMCallKitEmitter = {
|
||||
return JMCallKitEmitter()
|
||||
}()
|
||||
|
||||
/// Enables the proxy in between CallKit and the consumers of the SDK.
|
||||
/// Defaults to enabled, set to false when you don't want to use CallKit.
|
||||
@objc public static var enabled: Bool = true {
|
||||
/// Defaults to disabled. Set to true when you want to use CallKit.
|
||||
@objc public static var enabled: Bool = false {
|
||||
didSet {
|
||||
if callKitProvider == nil {
|
||||
provider.invalidate()
|
||||
provider?.invalidate()
|
||||
}
|
||||
|
||||
if enabled {
|
||||
guard isProviderConfigured() else { return }
|
||||
let configuration = providerConfiguration ?? CXProviderConfiguration(localizedName: "")
|
||||
if callKitProvider == nil {
|
||||
defaultProvider = CXProvider(configuration: providerConfiguration!)
|
||||
defaultProvider = CXProvider(configuration: configuration)
|
||||
}
|
||||
|
||||
provider.setDelegate(emitter, queue: nil)
|
||||
provider?.setDelegate(emitter, queue: nil)
|
||||
} else {
|
||||
provider.setDelegate(nil, queue: nil)
|
||||
provider?.setDelegate(nil, queue: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -149,9 +145,9 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
let callUpdate = makeCXUpdate(handle: handle,
|
||||
displayName: displayName,
|
||||
hasVideo: hasVideo)
|
||||
provider.reportNewIncomingCall(with: UUID,
|
||||
update: callUpdate,
|
||||
completion: completion)
|
||||
provider?.reportNewIncomingCall(with: UUID,
|
||||
update: callUpdate,
|
||||
completion: completion)
|
||||
}
|
||||
|
||||
@objc public static func reportCallUpdate(with UUID: UUID,
|
||||
@@ -163,7 +159,7 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
let callUpdate = makeCXUpdate(handle: handle,
|
||||
displayName: displayName,
|
||||
hasVideo: hasVideo)
|
||||
provider.reportCall(with: UUID, updated: callUpdate)
|
||||
provider?.reportCall(with: UUID, updated: callUpdate)
|
||||
}
|
||||
|
||||
@objc public static func reportCall(
|
||||
@@ -171,17 +167,17 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
endedAt dateEnded: Date?,
|
||||
reason endedReason: CXCallEndedReason) {
|
||||
guard enabled else { return }
|
||||
provider.reportCall(with: UUID,
|
||||
endedAt: dateEnded,
|
||||
reason: endedReason)
|
||||
provider?.reportCall(with: UUID,
|
||||
endedAt: dateEnded,
|
||||
reason: endedReason)
|
||||
}
|
||||
|
||||
@objc public static func reportOutgoingCall(
|
||||
with UUID: UUID,
|
||||
startedConnectingAt dateStartedConnecting: Date?) {
|
||||
guard enabled else { return }
|
||||
provider.reportOutgoingCall(with: UUID,
|
||||
startedConnectingAt: dateStartedConnecting)
|
||||
provider?.reportOutgoingCall(with: UUID,
|
||||
startedConnectingAt: dateStartedConnecting)
|
||||
}
|
||||
|
||||
@objc public static func reportOutgoingCall(
|
||||
@@ -189,7 +185,7 @@ extension CXCallController: CXCallControllerProtocol {
|
||||
connectedAt dateConnected: Date?) {
|
||||
guard enabled else { return }
|
||||
|
||||
provider.reportOutgoingCall(with: UUID, connectedAt: dateConnected)
|
||||
provider?.reportOutgoingCall(with: UUID, connectedAt: dateConnected)
|
||||
}
|
||||
|
||||
@objc public static func request(
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"noResults": "لم يُعثَر على أي نتيجة بحث متطابقة",
|
||||
"outlookEmail": "بريد مايكروسوفت",
|
||||
"phoneNumbers": "أضف ارقام هواتف",
|
||||
"search": "ابحث عن أشخاص",
|
||||
"searching": "يبحث",
|
||||
"shareInvite": "شارك دعوةً للاجتماع",
|
||||
"shareLink": "شارك رابط الاجتماع لدعوة الأخرين",
|
||||
"shareStream": "شارك رابط البث المباشر للاجتماع",
|
||||
@@ -39,6 +39,28 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "معدل تبادل البيانات منخفض"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "انتهى الاجتماع."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"defaultName": "غرفة الاجتماعات الفرعية رقم {{index}}",
|
||||
"mainRoom": "الغرفة الرئيسية",
|
||||
"actions": {
|
||||
"add": "أضف غرفة جانبية",
|
||||
"autoAssign": "التخصيص التلقائي للغرف الجانبية",
|
||||
"close": "أغلق",
|
||||
"join": "انضم",
|
||||
"leaveBreakoutRoom": "اترك الغرفة الجانبية",
|
||||
"more": "أكثر",
|
||||
"remove": "إزالة",
|
||||
"sendToBreakoutRoom": "أرسل المشارك إلى:"
|
||||
},
|
||||
"notifications": {
|
||||
"joinedTitle": "غرف جانبية",
|
||||
"joined": " الغرفة الجانبيةالانضمام إلى\"{{name}}\"",
|
||||
"joinedMainRoom": "الانضمام للغرفة الرئيسية"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "أضف رابطًا لاجتماع",
|
||||
"confirmAddLink": "هل تريد إضافة رابط جيستسي لهذا الحدث؟",
|
||||
@@ -161,7 +183,7 @@
|
||||
"tryAgainButton": "جرب مرة أخرى في تطبيق الحاسوب"
|
||||
},
|
||||
"defaultLink": "{{url}} مثلًا",
|
||||
"defaultNickname": "محمد عمر مثلًا",
|
||||
"defaultNickname": "محمد علي مثلًا",
|
||||
"deviceError": {
|
||||
"cameraError": "فشل الوصول إلى كاميرتك",
|
||||
"cameraPermission": "خطأ في تحصيل إذن استخدام كاميرتك",
|
||||
@@ -190,8 +212,8 @@
|
||||
"cameraNotSendingData": "لا نتمكن من الوصول إلى كاميرتك. تحقَّق رجاءً إن كان أي تطبيق آخر يستعملها، أو اختر جهازًا آخر من القائمة أو جرب تحميل التطبيق مجدَّدًا.",
|
||||
"cameraNotSendingDataTitle": "يصعب الوصول الوصول إلى كاميرتك",
|
||||
"cameraPermissionDeniedError": "لم تُمنَح إذن استعمال الكاميرا. لا يزال بإمكانك حضور المؤتمر ولكن لن يراك الآخرون. استعمال زر الكاميرا في شريط العنوان لمحاول إصلاح المشكلة.",
|
||||
"cameraUnknownError": "يصعب استعمال الكاميرا لأسباب مجهولة.",
|
||||
"cameraTimeoutError": "تعذر بدء مصدر الفيديو. انتهت المهلة!",
|
||||
"cameraUnknownError": "يصعب استعمال الكاميرا لأسباب مجهولة.",
|
||||
"cameraUnsupportedResolutionError": "لا تدعم كاميرتك دقة الفيديو المطلوبة.",
|
||||
"Cancel": "ِألغ",
|
||||
"close": "أغلق",
|
||||
@@ -249,34 +271,34 @@
|
||||
"micNotSendingData": "اذهب إلى إعدادات حاسوبك لإلغاء كتم المجهار (المايكروفون) وضبط مستواه",
|
||||
"micNotSendingDataTitle": "كتم ضبط الإعدادات لديك المجهار (المايكروفون)",
|
||||
"micPermissionDeniedError": "لم تعط إذن استعمال المجهار (المايكروفون) الخاص بك. ما يزال بإمكانك الإنضمام إلى المؤتمر ولكن دون أن يسمعك الآخرون. جرب استعمال زر الكاميرا في شريط العنوان لإصلاح هذه المشكلة.",
|
||||
"micTimeoutError": "Could not start audio source. Timeout occured!",
|
||||
"micUnknownError": "Cannot use microphone for an unknown reason.",
|
||||
"moderationAudioLabel": "Allow attendees to unmute themselves",
|
||||
"moderationVideoLabel": "Allow attendees to start their video",
|
||||
"micTimeoutError": "تعذر بدء مصدر الصوت. انقضت المهلة!",
|
||||
"micUnknownError": "لا يمكن استخدام الميكروفون لسبب غير معروف.",
|
||||
"moderationAudioLabel": "السماح للحاضرين بإعادة الصوت بأنفسهم",
|
||||
"moderationVideoLabel": "السماح للحاضرين ببدء الفيديو الخاص بهم",
|
||||
"muteEveryoneElseDialog": "بمجرد أن تكتمهم، لن تتمكن نم إلغاء الكتم هذا، ولكن يمكنهم إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteEveryoneElseTitle": "أتريد كتم الجميع باستثناء {{whom}}?",
|
||||
"muteEveryoneDialog": "أمتأكد من رغبتك بكتم الجميع؟ لن تتمكن من إلغاء الكتم ولكن يمكنهم إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteEveryoneDialogModerationOn": "The participants can send a request to speak at any time.",
|
||||
"muteEveryoneDialogModerationOn": "يمكن للمشاركين إرسال طلب للتحدث في أي وقت.",
|
||||
"muteEveryoneTitle": "أتريد كتم الجميع؟",
|
||||
"muteEveryoneElsesVideoDialog": "Once the camera is disabled, you won't be able to turn it back on, but they can turn it back on at any time.",
|
||||
"muteEveryoneElsesVideoTitle": "Stop everyone's video except {{whom}}?",
|
||||
"muteEveryonesVideoDialog": "The participants can turn on their video at any time.",
|
||||
"muteEveryonesVideoDialogModerationOn": "The participants can send a request to turn on their video at any time.",
|
||||
"muteEveryonesVideoDialogOk": "Disable",
|
||||
"muteEveryonesVideoTitle": "Stop everyone's video?",
|
||||
"muteEveryoneElsesVideoDialog": "بمجرد تعطيل الكاميرا ، لن تتمكن من إعادة تشغيلها ، ولكن يمكنهم إعادة تشغيلها في أي وقت.",
|
||||
"muteEveryoneElsesVideoTitle": "وقف فيديو الجميع باستثناء {{whom}}?",
|
||||
"muteEveryonesVideoDialog": "يمكن للمشاركين تشغيل الفيديو الخاص بهم في أي وقت.",
|
||||
"muteEveryonesVideoDialogModerationOn": "يمكن للمشاركين إرسال طلب لتشغيل الفيديو الخاص بهم في أي وقت.",
|
||||
"muteEveryonesVideoDialogOk": "إبطال",
|
||||
"muteEveryonesVideoTitle": "وقف فيديو الجميع؟",
|
||||
"muteEveryoneSelf": "اكتم نفسك أيضًا",
|
||||
"muteEveryoneStartMuted": "البدء مع كتم الجميع من الآن فصاعدًا",
|
||||
"muteParticipantBody": "لن تتكمن من إلغاء كتمهم، ولكن يمكنهم إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteParticipantButton": "كتم",
|
||||
"muteParticipantDialog": "أمتأكد من رغبتك لهذا المشارك؟ لن تتمكن من إلغاء الكتم ولكن يمكنه إلغاء كتم أنفسهم في أي وقت.",
|
||||
"muteParticipantsVideoDialog": "هل أنت متأكد أنك تريد إيقاف تشغيل كاميرا هذا المشارك؟ لن تتمكن من إعادة تشغيل الكاميرا ، ولكن يمكنهم إعادة تشغيلها في أي وقت.",
|
||||
"muteParticipantTitle": "أتريد كتم هذا المشارك؟",
|
||||
"muteParticipantsVideoDialogModerationOn": "هل أنت متأكد أنك تريد إيقاف تشغيل كاميرا هذا المشارك؟ لن تكون قادرًا على إعادة تشغيل الكاميرا ولن يفعلوا ذلك أيضًا.",
|
||||
"muteParticipantsVideoButton": "وقف الكاميرا",
|
||||
"muteParticipantsVideoTitle": "تعطيل الكاميرا لهذا المشارك؟",
|
||||
"muteParticipantsVideoBody": "لن تتمكن من إعادة تشغيل الكاميرا ، ولكن يمكنهم إعادة تشغيلها في أي وقت.",
|
||||
"muteParticipantsVideoBodyModerationOn": "لن تكون قادرًا على إعادة تشغيل الكاميرا ولن يفعلوا ذلك أيضًا.",
|
||||
"noDropboxToken": "لا يوجد رمز مميز صالح لـ Dropbox",
|
||||
"Ok": "تمام",
|
||||
"password": "Password",
|
||||
"password": "كلمه السر",
|
||||
"passwordLabel": "جعل عضو ما هذا الاجتماع مغلقًا. أدخل رجاءً $t(lockRoomPassword) للإنضمام.",
|
||||
"passwordNotSupported": "ضبط اجتماع $t(lockRoomPassword) غير مدعوم.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) غير مدعوم",
|
||||
@@ -318,12 +340,12 @@
|
||||
"sessionRestarted": "إعادة الاتصال من الجسر",
|
||||
"Share": "شارك",
|
||||
"shareAudio": "استمر",
|
||||
"shareAudioTitle" : "How to share audio",
|
||||
"shareAudioWarningTitle": "You need to stop screen sharing before sharing audio",
|
||||
"shareAudioWarningH1": "If you want to share just audio:",
|
||||
"shareAudioWarningD1": "you need to stop screen sharing before sharing your audio.",
|
||||
"shareAudioWarningD2": "you need to restart your screen sharing and check the \"share audio\" option.",
|
||||
"shareMediaWarningGenericH2": "If you want to share your screen and audio",
|
||||
"shareAudioTitle": "كيفية مشاركة الصوت",
|
||||
"shareAudioWarningTitle": "تحتاج إلى إيقاف مشاركة الشاشة قبل مشاركة الصوت",
|
||||
"shareAudioWarningH1": "إذا كنت تريد مشاركة الصوت فقط:",
|
||||
"shareAudioWarningD1": "تحتاج إلى إيقاف مشاركة الشاشة قبل مشاركة الصوت الخاص بك.",
|
||||
"shareAudioWarningD2": "تحتاج إلى إعادة تشغيل مشاركة الشاشة والتحقق من خيار مشاركة الصوت .",
|
||||
"shareMediaWarningGenericH2": "إذا كنت ترغب في مشاركة شاشتك والصوت",
|
||||
"shareVideoLinkError": "زودنا برابط يوتيوب صحيح",
|
||||
"shareVideoTitle": "شارك فيديو",
|
||||
"shareYourScreen": "شارك شاشتك",
|
||||
@@ -334,7 +356,7 @@
|
||||
"shareScreenWarningTitle": "تحتاج إلى إيقاف مشاركة الصوت قبل مشاركة شاشتك",
|
||||
"shareScreenWarningH1": "إذا كنت تريد مشاركة شاشتك فقط:",
|
||||
"shareScreenWarningD1": "تحتاج إلى إيقاف مشاركة الصوت قبل مشاركة شاشتك.",
|
||||
"shareScreenWarningD2": "you need to stop audio sharing, start screen sharing and check the \"share audio\" option.",
|
||||
"shareScreenWarningD2": "تحتاج إلى إيقاف مشاركة الصوت وبدء مشاركة الشاشة وتحديد خيار مشاركة الصوت .",
|
||||
"sharedVideoLinkPlaceholder": "رابط اليوتيوب او رابط الفيديو المباشر",
|
||||
"stopLiveStreaming": "أوقف البث الحي",
|
||||
"stopRecording": "أوقف التسجيل",
|
||||
@@ -357,7 +379,7 @@
|
||||
"viewUpgradeOptionsTitle": "لقد اكتشفت ميزة مميزة!",
|
||||
"WaitForHostMsg": "لم يبدأ المؤتمر <b>{{room}}</b> بعد. إن كنت المضيف والراعي، فنرجو تأكيد ذلك عبر الاستيثاق أو انتظر وصول المضيف رجاءً. ",
|
||||
"WaitForHostMsgWOk": "لم يبدأ المؤتمر <b>{{room}}</b> بعد. إن كنت المضيف والراعي، فاضغط على «تمام» للاستيثاق أو انتظر وصول المضيف رجاءً.",
|
||||
"WaitingForHost": "ننتظر وصول المضيف ...",
|
||||
"WaitingForHostTitle": "في انتظار المضيف ...",
|
||||
"Yes": "نعم",
|
||||
"yourEntireScreen": "شاشتك كاملةً",
|
||||
"remoteUserControls": "ضوابط المستخدم عن بعد لـ {{username}}",
|
||||
@@ -386,15 +408,15 @@
|
||||
"none": "بدون",
|
||||
"uploadedImage": "تحميل الصورة {{index}}",
|
||||
"deleteImage": "حذف صورة",
|
||||
"image1" : "Beach",
|
||||
"image2" : "جدار أبيض محايد",
|
||||
"image3" : "غرفة بيضاء فارغة",
|
||||
"image4" : "مصباح أرضي أسود",
|
||||
"image5" : "جبل",
|
||||
"image6" : "غابة",
|
||||
"image7" : "شروق الشمس",
|
||||
"image1": "شاطئ",
|
||||
"image2": "جدار أبيض محايد",
|
||||
"image3": "غرفة بيضاء فارغة",
|
||||
"image4": "مصباح أرضي أسود",
|
||||
"image5": "جبل",
|
||||
"image6": "غابة",
|
||||
"image7": "شروق الشمس",
|
||||
"desktopShareError": "تعذر إنشاء مشاركة سطح المكتب",
|
||||
"desktopShare":"مشاركة سطح المكتب",
|
||||
"desktopShare": "مشاركة سطح المكتب",
|
||||
"webAssemblyWarning": "WebAssembly غير مدعوم",
|
||||
"backgroundEffectError": "فشل تطبيق تأثير الخلفية."
|
||||
},
|
||||
@@ -423,7 +445,7 @@
|
||||
"country": "البلد",
|
||||
"dialANumber": "إن أردت الإنضمام إلى الإجتماع، اتصل بأحد الأرقام التالية ثم أدخل رمز المرور",
|
||||
"dialInConferenceID": "رمز المرور (PIN):",
|
||||
"copyNumber":"إنسخ الرقم",
|
||||
"copyNumber": "إنسخ الرقم",
|
||||
"dialInNotSupported": "عذرًا، الاتصال غير مدعوم حاليًا.",
|
||||
"dialInNumber": "اتصل:",
|
||||
"dialInSummaryError": "خطأ في تحصيل معلومات الاتصال. جرب مرة أخرى لاحقًا.",
|
||||
@@ -432,11 +454,11 @@
|
||||
"inviteLiveStream": "لمشاهدة البث الحي لهذا الإجتماع، اضط على هذا الرابط: {{url}}",
|
||||
"invitePhone": "للإنضمام من الهاتف، استعمل: {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "أتبحث عن رقم اتصال مختلف؟\nأنظر أرقام الوصول إلى هذا الإجتماع: {{url}}\n\n\nإن كنت أيضًا تتصل عبر غرفة اتصال (room phone)، انضم دون الاتصال بالصوت: {{silentUrl}}",
|
||||
"inviteSipEndpoint": "To join using the SIP address, enter this: {{sipUri}}",
|
||||
"inviteTextiOSPersonal": "{{name}} is inviting you to a meeting.",
|
||||
"inviteTextiOSJoinSilent": "If you are dialing-in through a room phone, use this link to join without connecting to audio: {{silentUrl}}.",
|
||||
"inviteTextiOSInviteUrl": "Click the following link to join: {{inviteUrl}}.",
|
||||
"inviteTextiOSPhone": "To join via phone, use this number: {{number}},,{{conferenceID}}#. If you are looking for a different number, this is the full list: {{didUrl}}.",
|
||||
"inviteSipEndpoint": "للانضمام باستخدام عنوان SIP ، أدخل هذا: {{sipUri}}",
|
||||
"inviteTextiOSPersonal": "{{name}} يدعوك إلى اجتماع.",
|
||||
"inviteTextiOSJoinSilent": "إذا كنت تقوم بالاتصال من خلال هاتف الغرفة ، فاستخدم هذا الارتباط للانضمام دون الاتصال بالصوت: {{silentUrl}}.",
|
||||
"inviteTextiOSInviteUrl": "انقر فوق الرابط التالي للانضمام: {{inviteUrl}}.",
|
||||
"inviteTextiOSPhone": "للانضمام عبر الهاتف ، استخدم هذا الرقم: {{number}},,{{conferenceID}}#. إذا كنت تبحث عن رقم مختلف ، فهذه هي القائمة الكاملة: {{didUrl}}.",
|
||||
"inviteURLFirstPartGeneral": "دُعيِت للإنضمام إلى اجتماع",
|
||||
"inviteURLFirstPartPersonal": "دعاك {{name}} لاجتماع.\n",
|
||||
"inviteURLSecondPart": "\nانضم للاجتماع:\n{{url}}\n",
|
||||
@@ -466,7 +488,7 @@
|
||||
"support": "الدعم",
|
||||
"supportMsg": "إن تكرَّر حصول هذا، تواصل مع"
|
||||
},
|
||||
"jitsiHome": "{{logo}} Logo, links to Homepage",
|
||||
"jitsiHome": "{{logo}} الشعار ، رابط إلى الصفحة الرئيسية",
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "ركز على الفيديو الخاص بك",
|
||||
"focusRemote": "ركز على فيديو مشارك آخر",
|
||||
@@ -501,6 +523,7 @@
|
||||
"expandedPending": "تبدأ عملية البث الحي...",
|
||||
"failedToStart": "فشلت عملية بدء البث الحي",
|
||||
"getStreamKeyManually": "لم نتمكن من الوصول إلى أي بث حي. جرب جلب مفتاح بث حي خاص بك من يوتيوب.",
|
||||
"inProgress": "البث المباشر غير ممكّن على {{email}}. يرجى تمكين البث المباشر أو تسجيل الدخول إلى حساب مع تمكين البث المباشر.",
|
||||
"invalidStreamKey": "يحتمل كون مفتاح البث الحي غير صحيح.",
|
||||
"off": "أُوقِف البث الحي",
|
||||
"offBy": "أوقف {{name}} البث الحي",
|
||||
@@ -508,6 +531,7 @@
|
||||
"onBy": "بدأ {{name}} بثًّا حيًّا",
|
||||
"pending": "بدء بثٍّ حيٍّ",
|
||||
"serviceName": "خدمة البث الحي",
|
||||
"sessionAlreadyActive": "هذه الجلسة قيد التسجيل أو البث المباشر.",
|
||||
"signedInAs": "أنت مسجل حاليًا بصفة:",
|
||||
"signIn": "سجل الدخول عبر حساب غوغل",
|
||||
"signInCTA": "سجل الدخول أو أدخل مفتاح البث الحي الخاص بك من يوتيوب",
|
||||
@@ -551,8 +575,10 @@
|
||||
"lockRoomPasswordUppercase": "كلمة المرور",
|
||||
"me": "أنا",
|
||||
"notify": {
|
||||
"allowAction": "Allow",
|
||||
"allowedUnmute": "You can unmute your microphone, start your camera or share your screen.",
|
||||
"allowAction": "يسمح",
|
||||
"allowedUnmute": "يمكنك إعادة صوت الميكروفون و بدء تشغيل الكاميرا أو مشاركة شاشتك.",
|
||||
"audioUnmuteBlockedTitle": "تم حظر إعادة صوت الميكروفون!",
|
||||
"audioUnmuteBlockedDescription": "تم حظر عملية إلغاء كتم صوت الميكروفون مؤقتًا بسبب قيود النظام.",
|
||||
"connectedOneMember": "انضم {{name}} للاجتماع",
|
||||
"connectedThreePlusMembers": "انضم {{name}} وعدد {{count}} غيره إلى الاجتماع",
|
||||
"connectedTwoMembers": "انضم {{first}} و {{second}} إلى الاجتماع",
|
||||
@@ -564,19 +590,23 @@
|
||||
"invitedThreePlusMembers": "دُعِي {{name}} وعدد {{count}} آخرين",
|
||||
"invitedTwoMembers": "دُعِي {{first}} و {{second}}",
|
||||
"kickParticipant": "طرد {{kicked}} المشارك {{kicker}}",
|
||||
"leftOneMember": "{{name}} غادر الاجتماع",
|
||||
"leftThreePlusMembers": "غادر {{name}} والعديد من الأشخاص الآخرين الاجتماع",
|
||||
"leftTwoMembers": "غادر {{first}} و {{second}} الاجتماع",
|
||||
"me": "أنا",
|
||||
"moderator": "مُنحَت صلاحية رئيس الجلسة!",
|
||||
"muted": "بدأ المحادثة مكتوب الصوت.",
|
||||
"mutedTitle": "مكتوم!",
|
||||
"mutedRemotelyTitle": "كتم {{participantDisplayName}} الصوت لديك!",
|
||||
"mutedRemotelyDescription": "يمكنك إلغاء الكتم متى كنت جاهزًا للتحدث. اكتم الصوت بعد الانتهاء من التحدث لخفض الضجيج أثناء الاجتماع",
|
||||
"videoMutedRemotelyTitle": "Your video has been turned off by {{participantDisplayName}}",
|
||||
"videoMutedRemotelyDescription": "You can always turn it on again.",
|
||||
"passwordRemovedRemotely": "أزال أحد المشاركين {{participantDisplayName}}",
|
||||
"passwordSetRemotely": "ضبط أحد المشاركين $t(lockRoomPasswordUppercase)",
|
||||
"raisedHand": "يريد {{name}} التحدث",
|
||||
"screenShareNoAudio": " Share audio box was not checked in the window selection screen.",
|
||||
"screenShareNoAudioTitle": "Couldn't share system audio!",
|
||||
"screenShareNoAudio": " Share audio box was not checked in the window selection screen.",
|
||||
"screenShareNoAudioTitle": "Couldn't share system audio!",
|
||||
"raisedHands": "{{participantName}} و {{raisedHands}}المزيد من الناس",
|
||||
"screenShareNoAudio": "لم يتم تحديد مربع مشاركة الصوت في شاشة تحديد النافذة.",
|
||||
"screenShareNoAudioTitle": "تعذرت مشاركة صوت النظام!",
|
||||
"somebody": "شخص ما",
|
||||
"startSilentTitle": "انضممت دون مخرج للصوت!",
|
||||
"startSilentDescription": "أنضم مجدَّدًا للاجتماع لتفعيل الصوت",
|
||||
@@ -590,28 +620,31 @@
|
||||
"oldElectronClientDescription1": "يبدو أنَّك تستعمل إصدارًا قديمًا من جيتسي يحوي ثغرة أمنية. تأكد رجاءً من أنَّك حدَّثته إلى ",
|
||||
"oldElectronClientDescription2": "أحدث إصدار",
|
||||
"oldElectronClientDescription3": " الآن!",
|
||||
"moderationInEffectDescription": "Please raise hand if you want to speak.",
|
||||
"moderationInEffectCSDescription": "Please raise hand if you want to share your screen.",
|
||||
"moderationInEffectVideoDescription": "Please raise your hand if you want to start your camera.",
|
||||
"moderationInEffectTitle": "Your microphone is muted by the moderator",
|
||||
"moderationInEffectCSTitle": "Screen sharing is blocked by the moderator",
|
||||
"moderationInEffectVideoTitle": "Your camera is blocked by the moderator",
|
||||
"moderationRequestFromModerator": "The host would like you to unmute",
|
||||
"moderationRequestFromParticipant": "Wants to speak",
|
||||
"moderationStartedTitle": "Moderation started",
|
||||
"moderationStoppedTitle": "Moderation stopped",
|
||||
"moderationToggleDescription": "by {{participantDisplayName}}",
|
||||
"raiseHandAction": "Raise hand",
|
||||
"reactionSounds": "Disable sounds",
|
||||
"groupTitle": "Notifications"
|
||||
"moderationInEffectDescription": "من فضلك ارفع يدك إذا كنت تريد التحدث.",
|
||||
"moderationInEffectCSDescription": "يرجى رفع اليد إذا كنت تريد مشاركة شاشتك.",
|
||||
"moderationInEffectVideoDescription": "يرجى رفع يدك إذا كنت تريد بدء تشغيل الكاميرا.",
|
||||
"moderationInEffectTitle": "تم كتم صوت الميكروفون الخاص بك بواسطة المشرف",
|
||||
"moderationInEffectCSTitle": "تم حظر مشاركة الشاشة من قبل المشرف",
|
||||
"moderationInEffectVideoTitle": "تم حظر الكاميرا الخاصة بك من قبل المشرف",
|
||||
"moderationRequestFromModerator": "المضيف يريد منك إلغاء كتم الصوت",
|
||||
"moderationRequestFromParticipant": "يريد التحدث",
|
||||
"moderationStartedTitle": "بدأ الاشراف",
|
||||
"moderationStoppedTitle": "توقف الاشراف",
|
||||
"moderationToggleDescription": "من {{participantDisplayName}}",
|
||||
"raiseHandAction": "رفع اليد",
|
||||
"reactionSounds": "تعطيل الأصوات",
|
||||
"reactionSoundsForAll": "تعطيل الأصوات للجميع",
|
||||
"groupTitle": "إشعارات",
|
||||
"videoUnmuteBlockedTitle": "تم حظر إعادة الكاميرا!",
|
||||
"videoUnmuteBlockedDescription": "تم حظر عملية إلغاء كتم الكاميرا مؤقتًا بسبب قيود النظام."
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Close",
|
||||
"header": "Participants",
|
||||
"close": "غلق",
|
||||
"header": "مشاركون",
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"lobby": "الردهة ({{count}})",
|
||||
"participantsList": "المشاركون في الاجتماع({{count}})",
|
||||
"waitingLobby": "Waiting in lobby ({{count}})"
|
||||
"waitingLobby": "منتظرون في الردهة ({{count}})"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "السماح للحاضرين بـ:",
|
||||
@@ -620,43 +653,48 @@
|
||||
"blockEveryoneMicCamera": "حظر ميكروفون وكاميرا الجميع",
|
||||
"invite": "قم بدعوة شخص ما",
|
||||
"askUnmute": "اطلب إعادة الصوت",
|
||||
"moreModerationActions": "المزيد من خيارات الاشراف",
|
||||
"moreParticipantOptions": "المزيد من خيارات المشاركين",
|
||||
"mute": "كتم الصوت",
|
||||
"muteAll": "كتم الكل",
|
||||
"muteEveryoneElse": "كتم صوت الآخرين",
|
||||
"stopEveryonesVideo": "أوقف فيديو الجميع",
|
||||
"stopVideo": "أوقف الفيديو",
|
||||
"unblockEveryoneMicCamera": "قم بإلغاء حظر ميكروفون وكاميرا الجميع",
|
||||
"videoModeration": "ابدأ الفيديو الخاص بهم"
|
||||
}
|
||||
"videoModeration": "ابدأ الفيديو الخاص بهم",
|
||||
"moreModerationControls": "المزيد من ضوابط الاشراف"
|
||||
},
|
||||
"search": "بحث"
|
||||
},
|
||||
"passwordSetRemotely": "ضبطها مشارك آخر",
|
||||
"passwordDigitsOnly": "حتى {{number}} عدد",
|
||||
"polls": {
|
||||
"by": "من",
|
||||
"create": {
|
||||
"addOption": "Add option",
|
||||
"answerPlaceholder": "Option {{index}}",
|
||||
"create": "Create a poll",
|
||||
"cancel": "Cancel",
|
||||
"pollOption" : "Poll option {{index}}",
|
||||
"pollQuestion" : "Poll Question",
|
||||
"questionPlaceholder": "Ask a question",
|
||||
"removeOption": "Remove option",
|
||||
"send": "Send"
|
||||
"addOption": "إضافة خيار",
|
||||
"answerPlaceholder": "خيار {{index}}",
|
||||
"create": "إنشاء استطلاع",
|
||||
"cancel": "إلغاء",
|
||||
"pollOption": "خيار الاستطلاع {{index}}",
|
||||
"pollQuestion": "سؤال الاستطلاع",
|
||||
"questionPlaceholder": "طرح سؤال",
|
||||
"removeOption": "إزالة خيار",
|
||||
"send": "أرسل"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "Skip",
|
||||
"submit": "Submit"
|
||||
"skip": "تخطى",
|
||||
"submit": "يقدم"
|
||||
},
|
||||
"results": {
|
||||
"vote": "Vote",
|
||||
"changeVote": "Change vote",
|
||||
"empty": "There are no polls in the meeting yet. Start a poll here!",
|
||||
"hideDetailedResults": "Hide details",
|
||||
"showDetailedResults": "Show details"
|
||||
"vote": "تصويت",
|
||||
"changeVote": "تغيير التصويت",
|
||||
"empty": "لا توجد استطلاعات للرأي في الاجتماع حتى الآن. ابدأ الاستطلاع هنا!",
|
||||
"hideDetailedResults": "أخفِ التفاصيل",
|
||||
"showDetailedResults": "اظهر التفاصيل"
|
||||
},
|
||||
"notification": {
|
||||
"title": "A new poll was added to this meeting",
|
||||
"description": "Open polls tab to vote"
|
||||
"title": "تمت إضافة اقتراع جديد إلى هذا الاجتماع",
|
||||
"description": "افتح علامة تبويب الاقتراع للتصويت"
|
||||
}
|
||||
},
|
||||
"poweredby": "مُشغَّل بوساطة",
|
||||
@@ -699,7 +737,7 @@
|
||||
"errorDialOutFailed": "فشلت عملية الاتصال، للأسف.",
|
||||
"errorDialOutStatus": "خطأ في معرفة حالة الاتصال",
|
||||
"errorMissingName": "أدخل اسمك للدخول للاجتماع",
|
||||
"errorNoPermissions": "You need to enable microphone and camera access",
|
||||
"errorNoPermissions": "تحتاج إلى تمكين الوصول إلى الميكروفون والكاميرا",
|
||||
"errorStatusCode": "فشل الاتصال برمز خطأ: {{status}}",
|
||||
"errorValidation": "فشل التحقق من الرقم",
|
||||
"iWantToDialIn": "أريد الاتصال",
|
||||
@@ -712,8 +750,8 @@
|
||||
"or": "أو",
|
||||
"premeeting": "ما قبل الاجتماع",
|
||||
"showScreen": "تفعيل واجهة ما قبل الاجتماع",
|
||||
"keyboardShortcuts": "تفعيل اختصارات لوحة المفاتيح",
|
||||
"startWithPhone": "البدء مع جهاز الصوت من الجوال",
|
||||
"keyboardShortcuts" : "تفعيل اختصارات لوحة المفاتيح",
|
||||
"screenSharingError": "خطأ في مشاركة الشاشة:",
|
||||
"videoOnlyError": "خطأ في الفيديو:",
|
||||
"videoTrackError": "لم نتمكن من إنشاء ملف الفيديو",
|
||||
@@ -751,13 +789,14 @@
|
||||
"busyTitle": "جميع المسجلين مشغولون حاليًا",
|
||||
"copyLink": "Copy Link",
|
||||
"error": "فشل التسجيل. حاول مرة أخرى.",
|
||||
"errorFetchingLink": "Error fetching recording link.",
|
||||
"errorFetchingLink": "خطأ في جلب رابط التسجيل.",
|
||||
"expandedOff": "أوقٍف التسجيل",
|
||||
"expandedOn": "يُسجَّل الاجتماع الآن",
|
||||
"expandedPending": "بدء التسجيل...",
|
||||
"failedToStart": "فشل بدء التسجيل",
|
||||
"fileSharingdescription": "شارك التسجيل مع المشاركين للاجتماع",
|
||||
"linkGenerated": "We have generated a link to your recording.",
|
||||
"inProgress": "التسجيل أو البث المباشر قيد التقدم",
|
||||
"linkGenerated": "لقد أنشأنا رابطًا لتسجيلك.",
|
||||
"live": "مباشر",
|
||||
"loggedIn": "مُسجَّل باسم {{userName}}",
|
||||
"off": "أوقِف التسجيل",
|
||||
@@ -767,13 +806,14 @@
|
||||
"pending": "التحضير لتسجيل الاجتماع...",
|
||||
"rec": "تسجيل",
|
||||
"serviceDescription": "ستحفظ خدمة التسجيل الفيديو المستجل",
|
||||
"serviceDescriptionCloud": "Cloud recording",
|
||||
"serviceDescriptionCloud": "تسجيل سحابي",
|
||||
"serviceName": "خدمة التسجيل",
|
||||
"sessionAlreadyActive": "هذه الجلسة قيد التسجيل أو البث المباشر.",
|
||||
"signIn": "دخول",
|
||||
"signOut": "خروج",
|
||||
"unavailable": "عجبًا! {{serviceName}} غير متاحة حاليًا. نعمل على حل المشكلة. حاول مرة أخرى لاحقًا.",
|
||||
"unavailableTitle": "التسجيل غير متاح",
|
||||
"uploadToCloud": "Upload to the cloud"
|
||||
"uploadToCloud": "تحميل إلى السحابة"
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "اسحب للتحديث"
|
||||
@@ -817,6 +857,7 @@
|
||||
"sounds": "اصوات",
|
||||
"speakers": "المذياع (مكبر الصوت)",
|
||||
"startAudioMuted": "بدء الجميع مكتومي الصوت",
|
||||
"startReactionsMuted": "كتم رد فعل الصوت للجميع",
|
||||
"startVideoMuted": "بدء الجميع دون فيديو",
|
||||
"talkWhileMuted": "تحدث أثناء كتم الصوت",
|
||||
"title": "الإعدادات"
|
||||
@@ -849,17 +890,24 @@
|
||||
},
|
||||
"speaker": "المتحدث",
|
||||
"speakerStats": {
|
||||
"search": "Search",
|
||||
"search": "بحث",
|
||||
"hours": "{{count}}س",
|
||||
"minutes": "{{count}}د",
|
||||
"name": "الاسم",
|
||||
"seconds": "{{count}}ثا",
|
||||
"speakerStats": "حالة المتحدث",
|
||||
"speakerTime": "وقت المتحدث"
|
||||
"speakerTime": "وقت المتحدث",
|
||||
"happy": "سعيد",
|
||||
"neutral": "حيادي",
|
||||
"sad": "حزين",
|
||||
"surprised": "مندهش",
|
||||
"angry": "غاضب",
|
||||
"fearful": "خائف",
|
||||
"disgusted": "مشمئز"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
"genericTitle": "The meeting needs to use your microphone and camera.",
|
||||
"genericTitle": "يحتاج الاجتماع إلى استخدام الميكروفون والكاميرا.",
|
||||
"title": "يريد {{app}} استعمال المجهار والكاميرا خاصَّتك."
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
@@ -872,10 +920,11 @@
|
||||
"audioOnly": "بدل الصوت فقط",
|
||||
"audioRoute": "اختر جهاز الصوت",
|
||||
"boo": "Boo",
|
||||
"breakoutRoom": "الانضمام / مغادرة غرفة فرعية",
|
||||
"callQuality": "اضبط دقة الفيديو",
|
||||
"cc": "اظهِر/اخفِ الترجمة",
|
||||
"chat": "اظهِر/اخفِ نافذة الدردشة",
|
||||
"clap": "Clap",
|
||||
"clap": "تصفيق",
|
||||
"document": "اظهِر/اخفِ الملف المشارك",
|
||||
"download": "نزِّل التطبيق",
|
||||
"embedMeeting": "ضمِّن الاجتماع",
|
||||
@@ -886,8 +935,8 @@
|
||||
"help": "مساعدة",
|
||||
"invite": "ادعُ آخرين",
|
||||
"kick": "اطرد مشاركًا",
|
||||
"laugh": "Laugh",
|
||||
"like": "Thumbs Up",
|
||||
"laugh": "يضحك",
|
||||
"like": "رفع الإبهام متمنيا النجاح",
|
||||
"lobbyButton": "فعِّل/عطِّل وضع غرفة الانتظار",
|
||||
"localRecording": "اظهِر/اخفِ التحكم بالتسجيل المحلي",
|
||||
"lockRoom": "اظهِر/اخفِ كلمة مرور الاجتماع",
|
||||
@@ -918,7 +967,7 @@
|
||||
"show": "اظهر على المنصة",
|
||||
"silence": "Silence",
|
||||
"speakerStats": "اظهِر/اخفِ حالة المتحدث",
|
||||
"surprised": "Surprised",
|
||||
"surprised": "مندهش",
|
||||
"tileView": "اظهِر/اخفِ عرض العنوان",
|
||||
"toggleCamera": "بدِّل الكاميرا",
|
||||
"toggleFilmstrip": "بدِّل وضع الشريط السينمائي (filmstrip)",
|
||||
@@ -938,7 +987,7 @@
|
||||
"boo": "Boo",
|
||||
"callQuality": "اضبط دقة الفيديو",
|
||||
"chat": "افتح / أغلق الشاشة",
|
||||
"clap": "Clap",
|
||||
"clap": "تصفيق",
|
||||
"closeChat": "أغلق الدردشة",
|
||||
"closeReactionsMenu": "إغلاق قائمة ردود الفعل",
|
||||
"disableReactionSounds": "يمكنك تعطيل أصوات ردود الفعل لهذا الاجتماع",
|
||||
@@ -955,8 +1004,10 @@
|
||||
"hangup": "غادر",
|
||||
"help": "مساعدة",
|
||||
"invite": "ادعُ أحدًا",
|
||||
"laugh": "Laugh",
|
||||
"like": "Thumbs Up",
|
||||
"joinBreakoutRoom": "انضم إلى غرفة الجانبية",
|
||||
"laugh": "يضحك",
|
||||
"leaveBreakoutRoom": "اترك إلى غرفة الجانبية",
|
||||
"like": "رفع الإبهام متمنيا النجاح",
|
||||
"lobbyButtonDisable": "عطِّل وضع غرفة الانتظار",
|
||||
"lobbyButtonEnable": "فعِّل وضع غرفة الانتظار",
|
||||
"login": "ادخل",
|
||||
@@ -982,19 +1033,19 @@
|
||||
"profile": "عدِّل ملفك الشخصي",
|
||||
"raiseHand": "ارفع / اخفض يدك",
|
||||
"raiseYourHand": "ارفع يدك",
|
||||
"reactionBoo": "Send boo reaction",
|
||||
"reactionClap": "Send clap reaction",
|
||||
"reactionLaugh": "Send laugh reaction",
|
||||
"reactionLike": "Send thumbs up reaction",
|
||||
"reactionSilence": "Send silence reaction",
|
||||
"reactionSurprised": "Send surprised reaction",
|
||||
"reactionBoo": "أرسل رد فعل بوو",
|
||||
"reactionClap": "أرسل رد فعل التصفيق",
|
||||
"reactionLaugh": "أرسل رد فعل يضحك",
|
||||
"reactionLike": "إرسال رد فعل ممتاز",
|
||||
"reactionSilence": "أرسل رد فعل الصمت",
|
||||
"reactionSurprised": "أرسل رد فعل متفاجئًا",
|
||||
"security": "خيارات الحماية",
|
||||
"Settings": "الإعدادات",
|
||||
"shareaudio": "مشاركة الصوت",
|
||||
"sharedvideo": "شارك فيديو يوتيوب",
|
||||
"shareRoom": "ادعُ أحدًا",
|
||||
"shortcuts": "اعرض الاختصارات",
|
||||
"silence": "Silence",
|
||||
"silence": "سكوت",
|
||||
"speakerStats": "حالة المتحدث",
|
||||
"startScreenSharing": "ابدأ بمشاركة الشاشة",
|
||||
"startSubtitles": "أظهر الترجمة",
|
||||
@@ -1002,7 +1053,7 @@
|
||||
"stopScreenSharing": "أوقف مشاركة الشاشة",
|
||||
"stopSubtitles": "أخفِ الترجمة",
|
||||
"stopSharedVideo": "أوقف فيديو يوتيوب المشارك",
|
||||
"surprised": "Surprised",
|
||||
"surprised": "مندهش",
|
||||
"talkWhileMutedPopup": "أتحاول التحدث؟ المجهار مكتوم لديك.",
|
||||
"tileViewToggle": "بدِّل عنوان العرض",
|
||||
"toggleCamera": "بدِّل الكاميرا",
|
||||
@@ -1033,7 +1084,7 @@
|
||||
"react-nativeGrantPermissions": "اختر <b><i>السماح</i></b> عندما يطلب المتصفح الأذونات.",
|
||||
"safariGrantPermissions": "اختر <b><i>تمام</i></b> عندما يطلب المتصفح الأذونات."
|
||||
},
|
||||
"volumeSlider": "Volume slider",
|
||||
"volumeSlider": "مستوى الصوت",
|
||||
"videoSIPGW": {
|
||||
"busy": "نعمل على تحرير الموارد. حاول مرة أخرى لاحقًا بعد بضعة دقائق.",
|
||||
"busyTitle": "خدمة الغرفة مشغولة حاليًا",
|
||||
@@ -1045,7 +1096,10 @@
|
||||
"pending": "دعي {{displayName}} مسبقًا"
|
||||
},
|
||||
"videoStatus": {
|
||||
"adjustFor": "ضبط ل:",
|
||||
"audioOnly": "صوت",
|
||||
"bestPerformance": "أفضل أداء",
|
||||
"highestQuality": "اعلى جودة",
|
||||
"audioOnlyExpanded": "أنت في وضع معدَّل البيانات المتبادلة المنخفض. الصوت ومشاركة الشاشة هو المتاح فقط في هذا الوضع.",
|
||||
"callQuality": "جودة الفيديو",
|
||||
"hd": "دقة عالية",
|
||||
@@ -1056,6 +1110,7 @@
|
||||
"ld": "دقة منخفضة",
|
||||
"ldTooltip": "عرض فيديو بدقة منخفضة",
|
||||
"lowDefinition": "دقة منخفضة",
|
||||
"performanceSettings": "إعدادات الأداء",
|
||||
"sd": "دقة قياسية",
|
||||
"sdTooltip": "عرض فيديو بدقة قياسية",
|
||||
"standardDefinition": "دقة قياسية"
|
||||
@@ -1078,7 +1133,7 @@
|
||||
"videomute": "أوقف المشارك الكاميرا"
|
||||
},
|
||||
"welcomepage": {
|
||||
"addMeetingName": "Add Meeting name",
|
||||
"addMeetingName": "أضف اسم الاجتماع",
|
||||
"accessibilityLabel": {
|
||||
"join": "انقر للمشاركة",
|
||||
"roomname": "أدخل اسم الغرفة"
|
||||
@@ -1095,14 +1150,14 @@
|
||||
"getHelp": "أريد مساعدة",
|
||||
"go": "ابدأ",
|
||||
"goSmall": "ابدأ",
|
||||
"headerTitle": "Jitsi Meet",
|
||||
"headerSubtitle": "Secure and high quality meetings",
|
||||
"headerTitle": "حِـــوار جيتسي",
|
||||
"headerSubtitle": "آمــن وبنـوعيـة فـائقـة الجـودة",
|
||||
"info": "معلومات",
|
||||
"join": "أنشئ / انضم",
|
||||
"jitsiOnMobile": "Jitsi on mobile – download our apps and start a meeting from anywhere",
|
||||
"mobileDownLoadLinkIos": "Download mobile app for iOS",
|
||||
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
|
||||
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
|
||||
"jitsiOnMobile": "جيتسي على الهاتف المحمول - حمّل تطبيقاتنا وابدأ اجتماعًا من أي مكان",
|
||||
"mobileDownLoadLinkIos": "قم بتنزيل تطبيق الهاتف لنظام iOS",
|
||||
"mobileDownLoadLinkAndroid": "قم بتنزيل تطبيق الهاتف لنظام أندرويد",
|
||||
"mobileDownLoadLinkFDroid": "قم بتنزيل تطبيق الجوال لـ F-Droid",
|
||||
"moderatedMessage": "أو a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">احجز رابط لاجتماع</a> إن كنت رئيس الجلسة الوحيد فقط.",
|
||||
"privacy": "الخصوصية",
|
||||
"recentList": "الجديد",
|
||||
@@ -1113,28 +1168,34 @@
|
||||
"roomname": "أدخل اسم الغرفة",
|
||||
"roomnameHint": "أدخل اسم أو رابط الغرفة التي تريد الانضمام إليها. يمكنك إنشاء اسم جديد لترسله إلى من تريد أن تجتمع معهم.",
|
||||
"sendFeedback": "أبدِ رأيك",
|
||||
"startMeeting": "Start meeting",
|
||||
"startMeeting": "إبدأ الحـِوار",
|
||||
"terms": "الشروط",
|
||||
"title": "منصة عقد مؤتمرات واجتماعات آمنة وكاملة المزايا ومجانية بالمطلق",
|
||||
"logo":{
|
||||
"calendar":"Calendar logo",
|
||||
"microsoftLogo":"Microsoft logo",
|
||||
"logoDeepLinking":"Jitsi meet logo",
|
||||
"desktopPreviewThumbnail":"Desktop preview thumbnail",
|
||||
"googleLogo":"Google Logo",
|
||||
"policyLogo":"Policy logo"
|
||||
"logo": {
|
||||
"calendar": "شعار التقويم",
|
||||
"microsoftLogo": "شعار مايكروسوفت",
|
||||
"logoDeepLinking": "شعار جيتسي",
|
||||
"desktopPreviewThumbnail": "صورة مصغرة لمعاينة سطح المكتب",
|
||||
"googleLogo": "شعار كوكل",
|
||||
"policyLogo": "شعار السياسة"
|
||||
}
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "ادعُ آخرين",
|
||||
"youAreAlone": "أنت بمفردك في الاجتماع"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "مصطلحات"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "خصوصية"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "مركز المساعدة"
|
||||
},
|
||||
"lobby": {
|
||||
"admit": "Admit",
|
||||
"admitAll": "Admit all",
|
||||
"admit": "سمح بالدخول",
|
||||
"admitAll": "سمح للجميع بالدخول",
|
||||
"knockingParticipantList": "تنبيه قائمة المشاركين",
|
||||
"allow": "اسمح",
|
||||
"backToKnockModeButton": "لا يوجد كلمة مرور، اطلب الإذن بالدخول بدلًا من ذلك.",
|
||||
@@ -1147,7 +1208,7 @@
|
||||
"enableDialogText": "يحمي وضع الانتظار غرفة الاجتماع عبر منح رئيس الجلسة إمكانية الموافقة على انضمام المشاركين.",
|
||||
"enterPasswordButton": "أدخل كلمة المرور لهذا الاجتماع",
|
||||
"enterPasswordTitle": "أدخل كلمة المرور للدخول للاجتماع",
|
||||
"errorMissingPassword": "Please enter the meeting password",
|
||||
"errorMissingPassword": "الرجاء إدخال كلمة مرور الاجتماع",
|
||||
"invalidPassword": "كلمة مرور غير صحيحة",
|
||||
"joiningMessage": "ستتمكن من الانضمام للاجتماع بعد الموافقة على طلبك",
|
||||
"joinWithPasswordMessage": "الرجاء الانتظار أثناء محاولة الدخول دون كلمة مرور...",
|
||||
@@ -1166,7 +1227,7 @@
|
||||
"passwordField": "أدخل كلمة الدخول إلى الاجتماع",
|
||||
"passwordJoinButton": "انضم",
|
||||
"reject": "رفض",
|
||||
"rejectAll": "Reject all",
|
||||
"rejectAll": "رفض الكل",
|
||||
"toggleLabel": "فعِّل غرفة الانتظار"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -488,8 +488,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Якое адлюстроўваецца імя",
|
||||
"setEmailInput": "Калі ласка, увядзіце e-mail",
|
||||
"setEmailLabel": "E-mail для Gravatar",
|
||||
"setEmailInput": "Калі ласка, увядзіце email",
|
||||
"setEmailLabel": "Email для Gravatar",
|
||||
"title": "Профіль"
|
||||
},
|
||||
"raisedHand": "Хоча гаварыць",
|
||||
@@ -558,7 +558,7 @@
|
||||
"disableCallIntegration": "Адключыць убудаваную інтэграцыю выклікаў",
|
||||
"disableP2P": "Адключыць рэжым Peer-To-Peer",
|
||||
"displayName": "Якое адлюстроўваецца імя",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Налады",
|
||||
"profileSection": "Профіль",
|
||||
"serverURL": "Адрас сервера",
|
||||
|
||||
@@ -292,6 +292,29 @@
|
||||
"documentSharing": {
|
||||
"title": "Document compartit"
|
||||
},
|
||||
"virtualBackground": {
|
||||
"apply": "Aplicar",
|
||||
"title": "Fons Virtuals",
|
||||
"blur": "Difuminos",
|
||||
"slightBlur": "Lleu Difuminos",
|
||||
"removeBackground": "Elimina el Fons",
|
||||
"addBackground": "Afegeix fons",
|
||||
"pleaseWait": "Si us plau, espereu...",
|
||||
"none": "Cap",
|
||||
"uploadedImage": "Imatge carregada {{index}}",
|
||||
"deleteImage": "Esborra la imatge",
|
||||
"image1" : "Platja",
|
||||
"image2" : "Paret blanca neutra",
|
||||
"image3" : "Habitació blanca buida",
|
||||
"image4" : "Llum de peu negre",
|
||||
"image5" : "Muntanya",
|
||||
"image6" : "Bosc ",
|
||||
"image7" : "Sortida del sol",
|
||||
"desktopShareError": "No s'ha pogut crear l'escriptori compartit",
|
||||
"desktopShare":"Compartir escriptori",
|
||||
"webAssemblyWarning": "no compatible",
|
||||
"backgroundEffectError": "No s'ha pogut aplicar l'efecte de fons."
|
||||
},
|
||||
"feedback": {
|
||||
"average": "Mitjana",
|
||||
"bad": "Dolenta",
|
||||
@@ -464,6 +487,32 @@
|
||||
"newDeviceAudioTitle": "S'ha detectat un aparell d'àudio nou",
|
||||
"newDeviceAction": "Usa"
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Tanca",
|
||||
"header": "Participants",
|
||||
"headings": {
|
||||
"lobby": "Sala d'espera ({{count}})",
|
||||
"participantsList": "Participants de la reunió ({{count}})",
|
||||
"waitingLobby": "Esperant al vestíbul ({{count}})"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "Permetre als assistents:",
|
||||
"allowVideo": "Permet el vídeo",
|
||||
"audioModeration": "Deixeu de silenciar ells mateixos",
|
||||
"blockEveryoneMicCamera": "Bloqueja el micròfon i la càmera de tothom",
|
||||
"invite": "Convida algú",
|
||||
"askUnmute": "Demana que es deixi de silenciare",
|
||||
"moreModerationActions": "Més opcions de moderació",
|
||||
"mute": "Silenciar",
|
||||
"muteAll": "Silencia tot",
|
||||
"muteEveryoneElse": "Silencia a tots els altres",
|
||||
"stopEveryonesVideo": "Atura el vídeo de tothom",
|
||||
"stopVideo": "Atura el vídeo",
|
||||
"unblockEveryoneMicCamera": "Desbloqueja el micròfon i la càmera de tothom",
|
||||
"videoModeration": "Comença el seu vídeo"
|
||||
},
|
||||
"search": "Cerca participants"
|
||||
},
|
||||
"passwordSetRemotely": "establerta per una altre participant",
|
||||
"passwordDigitsOnly": "Fins a {{number}} dígits",
|
||||
"poweredby": "funciona amb",
|
||||
@@ -606,12 +655,17 @@
|
||||
"moreOptions": "Mostra més opcions",
|
||||
"mute": "Activa o desactiva el silenci de l'àudio",
|
||||
"muteEveryone": "Silencia tothom",
|
||||
"muteEveryoneElse": "Silencia a tots els altres participants",
|
||||
"muteEveryonesVideo": "Desactiva el vídeo de tothom",
|
||||
"muteEveryoneElsesVideo": "Desactiva el vídeo a tots els altres participants",
|
||||
"participants": "Participants",
|
||||
"pip": "Activa o desactiva el mode imatge en imatge",
|
||||
"privateMessage": "Envia un missatge privat",
|
||||
"profile": "Edita el perfil",
|
||||
"raiseHand": "Aixeca o abaixa la mà",
|
||||
"recording": "Activa o desactiva l'enregistrament",
|
||||
"remoteMute": "Silencia el participant",
|
||||
"remoteVideoMute": "Desactiva la càmera del participant",
|
||||
"Settings": "Activa o desactiva la configuració",
|
||||
"sharedvideo": "Activa o desactiva la compartició de vídeo",
|
||||
"shareRoom": "Convida-hi algú",
|
||||
@@ -623,9 +677,14 @@
|
||||
"toggleCamera": "Activa o desactiva la càmera",
|
||||
"videomute": "Activa o desactiva el vídeo",
|
||||
"videoblur": "Activa o desactiva el difuminat",
|
||||
"selectBackground": "Seleccioneu Fons",
|
||||
"expand": "Ampliar",
|
||||
"collapse": "Col·lapse",
|
||||
"toggleFilmstrip": "Activa o desactiva la tira"
|
||||
},
|
||||
"addPeople": "Afegeix persones a la trucada",
|
||||
"audioSettings": "Configuració d'àudio",
|
||||
"videoSettings": "Configuració de vídeo",
|
||||
"audioOnlyOff": "Desactiva el mode de poc ample de banda",
|
||||
"audioOnlyOn": "Activa el mode de poc ample de banda",
|
||||
"audioRoute": "Seleccioneu l'aparell de so",
|
||||
@@ -734,13 +793,18 @@
|
||||
"standardDefinition": "Definició estàndard"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"connectionInfo": "Informació de connexió",
|
||||
"domute": "Silencia",
|
||||
"domuteVideo": "Desactiva la càmera",
|
||||
"domuteOthers": "Silencia a tots els altres participants",
|
||||
"domuteVideoOfOthers": "Desactiva la càmera de tots els altres",
|
||||
"flip": "Capgira",
|
||||
"grantModerator": "Concedir drets de moderador",
|
||||
"kick": "Expulsa",
|
||||
"moderator": "Moderador",
|
||||
"mute": "El participant és silenciat",
|
||||
"muted": "Silenciat",
|
||||
"videoMuted": "Càmera desactivada",
|
||||
"remoteControl": "Inicia o atura el control remot",
|
||||
"show": "Mostra-ho en l'escena",
|
||||
"videomute": "El participant ha aturat la càmera"
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
"copyStream": "Zkopírovat odkaz na živý přenos",
|
||||
"countryNotSupported": "Toto místo zatím nepodporujeme.",
|
||||
"countryReminder": "Voláte mimo USA? Nezapomeňte začít kódem své země!",
|
||||
"defaultEmail": "Vás výchozí e-mail",
|
||||
"defaultEmail": "Vás výchozí email",
|
||||
"disabled": "Nemůžete pozvat lidi.",
|
||||
"failedToAdd": "Nepodařilo se přidat účastníky",
|
||||
"footerText": "Vytáčení je zakázáno.",
|
||||
"googleEmail": "E-mail Google",
|
||||
"googleEmail": "Email Google",
|
||||
"inviteMoreHeader": "Jste v setkání sám/sama",
|
||||
"inviteMoreMailSubject": "Přidejte se k setkání {{appName}}",
|
||||
"inviteMorePrompt": "Pozvat další lidi",
|
||||
@@ -21,7 +21,7 @@
|
||||
"loadingPeople": "Hledání lidí pro pozvání",
|
||||
"noResults": "Žádné odpovídající výsledky vyhledávání",
|
||||
"noValidNumbers": "Zadejte telefonní číslo",
|
||||
"outlookEmail": "E-mail Outlook",
|
||||
"outlookEmail": "Email Outlook",
|
||||
"searchNumbers": "Přidat telefonní čísla",
|
||||
"searchPeople": "Hledat lidi",
|
||||
"searchPeopleAndNumbers": "Hledat lidi nebo přidat jejich telefonní čísla",
|
||||
@@ -30,7 +30,7 @@
|
||||
"shareStream": "Sdílet odkaz na živý přenos",
|
||||
"telephone": "Telefonní číslo: {{number}}",
|
||||
"title": "Pozvěte lidi na toto setkání",
|
||||
"yahooEmail": "E-mail Yahoo"
|
||||
"yahooEmail": "Email Yahoo"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -462,7 +462,7 @@
|
||||
"dialogTitle": "Mód předsálí",
|
||||
"disableDialogContent": "Je zapnutý mód předsálí. Zajišťuje, aby do setkání nemohli vstoupit nežádoucí účastníci. Chcete jej vypnout?",
|
||||
"disableDialogSubmit": "Vypnout",
|
||||
"emailField": "Zadejte svoje e-mailovou adresu",
|
||||
"emailField": "Zadejte svoje emailovou adresu",
|
||||
"enableDialogPasswordField": "Nastavte heslo (volitelně)",
|
||||
"enableDialogSubmit": "Zapnout",
|
||||
"enableDialogText": "Mód předsálí vám umožňuje zabezpečit setkání tím, že se lidé mohou připojit až po formálním schválení moderátorem.",
|
||||
@@ -637,8 +637,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Nastavte si jméno",
|
||||
"setEmailInput": "Zadejte e-mail",
|
||||
"setEmailLabel": "Nastavte si e-mail vašeho Gravataru",
|
||||
"setEmailInput": "Zadejte email",
|
||||
"setEmailLabel": "Nastavte si email vašeho Gravataru",
|
||||
"title": "Profil"
|
||||
},
|
||||
"raisedHand": "Chtěl(a) bych mluvit",
|
||||
@@ -718,7 +718,7 @@
|
||||
"disableCrashReportingWarning": "Určitě chcete vypnout hlášení o pádu? Nastavení se uplatní, až restartujete aplikaci.",
|
||||
"disableP2P": "Vypnout mód Peer-To-Peer",
|
||||
"displayName": "Zobrazované jméno",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Nastavení",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "URL serveru",
|
||||
|
||||
@@ -39,6 +39,28 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "Geringe Bandbreite"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "Konferenz beendet."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"defaultName": "Breakout-Raum #{{index}}",
|
||||
"mainRoom": "Hauptraum",
|
||||
"actions": {
|
||||
"add": "Breakout-Raum hinzufügen",
|
||||
"autoAssign": "Automatisch auf Breakout-Räume verteilen",
|
||||
"close": "Schließen",
|
||||
"join": "Teilnehmen",
|
||||
"leaveBreakoutRoom": "Breakout-Raum verlassen",
|
||||
"more": "Mehr",
|
||||
"remove": "Entfernen",
|
||||
"sendToBreakoutRoom": "Anwesende in Breakout-Raum verschieben:"
|
||||
},
|
||||
"notifications": {
|
||||
"joinedTitle": "Breakout-Räume",
|
||||
"joined": "Breakout-Raum \"{{name}}\" betreten",
|
||||
"joinedMainRoom": "Hauptraum betreten"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Konferenzlink hinzufügen",
|
||||
"confirmAddLink": "Möchten Sie einen Jitsi-Link zu diesem Termin hinzufügen?",
|
||||
@@ -501,6 +523,7 @@
|
||||
"expandedPending": "Livestream wird gestartet …",
|
||||
"failedToStart": "Livestream konnte nicht gestartet werden",
|
||||
"getStreamKeyManually": "Wir waren nicht in der Lage, Livestreams abzurufen. Versuchen Sie, Ihren Livestream-Schlüssel von YouTube zu erhalten.",
|
||||
"inProgress": "Livestreaming gestartet",
|
||||
"invalidStreamKey": "Der Livestream-Schlüssel ist u. U. falsch.",
|
||||
"off": "Livestream gestoppt",
|
||||
"offBy": "{{name}} stoppte den Livestream",
|
||||
@@ -508,6 +531,7 @@
|
||||
"onBy": "{{name}} startete den Livestream",
|
||||
"pending": "Livestream wird gestartet …",
|
||||
"serviceName": "Livestreaming-Dienst",
|
||||
"sessionAlreadyActive": "Diese Konferenz wird bereits als Livestream übertragen.",
|
||||
"signedInAs": "Sie sind derzeit angemeldet als:",
|
||||
"signIn": "Mit Google anmelden",
|
||||
"signInCTA": "Anmelden oder den Streamschlüssel des YouTube-Livestreams eingeben.",
|
||||
@@ -553,6 +577,8 @@
|
||||
"notify": {
|
||||
"allowAction": "Erlauben",
|
||||
"allowedUnmute": "Sie können die Stummschaltung aufheben, Ihre Kamera einschalten oder Ihren Bildschirm teilen.",
|
||||
"audioUnmuteBlockedTitle": "Stummschaltung kann nicht aufgehoben werden!",
|
||||
"audioUnmuteBlockedDescription": "Díe Stummschaltung kann aus Überlastungsschutzgründen temporär nicht aufgehoben werden.",
|
||||
"connectedOneMember": "{{name}} nimmt am Meeting teil",
|
||||
"connectedThreePlusMembers": "{{name}} und {{count}} andere Personen nehmen am Meeting teil",
|
||||
"connectedTwoMembers": "{{first}} und {{second}} nehmen am Meeting teil",
|
||||
@@ -564,6 +590,9 @@
|
||||
"invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen",
|
||||
"invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen",
|
||||
"kickParticipant": "{{kicked}} wurde von {{kicker}} ausgewiesen",
|
||||
"leftOneMember": "{{name}} hat die Konferenz verlassen",
|
||||
"leftThreePlusMembers": "{{name}} und Weitere haben die Konferenz verlassen",
|
||||
"leftTwoMembers": "{{first}} und {{second}} haben die Konferenz verlassen",
|
||||
"me": "Ich",
|
||||
"moderator": "Moderationsrechte vergeben!",
|
||||
"muted": "Der Konferenz wurde stumm beigetreten.",
|
||||
@@ -575,6 +604,7 @@
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) von einer anderen Person entfernt",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) von einer anderen Person gesetzt",
|
||||
"raisedHand": "{{name}} möchte sprechen.",
|
||||
"raisedHands": "{{participantName}} und {{raisedHands}} weitere möchten sprechen",
|
||||
"screenShareNoAudio": "Die Option \"Audio freigeben\" wurde bei der Auswahl des Fensters nicht ausgewählt.",
|
||||
"screenShareNoAudioTitle": "Share audio was not checked",
|
||||
"somebody": "Jemand",
|
||||
@@ -603,7 +633,10 @@
|
||||
"moderationToggleDescription": "von {{participantDisplayName}}",
|
||||
"raiseHandAction": "Melden",
|
||||
"reactionSounds": "Interaktionstöne deaktivieren",
|
||||
"groupTitle": "Benachrichtigungen"
|
||||
"reactionSoundsForAll": "Interaktionstöne für alle deaktivieren",
|
||||
"groupTitle": "Benachrichtigungen",
|
||||
"videoUnmuteBlockedTitle": "Kamera kann nicht aktiviert werden!",
|
||||
"videoUnmuteBlockedDescription": "Die Kamera kann aus Überlastungsschutzgründen temporär nicht eingeschaltet werden."
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Schließen",
|
||||
@@ -620,6 +653,8 @@
|
||||
"blockEveryoneMicCamera": "Kamera und Mikrofon von allen sperren",
|
||||
"invite": "Person einladen",
|
||||
"askUnmute": "Anfragen, Stummschaltung aufzuheben",
|
||||
"moreModerationActions": "Weitere Moderationsoptionen",
|
||||
"moreParticipantOptions": "Mehr Optionen für Anwesende",
|
||||
"mute": "Stummschalten",
|
||||
"muteAll": "Alle stummschalten",
|
||||
"muteEveryoneElse": "Alle anderen stummschalten",
|
||||
@@ -627,11 +662,13 @@
|
||||
"stopVideo": "Kamera ausschalten",
|
||||
"unblockEveryoneMicCamera": "Kamera und Mikrofon von allen entsperren",
|
||||
"videoModeration": "Kamera einschalten"
|
||||
}
|
||||
},
|
||||
"search": "Suche Anwesende"
|
||||
},
|
||||
"passwordSetRemotely": "von einer anderen Person gesetzt",
|
||||
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
||||
"polls": {
|
||||
"by": "Von {{ name }}",
|
||||
"create": {
|
||||
"addOption": "Antwort hinzufügen",
|
||||
"answerPlaceholder": "Antwort {{index}}",
|
||||
@@ -757,6 +794,7 @@
|
||||
"expandedPending": "Aufzeichnung wird gestartet…",
|
||||
"failedToStart": "Die Aufnahme konnte nicht gestartet werden",
|
||||
"fileSharingdescription": "Aufzeichnung mit den Personen der Konferenz teilen",
|
||||
"inProgress": "Aufzeichnung gestartet",
|
||||
"linkGenerated": "Link zur Aufzeichnung wurde generiert.",
|
||||
"live": "LIVE",
|
||||
"loggedIn": "Als {{userName}} angemeldet",
|
||||
@@ -769,6 +807,7 @@
|
||||
"serviceDescription": "Ihre Aufzeichnung wird vom Aufzeichnungsdienst gespeichert",
|
||||
"serviceDescriptionCloud": "Cloud-Aufzeichnung",
|
||||
"serviceName": "Aufnahmedienst",
|
||||
"sessionAlreadyActive": "Diese Konferenz wird bereits aufgezeichnet.",
|
||||
"signIn": "Anmelden",
|
||||
"signOut": "Abmelden",
|
||||
"unavailable": "Oh! Der {{serviceName}} ist aktuell nicht verfügbar. Wir arbeiten an der Behebung des Problems. Bitte versuchen Sie es später noch einmal.",
|
||||
@@ -817,6 +856,7 @@
|
||||
"sounds": "Hinweistöne",
|
||||
"speakers": "Lautsprecher",
|
||||
"startAudioMuted": "Alle Personen treten stummgeschaltet bei",
|
||||
"startReactionsMuted": "Interaktionstöne für alle deaktivieren",
|
||||
"startVideoMuted": "Alle Personen treten ohne Video bei",
|
||||
"talkWhileMuted": "Wenn bei Stummschaltung gesprochen wird",
|
||||
"title": "Einstellungen"
|
||||
@@ -855,7 +895,14 @@
|
||||
"name": "Name",
|
||||
"seconds": "{{count}} Sek.",
|
||||
"speakerStats": "Sprechstatistik",
|
||||
"speakerTime": "Sprechzeit"
|
||||
"speakerTime": "Sprechzeit",
|
||||
"happy": "Fröhlich",
|
||||
"neutral": "Neutral",
|
||||
"sad": "Traurig",
|
||||
"surprised": "Überrascht",
|
||||
"angry": "Sauer",
|
||||
"fearful": "Ängstlich",
|
||||
"disgusted": "Angeekelt"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -872,6 +919,7 @@
|
||||
"audioOnly": "„Nur Audio“ ein-/ausschalten",
|
||||
"audioRoute": "Audiogerät auswählen",
|
||||
"boo": "Buhen",
|
||||
"breakoutRoom": "Breakout-Räume betreten/verlassen",
|
||||
"callQuality": "Qualitätseinstellungen",
|
||||
"cc": "Untertitel ein-/ausschalten",
|
||||
"chat": "Chatfenster öffnen / schließen",
|
||||
@@ -903,7 +951,7 @@
|
||||
"pip": "Bild-in-Bild-Modus ein-/ausschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
"raiseHand": "Hand erheben / senken",
|
||||
"raiseHand": "Hand heben",
|
||||
"reactionsMenu": "Interaktionsmenü öffnen / schließen",
|
||||
"recording": "Aufzeichnung ein-/ausschalten",
|
||||
"remoteMute": "Personen stummschalten",
|
||||
@@ -940,7 +988,7 @@
|
||||
"chat": "Chat öffnen / schließen",
|
||||
"clap": "Klatschen",
|
||||
"closeChat": "Chat schließen",
|
||||
"closeReactionsMenu": "Interationsmenü schließen",
|
||||
"closeReactionsMenu": "Interaktionsmenü schließen",
|
||||
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
|
||||
"documentClose": "Geteiltes Dokument schließen",
|
||||
"documentOpen": "Geteiltes Dokument öffnen",
|
||||
@@ -955,7 +1003,9 @@
|
||||
"hangup": "Konferenz verlassen",
|
||||
"help": "Hilfe",
|
||||
"invite": "Personen einladen",
|
||||
"joinBreakoutRoom": "In Breakout-Raum wechseln",
|
||||
"laugh": "Lachen",
|
||||
"leaveBreakoutRoom": "Breakout-Raum verlassen",
|
||||
"like": "Daumen hoch",
|
||||
"lobbyButtonDisable": "Lobbymodus deaktivieren",
|
||||
"lobbyButtonEnable": "Lobbymodus aktivieren",
|
||||
@@ -975,12 +1025,12 @@
|
||||
"noisyAudioInputTitle": "Ihr Mikrofon scheint lärmintensiv zu sein!",
|
||||
"noisyAudioInputDesc": "Es klingt, als ob Ihr Mikrofon Störgeräusche verursacht. Bitte überlegen Sie, ob Sie das Gerät stummschalten oder austauschen wollen.",
|
||||
"openChat": "Chat öffnen",
|
||||
"openReactionsMenu": "Interationsmenü öffnen",
|
||||
"openReactionsMenu": "Interaktionsmenü öffnen",
|
||||
"participants": "Anwesende",
|
||||
"pip": "Bild-in-Bild-Modus einschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
"raiseHand": "Hand erheben / senken",
|
||||
"raiseHand": "Hand heben",
|
||||
"raiseYourHand": "Melden",
|
||||
"reactionBoo": "Buhen senden",
|
||||
"reactionClap": "Klatschen senden",
|
||||
@@ -1045,7 +1095,10 @@
|
||||
"pending": "{{displayName}} wurde eingeladen"
|
||||
},
|
||||
"videoStatus": {
|
||||
"adjustFor": "Einstellen für:",
|
||||
"audioOnly": "AUD",
|
||||
"bestPerformance": "Beste Leistung",
|
||||
"highestQuality": "Höchste Qualität",
|
||||
"audioOnlyExpanded": "Sie befinden sich im Modus „Nur Audio“. Dieser Modus benötigt weniger Bandbreite, Sie sehen jedoch nicht die Videos der anderen.",
|
||||
"callQuality": "Videoqualität",
|
||||
"hd": "HD",
|
||||
@@ -1056,6 +1109,7 @@
|
||||
"ld": "LD",
|
||||
"ldTooltip": "Video wird in niedriger Auflösung angezeigt",
|
||||
"lowDefinition": "Niedrige Auflösung",
|
||||
"performanceSettings": "Qualitätseinstellungen",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Video wird in Standardauflösung angezeigt",
|
||||
"standardDefinition": "Standardauflösung"
|
||||
@@ -1129,6 +1183,12 @@
|
||||
"button": "Andere einladen",
|
||||
"youAreAlone": "Nur Sie sind in dieser Konferenz"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "Nutzungsbedingungen"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "Datenschutz"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Hilfecenter"
|
||||
},
|
||||
|
||||
@@ -544,7 +544,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Ρυθμίστε το όνομα εμφάνισής σας",
|
||||
"setEmailInput": "Εισάγετε το e-mail",
|
||||
"setEmailInput": "Εισάγετε το email",
|
||||
"setEmailLabel": "Ρυθμίστε το gravatar email",
|
||||
"title": "Προφίλ"
|
||||
},
|
||||
@@ -621,7 +621,7 @@
|
||||
"disableCallIntegration": "Απενεργοποίηση ολοκλήρωσης εγγενούς κλήσης",
|
||||
"disableP2P": "Απενεργοποίηση λειτουργίας Peer-to-Peer",
|
||||
"displayName": "Εμφανιζόμενο όνομα",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Ρυθμίσεις",
|
||||
"profileSection": "Προφίλ",
|
||||
"serverURL": "Διεύθυνση URL του διακομιστή",
|
||||
|
||||
@@ -480,8 +480,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Set your display name",
|
||||
"setEmailInput": "Enter e-mail",
|
||||
"setEmailLabel": "Set your Gravatar e-mail",
|
||||
"setEmailInput": "Enter email",
|
||||
"setEmailLabel": "Set your Gravatar email",
|
||||
"title": "Profile"
|
||||
},
|
||||
"recording": {
|
||||
|
||||
@@ -373,11 +373,11 @@
|
||||
"busyTitle": "Kõik ülekandjad on hetkel hõivatud",
|
||||
"changeSignIn": "Vaheta kontot.",
|
||||
"choose": "Vali otseülekanne",
|
||||
"chooseCTA": "Vali ülekande viis. Oled sisse logitud e-mailiga {{email}}.",
|
||||
"chooseCTA": "Vali ülekande viis. Oled sisse logitud emailiga {{email}}.",
|
||||
"enterStreamKey": "Sisesta siia oma YouTube’i ülekande võti.",
|
||||
"error": "Otseülekanne ebaõnnestus. Proovi uuesti.",
|
||||
"errorAPI": "YouTube’i kanaliga ühendumisel tekkis viga. Palun logi uuesti sisse.",
|
||||
"errorLiveStreamNotEnabled": "Otseülekanne ei ole e-mailiga {{email}} sisse lülitatud. Luba kasutajaga otseülekanded või vaheta kontot.",
|
||||
"errorLiveStreamNotEnabled": "Otseülekanne ei ole emailiga {{email}} sisse lülitatud. Luba kasutajaga otseülekanded või vaheta kontot.",
|
||||
"expandedOff": "Otseülekanne on peatatud",
|
||||
"expandedOn": "Kõnest tehakse otseülekanne YouTube’i.",
|
||||
"expandedPending": "Otseülekanne algab…",
|
||||
@@ -480,7 +480,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Sisesta nimi",
|
||||
"setEmailInput": "Sisesta e-mail",
|
||||
"setEmailInput": "Sisesta email",
|
||||
"setEmailLabel": "Sisesta Gravatar e-kirja aadress",
|
||||
"title": "Profiil"
|
||||
},
|
||||
@@ -548,7 +548,7 @@
|
||||
"disableCallIntegration": "Lülita kohaliku kõne integratsioon välja",
|
||||
"disableP2P": "Lülita otseühendus välja",
|
||||
"displayName": "Kasutatav nimi",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Seaded",
|
||||
"profileSection": "Profiil",
|
||||
"serverURL": "Serveri link",
|
||||
|
||||
@@ -39,6 +39,28 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "Bande passante faible"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "Réunion terminée."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"defaultName": "Salle annexe #{{index}}",
|
||||
"mainRoom": "Salle principale",
|
||||
"actions": {
|
||||
"add": "Ajouter salle annexe",
|
||||
"autoAssign": "Assigner automatiquement aux salles annexes",
|
||||
"close": "Fermer",
|
||||
"join": "Rejoindre",
|
||||
"leaveBreakoutRoom": "Quitter la salle annexe",
|
||||
"more": "Plus",
|
||||
"remove": "Supprimer",
|
||||
"sendToBreakoutRoom": "Envoyer le participant dans:"
|
||||
},
|
||||
"notifications": {
|
||||
"joinedTitle": "Salles annexes",
|
||||
"joined": "Entrée en salle annexe \"{{name}}\"",
|
||||
"joinedMainRoom": "Retour à la salle principalem"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Ajouter un lien de conférence",
|
||||
"confirmAddLink": "Voulez-vous ajouter un lien Jitsi à cet événement ?",
|
||||
@@ -268,12 +290,12 @@
|
||||
"muteEveryoneStartMuted": "Tout le monde démarre avec le micro coupé",
|
||||
"muteParticipantBody": "Vous ne pourrez plus réactiver son micro, mais il pourra l'activer par lui-même à tout moment.",
|
||||
"muteParticipantButton": "Couper le micro",
|
||||
"muteParticipantDialog": "Êtes-vous sûr(e) de vouloir couper le micro de ce participant ? Seul le participant pourra ensuite réactiver son micro à tout moment.",
|
||||
"muteParticipantsVideoDialog": "Êtes-vous sûr(e) de vouloir couper la caméra de ce participant ? Seul le participant pourra ensuite réactiver sa caméra à tout moment.",
|
||||
"muteParticipantTitle": "Couper le micro de ce participant ?",
|
||||
"muteParticipantsVideoDialog": "Êtes-vous sûr(e) de vouloir couper la caméra de ce participant ? Seul le participant pourra ensuite réactiver son micro à tout moment.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Êtes-vous sûr(e) de vouloir couper la caméra de ce participant ? Ni vous ni le participant ne pourront la réactiver ensuite ?",
|
||||
"muteParticipantsVideoButton": "Couper la caméra",
|
||||
"muteParticipantsVideoTitle": "Couper la caméra de ce participant?",
|
||||
"muteParticipantsVideoBody": "Vous ne pourrez pas rallumer la caméra, mais ils peuvent la rallumer à tout moment.",
|
||||
"muteParticipantsVideoBodyModerationOn": "Ni vous ni le participant ne pourront rallumer la caméra.",
|
||||
"noDropboxToken": "Pas de jeton Dropbox valide",
|
||||
"Ok": "Ok",
|
||||
"password": "Mot de passe",
|
||||
@@ -501,6 +523,7 @@
|
||||
"expandedPending": "La diffusion en direct a commencé ...",
|
||||
"failedToStart": "La diffusion n'a pas réussi à démarrer",
|
||||
"getStreamKeyManually": "Nous n'avons pas réussi à récupérer un flux de direct. Essayez d'obtenir votre clé de diffusion en direct sur YouTube.",
|
||||
"inProgress": "Enregisrtement ou diffusion en cours",
|
||||
"invalidStreamKey": "La clé de diffusion en direct n'est peut-être pas correcte.",
|
||||
"off": "La diffusion en direct (streaming) a été arrêté",
|
||||
"offBy": "{{name}} a arrêté la diffusion en direct",
|
||||
@@ -508,6 +531,7 @@
|
||||
"onBy": "{{name}} a démarré la diffusion en direct",
|
||||
"pending": "Lancement du direct ...",
|
||||
"serviceName": "Service de diffusion en direct",
|
||||
"sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.",
|
||||
"signedInAs": "Vous êtes connecté en tant que :",
|
||||
"signIn": "Se connecter avec Google",
|
||||
"signInCTA": "Connectez vous ou saisissez votre clé de diffusion Youtube.",
|
||||
@@ -553,6 +577,8 @@
|
||||
"notify": {
|
||||
"allowAction": "Permettre",
|
||||
"allowedUnmute": "Vous pouvez réactiver votre écran, votre caméra ou partager votre écran.",
|
||||
"audioUnmuteBlockedTitle": "Rétablissement du son bloqué !",
|
||||
"audioUnmuteBlockedDescription": "Le rétablissement du son a été bloqué temporairement en raison de limites système.",
|
||||
"connectedOneMember": "{{name}} a rejoint la réunion",
|
||||
"connectedThreePlusMembers": "{{name}} et {{count}} autres personnes ont rejoint la réunion",
|
||||
"connectedTwoMembers": "{{first}} et {{second}} ont rejoint la réunion",
|
||||
@@ -564,6 +590,9 @@
|
||||
"invitedThreePlusMembers": "{{name}} et {{count}} autres ont été invités",
|
||||
"invitedTwoMembers": "{{first}} et {{second}} ont été invités",
|
||||
"kickParticipant": "{{kicked}} a été expulsé par {{kicker}}",
|
||||
"leftOneMember": "{{name}} a quitté la réunion",
|
||||
"leftThreePlusMembers": "{{name}} et beaucoup d'autres ont quitté la réunion",
|
||||
"leftTwoMembers": "{{first}} et {{second}} ont quitté la réunion",
|
||||
"me": "Moi",
|
||||
"moderator": "Droits modérateur accordés !",
|
||||
"muted": "Vous avez commencé la conversation en muet.",
|
||||
@@ -575,6 +604,7 @@
|
||||
"passwordRemovedRemotely": "Le $t(lockRoomPassword) a été supprimé par un autre participant",
|
||||
"passwordSetRemotely": "Un $t(lockRoomPassword) a été défini par un autre participant",
|
||||
"raisedHand": "{{name}} aimerait prendre la parole.",
|
||||
"raisedHands": "{{participantName}} et {{raisedHands}} autres personnes",
|
||||
"screenShareNoAudio": " La case Partager l'audio n'a pas été cochée dans l'écran de sélection de la fenêtre.",
|
||||
"screenShareNoAudioTitle": "La case Partager l'audio n'a pas été cochée",
|
||||
"somebody": "Quelqu'un",
|
||||
@@ -603,7 +633,10 @@
|
||||
"moderationToggleDescription": "par {{participantDisplayName}}",
|
||||
"raiseHandAction": "Lever la main",
|
||||
"reactionSounds": "Bloquer les réactions sonores",
|
||||
"groupTitle": "Notifications"
|
||||
"reactionSoundsForAll": "Bloquer les réactions sonores pour tous",
|
||||
"groupTitle": "Notifications",
|
||||
"videoUnmuteBlockedTitle": "Rétablissement de la caméra bloqué !",
|
||||
"videoUnmuteBlockedDescription": "Le rétablissement de la vidéo a été bloqué temporairement en raison de limites système."
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Fermer",
|
||||
@@ -620,13 +653,16 @@
|
||||
"blockEveryoneMicCamera": "Bloquer tous les micros et caméras",
|
||||
"invite": "Inviter quelqu'un",
|
||||
"askUnmute": "Demander de réactiver le micro",
|
||||
"moreModerationActions": "Options de modération supplémentaires",
|
||||
"moreParticipantOptions": "Options supplémentaires pour les participants",
|
||||
"mute": "Couper le micro",
|
||||
"muteAll": "Couper le micro de tout le monde",
|
||||
"muteEveryoneElse": "Couper le micro de tous les autres",
|
||||
"stopEveryonesVideo": "Couper toutes les caméras",
|
||||
"stopVideo": "Couper la vidéo",
|
||||
"unblockEveryoneMicCamera": "Débloquer tous les micros et caméras",
|
||||
"videoModeration": "Démarrer leur vidéo"
|
||||
"videoModeration": "Démarrer leur vidéo",
|
||||
"moreModerationControls": "Options de modération supplémentaires"
|
||||
},
|
||||
"search": "Rechercher des participants"
|
||||
},
|
||||
@@ -738,7 +774,7 @@
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Choisissez un pseudo",
|
||||
"setEmailInput": "Entrez une adresse e-mail",
|
||||
"setEmailInput": "Entrez une adresse email",
|
||||
"setEmailLabel": "Définir votre courriel Gravatar",
|
||||
"title": "Profil"
|
||||
},
|
||||
@@ -759,6 +795,7 @@
|
||||
"expandedPending": "Démarrage de l'enregistrement ...",
|
||||
"failedToStart": "L'enregistrement n'a pas réussi à démarrer",
|
||||
"fileSharingdescription": "Partager l'enregistrement avec les participants de la réunion",
|
||||
"inProgress": "Enregistrement ou diffusion en cours",
|
||||
"linkGenerated": "Nous avons généré un lien à votre enregistrement.",
|
||||
"live": "DIRECT",
|
||||
"loggedIn": "Connecté en tant que {{userName}}",
|
||||
@@ -771,6 +808,7 @@
|
||||
"serviceDescription": "Votre enregistrement sera enregistré par le service dédié",
|
||||
"serviceDescriptionCloud": "Enregistrement Cloud",
|
||||
"serviceName": "Service d'enregistrement",
|
||||
"sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.",
|
||||
"signIn": "Se connecter",
|
||||
"signOut": "Se déconnecter",
|
||||
"unavailable": "Oups ! Le {{serviceName}} est actuellement indisponible. Nous tentons de résoudre le problème. Veuillez réessayer plus tard.",
|
||||
@@ -819,6 +857,7 @@
|
||||
"sounds": "Sons",
|
||||
"speakers": "Haut-parleurs",
|
||||
"startAudioMuted": "Tout le monde commence en muet",
|
||||
"startReactionsMuted": "Tout le monde commence avec les réactions sonores bloquées",
|
||||
"startVideoMuted": "Tout le monde commence sans vidéo",
|
||||
"talkWhileMuted": "vous parlez en étant muet",
|
||||
"title": "Paramètres"
|
||||
@@ -857,7 +896,14 @@
|
||||
"name": "Nom",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerStats": "Statistiques de l'interlocuteur",
|
||||
"speakerTime": "Temps de l'interlocuteur"
|
||||
"speakerTime": "Temps de l'interlocuteur",
|
||||
"happy": "Content",
|
||||
"neutral": "Indifférent",
|
||||
"sad": "Triste",
|
||||
"surprised": "Surpris",
|
||||
"angry": "En colère",
|
||||
"fearful": "Effrayé",
|
||||
"disgusted": "Dégoûté"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -874,6 +920,7 @@
|
||||
"audioOnly": "Activer / Désactiver le mode voix uniquement",
|
||||
"audioRoute": "Sélectionner la source audio",
|
||||
"boo": "Hou",
|
||||
"breakoutRoom": "Rejoindre/quitter une salle annexe",
|
||||
"callQuality": "Ajuster la qualité vidéo",
|
||||
"cc": "Activer / Désactiver les sous-titres",
|
||||
"chat": "Afficher / Masquer la discussion instantanée",
|
||||
@@ -923,7 +970,7 @@
|
||||
"surprised": "Surpris",
|
||||
"tileView": "Activer / Désactiver la vue mosaïque",
|
||||
"toggleCamera": "Changer de caméra",
|
||||
"toggleFilmstrip": "Basculer de pellicule",
|
||||
"toggleFilmstrip": "Afficher ou masquer les vignettes vidéo",
|
||||
"videomute": "Activer / Couper la vidéo",
|
||||
"videoblur": "Activer / désactiver le floutage",
|
||||
"selectBackground": "Selectionner un arrière-plan",
|
||||
@@ -957,7 +1004,9 @@
|
||||
"hangup": "Quitter",
|
||||
"help": "Aide",
|
||||
"invite": "Inviter des participants",
|
||||
"joinBreakoutRoom": "Rejoindre salle annexe",
|
||||
"laugh": "Rire",
|
||||
"leaveBreakoutRoom": "Quitter salle annexe",
|
||||
"like": "Approuver",
|
||||
"lobbyButtonDisable": "Désactiver le mode salle d'attente / contrôle des participant(e)s",
|
||||
"lobbyButtonEnable": "Activer le mode salle d'attente / contrôle des participant(e)s",
|
||||
@@ -1135,6 +1184,12 @@
|
||||
"button": "Inviter d'autres personnes",
|
||||
"youAreAlone": "Vous êtes le seul participant de la réunion"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "Conditions d'utilisation"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "Confidentialité"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Centre d'aide"
|
||||
},
|
||||
|
||||
@@ -479,8 +479,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Állítsa be a megjelenő nevet",
|
||||
"setEmailInput": "Adjon meg egy e-mail címet",
|
||||
"setEmailLabel": "Adja meg a gravatar e-mail címet",
|
||||
"setEmailInput": "Adjon meg egy email címet",
|
||||
"setEmailLabel": "Adja meg a gravatar email címet",
|
||||
"title": "Profil"
|
||||
},
|
||||
"raisedHand": "Beszélni szeretnék",
|
||||
@@ -549,7 +549,7 @@
|
||||
"disableCallIntegration": "A natív hívások integrációjának letiltása",
|
||||
"disableP2P": "Kapcsolja ki a peer-to-peer módot",
|
||||
"displayName": "Megjelenő név",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Beállítások",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Kiszolgáló URL",
|
||||
|
||||
@@ -487,7 +487,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Set your display name",
|
||||
"setEmailInput": "Enter e-mail",
|
||||
"setEmailInput": "Enter email",
|
||||
"setEmailLabel": "Set your gravatar email",
|
||||
"title": "Profile"
|
||||
},
|
||||
|
||||
@@ -8,17 +8,17 @@
|
||||
"contacts": "contatti",
|
||||
"countryNotSupported": "Non supportiamo ancora questa destinazione.",
|
||||
"countryReminder": "Stai chiamando fuori dagli Stati Uniti? Assicurati d'inserire il prefisso internazionale!",
|
||||
"defaultEmail": "Tua e-mail di default",
|
||||
"defaultEmail": "Tua email di default",
|
||||
"disabled": "Non puoi invitare persone.",
|
||||
"failedToAdd": "L'aggiunta di nuove persone è fallita",
|
||||
"footerText": "La chiamata all'esterno è disabilitata.",
|
||||
"googleEmail": "E-mail Google",
|
||||
"googleEmail": "Email Google",
|
||||
"inviteMoreHeader": "Sei l'unico presente nella riunione",
|
||||
"inviteMoreMailSubject": "Unisciti alla riunione {{appName}}",
|
||||
"inviteMorePrompt": "Invita altre persone",
|
||||
"linkCopied": "Collegamento copiato negli appunti",
|
||||
"noResults": "Nessun risultato corrispondente",
|
||||
"outlookEmail": "E-mail Outlook",
|
||||
"outlookEmail": "Email Outlook",
|
||||
"phoneNumbers": "numeri di telefono",
|
||||
"searching": "Sto cercando...",
|
||||
"shareInvite": "Condividi invito alla riunione",
|
||||
@@ -27,7 +27,7 @@
|
||||
"sipAddresses": "indirizzi SIP",
|
||||
"telephone": "Telefono: {{number}}",
|
||||
"title": "Invita persone a questa riunione",
|
||||
"yahooEmail": "E-mail Yahoo"
|
||||
"yahooEmail": "Email Yahoo"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -736,8 +736,8 @@
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Imposta il nome da visualizzare",
|
||||
"setEmailInput": "Inserisci e-mail",
|
||||
"setEmailLabel": "Imposta l'e-mail gravatar",
|
||||
"setEmailInput": "Inserisci email",
|
||||
"setEmailLabel": "Imposta l'email gravatar",
|
||||
"title": "Profilo"
|
||||
},
|
||||
"raisedHand": "Vorrebbe parlare",
|
||||
@@ -834,7 +834,7 @@
|
||||
"disableCrashReporting": "Disattiva la diagnostica dei crash",
|
||||
"disableCrashReportingWarning": "Sei sicuro di voler disattivare la diagnostica dei crash? Quest'impostazione verrà eseguita al prossimo avvio dell'app.",
|
||||
"displayName": "Nome visualizzato",
|
||||
"email": "e-mail",
|
||||
"email": "email",
|
||||
"header": "Impostazioni",
|
||||
"profileSection": "Profilo",
|
||||
"serverURL": "URL del server",
|
||||
@@ -1141,7 +1141,7 @@
|
||||
"dialogTitle": "Sala d'attesa",
|
||||
"disableDialogContent": "Sala d'attesa attiva. Questa funzione ti permette di non dare accesso alla riunione a partecipanti indesiderati. Vuoi disattivarla?",
|
||||
"disableDialogSubmit": "Disattiva",
|
||||
"emailField": "Inserisci il tuo indirizzo e-mail",
|
||||
"emailField": "Inserisci il tuo indirizzo email",
|
||||
"enableDialogPasswordField": "Imposta password (opzionale)",
|
||||
"enableDialogSubmit": "Attiva",
|
||||
"enableDialogText": "La sala d'attesa ti permette di proteggere la riunione concedendo l'ingresso solo alle persone autorizzate da un moderatore.",
|
||||
|
||||
@@ -7,11 +7,11 @@
|
||||
"copyStream": "Link naar livestream kopiëren",
|
||||
"countryNotSupported": "Deze bestemming wordt nog niet ondersteund.",
|
||||
"countryReminder": "Belt u buiten de Verenigde Staten? Vergeet dan niet met de landcode te beginnen.",
|
||||
"defaultEmail": "Uw Standaard E-mail",
|
||||
"defaultEmail": "Uw Standaard Email",
|
||||
"disabled": "U kunt geen personen uitnodigen.",
|
||||
"failedToAdd": "Het toevoegen van deelnemers is mislukt",
|
||||
"footerText": "Uitgaande oproepen zijn uitgeschakeld.",
|
||||
"googleEmail": "Google E-mail",
|
||||
"googleEmail": "Google Email",
|
||||
"inviteMoreHeader": "U bent de enige in de vergadering",
|
||||
"inviteMoreMailSubject": "Deelnemen aan {{appName}}-vergadering",
|
||||
"inviteMorePrompt": "Nodig meer personen uit",
|
||||
@@ -21,7 +21,7 @@
|
||||
"loadingPeople": "Personen om uit te nodigen aan het zoeken",
|
||||
"noResults": "Geen resultaten die overeenkomen met de zoekopdracht",
|
||||
"noValidNumbers": "Voer een telefoonnummer in",
|
||||
"outlookEmail": "Outlook E-mail",
|
||||
"outlookEmail": "Outlook Email",
|
||||
"searchNumbers": "Telefoonnummers toevoegen",
|
||||
"searchPeople": "Personen zoeken",
|
||||
"searchPeopleAndNumbers": "Personen zoeken of hun telefoonnummers toevoegen",
|
||||
@@ -30,7 +30,7 @@
|
||||
"shareStream": "Deel de link naar de livestream",
|
||||
"telephone": "Telefoon: {{number}}",
|
||||
"title": "Personen uitnodigen voor deze vergadering",
|
||||
"yahooEmail": "Yahoo E-mail"
|
||||
"yahooEmail": "Yahoo Email"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -586,8 +586,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Uw weergavenaam instellen",
|
||||
"setEmailInput": "Voer e-mailadres in",
|
||||
"setEmailLabel": "Uw Gravatar e-mail instellen",
|
||||
"setEmailInput": "Voer emailadres in",
|
||||
"setEmailLabel": "Uw Gravatar email instellen",
|
||||
"title": "Profiel"
|
||||
},
|
||||
"raisedHand": "Zou graag willen spreken",
|
||||
@@ -931,7 +931,7 @@
|
||||
"dialogTitle": "Lobby-modus",
|
||||
"disableDialogContent": "Lobby-modus is momenteel ingeschakeld. Deze functie zorgt ervoor dat ongewenste deelnemers niet aan uw vergadering kunnen deelnemen. Wilt u het uitschakelen?",
|
||||
"disableDialogSubmit": "Uitschakelen",
|
||||
"emailField": "Voer uw e-mailadres in",
|
||||
"emailField": "Voer uw emailadres in",
|
||||
"enableDialogPasswordField": "Stel wachtwoord in (optioneel)",
|
||||
"enableDialogSubmit": "Inschakelen",
|
||||
"enableDialogText": "Met de lobby-modus kunt u uw vergadering beveiligen, door deelnemers alleen toe te laten na een formele goedkeuring van een moderator.",
|
||||
|
||||
@@ -251,8 +251,6 @@
|
||||
"muteEveryoneTitle": "Rendre mut tot lo monde ?",
|
||||
"muteParticipantBody": "Poiretz pas lo tornar activar lo microfòn, mai eles pòdon o far quand vòlon.",
|
||||
"muteParticipantButton": "Copar lo son",
|
||||
"muteParticipantDialog": "Volètz vertadièrament copar lo son a aqueste participant ? Poiretz pas lo tornar la votz, mas eles pòdon restablir la comunicacion quand vòlgan.",
|
||||
"muteParticipantTitle": "Copar lo micro als participants ?",
|
||||
"Ok": "D'acòrdi",
|
||||
"passwordLabel": "Aquesta conferéncia es estada barrada per un participant. Mercés de dintrar lo $t(lockRoomPassword) per la rejónher.",
|
||||
"passwordNotSupported": "Ajustar un $t(lockRoomPassword) a una conferéncia es pas suportat.",
|
||||
@@ -331,7 +329,7 @@
|
||||
"muteParticipantsVideoTitle": "Desactivar la camèra d’aqueste participant ?",
|
||||
"noDropboxToken": "Cap de geton Dropbox pas valid",
|
||||
"password": "Senhal",
|
||||
"sessionRestarted": "Sonada reaviada a causa d’un problèma de connexion",
|
||||
"sessionRestarted": "Sonada reaviada a causa d’un problèma de connexion.",
|
||||
"shareAudio": "Contunhar",
|
||||
"shareAudioTitle": "Cossí partejar l’àudio",
|
||||
"shareAudioWarningTitle": "Devètz arrestar lo partiment d’ecran abans lo partiment d’àudio",
|
||||
@@ -361,7 +359,9 @@
|
||||
"muteParticipantsVideoBody": "Poiretz pas lor activar la camèra de nòu, mas poirián se la restablir quand vòlga.",
|
||||
"shareAudioWarningD2": "devètz reaviar lo partiment d’ecran e clicar l’opcion « partejar l’àudio ».",
|
||||
"shareScreenWarningD2": "devètz arrestar lo partiment àudio, aviar lo partiment d’ecran e clicar l’opcion « partejar l’àudio ».",
|
||||
"localUserControls": "Contraròtles de l’utilizaire local"
|
||||
"localUserControls": "Contraròtles de l’utilizaire local",
|
||||
"muteParticipantsVideoBodyModerationOn": "Poiretz pas li activar de nòu e el tanpauc.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Volètz vertadièrament copar la camèra d’aqueste participant ? Poiretz pas li activar de nòu e el tanpauc."
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "ara es {{status}}"
|
||||
@@ -495,7 +495,9 @@
|
||||
"start": "Aviar una difusion en dirècte",
|
||||
"streamIdHelp": "Qu’es aquò ?",
|
||||
"unavailableTitle": "Difusion en dirècte indisponibla",
|
||||
"youtubeTerms": "Condicions d’utilizacion de YouTube"
|
||||
"youtubeTerms": "Condicions d’utilizacion de YouTube",
|
||||
"sessionAlreadyActive": "Aquesta session es ja en cors d’enregistrament o en difusion en dirèct.",
|
||||
"inProgress": "Enregistrament o difusion en dirècte en cors"
|
||||
},
|
||||
"lobby": {
|
||||
"allow": "Autorizar",
|
||||
@@ -604,7 +606,7 @@
|
||||
"suboptimalExperienceTitle": "Avertiment del navigador",
|
||||
"unmute": "Restablir lo son",
|
||||
"allowAction": "Autorizar",
|
||||
"videoMutedRemotelyTitle": "{{moderator}} a copat vòstra camèra",
|
||||
"videoMutedRemotelyTitle": "{{participantDisplayName}} a copat vòstra vidèo",
|
||||
"moderationInEffectTitle": "Lo moderator a amudit vòstre microfòn",
|
||||
"moderationInEffectVideoTitle": "Lo moderator a blocat vòstra camèra",
|
||||
"videoMutedRemotelyDescription": "La podètz totjorn tornar activar.",
|
||||
@@ -623,7 +625,11 @@
|
||||
"allowedUnmute": "Vos podètz restablir lo son del microfòn, aviar la camèra e partejar l’ecran.",
|
||||
"screenShareNoAudio": " La casa Partejar l’àudio es pas estada marcada a l’ecran de seleccion de la fenèstra.",
|
||||
"moderationInEffectCSDescription": "Volgatz levar la man se volètz partejar vòstre ecran.",
|
||||
"moderationInEffectVideoDescription": "Volgatz levar la man se volètz aviar vòstra camèra."
|
||||
"moderationInEffectVideoDescription": "Volgatz levar la man se volètz aviar vòstra camèra.",
|
||||
"audioUnmuteBlockedTitle": "Restabliment del son del microfòn blocat !",
|
||||
"videoUnmuteBlockedTitle": "Restabliment de la camèra blocat !",
|
||||
"audioUnmuteBlockedDescription": "Las operacion de restabliment del son microfòn son estadas blocadas pel moment a causa de limitas sistèma.",
|
||||
"videoUnmuteBlockedDescription": "Las operacion de restabliment de la camèra son estadas blocadas pel moment a causa de limitas sistèma."
|
||||
},
|
||||
"passwordDigitsOnly": "Fins a {{number}} chifras",
|
||||
"passwordSetRemotely": "causit per qualqu'un mai",
|
||||
@@ -741,7 +747,9 @@
|
||||
"uploadToCloud": "Enviar al cloud",
|
||||
"limitNotificationDescriptionWeb": "A causa d’una demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per d’enregistraments sens limit ensajatz <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"limitNotificationDescriptionNative": "A causa d’una demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per d’enregistraments sens limit ensajatz <3>{{app}}</3>.",
|
||||
"errorFetchingLink": "Error en recuperant lo ligam de l’enregistrament."
|
||||
"errorFetchingLink": "Error en recuperant lo ligam de l’enregistrament.",
|
||||
"inProgress": "Enregistrament o difusion en dirècte en cors",
|
||||
"sessionAlreadyActive": "Aquesta session es ja en cors d’enregistrament o en difusion en dirèct."
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Tirar per actualizar"
|
||||
@@ -823,7 +831,14 @@
|
||||
"seconds": "{{count}} segondas",
|
||||
"speakerStats": "Estatisticas orator",
|
||||
"speakerTime": "Temps de paraula",
|
||||
"search": "Recercar"
|
||||
"search": "Recercar",
|
||||
"neutral": "Neutre",
|
||||
"sad": "Trist",
|
||||
"surprised": "Surprés",
|
||||
"angry": "Encolerat",
|
||||
"fearful": "Pauruc",
|
||||
"disgusted": "Desgostat",
|
||||
"happy": "Content"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"genericTitle": "Aquesta reünion requerís l'utilizacion del microfòn e de la camèra.",
|
||||
@@ -894,7 +909,8 @@
|
||||
"expand": "Espandir",
|
||||
"collapse": "Plegar",
|
||||
"muteEveryoneElse": "Copar lo microfòn dels autres",
|
||||
"reactionsMenu": "Dobrir / Tampar lo menú de reaccions"
|
||||
"reactionsMenu": "Dobrir / Tampar lo menú de reaccions",
|
||||
"breakoutRoom": "Rejónher/quitar la sala de reünion"
|
||||
},
|
||||
"addPeople": "Ajustar de monde a vòstra sonada",
|
||||
"audioOnlyOff": "Desactivar lo mòde connexion febla",
|
||||
@@ -975,7 +991,9 @@
|
||||
"reactionLike": "Enviar una reaccion d’aprobacion",
|
||||
"reactionSilence": "Enviar una reaccion de silenci",
|
||||
"reactionSurprised": "Enviar una reaccion de suspresa",
|
||||
"reactionClap": "Enviar una reaccion d’aplaudiment"
|
||||
"reactionClap": "Enviar una reaccion d’aplaudiment",
|
||||
"leaveBreakoutRoom": "Quitar la sala de reünion",
|
||||
"joinBreakoutRoom": "Rejónher la sala de reünion"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Aviar / Arrestat los sostítols",
|
||||
@@ -1140,7 +1158,9 @@
|
||||
"stopVideo": "Arrestar la vidèo",
|
||||
"unblockEveryoneMicCamera": "Desblocar lo microfòn e la camèra de tot lo monde",
|
||||
"videoModeration": "Aviar lor vidèo",
|
||||
"allowVideo": "Autorizar la vidèo"
|
||||
"allowVideo": "Autorizar la vidèo",
|
||||
"moreModerationActions": "Mai d’opcions de moderacion",
|
||||
"moreParticipantOptions": "Mai d’opcions de participant"
|
||||
},
|
||||
"search": "Cercar participants"
|
||||
},
|
||||
@@ -1171,7 +1191,31 @@
|
||||
"notification": {
|
||||
"title": "Un sondatge novèl es estat apondut a la conferéncia",
|
||||
"description": "Dobrissètz l’onglet dels sondatge per votar"
|
||||
}
|
||||
},
|
||||
"by": "Per {{ name }}"
|
||||
},
|
||||
"volumeSlider": "Nivèl de volum"
|
||||
"volumeSlider": "Nivèl de volum",
|
||||
"breakoutRooms": {
|
||||
"actions": {
|
||||
"add": "Apondre una sala de reünion",
|
||||
"close": "Tampar",
|
||||
"join": "Rejónher",
|
||||
"leaveBreakoutRoom": "Quitar la sala de reünion",
|
||||
"more": "Mai",
|
||||
"remove": "Levar",
|
||||
"sendToBreakoutRoom": "Enviar lo participant a :",
|
||||
"autoAssign": "Atribucion auto a las salas de reünion"
|
||||
},
|
||||
"defaultName": "Sala de reünion #{{index}}",
|
||||
"mainRoom": "Sala principala"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "Confidencialitat"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "Acòrds"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "Conferéncia acabada."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
"dismiss": "Odrzuć",
|
||||
"displayNameRequired": "Cześć! Jak się nazywasz?",
|
||||
"done": "Zrobione",
|
||||
"e2eeDescription": "Szyfrowanie End-to-End jest aktualnie w fazie EKSPERYMENTALNEJ. Proszę mieć na uwadze fakt, że szyfrowanie end-to-end wyłączy oferowane przez serwer usługi takie jak: nagrywanie, streaming na żywo i dołączanie uczestników przez telefon. Proszę mieć również na uwadze fakt, że takie spotkanie zadziałą tylko dla uczestników korzystających z przeglądarek wspierających wstawiane strumienie.",
|
||||
"e2eeDescription": "Szyfrowanie End-to-End jest aktualnie w fazie EKSPERYMENTALNEJ. Proszę mieć na uwadze fakt, że szyfrowanie end-to-end wyłączy oferowane przez serwer usługi takie jak: nagrywanie, streaming na żywo i dołączanie uczestników przez telefon. Proszę mieć również na uwadze fakt, że takie spotkanie będą działać tylko dla uczestników korzystających z przeglądarek wspierających wstawiane strumienie.",
|
||||
"e2eeLabel": "Klucz E2EE",
|
||||
"e2eeWarning": "UWAGA: Niektórzy uczestnicy tego spotkania nie mają włączonej obsługi szyfrowania E2EE. Jeśli włączysz tą funkcję ci uczestnicy nie będą mieli z tobą kontaktu.",
|
||||
"enterDisplayName": "Wpisz tutaj swoje imię",
|
||||
@@ -724,7 +724,7 @@
|
||||
"profile": {
|
||||
"avatar": "awatar",
|
||||
"setDisplayNameLabel": "Podaj swoją wyświetlaną nazwę",
|
||||
"setEmailInput": "Wprowadź adres e-mail",
|
||||
"setEmailInput": "Wprowadź adres email",
|
||||
"setEmailLabel": "Ustaw adres poczty elektronicznej swojego Gravatara",
|
||||
"title": "Profil"
|
||||
},
|
||||
@@ -767,7 +767,7 @@
|
||||
"pullToRefresh": "Przeciągnij, aby odświeżyć"
|
||||
},
|
||||
"security": {
|
||||
"about": "Możesz dodać a $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) zanim zostaną dołączeni do spotkania.",
|
||||
"about": "Możesz dodać $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) przed dołączeniem do spotkania.",
|
||||
"aboutReadOnly": "Uczestnicy posiadający uprawnienia do moderacji mogą ustawić $t(lockRoomPassword) do spotkania. Uczestnicy będą musieli wprowadzić $t(lockRoomPassword) zanim zostaną dołączeni do spotkania.",
|
||||
"insecureRoomNameWarning": "Nazwa pokoju nie jest bezpieczna. Niepowołaniu uczestnicy mogą dołączyć do spotkania. Proszę rozważyć ustawienie hasła spotkania używając przycisku Opcje zabezpieczeń.",
|
||||
"securityOptions": "Opcje zabezpieczeń"
|
||||
@@ -822,7 +822,7 @@
|
||||
"disableCrashReporting": "Wyłącz raportowanie błędów",
|
||||
"disableCrashReportingWarning": "Czy na pewno chcesz wyłączyć raportowanie błędów? Ustawienie zacznie funkcjonować po restarcie aplikacji.",
|
||||
"displayName": "Wyświetlana nazwa",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Ustawienia",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Adres URL serwera",
|
||||
@@ -901,7 +901,7 @@
|
||||
"shareaudio": "Udostępnij audio",
|
||||
"sharedvideo": "Przełącz udostępnianie obrazu na YouTube",
|
||||
"shareRoom": "Zaproś kogoś",
|
||||
"shareYourScreen": "Przełączanie podziału ekranu",
|
||||
"shareYourScreen": "Przełączanie udostępniania ekranu",
|
||||
"shortcuts": "Przełączanie skrótów klawiszowych",
|
||||
"show": "Pokaż na scenie",
|
||||
"silence": "Cisza",
|
||||
|
||||
@@ -8,17 +8,17 @@
|
||||
"contacts": "contactos",
|
||||
"countryNotSupported": "Ainda não temos suporte para este destino.",
|
||||
"countryReminder": "Está a telefonar para fora dos EUA? Por favor, certifique-se de que começa com o código do país!",
|
||||
"defaultEmail": "O seu e-mail predefinido",
|
||||
"defaultEmail": "O seu email predefinido",
|
||||
"disabled": "Não pode convidar outras pessoas.",
|
||||
"failedToAdd": "Falha ao adicionar participantes",
|
||||
"footerText": "A marcação está desactivada.",
|
||||
"googleEmail": "E-mail do Google",
|
||||
"googleEmail": "Email do Google",
|
||||
"inviteMoreHeader": "Você é o único na reunião",
|
||||
"inviteMoreMailSubject": "Participar na reunião {{appName}}",
|
||||
"inviteMorePrompt": "Convidar mais pessoas",
|
||||
"linkCopied": "Link copiado para a área de transferência",
|
||||
"noResults": "Sem resultados de pesquisa correspondentes",
|
||||
"outlookEmail": "E-mail do Outlook",
|
||||
"outlookEmail": "Email do Outlook",
|
||||
"phoneNumbers": "números de telefone",
|
||||
"searching": "A pesquisar...",
|
||||
"shareInvite": "Partilhar convite de reunião",
|
||||
@@ -27,7 +27,7 @@
|
||||
"sipAddresses": "endereços SIP",
|
||||
"telephone": "Telefone: {{number}}",
|
||||
"title": "Convidar pessoas para esta reunião",
|
||||
"yahooEmail": "E-mail do Yahoo"
|
||||
"yahooEmail": "Email do Yahoo"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -39,6 +39,28 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "Largura de banda baixa"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "A reunião terminou."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"defaultName": "Salas simultâneas #{{index}}",
|
||||
"mainRoom": "Sala principal",
|
||||
"actions": {
|
||||
"add": "Adicionar salas simultâneas",
|
||||
"autoAssign": "Atribuição automática de salas simultâneas",
|
||||
"close": "Fechar",
|
||||
"join": "Entrar na sala",
|
||||
"leaveBreakoutRoom": "Sair da sala",
|
||||
"more": "Mais",
|
||||
"remove": "Eliminar sala",
|
||||
"sendToBreakoutRoom": "Enviar participante para:"
|
||||
},
|
||||
"notifications": {
|
||||
"joinedTitle": "Salas simultâneas",
|
||||
"joined": "Entrada do \"{{name}}\" na sala",
|
||||
"joinedMainRoom": "Entrada na sala principal"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Adicionar um link da reunião",
|
||||
"confirmAddLink": "Gostaria de adicionar um link do Jitsi a esse evento?",
|
||||
@@ -501,6 +523,7 @@
|
||||
"expandedPending": "Iniciando a transmissão em direto...",
|
||||
"failedToStart": "Falha ao iniciar a transmissão em direto",
|
||||
"getStreamKeyManually": "Não conseguimos buscar nenhuma transmissão em direto. Tente obter sua chave de transmissão em direto no YouTube.",
|
||||
"inProgress": "Gravação ou transmissão em direto em curso",
|
||||
"invalidStreamKey": "A senha para transmissão em direto pode estar incorreta.",
|
||||
"off": "Transmissão em direto encerrada",
|
||||
"offBy": "{{name}} parou a transmissão em direto",
|
||||
@@ -508,6 +531,7 @@
|
||||
"onBy": "{{name}} iniciou a transmissão em direto",
|
||||
"pending": "Iniciando Transmissão em Direto...",
|
||||
"serviceName": "Serviço de Transmissão em Direto",
|
||||
"sessionAlreadyActive": "Esta sessão já está a ser gravada ou transmitida em direto.",
|
||||
"signedInAs": "Você está conectado como:",
|
||||
"signIn": "Faça login no Google",
|
||||
"signInCTA": "Faça login ou insira sua chave de transmissão em Direto do YouTube.",
|
||||
@@ -553,6 +577,8 @@
|
||||
"notify": {
|
||||
"allowAction": "Permitir",
|
||||
"allowedUnmute": "Pode ligar o seu microfone, ligar a sua câmara ou partilhar o seu ecrã.",
|
||||
"audioUnmuteBlockedTitle": "Ligar microfone bloqueado!",
|
||||
"audioUnmuteBlockedDescription": "A operação de ligar o microfone foi temporariamente bloqueada devido aos limites do sistema.",
|
||||
"connectedOneMember": "{{name}} entrou na reunião",
|
||||
"connectedThreePlusMembers": "{{name}} e muitos outros entraram na reunião",
|
||||
"connectedTwoMembers": "{{first}} e {{second}} entraram na reunião",
|
||||
@@ -564,6 +590,9 @@
|
||||
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
|
||||
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
|
||||
"kickParticipant": "{{kicked}} foi expulso por {{kicker}}",
|
||||
"leftOneMember": "{{name}} deixou a reunião",
|
||||
"leftThreePlusMembers": "{{name}} e muitos outros deixaram a reunião",
|
||||
"leftTwoMembers": "{{first}} e {{second}} deixaram a reunião",
|
||||
"me": "Eu",
|
||||
"moderator": "É agora um moderador",
|
||||
"muted": "Você iniciou uma conversa com o microfone desativado.",
|
||||
@@ -575,6 +604,7 @@
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) definido por outro participante",
|
||||
"raisedHand": "Gostaria de falar.",
|
||||
"raisedHands": "{{participantName}} e mais {{raisedHands}} pessoas",
|
||||
"screenShareNoAudio": " A caixa de compartilhar áudio não foi marcada no ecrã de seleção da janela.",
|
||||
"screenShareNoAudioTitle": "Não foi possível partilhar o áudio do sistema!",
|
||||
"somebody": "Alguém",
|
||||
@@ -603,7 +633,10 @@
|
||||
"moderationToggleDescription": "pelo {{participantDisplayName}}",
|
||||
"raiseHandAction": "Levantar a mão",
|
||||
"reactionSounds": "Desactivar sons",
|
||||
"groupTitle": "Notificações"
|
||||
"reactionSoundsForAll": "Desativar sons para todos",
|
||||
"groupTitle": "Notificações",
|
||||
"videoUnmuteBlockedTitle": "Ligar câmara bloqueada!",
|
||||
"videoUnmuteBlockedDescription": "A operação de ligar a câmara foi temporariamente bloqueada devido aos limites do sistema."
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Fechar",
|
||||
@@ -621,13 +654,15 @@
|
||||
"invite": "Convidar alguém",
|
||||
"askUnmute": "Pedir para ligar o microfone",
|
||||
"moreModerationActions": "Mais opções de moderação",
|
||||
"moreParticipantOptions": "Mais opções de participantes",
|
||||
"mute": "Silenciar",
|
||||
"muteAll": "Silenciar todos",
|
||||
"muteEveryoneElse": "Silenciar todos os outros",
|
||||
"stopEveryonesVideo": "Desligar a câmara de todos",
|
||||
"stopVideo": "Desligar a câmara",
|
||||
"unblockEveryoneMicCamera": "Desbloquear o microfone e a câmara de todos",
|
||||
"videoModeration": "Ligarem a câmara deles"
|
||||
"videoModeration": "Ligarem a câmara deles",
|
||||
"moreModerationControls": "Mais controlos de moderação"
|
||||
},
|
||||
"search": "Pesquisar participantes"
|
||||
},
|
||||
@@ -739,7 +774,7 @@
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Definir seu nome de exibição",
|
||||
"setEmailInput": "Digite e-mail",
|
||||
"setEmailInput": "Digite email",
|
||||
"setEmailLabel": "Definir seu email de gravatar",
|
||||
"title": "Perfil"
|
||||
},
|
||||
@@ -760,6 +795,7 @@
|
||||
"expandedPending": "Iniciando gravação...",
|
||||
"failedToStart": "Falha ao iniciar a gravação",
|
||||
"fileSharingdescription": "Compartilhar gravação com participantes da reunião",
|
||||
"inProgress": "Gravação ou transmissão em direto em curso",
|
||||
"linkGenerated": "Gerámos um link para a sua gravação.",
|
||||
"live": "DIRETO",
|
||||
"loggedIn": "Conectado como {{userName}}",
|
||||
@@ -772,6 +808,7 @@
|
||||
"serviceDescription": "Sua gravação será salva pelo serviço de gravação",
|
||||
"serviceDescriptionCloud": "Gravação na nuvem",
|
||||
"serviceName": "Serviço de gravação",
|
||||
"sessionAlreadyActive": "Esta sessão já está a ser gravada ou transmitida em direto.",
|
||||
"signIn": "Entrar",
|
||||
"signOut": "Sair",
|
||||
"unavailable": "Oops! O {{serviceName}} está indisponível. Estamos trabalhando para resolver o problema. Por favor, tente mais tarde.",
|
||||
@@ -820,6 +857,7 @@
|
||||
"sounds": "Sons",
|
||||
"speakers": "Participantes",
|
||||
"startAudioMuted": "Todos começam com microfone desligado",
|
||||
"startReactionsMuted": "Sons de reação silenciados para todos",
|
||||
"startVideoMuted": "Todos começam com câmara desligada",
|
||||
"talkWhileMuted": "Se fala e está com microfone desligado",
|
||||
"title": "Definições"
|
||||
@@ -837,7 +875,7 @@
|
||||
"disableCrashReporting": "Desativar relatório de falhas",
|
||||
"disableCrashReportingWarning": "Tem a certeza de que quer desativar o relatório de falhas? A configuração será aplicada depois de reiniciar a aplicação.",
|
||||
"displayName": "Nome de exibição",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Configurações",
|
||||
"profileSection": "Perfil",
|
||||
"serverURL": "URL do servidor",
|
||||
@@ -858,7 +896,14 @@
|
||||
"name": "Nome",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerStats": "Estatísticas dos Participantes",
|
||||
"speakerTime": "Tempo do Participante"
|
||||
"speakerTime": "Tempo do Participante",
|
||||
"happy": "Feliz",
|
||||
"neutral": "Neutro",
|
||||
"sad": "Triste",
|
||||
"surprised": "Surpreendido",
|
||||
"angry": "Zangado",
|
||||
"fearful": "Temeroso",
|
||||
"disgusted": "Desgostoso"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -875,6 +920,7 @@
|
||||
"audioOnly": "Mudar para apenas áudio",
|
||||
"audioRoute": "Selecionar o dispositivo de som",
|
||||
"boo": "Vaia",
|
||||
"breakoutRoom": "Entrar/Sair salas instantâneas",
|
||||
"callQuality": "Gerir a qualidade do vídeo",
|
||||
"cc": "Mudar legendas",
|
||||
"chat": "Abrir / Fechar chat",
|
||||
@@ -958,7 +1004,9 @@
|
||||
"hangup": "Sair da reunião",
|
||||
"help": "Ajuda",
|
||||
"invite": "Convidar pessoas",
|
||||
"joinBreakoutRoom": "Entrar na sala",
|
||||
"laugh": "Risos",
|
||||
"leaveBreakoutRoom": "Sair da sala",
|
||||
"like": "Aprovado",
|
||||
"lobbyButtonDisable": "Desativar sala de espera",
|
||||
"lobbyButtonEnable": "Ativar sala de espera",
|
||||
@@ -1136,6 +1184,12 @@
|
||||
"button": "Convidar outros",
|
||||
"youAreAlone": "É o único na reunião"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "Termos"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "Privacidade"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Centro de ajuda"
|
||||
},
|
||||
@@ -1148,7 +1202,7 @@
|
||||
"dialogTitle": "Modo sala de espera",
|
||||
"disableDialogContent": "O modo sala de espera está actualmente activada. Esta característica assegura que os participantes indesejados não possam juntar-se à sua reunião. Quer desativá-la?",
|
||||
"disableDialogSubmit": "Desativar",
|
||||
"emailField": "Introduza o seu endereço de e-mail",
|
||||
"emailField": "Introduza o seu endereço de email",
|
||||
"enableDialogPasswordField": "Definir senha (opcional)",
|
||||
"enableDialogSubmit": "Habilitar",
|
||||
"enableDialogText": "O modo sala de espera permite-lhe proteger a sua reunião apenas permitindo a entrada de pessoas após uma aprovação formal por um moderador.",
|
||||
|
||||
@@ -12,13 +12,13 @@
|
||||
"disabled": "Você não pode convidar pessoas.",
|
||||
"failedToAdd": "Falha em adicionar participantes",
|
||||
"footerText": "Discagem está desativada.",
|
||||
"googleEmail": "E-mail Google",
|
||||
"googleEmail": "Email Google",
|
||||
"inviteMoreHeader": "Você é o único na reunião",
|
||||
"inviteMoreMailSubject": "Entre na reunião {{appName}}",
|
||||
"inviteMorePrompt": "Convide mais pessoas",
|
||||
"linkCopied": "Link copiado para a área de transferência",
|
||||
"noResults": "Nenhum resultado de busca correspondente",
|
||||
"outlookEmail": "E-mail Outlook ",
|
||||
"outlookEmail": "Email Outlook ",
|
||||
"phoneNumbers": "números de telefone",
|
||||
"searching": "Procurando...",
|
||||
"shareInvite": "Compartilhar convite da reunião",
|
||||
@@ -27,7 +27,7 @@
|
||||
"sipAddresses": "endereços SIP",
|
||||
"telephone": "Telefone: {{number}}",
|
||||
"title": "Convide pessoas para sua reunião",
|
||||
"yahooEmail": "E-mail Yahoo"
|
||||
"yahooEmail": "Email Yahoo"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -757,8 +757,8 @@
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Definir seu nome de exibição",
|
||||
"setEmailInput": "Digite e-mail",
|
||||
"setEmailLabel": "Definir seu e-mail de Gravatar",
|
||||
"setEmailInput": "Digite email",
|
||||
"setEmailLabel": "Definir seu email de Gravatar",
|
||||
"title": "Perfil"
|
||||
},
|
||||
"raisedHand": "Gostaria de falar",
|
||||
@@ -855,7 +855,7 @@
|
||||
"disableCrashReportingWarning": "Tem certeza eue quer desabilitar o aviso de falha? A opção será habilitada após reiniciar o app.",
|
||||
"disableP2P": "Desativar modo ponto a ponto",
|
||||
"displayName": "Nome de exibição",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Configurações",
|
||||
"profileSection": "Perfil",
|
||||
"serverURL": "URL do servidor",
|
||||
|
||||
@@ -479,8 +479,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Introduceți numele care va fi afișat",
|
||||
"setEmailInput": "Introduceți adresa de e-mail",
|
||||
"setEmailLabel": "Setați adresa de e-mail gravatar",
|
||||
"setEmailInput": "Introduceți adresa de email",
|
||||
"setEmailLabel": "Setați adresa de email gravatar",
|
||||
"title": "Profil"
|
||||
},
|
||||
"recording": {
|
||||
|
||||
@@ -373,7 +373,7 @@
|
||||
"genericError": "Что-то пошло не так.",
|
||||
"inviteLiveStream": "Трансляция этой встречи: {{url}}",
|
||||
"invitePhone": "Для того, чтобы присоединиться по телефону, нажмите {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "Ищите дпугой номер для набора?\nПосмотреть номера для набора для конференции: {{url}}\n\n\nЕсли также выполняется набор номера через телефон в комнате, подключитесь в режиме слушателя: {{silentUrl}}",
|
||||
"invitePhoneAlternatives": "Ищите другой номер для набора?\nПосмотреть номера для набора для конференции: {{url}}\n\n\nЕсли также выполняется набор номера через телефон в комнате, подключитесь в режиме слушателя: {{silentUrl}}",
|
||||
"inviteURLFirstPartGeneral": "Вас приглашают присоединиться к конференции.",
|
||||
"inviteURLFirstPartPersonal": "{{name}} приглашает Вас присоединиться к конференции. \n",
|
||||
"inviteURLSecondPart": "\nПрисоединиться к конференции:\n{{url}}\n",
|
||||
@@ -614,8 +614,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Отображаемое имя",
|
||||
"setEmailInput": "Введите e-mail",
|
||||
"setEmailLabel": "E-mail для Gravatar",
|
||||
"setEmailInput": "Введите email",
|
||||
"setEmailLabel": "Email для Gravatar",
|
||||
"title": "Профиль"
|
||||
},
|
||||
"raisedHand": "Хочет говорить",
|
||||
@@ -774,7 +774,7 @@
|
||||
"videomute": "Вкл/Выкл видео"
|
||||
},
|
||||
"addPeople": "Добавить людей к вашему сеансу связи",
|
||||
"audioOnlyOff": "Отключить режим экономии пропуской способности",
|
||||
"audioOnlyOff": "Отключить режим экономии пропускной способности",
|
||||
"audioOnlyOn": "Включить режим экономии пропускной способности",
|
||||
"audioRoute": "Выбрать аудиоустройство",
|
||||
"authenticate": "Аутентифицировать",
|
||||
|
||||
@@ -553,7 +553,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Nastavte si meno",
|
||||
"setEmailInput": "Zadajte e-mail",
|
||||
"setEmailInput": "Zadajte email",
|
||||
"setEmailLabel": "Nastavte si email vašeho gravataru",
|
||||
"title": "Profil"
|
||||
},
|
||||
@@ -634,7 +634,7 @@
|
||||
"disableCrashReporting": "Vypnúť oznamovanie pádov",
|
||||
"disableCrashReportingWarning": "Naozak chcete vypnúť oznamovanie pádov? Nastavenie bude aktívne po reštartovaní aplikácie.",
|
||||
"displayName": "Ukázať",
|
||||
"email": "E-mail",
|
||||
"email": "Email",
|
||||
"header": "Nastavenia",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Adresa URL servera",
|
||||
@@ -884,7 +884,7 @@
|
||||
"dialogTitle": "Čakáreň",
|
||||
"disableDialogContent": "Čakáreň je zapnutá. Táto funkcia zabezpečuje, že do konferencie nemôžu vstúpiť neželaní účastníci. Chcete ju vypnúť?",
|
||||
"disableDialogSubmit": "Vypnúť",
|
||||
"emailField": "Zadajte vašu e-mailovú adresu",
|
||||
"emailField": "Zadajte vašu emailovú adresu",
|
||||
"enableDialogPasswordField": "Nastaviť heslo (voliteľné)",
|
||||
"enableDialogSubmit": "Zapnúť",
|
||||
"enableDialogText": "Čakáreň umožňuje zabezpečiť konferenciu tým, že účastníci môžu do konferencie vstúpiť len po schválení moderátorom.",
|
||||
|
||||
@@ -23,19 +23,19 @@
|
||||
"copyStream": "Kopiera livestreamlänk",
|
||||
"contacts": "Kontakter",
|
||||
"defaultEmail": "Din mailadress",
|
||||
"googleEmail": "Google e-mail",
|
||||
"googleEmail": "Google email",
|
||||
"inviteMoreHeader": "Du är enda deltagaren i mötet",
|
||||
"inviteMoreMailSubject": "Anslut till {{appName}} möte",
|
||||
"inviteMorePrompt": "Bjud in fler personer",
|
||||
"linkCopied": "Länk kopierad till utklipp",
|
||||
"outlookEmail": "Outlook e-mail",
|
||||
"outlookEmail": "Outlook email",
|
||||
"phoneNumbers": "telefonnummer",
|
||||
"searching": "Söker....",
|
||||
"shareInvite": "Dela mötes inbjudan",
|
||||
"shareLink": "Dela mötes inbjudan för att bjuda in fler",
|
||||
"shareStream": "Dela livestreamlänken",
|
||||
"sipAddresses": "sip-adress",
|
||||
"yahooEmail": "Yahoo e-mail"
|
||||
"yahooEmail": "Yahoo email"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
@@ -1079,7 +1079,7 @@
|
||||
"title": "Delade dokument"
|
||||
},
|
||||
"e2ee": {
|
||||
"labelToolTip": "jud- och videokommunikation för detta samtal är krypterad från dator till dator"
|
||||
"labelToolTip": "Ljud- och videokommunikation för detta samtal är krypterad från dator till dator"
|
||||
},
|
||||
"embedMeeting": {
|
||||
"title": "Bädda in möte"
|
||||
@@ -1165,8 +1165,8 @@
|
||||
"send": "Skicka"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "Skicka",
|
||||
"submit": "Skippa"
|
||||
"skip": "Skippa",
|
||||
"submit": "Skicka"
|
||||
},
|
||||
"results": {
|
||||
"vote": "Rösta",
|
||||
|
||||
@@ -598,8 +598,8 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Ім'я на екрані",
|
||||
"setEmailInput": "Зазначте e-mail",
|
||||
"setEmailLabel": "E-mail для Gravatar",
|
||||
"setEmailInput": "Зазначте email",
|
||||
"setEmailLabel": "Email для Gravatar",
|
||||
"title": "Профіль"
|
||||
},
|
||||
"raisedHand": "Бажає говорити",
|
||||
|
||||
@@ -514,7 +514,7 @@
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Nhập tên hiển thị của bạn",
|
||||
"setEmailInput": "Nhập địa chỉ e-mail",
|
||||
"setEmailInput": "Nhập địa chỉ email",
|
||||
"setEmailLabel": "Nhập địa chỉ Gravatar thư điện tử của bạn",
|
||||
"title": "Hồ sơ"
|
||||
},
|
||||
|
||||
@@ -39,6 +39,28 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "低頻寬"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "會議已結束。"
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"defaultName": "分組討論室 #{{index}}",
|
||||
"mainRoom": "主會議室",
|
||||
"actions": {
|
||||
"add": "新增討論室",
|
||||
"autoAssign": "自動分配至討論室",
|
||||
"close": "關閉",
|
||||
"join": "加入",
|
||||
"leaveBreakoutRoom": "離開討論室",
|
||||
"more": "更多",
|
||||
"remove": "移除",
|
||||
"sendToBreakoutRoom": "將參與者移至:"
|
||||
},
|
||||
"notifications": {
|
||||
"joinedTitle": "分組討論室",
|
||||
"joined": "正在加入 \"{{name}}\" 分組討論室",
|
||||
"joinedMainRoom": "正在加入主會議室"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "增加會議連結",
|
||||
"confirmAddLink": "您要為此活動加入 Jitsi 連結嗎?",
|
||||
@@ -70,13 +92,17 @@
|
||||
"titleWithPolls": "輸入名稱來使用交談"
|
||||
},
|
||||
"privateNotice": "私人訊息傳送至 {{recipient}}",
|
||||
"title": "對話",
|
||||
"titleWithPolls": "對話",
|
||||
"you": "您",
|
||||
"message": "訊息",
|
||||
"messageAccessibleTitle": "{{user}} 說:",
|
||||
"messageAccessibleTitleMe": "您說:",
|
||||
"smileysPanel": "表情符號面板"
|
||||
"smileysPanel": "表情符號面板",
|
||||
"tabs": {
|
||||
"chat": "聊天",
|
||||
"polls": "投票"
|
||||
},
|
||||
"title": "對話",
|
||||
"titleWithPolls": "對話",
|
||||
"you": "您"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "安裝適用於 Google 行事曆及 Office 365 整合的擴充功能",
|
||||
@@ -209,7 +235,9 @@
|
||||
"done": "完成",
|
||||
"e2eeDescription": "端對端加密目前是實驗性功能。請注意:啟用端對端加密將停用伺服器端提供的服務,例如:錄影、直播、及電話參與。且會議將只適用於支援 Insertable Streams 的瀏覽器。",
|
||||
"e2eeLabel": "啟用端對端加密",
|
||||
"e2eeDisabledDueToMaxModeDescription": "由於會議中的人數過多,故無法啟用端對端加密。",
|
||||
"e2eeWarning": "警告:看來不是每位此會議的參與者都有啟用端對端加密,如果您啟用了,他們可能無法看/聽到您。",
|
||||
"e2eeWillDisableDueToMaxModeDescription": "警告:如果有更多參與者加入會議,端對端加密將被自動停用。",
|
||||
"enterDisplayName": "請在此輸入您自己的名字",
|
||||
"embedMeeting": "嵌入會議",
|
||||
"error": "錯誤",
|
||||
@@ -245,24 +273,30 @@
|
||||
"micPermissionDeniedError": "您未取得權限使用麥克風。您仍然可參加會議,但是其他人無法聽到您。可以利用位址欄中的攝影裝置按鈕來修正。",
|
||||
"micTimeoutError": "無法啟動音訊裝置。連線逾時!",
|
||||
"micUnknownError": "不明原因造成麥克風無法使用。",
|
||||
"moderationAudioLabel": "允許參與者自我解除靜音",
|
||||
"moderationVideoLabel": "允許參與者開啟視訊",
|
||||
"muteEveryoneElseDialog": "靜音後,你就不能再解除對方的靜音,但對方可以隨時解除自己的靜音狀態。",
|
||||
"muteEveryoneElseTitle": "是否要讓除了 {{whom}} 以外的人靜音?",
|
||||
"muteEveryoneDialog": "是否要靜音所有人?靜音後,你就不能再解除對方的靜音,但對方可以隨時解除自己的靜音狀態。",
|
||||
"muteEveryoneDialogModerationOn": "參與者可以隨時傳送說話請求。",
|
||||
"muteEveryoneTitle": "靜音所有人?",
|
||||
"muteEveryoneElsesVideoDialog": "一旦停用,您就不能再重新開啟對方的攝影機,但對方隨時能重新開啟自己的攝影機。",
|
||||
"muteEveryoneElsesVideoTitle": "是否要關閉除了 {{whom}} 以外的人的攝影機?",
|
||||
"muteEveryonesVideoDialog": "您確定要停用所有人的攝影機嗎?停用後,您就無法再重新開啟,只有對方能自己重新開啟。",
|
||||
"muteEveryonesVideoDialogModerationOn": "參與者可以隨時傳送開啟視訊請求。",
|
||||
"muteEveryonesVideoDialogOk": "停用",
|
||||
"muteEveryonesVideoTitle": "關閉所有人的攝影機?",
|
||||
"muteEveryoneSelf": "您自己",
|
||||
"muteEveryoneStartMuted": "現在所有人皆已靜音",
|
||||
"muteParticipantBody": "您無法對他們解除靜音,但是他們自己隨時可以解除靜音。",
|
||||
"muteParticipantButton": "靜音",
|
||||
"muteParticipantDialog": "確定要將這位參與者設為靜音?您無法為他們解除,但他們可以隨時自行解除靜音。",
|
||||
"muteParticipantTitle": "將這位參與者設為靜音?",
|
||||
"muteParticipantsVideoDialog": "確定要將這位參與者設為靜音?您無法為他們解除,但他們可以隨時自行解除靜音。",
|
||||
"muteParticipantsVideoDialogModerationOn": "您確定要關閉此參與者的視訊鏡頭嗎?您和他都無法再將視訊重新開啟。",
|
||||
"muteParticipantsVideoButton": "停用攝影機",
|
||||
"muteParticipantsVideoTitle": "停用此參與者的攝影機?",
|
||||
"muteParticipantsVideoBody": "您無法重新開啟,只有對方能自己重新開啟。",
|
||||
"muteParticipantsVideoBodyModerationOn": "您和他都無法再將視訊重新開啟。",
|
||||
"noDropboxToken": "沒有有效的 Dropbox 權杖",
|
||||
"Ok": "確定",
|
||||
"password": "密碼",
|
||||
"passwordLabel": "會議已被參與者鎖定。請輸入 $t(lockRoomPassword) 以加入。",
|
||||
@@ -323,6 +357,7 @@
|
||||
"shareScreenWarningH1": "如果您只要分享畫面:",
|
||||
"shareScreenWarningD1": "您必須先停止分享音訊才能分享畫面。",
|
||||
"shareScreenWarningD2": "您必須先停止分享音訊,啟動畫面分享,然後勾選 \"分享音訊\" 選項。",
|
||||
"sharedVideoLinkPlaceholder": "YouTube 或影片連結",
|
||||
"stopLiveStreaming": "停止直播串流",
|
||||
"stopRecording": "停止錄影",
|
||||
"stopRecordingWarning": "確定要停止錄影嗎?",
|
||||
@@ -382,7 +417,8 @@
|
||||
"image7" : "日出",
|
||||
"desktopShareError": "無法建立桌面分享",
|
||||
"desktopShare":"桌面分享",
|
||||
"webAssemblyWarning": "不支援 WebAssembly"
|
||||
"webAssemblyWarning": "不支援 WebAssembly",
|
||||
"backgroundEffectError": "無法套用背景效果。"
|
||||
},
|
||||
"feedback": {
|
||||
"average": "普通",
|
||||
@@ -419,6 +455,10 @@
|
||||
"invitePhone": "要用電話參加會議,請使用:{{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "要找另一組撥入號碼?\n請見會議撥入號碼:{{url}}\n\n\n如果也要用室內電話撥打,不用連接語音進行加入:{{silentUrl}}",
|
||||
"inviteSipEndpoint": "如果要透過 SIP 地址加入,請輸入:{{sipUri}}",
|
||||
"inviteTextiOSPersonal": "{{name}} 邀請您加入會議。",
|
||||
"inviteTextiOSJoinSilent": "如果您使用了市內電話撥入,請使用此連結來停用音訊:{{silentUrl}}。",
|
||||
"inviteTextiOSInviteUrl": "點擊此連結以加入:{{inviteUrl}}。",
|
||||
"inviteTextiOSPhone": "若要透過電話加入,請使用此號碼:{{number}},,{{conferenceID}}#。如果您需要其他號碼,點擊此連結以檢視完整列表:{{didUrl}}。",
|
||||
"inviteURLFirstPartGeneral": "您受邀參加會議。",
|
||||
"inviteURLFirstPartPersonal": "{{name}} 正在邀請您加入會議。\n",
|
||||
"inviteURLSecondPart": "\n加入會議:\n{{url}}\n",
|
||||
@@ -483,6 +523,7 @@
|
||||
"expandedPending": "直播串流正被啟動...",
|
||||
"failedToStart": "直播串流啟動失敗",
|
||||
"getStreamKeyManually": "我們無法解析任何直播串流,請從 YouTube 取得您的直播串流金鑰。",
|
||||
"inProgress": "正在錄製或直播",
|
||||
"invalidStreamKey": "直播串流金鑰可能不正確。",
|
||||
"off": "直播串流已經停止",
|
||||
"offBy": "{{name}} 停止了直播串流",
|
||||
@@ -490,6 +531,7 @@
|
||||
"onBy": "{{name}} 啟動了直播串流",
|
||||
"pending": "啟動直播串流...",
|
||||
"serviceName": "直播串流服務",
|
||||
"sessionAlreadyActive": "已在錄製或直播此工作階段。",
|
||||
"signedInAs": "您目前登入名稱為:",
|
||||
"signIn": "使用 Google 帳戶登入",
|
||||
"signInCTA": "輸入 YouTube 直播串流密鑰,或登入 YouTube 帳號。",
|
||||
@@ -533,6 +575,10 @@
|
||||
"lockRoomPasswordUppercase": "密碼",
|
||||
"me": "我",
|
||||
"notify": {
|
||||
"allowAction": "允許",
|
||||
"allowedUnmute": "您可以將麥克風解除靜音、開啟視訊,或是分享您的畫面。",
|
||||
"audioUnmuteBlockedTitle": "麥克風解除靜音遭封鎖!",
|
||||
"audioUnmuteBlockedDescription": "麥克風解除靜音操作由於系統限制而被暫時封鎖。",
|
||||
"connectedOneMember": "{{name}} 加入了會議",
|
||||
"connectedThreePlusMembers": "{{name}} 及 {{count}} 位人員加入了會議",
|
||||
"connectedTwoMembers": "{{first}} 及 {{second}} 加入了會議",
|
||||
@@ -545,6 +591,9 @@
|
||||
"invitedThreePlusMembers": "{{name}} 及 {{count}} 位人員已受邀請",
|
||||
"invitedTwoMembers": "{{first}} 及 {{second}} 已受邀請",
|
||||
"kickParticipant": "{{kicked}} 已被 {{kicker}} 踢出會議",
|
||||
"leftOneMember": "{{name}} 已離開會議",
|
||||
"leftThreePlusMembers": "{{name}} 和其他人已離開會議",
|
||||
"leftTwoMembers": "{{first}} 和 {{second}} 已離開會議",
|
||||
"me": "自己",
|
||||
"moderator": "主持人權限已經取得!",
|
||||
"muted": "您已經啟動通話,處於靜音。",
|
||||
@@ -583,26 +632,71 @@
|
||||
"moderationStoppedTitle": "停止管理",
|
||||
"moderationToggleDescription": "由 {{participantDisplayName}}",
|
||||
"raiseHandAction": "舉手",
|
||||
"groupTitle": "通知"
|
||||
"reactionSounds": "停用音效",
|
||||
"reactionSoundsForAll": "為所有人停用音效",
|
||||
"groupTitle": "通知",
|
||||
"videoUnmuteBlockedTitle": "視訊鏡頭解除靜音遭封鎖!",
|
||||
"videoUnmuteBlockedDescription": "視訊鏡頭解除靜音操作由於系統限制而被暫時封鎖。"
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "關閉",
|
||||
"header": "參與者",
|
||||
"headings": {
|
||||
"lobby": "大廳 ({{count}})",
|
||||
"participantsList": "會議參與者 ({{count}})"
|
||||
"participantsList": "會議參與者 ({{count}})",
|
||||
"waitingLobby": "於大廳等待 ({{count}})"
|
||||
},
|
||||
"actions": {
|
||||
"allow": "允許參與者能夠:",
|
||||
"allowVideo": "允許視訊",
|
||||
"audioModeration": "自我解除靜音",
|
||||
"blockEveryoneMicCamera": "封鎖所有人的麥克風和視訊鏡頭",
|
||||
"invite": "邀請他人",
|
||||
"askUnmute": "要求解除靜音",
|
||||
"moreModerationActions": "更多管理選項",
|
||||
"moreParticipantOptions": "更多參與者選項",
|
||||
"mute": "靜音",
|
||||
"muteAll": "靜音所有人",
|
||||
"startModeration": "將他們解除靜音或開始視訊",
|
||||
"muteEveryoneElse": "靜音其他人",
|
||||
"stopEveryonesVideo": "停止所有人的視訊",
|
||||
"stopVideo": "停止影片"
|
||||
}
|
||||
"stopVideo": "停止影片",
|
||||
"unblockEveryoneMicCamera": "解除封鎖所有人的麥克風及視訊鏡頭",
|
||||
"videoModeration": "開啟視訊",
|
||||
"moreModerationControls": "更多管理控制項"
|
||||
},
|
||||
"search": "搜尋參與者"
|
||||
},
|
||||
"passwordSetRemotely": "由其他參與者設定",
|
||||
"passwordDigitsOnly": "上限為 {{number}} 位數",
|
||||
"polls": {
|
||||
"by": "由 {{ name }}",
|
||||
"create": {
|
||||
"addOption": "新增選項",
|
||||
"answerPlaceholder": "選項 {{index}}",
|
||||
"create": "建立投票",
|
||||
"cancel": "取消",
|
||||
"pollOption" : "投票選項 {{index}}",
|
||||
"pollQuestion" : "投票問題",
|
||||
"questionPlaceholder": "詢問問題",
|
||||
"removeOption": "移除選項",
|
||||
"send": "傳送"
|
||||
},
|
||||
"answer": {
|
||||
"skip": "跳過",
|
||||
"submit": "提交"
|
||||
},
|
||||
"results": {
|
||||
"vote": "投票",
|
||||
"changeVote": "修改投票",
|
||||
"empty": "目前會議中沒有任何投票。在這裡建立您的投票吧!",
|
||||
"hideDetailedResults": "隱藏詳細資訊",
|
||||
"showDetailedResults": "顯示詳細資訊"
|
||||
},
|
||||
"notification": {
|
||||
"title": "此會議有一項新投票",
|
||||
"description": "開啟投票分頁以參與投票"
|
||||
}
|
||||
},
|
||||
"poweredby": "技術支援",
|
||||
"prejoin": {
|
||||
"audioAndVideoError": "音訊及視訊錯誤:",
|
||||
@@ -643,6 +737,7 @@
|
||||
"errorDialOutFailed": "因通話失敗而無法撥出。",
|
||||
"errorDialOutStatus": "取得撥出狀態時發生錯誤",
|
||||
"errorMissingName": "請輸入您的名字以加入會議",
|
||||
"errorNoPermissions": "您必須啟用麥克風及視訊鏡頭存取權限",
|
||||
"errorStatusCode": "撥出失敗,狀態代碼:{{status}}",
|
||||
"errorValidation": "號碼驗證失敗",
|
||||
"iWantToDialIn": "我想要撥入",
|
||||
@@ -700,6 +795,7 @@
|
||||
"expandedPending": "錄影正在啟動...",
|
||||
"failedToStart": "錄影啟動失敗",
|
||||
"fileSharingdescription": "分享錄影給會議參與者",
|
||||
"inProgress": "正在錄製或直播",
|
||||
"linkGenerated": "我們建立了您的錄影檔的連結。",
|
||||
"live": "直播",
|
||||
"loggedIn": "以 {{userName}} 登入",
|
||||
@@ -712,6 +808,7 @@
|
||||
"serviceDescription": "您的錄影會由錄影服務儲存",
|
||||
"serviceDescriptionCloud": "雲端錄製",
|
||||
"serviceName": "錄影服務",
|
||||
"sessionAlreadyActive": "已在錄製或直播此工作階段。",
|
||||
"signIn": "登入",
|
||||
"signOut": "登出",
|
||||
"unavailable": "喔哦!{{serviceName}} 目前無法使用。我們正在解決此問題,請稍後再試。",
|
||||
@@ -741,6 +838,7 @@
|
||||
"devices": "裝置",
|
||||
"followMe": "全部人跟隨我",
|
||||
"framesPerSecond": "幀數",
|
||||
"incomingMessage": "新訊息",
|
||||
"language": "語言",
|
||||
"loggedIn": "以 {{name}} 登入",
|
||||
"microphones": "麥克風",
|
||||
@@ -748,13 +846,20 @@
|
||||
"more": "更多",
|
||||
"name": "名稱",
|
||||
"noDevice": "無",
|
||||
"participantJoined": "參與者已加入",
|
||||
"participantLeft": "參與者已離開",
|
||||
"playSounds": "播放音效",
|
||||
"reactions": "會議反應",
|
||||
"sameAsSystem": "系統預設 ({{label}})",
|
||||
"selectAudioOutput": "音訊輸出",
|
||||
"selectCamera": "攝影裝置",
|
||||
"selectMic": "麥克風",
|
||||
"sounds": "音效",
|
||||
"speakers": "喇叭",
|
||||
"startAudioMuted": "全部人啟動時處於靜音",
|
||||
"startReactionsMuted": "為所有人關閉反應音效",
|
||||
"startVideoMuted": "全部人啟動時處於隱藏",
|
||||
"talkWhileMuted": "靜音時說話",
|
||||
"title": "設定"
|
||||
},
|
||||
"settingsView": {
|
||||
@@ -785,12 +890,20 @@
|
||||
},
|
||||
"speaker": "喇叭",
|
||||
"speakerStats": {
|
||||
"search": "搜尋",
|
||||
"hours": "{{count}}時",
|
||||
"minutes": "{{count}}分",
|
||||
"name": "名稱",
|
||||
"seconds": "{{count}}秒",
|
||||
"speakerStats": "聲音輸出數據",
|
||||
"speakerTime": "聲音輸出時間"
|
||||
"speakerTime": "聲音輸出時間",
|
||||
"happy": "開心",
|
||||
"neutral": "中立",
|
||||
"sad": "悲傷",
|
||||
"surprised": "驚訝",
|
||||
"angry": "憤怒",
|
||||
"fearful": "害怕",
|
||||
"disgusted": "作嘔"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -806,6 +919,7 @@
|
||||
"accessibilityLabel": {
|
||||
"audioOnly": "切換僅聲音",
|
||||
"audioRoute": "選擇音訊裝置",
|
||||
"boo": "喝倒彩",
|
||||
"callQuality": "管理影像品質",
|
||||
"cc": "切換字幕",
|
||||
"chat": "切換聊天視窗",
|
||||
@@ -870,11 +984,13 @@
|
||||
"audioOnlyOn": "啟用低頻寬模式",
|
||||
"audioRoute": "選擇音訊裝置",
|
||||
"authenticate": "認證",
|
||||
"boo": "喝倒彩",
|
||||
"callQuality": "管理影像品質",
|
||||
"chat": "開啟/關閉聊天欄",
|
||||
"clap": "鼓掌",
|
||||
"closeChat": "關閉聊天欄",
|
||||
"closeReactionsMenu": "關閉反應選單",
|
||||
"disableReactionSounds": "您可以停用此會議的反應音效",
|
||||
"documentClose": "關閉分享檔案欄",
|
||||
"documentOpen": "開啟分享檔案欄",
|
||||
"download": "下載我們的應用程式",
|
||||
@@ -888,7 +1004,9 @@
|
||||
"hangup": "離開",
|
||||
"help": "說明",
|
||||
"invite": "邀請人員",
|
||||
"joy": "高興",
|
||||
"joinBreakoutRoom": "加入分組討論室",
|
||||
"laugh": "大笑",
|
||||
"leaveBreakoutRoom": "離開分組討論室",
|
||||
"like": "比讚",
|
||||
"lobbyButtonDisable": "停用大廳模式",
|
||||
"lobbyButtonEnable": "啟用大廳模式",
|
||||
@@ -910,17 +1028,16 @@
|
||||
"openChat": "開啟聊天欄",
|
||||
"openReactionsMenu": "開啟反應選單",
|
||||
"participants": "參與者",
|
||||
"party": "慶祝",
|
||||
"pip": "進入子母畫面模式",
|
||||
"privateMessage": "發送私人訊息",
|
||||
"privateMessage": "傳送私人訊息",
|
||||
"profile": "編輯您的簡介",
|
||||
"raiseHand": "舉手/取消請求發言",
|
||||
"raiseYourHand": "舉手發言",
|
||||
"raiseHand": "舉手/放下",
|
||||
"raiseYourHand": "舉手",
|
||||
"reactionBoo": "傳送喝倒彩反應",
|
||||
"reactionClap": "傳送鼓掌反應",
|
||||
"reactionJoy": "傳送高興反應",
|
||||
"reactionLaugh": "傳送大笑反應",
|
||||
"reactionLike": "傳送比讚反應",
|
||||
"reactionParty": "傳送拉炮反應",
|
||||
"reactionSmile": "傳送微笑反應",
|
||||
"reactionSilence": "傳送靜默反應",
|
||||
"reactionSurprised": "傳送驚訝反應",
|
||||
"security": "安全性選項",
|
||||
"Settings": "設定",
|
||||
@@ -979,7 +1096,10 @@
|
||||
"pending": "已向 {{displayName}} 發送邀請"
|
||||
},
|
||||
"videoStatus": {
|
||||
"adjustFor": "調整:",
|
||||
"audioOnly": "僅聲音",
|
||||
"bestPerformance": "最佳效能",
|
||||
"highestQuality": "最佳品質",
|
||||
"audioOnlyExpanded": "您目前處於低頻寬模式。在此模式下您僅會收到語音及螢幕分享。",
|
||||
"callQuality": "影像品質",
|
||||
"hd": "HD",
|
||||
@@ -990,6 +1110,7 @@
|
||||
"ld": "LD",
|
||||
"ldTooltip": "觀看低解析度影像",
|
||||
"lowDefinition": "低解析度",
|
||||
"performanceSettings": "效能設定",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "觀看標準解析度影像",
|
||||
"standardDefinition": "標準解析度"
|
||||
@@ -1063,6 +1184,12 @@
|
||||
"button": "邀請其他人",
|
||||
"youAreAlone": "您是會議中的唯一一個人"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "條款"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "隱私權"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "說明中心"
|
||||
},
|
||||
@@ -1081,6 +1208,7 @@
|
||||
"enableDialogText": "大廳模式能夠保護您的會議,只有被管理員認可後才能加入會議。",
|
||||
"enterPasswordButton": "輸入會議密碼",
|
||||
"enterPasswordTitle": "輸入密碼以加入會議",
|
||||
"errorMissingPassword": "請輸入會議密碼",
|
||||
"invalidPassword": "密碼錯誤",
|
||||
"joiningMessage": "一旦他人接受您的請求,即可加入會議",
|
||||
"joinWithPasswordMessage": "正在嘗試透過密碼加入,請稍候...",
|
||||
@@ -1099,6 +1227,7 @@
|
||||
"passwordField": "輸入會議密碼",
|
||||
"passwordJoinButton": "加入",
|
||||
"reject": "拒絕",
|
||||
"rejectAll": "拒絕所有人",
|
||||
"toggleLabel": "啟用大廳"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,28 @@
|
||||
"audioOnly": {
|
||||
"audioOnly": "Low bandwidth"
|
||||
},
|
||||
"blankPage": {
|
||||
"meetingEnded": "Meeting ended."
|
||||
},
|
||||
"breakoutRooms": {
|
||||
"defaultName": "Breakout room #{{index}}",
|
||||
"mainRoom": "Main room",
|
||||
"actions": {
|
||||
"add": "Add breakout room",
|
||||
"autoAssign": "Auto assign to breakout rooms",
|
||||
"close": "Close",
|
||||
"join": "Join",
|
||||
"leaveBreakoutRoom": "Leave breakout room",
|
||||
"more": "More",
|
||||
"remove": "Remove",
|
||||
"sendToBreakoutRoom": "Send participant to:"
|
||||
},
|
||||
"notifications": {
|
||||
"joinedTitle": "Breakout Rooms",
|
||||
"joined": "Joining the \"{{name}}\" breakout room",
|
||||
"joinedMainRoom": "Joining the main room"
|
||||
}
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Add a meeting link",
|
||||
"confirmAddLink": "Do you want to add a Jitsi link to this event?",
|
||||
@@ -158,7 +180,8 @@
|
||||
"joinInApp": "Join this meeting using the app",
|
||||
"launchWebButton": "Launch in web",
|
||||
"title": "Launching your meeting in {{app}}...",
|
||||
"tryAgainButton": "Try again in desktop"
|
||||
"tryAgainButton": "Try again in desktop",
|
||||
"unsupportedBrowser": "It looks like you're using a browser we don't support."
|
||||
},
|
||||
"defaultLink": "e.g. {{url}}",
|
||||
"defaultNickname": "ex. Jane Pink",
|
||||
@@ -396,6 +419,7 @@
|
||||
"desktopShareError": "Could not create desktop share",
|
||||
"desktopShare":"Desktop share",
|
||||
"webAssemblyWarning": "WebAssembly not supported",
|
||||
"webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser",
|
||||
"backgroundEffectError": "Failed to apply background effect."
|
||||
},
|
||||
"feedback": {
|
||||
@@ -446,7 +470,7 @@
|
||||
"noPassword": "None",
|
||||
"noRoom": "No room was specified to dial-in into.",
|
||||
"numbers": "Dial-in Numbers",
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"password": "$t(lockRoomPasswordUppercase): ",
|
||||
"sip": "SIP address",
|
||||
"title": "Share",
|
||||
"tooltip": "Share link and dial-in info for this meeting",
|
||||
@@ -501,6 +525,7 @@
|
||||
"expandedPending": "The live streaming is being started...",
|
||||
"failedToStart": "Live Streaming failed to start",
|
||||
"getStreamKeyManually": "We weren’t able to fetch any live streams. Try getting your live stream key from YouTube.",
|
||||
"inProgress": "Recording or live streaming in progress",
|
||||
"invalidStreamKey": "Live stream key may be incorrect.",
|
||||
"off": "Live Streaming stopped",
|
||||
"offBy": "{{name}} stopped the live streaming",
|
||||
@@ -508,6 +533,7 @@
|
||||
"onBy": "{{name}} started the live streaming",
|
||||
"pending": "Starting Live Stream...",
|
||||
"serviceName": "Live Streaming service",
|
||||
"sessionAlreadyActive": "This session is already being recorded or live streamed.",
|
||||
"signedInAs": "You are currently signed in as:",
|
||||
"signIn": "Sign in with Google",
|
||||
"signInCTA": "Sign in or enter your live stream key from YouTube.",
|
||||
@@ -553,6 +579,8 @@
|
||||
"notify": {
|
||||
"allowAction": "Allow",
|
||||
"allowedUnmute": "You can unmute your microphone, start your camera or share your screen.",
|
||||
"audioUnmuteBlockedTitle": "Mic unmute blocked!",
|
||||
"audioUnmuteBlockedDescription": "Mic unmute operation has been temporarily blocked because of system limits.",
|
||||
"connectedOneMember": "{{name}} joined the meeting",
|
||||
"connectedThreePlusMembers": "{{name}} and many others joined the meeting",
|
||||
"connectedTwoMembers": "{{first}} and {{second}} joined the meeting",
|
||||
@@ -564,6 +592,9 @@
|
||||
"invitedThreePlusMembers": "{{name}} and {{count}} others have been invited",
|
||||
"invitedTwoMembers": "{{first}} and {{second}} have been invited",
|
||||
"kickParticipant": "{{kicked}} was kicked by {{kicker}}",
|
||||
"leftOneMember": "{{name}} left the meeting",
|
||||
"leftThreePlusMembers": "{{name}} and many others left the meeting",
|
||||
"leftTwoMembers": "{{first}} and {{second}} left the meeting",
|
||||
"me": "Me",
|
||||
"moderator": "You're now a moderator",
|
||||
"muted": "You have started the conversation muted.",
|
||||
@@ -575,8 +606,10 @@
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removed by another participant",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) set by another participant",
|
||||
"raisedHand": "Would like to speak.",
|
||||
"raisedHands": "{{participantName}} and {{raisedHands}} more people",
|
||||
"screenShareNoAudio": " Share audio box was not checked in the window selection screen.",
|
||||
"screenShareNoAudioTitle": "Couldn't share system audio!",
|
||||
"selfViewTitle": "You can always un-hide the self-view from settings",
|
||||
"somebody": "Somebody",
|
||||
"startSilentTitle": "You joined with no audio output!",
|
||||
"startSilentDescription": "Rejoin the meeting to enable audio",
|
||||
@@ -603,7 +636,10 @@
|
||||
"moderationToggleDescription": "by {{participantDisplayName}}",
|
||||
"raiseHandAction": "Raise hand",
|
||||
"reactionSounds": "Disable sounds",
|
||||
"groupTitle": "Notifications"
|
||||
"reactionSoundsForAll": "Disable sounds for all",
|
||||
"groupTitle": "Notifications",
|
||||
"videoUnmuteBlockedTitle": "Camera unmute and desktop sharing blocked!",
|
||||
"videoUnmuteBlockedDescription": "Camera unmute and desktop sharing operation have been temporarily blocked because of system limits."
|
||||
},
|
||||
"participantsPane": {
|
||||
"close": "Close",
|
||||
@@ -621,13 +657,15 @@
|
||||
"invite": "Invite Someone",
|
||||
"askUnmute": "Ask to unmute",
|
||||
"moreModerationActions": "More moderation options",
|
||||
"moreParticipantOptions": "More participant options",
|
||||
"mute": "Mute",
|
||||
"muteAll": "Mute all",
|
||||
"muteEveryoneElse": "Mute everyone else",
|
||||
"stopEveryonesVideo": "Stop everyone's video",
|
||||
"stopVideo": "Stop video",
|
||||
"unblockEveryoneMicCamera": "Unblock everyone's mic and camera",
|
||||
"videoModeration": "Start their video"
|
||||
"videoModeration": "Start their video",
|
||||
"moreModerationControls": "More moderation controls"
|
||||
},
|
||||
"search": "Search participants"
|
||||
},
|
||||
@@ -739,7 +777,7 @@
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
"setDisplayNameLabel": "Set your display name",
|
||||
"setEmailInput": "Enter e-mail",
|
||||
"setEmailInput": "Enter email",
|
||||
"setEmailLabel": "Set your gravatar email",
|
||||
"title": "Profile"
|
||||
},
|
||||
@@ -760,6 +798,7 @@
|
||||
"expandedPending": "Recording is being started...",
|
||||
"failedToStart": "Recording failed to start",
|
||||
"fileSharingdescription": "Share recording with meeting participants",
|
||||
"inProgress": "Recording or live streaming in progress",
|
||||
"linkGenerated": "We have generated a link to your recording.",
|
||||
"live": "LIVE",
|
||||
"loggedIn": "Logged in as {{userName}}",
|
||||
@@ -772,6 +811,7 @@
|
||||
"serviceDescription": "Your recording will be saved by the recording service",
|
||||
"serviceDescriptionCloud": "Cloud recording",
|
||||
"serviceName": "Recording service",
|
||||
"sessionAlreadyActive": "This session is already being recorded or live streamed.",
|
||||
"signIn": "Sign in",
|
||||
"signOut": "Sign out",
|
||||
"unavailable": "Oops! The {{serviceName}} is currently unavailable. We're working on resolving the issue. Please try again later.",
|
||||
@@ -784,8 +824,8 @@
|
||||
"security": {
|
||||
"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"
|
||||
"header": "Security Options",
|
||||
"insecureRoomNameWarning": "The room name is unsafe. Unwanted participants may join your conference. Consider securing your meeting using the security button."
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
@@ -820,6 +860,7 @@
|
||||
"sounds": "Sounds",
|
||||
"speakers": "Speakers",
|
||||
"startAudioMuted": "Everyone starts muted",
|
||||
"startReactionsMuted": "Mute reaction sounds for everyone",
|
||||
"startVideoMuted": "Everyone starts hidden",
|
||||
"talkWhileMuted": "Talk while muted",
|
||||
"title": "Settings"
|
||||
@@ -852,13 +893,20 @@
|
||||
},
|
||||
"speaker": "Speaker",
|
||||
"speakerStats": {
|
||||
"search": "Search",
|
||||
"angry": "Angry",
|
||||
"disgusted": "Disgusted",
|
||||
"fearful": "Fearful",
|
||||
"happy": "Happy",
|
||||
"hours": "{{count}}h",
|
||||
"minutes": "{{count}}m",
|
||||
"name": "Name",
|
||||
"neutral": "Neutral",
|
||||
"sad": "Sad",
|
||||
"search": "Search",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerTime": "Speaker Time",
|
||||
"speakerStats": "Speaker Stats",
|
||||
"speakerTime": "Speaker Time"
|
||||
"surprised": "Surprised"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -875,6 +923,7 @@
|
||||
"audioOnly": "Toggle audio only",
|
||||
"audioRoute": "Select the sound device",
|
||||
"boo": "Boo",
|
||||
"breakoutRoom": "Join/leave breakout room",
|
||||
"callQuality": "Manage video quality",
|
||||
"cc": "Toggle subtitles",
|
||||
"chat": "Open / Close chat",
|
||||
@@ -958,7 +1007,9 @@
|
||||
"hangup": "Leave the meeting",
|
||||
"help": "Help",
|
||||
"invite": "Invite people",
|
||||
"joinBreakoutRoom": "Join breakout room",
|
||||
"laugh": "Laugh",
|
||||
"leaveBreakoutRoom": "Leave breakout room",
|
||||
"like": "Thumbs Up",
|
||||
"lobbyButtonDisable": "Disable lobby mode",
|
||||
"lobbyButtonEnable": "Enable lobby mode",
|
||||
@@ -1075,6 +1126,7 @@
|
||||
"domuteVideoOfOthers": "Disable camera of everyone else",
|
||||
"flip": "Flip",
|
||||
"grantModerator": "Grant Moderator Rights",
|
||||
"hideSelfView": "Hide self view",
|
||||
"kick": "Kick out",
|
||||
"moderator": "Moderator",
|
||||
"mute": "Participant is muted",
|
||||
@@ -1136,6 +1188,12 @@
|
||||
"button": "Invite others",
|
||||
"youAreAlone": "You are the only one in the meeting"
|
||||
},
|
||||
"termsView": {
|
||||
"header": "Terms"
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "Privacy"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Help center"
|
||||
},
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
import {
|
||||
createApiEvent,
|
||||
@@ -52,7 +52,7 @@ import {
|
||||
processExternalDeviceRequest
|
||||
} from '../../react/features/device-selection/functions';
|
||||
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
|
||||
import { toggleE2EE } from '../../react/features/e2ee/actions';
|
||||
import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/actions';
|
||||
import { setVolume } from '../../react/features/filmstrip';
|
||||
import { invite } from '../../react/features/invite';
|
||||
import {
|
||||
@@ -66,8 +66,9 @@ import { toggleLobbyMode, setKnockingParticipantApproval } from '../../react/fea
|
||||
import { isForceMuted } from '../../react/features/participants-pane/functions';
|
||||
import { RECORDING_TYPES } from '../../react/features/recording/constants';
|
||||
import { getActiveSession } from '../../react/features/recording/functions';
|
||||
import { isScreenAudioSupported } from '../../react/features/screen-share';
|
||||
import { isScreenAudioSupported, isScreenVideoShared } from '../../react/features/screen-share';
|
||||
import { startScreenShareFlow, startAudioScreenShareFlow } from '../../react/features/screen-share/actions';
|
||||
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture';
|
||||
import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';
|
||||
import { toggleTileView, setTileView } from '../../react/features/video-layout';
|
||||
import { muteAllParticipants } from '../../react/features/video-menu/actions';
|
||||
@@ -364,6 +365,9 @@ function initCommands() {
|
||||
logger.debug('Toggle E2EE key command received');
|
||||
APP.store.dispatch(toggleE2EE(enabled));
|
||||
},
|
||||
'set-media-encryption-key': keyInfo => {
|
||||
APP.store.dispatch(setMediaEncryptionKey(JSON.parse(keyInfo)));
|
||||
},
|
||||
'set-video-quality': frameHeight => {
|
||||
logger.debug('Set video quality command received');
|
||||
sendAnalytics(createApiEvent('set.video.quality'));
|
||||
@@ -467,6 +471,9 @@ function initCommands() {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isScreenVideoShared(APP.store.getState())) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
|
||||
}
|
||||
conference.startRecording(recordingConfig);
|
||||
},
|
||||
|
||||
@@ -495,6 +502,7 @@ function initCommands() {
|
||||
const activeSession = getActiveSession(state, mode);
|
||||
|
||||
if (activeSession && activeSession.id) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureSummary(false));
|
||||
conference.stopRecording(activeSession.id);
|
||||
} else {
|
||||
logger.error('No recording or streaming session found');
|
||||
@@ -1467,12 +1475,14 @@ class API {
|
||||
* available.
|
||||
*
|
||||
* @param {string} link - The recording download link.
|
||||
* @param {number} ttl - The recording download link time to live.
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyRecordingLinkAvailable(link: string) {
|
||||
notifyRecordingLinkAvailable(link: string, ttl: number) {
|
||||
this._sendEvent({
|
||||
name: 'recording-link-available',
|
||||
link
|
||||
link,
|
||||
ttl
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,6 @@ import { parseURLParams } from '../../react/features/base/util/parseURLParams';
|
||||
export const API_ID = parseURLParams(window.location).jitsi_meet_external_api_id;
|
||||
|
||||
/**
|
||||
* The payload name for the datachannel/endpoint text message event
|
||||
* The payload name for the datachannel/endpoint text message event.
|
||||
*/
|
||||
export const ENDPOINT_TEXT_MESSAGE_NAME = 'endpoint-text-message';
|
||||
|
||||
47
modules/API/external/external_api.js
vendored
47
modules/API/external/external_api.js
vendored
@@ -24,7 +24,7 @@ const ALWAYS_ON_TOP_FILENAMES = [
|
||||
|
||||
/**
|
||||
* Maps the names of the commands expected by the API with the name of the
|
||||
* commands expected by jitsi-meet
|
||||
* commands expected by jitsi-meet.
|
||||
*/
|
||||
const commands = {
|
||||
answerKnockingParticipant: 'answer-knocking-participant',
|
||||
@@ -50,6 +50,7 @@ const commands = {
|
||||
sendTones: 'send-tones',
|
||||
setFollowMe: 'set-follow-me',
|
||||
setLargeVideoParticipant: 'set-large-video-participant',
|
||||
setMediaEncryptionKey: 'set-media-encryption-key',
|
||||
setParticipantVolume: 'set-participant-volume',
|
||||
setTileView: 'set-tile-view',
|
||||
setVideoQuality: 'set-video-quality',
|
||||
@@ -63,6 +64,7 @@ const commands = {
|
||||
toggleCamera: 'toggle-camera',
|
||||
toggleCameraMirror: 'toggle-camera-mirror',
|
||||
toggleChat: 'toggle-chat',
|
||||
toggleE2EE: 'toggle-e2ee',
|
||||
toggleFilmStrip: 'toggle-film-strip',
|
||||
toggleModeration: 'toggle-moderation',
|
||||
toggleRaiseHand: 'toggle-raise-hand',
|
||||
@@ -75,7 +77,7 @@ const commands = {
|
||||
|
||||
/**
|
||||
* Maps the names of the events expected by the API with the name of the
|
||||
* events expected by jitsi-meet
|
||||
* events expected by jitsi-meet.
|
||||
*/
|
||||
const events = {
|
||||
'avatar-changed': 'avatarChanged',
|
||||
@@ -129,7 +131,8 @@ const events = {
|
||||
};
|
||||
|
||||
/**
|
||||
* Last id of api object
|
||||
* Last id of api object.
|
||||
*
|
||||
* @type {number}
|
||||
*/
|
||||
let id = 0;
|
||||
@@ -387,7 +390,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
}
|
||||
|
||||
return ALWAYS_ON_TOP_FILENAMES.map(
|
||||
filename => (new URL(filename, baseURL)).href
|
||||
filename => new URL(filename, baseURL).href
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1184,6 +1187,40 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
* @returns {void}
|
||||
*/
|
||||
stopRecording(mode) {
|
||||
this.executeCommand('startRecording', mode);
|
||||
this.executeCommand('stopRecording', mode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets e2ee enabled/disabled.
|
||||
*
|
||||
* @param {boolean} enabled - The new value for e2ee enabled.
|
||||
* @returns {void}
|
||||
*/
|
||||
toggleE2EE(enabled) {
|
||||
this.executeCommand('toggleE2EE', enabled);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the key and keyIndex for e2ee.
|
||||
*
|
||||
* @param {Object} keyInfo - Json containing key information.
|
||||
* @param {CryptoKey} [keyInfo.encryptionKey] - The encryption key.
|
||||
* @param {number} [keyInfo.index] - The index of the encryption key.
|
||||
* @returns {void}
|
||||
*/
|
||||
async setMediaEncryptionKey(keyInfo) {
|
||||
const { key, index } = keyInfo;
|
||||
|
||||
if (key) {
|
||||
const exportedKey = await crypto.subtle.exportKey('raw', key);
|
||||
|
||||
this.executeCommand('setMediaEncryptionKey', JSON.stringify({
|
||||
exportedKey: Array.from(new Uint8Array(exportedKey)),
|
||||
index }));
|
||||
} else {
|
||||
this.executeCommand('setMediaEncryptionKey', JSON.stringify({
|
||||
exportedKey: false,
|
||||
index }));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
2
modules/API/external/functions.js
vendored
2
modules/API/external/functions.js
vendored
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
const logger = Logger.getLogger(__filename);
|
||||
|
||||
|
||||
@@ -3,14 +3,19 @@
|
||||
|
||||
const UI = {};
|
||||
|
||||
import Logger from '@jitsi/logger';
|
||||
import EventEmitter from 'events';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
|
||||
import { isMobileBrowser } from '../../react/features/base/environment/utils';
|
||||
import { setColorAlpha } from '../../react/features/base/util';
|
||||
import { setDocumentUrl } from '../../react/features/etherpad';
|
||||
import { setFilmstripVisible } from '../../react/features/filmstrip';
|
||||
import { joinLeaveNotificationsDisabled, setNotificationsEnabled } from '../../react/features/notifications';
|
||||
import {
|
||||
joinLeaveNotificationsDisabled,
|
||||
setNotificationsEnabled,
|
||||
showNotification,
|
||||
NOTIFICATION_TIMEOUT_TYPE
|
||||
} from '../../react/features/notifications';
|
||||
import {
|
||||
dockToolbox,
|
||||
setToolboxEnabled,
|
||||
@@ -215,12 +220,10 @@ UI.updateUserStatus = (user, status) => {
|
||||
|
||||
const displayName = user.getDisplayName();
|
||||
|
||||
messageHandler.participantNotification(
|
||||
displayName,
|
||||
'',
|
||||
'connected',
|
||||
'dialOut.statusMessage',
|
||||
{ status: UIUtil.escapeHtml(status) });
|
||||
APP.store.dispatch(showNotification({
|
||||
titleKey: `${displayName} connected`,
|
||||
descriptionKey: 'dialOut.statusMessage'
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.SHORT));
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -333,18 +336,6 @@ UI.notifyMaxUsersLimitReached = function() {
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Notify user that he was automatically muted when joned the conference.
|
||||
*/
|
||||
UI.notifyInitiallyMuted = function() {
|
||||
messageHandler.participantNotification(
|
||||
null,
|
||||
'notify.mutedTitle',
|
||||
'connected',
|
||||
'notify.muted',
|
||||
null);
|
||||
};
|
||||
|
||||
UI.handleLastNEndpoints = function(leavingIds, enteringIds) {
|
||||
VideoLayout.onLastNEndpointsChanged(leavingIds, enteringIds);
|
||||
};
|
||||
@@ -363,15 +354,6 @@ UI.notifyTokenAuthFailed = function() {
|
||||
});
|
||||
};
|
||||
|
||||
UI.notifyFocusDisconnected = function(focus, retrySec) {
|
||||
messageHandler.participantNotification(
|
||||
null, 'notify.focus',
|
||||
'disconnected', 'notify.focusFail',
|
||||
{ component: focus,
|
||||
ms: retrySec }
|
||||
);
|
||||
};
|
||||
|
||||
/**
|
||||
* Update list of available physical devices.
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// @flow
|
||||
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
import { openConnection } from '../../../connection';
|
||||
import {
|
||||
|
||||
@@ -1,51 +1,12 @@
|
||||
/* global $, APP */
|
||||
/* global APP */
|
||||
|
||||
import {
|
||||
NOTIFICATION_TIMEOUT,
|
||||
NOTIFICATION_TIMEOUT_TYPE,
|
||||
showErrorNotification,
|
||||
showNotification,
|
||||
showWarningNotification
|
||||
} from '../../../react/features/notifications';
|
||||
|
||||
const messageHandler = {
|
||||
OK: 'dialog.OK',
|
||||
CANCEL: 'dialog.Cancel',
|
||||
|
||||
/**
|
||||
* Returns the formatted title string.
|
||||
*
|
||||
* @return the title string formatted as a div.
|
||||
*/
|
||||
_getFormattedTitleString(titleKey) {
|
||||
const $titleString = $('<h2>');
|
||||
|
||||
$titleString.addClass('aui-dialog2-header-main');
|
||||
$titleString.attr('data-i18n', titleKey);
|
||||
|
||||
return $('<div>').append($titleString)
|
||||
.html();
|
||||
},
|
||||
|
||||
/**
|
||||
* Returns the dialog css classes.
|
||||
*
|
||||
* @return the dialog css classes
|
||||
*/
|
||||
_getDialogClasses(size = 'small') {
|
||||
return {
|
||||
box: '',
|
||||
form: '',
|
||||
prompt: `dialog aui-layer aui-dialog2 aui-dialog2-${size}`,
|
||||
close: 'aui-hide',
|
||||
fade: 'aui-blanket',
|
||||
button: 'button-control',
|
||||
message: 'aui-dialog2-content',
|
||||
buttons: 'aui-dialog2-footer',
|
||||
defaultButton: 'button-control_primary',
|
||||
title: 'aui-dialog2-header'
|
||||
};
|
||||
},
|
||||
|
||||
/**
|
||||
* Opens new popup window for given <tt>url</tt> centered over current
|
||||
* window.
|
||||
@@ -86,7 +47,7 @@ const messageHandler = {
|
||||
* showErrorNotification action.
|
||||
*/
|
||||
showError(props) {
|
||||
APP.store.dispatch(showErrorNotification(props));
|
||||
APP.store.dispatch(showErrorNotification(props, NOTIFICATION_TIMEOUT_TYPE.LONG));
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -96,35 +57,7 @@ const messageHandler = {
|
||||
* showWarningNotification action.
|
||||
*/
|
||||
showWarning(props) {
|
||||
APP.store.dispatch(showWarningNotification(props));
|
||||
},
|
||||
|
||||
/**
|
||||
* Displays a notification about participant action.
|
||||
* @param displayName the display name of the participant that is
|
||||
* associated with the notification.
|
||||
* @param displayNameKey the key from the language file for the display
|
||||
* name. Only used if displayName is not provided.
|
||||
* @param cls css class for the notification
|
||||
* @param messageKey the key from the language file for the text of the
|
||||
* message.
|
||||
* @param messageArguments object with the arguments for the message.
|
||||
* @param optional configurations for the notification (e.g. timeout)
|
||||
*/
|
||||
participantNotification( // eslint-disable-line max-params
|
||||
displayName,
|
||||
displayNameKey,
|
||||
cls,
|
||||
messageKey,
|
||||
messageArguments,
|
||||
timeout = NOTIFICATION_TIMEOUT) {
|
||||
APP.store.dispatch(showNotification({
|
||||
descriptionArguments: messageArguments,
|
||||
descriptionKey: messageKey,
|
||||
titleKey: displayNameKey,
|
||||
title: displayName
|
||||
},
|
||||
timeout));
|
||||
APP.store.dispatch(showWarningNotification(props, NOTIFICATION_TIMEOUT_TYPE.LONG));
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* global $, APP */
|
||||
/* eslint-disable no-unused-vars */
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import { I18nextProvider } from 'react-i18next';
|
||||
@@ -14,7 +14,10 @@ import {
|
||||
JitsiParticipantConnectionStatus
|
||||
} from '../../../react/features/base/lib-jitsi-meet';
|
||||
import { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media';
|
||||
import { getParticipantById } from '../../../react/features/base/participants';
|
||||
import {
|
||||
getParticipantById,
|
||||
getParticipantDisplayName
|
||||
} from '../../../react/features/base/participants';
|
||||
import { getTrackByMediaTypeAndParticipant } from '../../../react/features/base/tracks';
|
||||
import { CHAT_SIZE } from '../../../react/features/chat';
|
||||
import {
|
||||
@@ -314,10 +317,12 @@ export default class LargeVideoManager {
|
||||
* @private
|
||||
*/
|
||||
updateParticipantConnStatusIndication(id, messageKey) {
|
||||
const state = APP.store.getState();
|
||||
|
||||
if (messageKey) {
|
||||
// Get user's display name
|
||||
const displayName
|
||||
= APP.conference.getParticipantDisplayName(id);
|
||||
= getParticipantDisplayName(state, id);
|
||||
|
||||
this._setRemoteConnectionMessage(
|
||||
messageKey,
|
||||
|
||||
@@ -495,6 +495,10 @@ export class VideoContainer extends LargeContainer {
|
||||
|
||||
stream.attach(this.$video[0]);
|
||||
|
||||
// Ensure large video gets play() called on it when a new stream is attached to it. This is necessary in the
|
||||
// case of Safari as autoplay doesn't kick-in automatically on Safari 15 and newer versions.
|
||||
browser.isWebKitBased() && this.$video[0].play();
|
||||
|
||||
const flipX = stream.isLocal() && this.localFlipX && !this.isScreenSharing();
|
||||
|
||||
this.$video.css({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* global APP */
|
||||
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
import { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media';
|
||||
import {
|
||||
|
||||
@@ -62,7 +62,7 @@ function getNewAudioInputDevice(newDevices, localAudio, newLabel) {
|
||||
const selectedAudioInputDeviceId = getUserSelectedMicDeviceId(APP.store.getState());
|
||||
const selectedAudioInputDevice = availableAudioInputDevices.find(
|
||||
d => d.deviceId === selectedAudioInputDeviceId);
|
||||
const localAudioDeviceId = localAudio.getDeviceId();
|
||||
const localAudioDeviceId = localAudio?.getDeviceId();
|
||||
const localAudioDevice = availableAudioInputDevices.find(
|
||||
d => d.deviceId === localAudioDeviceId);
|
||||
|
||||
@@ -114,7 +114,7 @@ function getNewVideoInputDevice(newDevices, localVideo, newLabel) {
|
||||
const selectedVideoInputDeviceId = getUserSelectedCameraDeviceId(APP.store.getState());
|
||||
const selectedVideoInputDevice = availableVideoInputDevices.find(
|
||||
d => d.deviceId === selectedVideoInputDeviceId);
|
||||
const localVideoDeviceId = localVideo.getDeviceId();
|
||||
const localVideoDeviceId = localVideo?.getDeviceId();
|
||||
const localVideoDevice = availableVideoInputDevices.find(
|
||||
d => d.deviceId === localVideoDeviceId);
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* global APP */
|
||||
import { jitsiLocalStorage } from '@jitsi/js-utils';
|
||||
import Logger from 'jitsi-meet-logger';
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
import {
|
||||
ACTION_SHORTCUT_PRESSED as PRESSED,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
const logger = require('jitsi-meet-logger').getLogger(__filename);
|
||||
const logger = require('@jitsi/logger').getLogger(__filename);
|
||||
|
||||
/**
|
||||
* Manages a queue of functions where the current function in progress will
|
||||
|
||||
13905
package-lock.json
generated
13905
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
55
package.json
55
package.json
@@ -35,14 +35,19 @@
|
||||
"@atlaskit/tooltip": "17.1.2",
|
||||
"@hapi/bourne": "2.0.0",
|
||||
"@jitsi/js-utils": "2.0.0",
|
||||
"@jitsi/logger": "2.0.0",
|
||||
"@jitsi/rtcstats": "9.0.1",
|
||||
"@material-ui/core": "4.11.3",
|
||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
|
||||
"@microsoft/microsoft-graph-client": "1.1.0",
|
||||
"@react-native-async-storage/async-storage": "1.15.5",
|
||||
"@react-native-community/clipboard": "1.5.1",
|
||||
"@react-native-community/google-signin": "3.0.1",
|
||||
"@react-native-community/netinfo": "4.1.5",
|
||||
"@react-native-community/slider": "3.0.3",
|
||||
"@react-native-masked-view/masked-view": "0.2.6",
|
||||
"@react-navigation/bottom-tabs": "5.11.15",
|
||||
"@react-navigation/drawer": "5.12.9",
|
||||
"@react-navigation/material-top-tabs": "5.3.19",
|
||||
"@react-navigation/native": "5.9.8",
|
||||
"@react-navigation/stack": "5.14.9",
|
||||
@@ -54,18 +59,19 @@
|
||||
"clipboard-copy": "4.0.1",
|
||||
"clsx": "1.1.1",
|
||||
"dropbox": "10.7.0",
|
||||
"face-api.js": "0.22.2",
|
||||
"focus-visible": "5.1.0",
|
||||
"grapheme-splitter": "1.0.4",
|
||||
"i18n-iso-countries": "6.8.0",
|
||||
"i18next": "17.0.6",
|
||||
"i18next-browser-languagedetector": "3.0.1",
|
||||
"i18next-xhr-backend": "3.0.0",
|
||||
"image-capture": "0.4.0",
|
||||
"jitsi-meet-logger": "github:jitsi/jitsi-meet-logger#v1.0.0",
|
||||
"jquery": "3.5.1",
|
||||
"jquery-i18next": "1.2.1",
|
||||
"js-md5": "0.6.1",
|
||||
"jwt-decode": "2.2.0",
|
||||
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#03bc5278dab9283b9eceee9e7b6d9b48511e3d53",
|
||||
"lib-jitsi-meet": "github:jitsi/lib-jitsi-meet#d630bc32a1262afd0432d8b8d8d0025dd5afd1e5",
|
||||
"libflacjs": "github:mmig/libflac.js#93d37e7f811f01cf7d8b6a603e38bd3c3810907d",
|
||||
"lodash": "4.17.21",
|
||||
"moment": "2.29.1",
|
||||
@@ -87,6 +93,7 @@
|
||||
"react-native-default-preference": "1.4.2",
|
||||
"react-native-device-info": "8.0.0",
|
||||
"react-native-gesture-handler": "1.10.3",
|
||||
"react-native-get-random-values": "1.7.0",
|
||||
"react-native-immersive": "2.0.0",
|
||||
"react-native-keep-awake": "4.0.0",
|
||||
"react-native-paper": "4.8.1",
|
||||
@@ -102,7 +109,7 @@
|
||||
"react-native-url-polyfill": "1.2.0",
|
||||
"react-native-video": "5.1.1",
|
||||
"react-native-watch-connectivity": "0.4.3",
|
||||
"react-native-webrtc": "1.92.2",
|
||||
"react-native-webrtc": "1.94.1",
|
||||
"react-native-webview": "11.0.2",
|
||||
"react-native-youtube-iframe": "2.1.1",
|
||||
"react-redux": "7.1.0",
|
||||
@@ -114,39 +121,33 @@
|
||||
"redux-thunk": "2.2.0",
|
||||
"resemblejs": "4.0.0",
|
||||
"rnnoise-wasm": "github:jitsi/rnnoise-wasm#566a16885897704d6e6d67a1d5ac5d39781db2af",
|
||||
"rtcstats": "github:jitsi/rtcstats#v8.1.0",
|
||||
"styled-components": "3.4.9",
|
||||
"util": "0.12.1",
|
||||
"uuid": "3.1.0",
|
||||
"uuid": "8.3.2",
|
||||
"wasm-check": "2.0.1",
|
||||
"windows-iana": "^3.1.0",
|
||||
"zxcvbn": "4.4.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.9.0",
|
||||
"@babel/plugin-proposal-class-properties": "7.1.0",
|
||||
"@babel/plugin-proposal-export-default-from": "7.0.0",
|
||||
"@babel/plugin-proposal-export-namespace-from": "7.0.0",
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator": "7.4.4",
|
||||
"@babel/plugin-proposal-optional-chaining": "7.2.0",
|
||||
"@babel/plugin-transform-flow-strip-types": "7.0.0",
|
||||
"@babel/preset-env": "7.1.0",
|
||||
"@babel/preset-flow": "7.0.0",
|
||||
"@babel/preset-react": "7.0.0",
|
||||
"@babel/runtime": "7.15.3",
|
||||
"babel-eslint": "10.0.1",
|
||||
"babel-loader": "8.0.4",
|
||||
"@babel/core": "7.16.0",
|
||||
"@babel/eslint-parser": "7.16.0",
|
||||
"@babel/plugin-proposal-export-default-from": "7.16.0",
|
||||
"@babel/preset-env": "7.16.0",
|
||||
"@babel/preset-flow": "7.16.0",
|
||||
"@babel/preset-react": "7.16.0",
|
||||
"@babel/runtime": "7.16.0",
|
||||
"@jitsi/eslint-config": "4.0.0",
|
||||
"babel-loader": "8.2.3",
|
||||
"babel-plugin-optional-require": "0.3.1",
|
||||
"circular-dependency-plugin": "5.2.0",
|
||||
"clean-css-cli": "4.3.0",
|
||||
"css-loader": "3.6.0",
|
||||
"eslint": "5.6.1",
|
||||
"eslint-config-jitsi": "github:jitsi/eslint-config-jitsi#2.0.0",
|
||||
"eslint-plugin-flowtype": "2.50.3",
|
||||
"eslint-plugin-import": "2.20.2",
|
||||
"eslint-plugin-jsdoc": "3.8.0",
|
||||
"eslint-plugin-react": "7.11.1",
|
||||
"eslint-plugin-react-native": "3.3.0",
|
||||
"eslint": "8.1.0",
|
||||
"eslint-plugin-flowtype": "8.0.3",
|
||||
"eslint-plugin-import": "2.25.2",
|
||||
"eslint-plugin-jsdoc": "37.0.3",
|
||||
"eslint-plugin-react": "7.26.1",
|
||||
"eslint-plugin-react-native": "3.11.0",
|
||||
"expose-loader": "3.0.0",
|
||||
"flow-bin": "0.104.0",
|
||||
"imports-loader": "0.7.1",
|
||||
@@ -170,8 +171,8 @@
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"scripts": {
|
||||
"lint": "eslint . && flow",
|
||||
"lint-fix": "eslint --fix .",
|
||||
"lint": "eslint --max-warnings 0 . && flow",
|
||||
"lint-fix": "eslint --max-warnings 0 --fix .",
|
||||
"postinstall": "patch-package && jetify",
|
||||
"validate": "npm ls",
|
||||
"start": "make dev",
|
||||
|
||||
11
patches/eslint-plugin-flowtype+8.0.3.patch
Normal file
11
patches/eslint-plugin-flowtype+8.0.3.patch
Normal file
@@ -0,0 +1,11 @@
|
||||
diff --git a/node_modules/eslint-plugin-flowtype/dist/configs/recommended.json b/node_modules/eslint-plugin-flowtype/dist/configs/recommended.json
|
||||
index 90a0d69..2ad7d68 100644
|
||||
--- a/node_modules/eslint-plugin-flowtype/dist/configs/recommended.json
|
||||
+++ b/node_modules/eslint-plugin-flowtype/dist/configs/recommended.json
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
- "parser": "@babel/eslint",
|
||||
+ "parser": "@babel/eslint-parser",
|
||||
"parserOptions": {
|
||||
"babelOptions": {
|
||||
"plugins": [
|
||||
@@ -1,9 +1,18 @@
|
||||
module.exports = {
|
||||
'extends': [
|
||||
'../.eslintrc.js',
|
||||
'eslint-config-jitsi/flow',
|
||||
'eslint-config-jitsi/jsdoc',
|
||||
'eslint-config-jitsi/react',
|
||||
'@jitsi/eslint-config/flow',
|
||||
'@jitsi/eslint-config/jsdoc',
|
||||
'@jitsi/eslint-config/react',
|
||||
'.eslintrc-react-native.js'
|
||||
]
|
||||
],
|
||||
'rules': {
|
||||
// XXX remove this eventually.
|
||||
'react/jsx-indent-props': 0
|
||||
},
|
||||
'settings': {
|
||||
'react': {
|
||||
'version': 'detect'
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -33,7 +33,7 @@ type State = {
|
||||
* Represents the always on top page.
|
||||
*
|
||||
* @class AlwaysOnTop
|
||||
* @extends Component
|
||||
* @augments Component
|
||||
*/
|
||||
export default class AlwaysOnTop extends Component<*, State> {
|
||||
_hovered: boolean;
|
||||
|
||||
@@ -30,7 +30,7 @@ type Props = {
|
||||
/**
|
||||
* Represents the toolbar in the Always On Top window.
|
||||
*
|
||||
* @extends Component
|
||||
* @augments Component
|
||||
*/
|
||||
export default class Toolbar extends Component<Props> {
|
||||
/**
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
* The constant for the event type 'track'.
|
||||
* TODO: keep these constants in a single place. Can we import them from
|
||||
* lib-jitsi-meet's AnalyticsEvents somehow?
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
const TYPE_TRACK = 'track';
|
||||
@@ -10,6 +11,7 @@ const TYPE_TRACK = 'track';
|
||||
* The constant for the event type 'UI' (User Interaction).
|
||||
* TODO: keep these constants in a single place. Can we import them from
|
||||
* lib-jitsi-meet's AnalyticsEvents somehow?
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
const TYPE_UI = 'ui';
|
||||
@@ -143,7 +145,6 @@ export function createCalendarClickedEvent(eventName, attributes = {}) {
|
||||
export function createCalendarSelectedEvent(attributes = {}) {
|
||||
return {
|
||||
action: 'selected',
|
||||
actionSubject: 'calendar.selected',
|
||||
attributes,
|
||||
source: 'calendar',
|
||||
type: TYPE_UI
|
||||
@@ -159,8 +160,8 @@ export function createCalendarSelectedEvent(attributes = {}) {
|
||||
*/
|
||||
export function createCalendarConnectedEvent(attributes = {}) {
|
||||
return {
|
||||
action: 'calendar.connected',
|
||||
actionSubject: 'calendar.connected',
|
||||
action: 'connected',
|
||||
actionSubject: 'calendar',
|
||||
attributes
|
||||
};
|
||||
}
|
||||
@@ -212,7 +213,6 @@ export function createChromeExtensionBannerEvent(installPressed, attributes = {}
|
||||
export function createRecentSelectedEvent(attributes = {}) {
|
||||
return {
|
||||
action: 'selected',
|
||||
actionSubject: 'recent.list.selected',
|
||||
attributes,
|
||||
source: 'recent.list',
|
||||
type: TYPE_UI
|
||||
@@ -533,12 +533,11 @@ export function createRejoinedEvent({ url, lastConferenceDuration, timeSinceLeft
|
||||
export function createRemoteMuteConfirmedEvent(participantId, mediaType) {
|
||||
return {
|
||||
action: 'clicked',
|
||||
actionSubject: 'remote.mute.dialog.confirm.button',
|
||||
attributes: {
|
||||
'participant_id': participantId,
|
||||
'media_type': mediaType
|
||||
},
|
||||
source: 'remote.mute.dialog',
|
||||
source: 'remote.mute.button',
|
||||
type: TYPE_UI
|
||||
};
|
||||
}
|
||||
@@ -582,21 +581,6 @@ export function createRTCStatsTraceCloseEvent(closeEvent) {
|
||||
return event;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event indicating that an action related to video blur
|
||||
* occurred (e.g. It was started or stopped).
|
||||
*
|
||||
* @param {string} action - The action which occurred.
|
||||
* @returns {Object} The event in a format suitable for sending via
|
||||
* sendAnalytics.
|
||||
*/
|
||||
export function createVideoBlurEvent(action) {
|
||||
return {
|
||||
action,
|
||||
actionSubject: 'video.blur'
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event indicating that an action related to screen sharing
|
||||
* occurred (e.g. It was started or stopped).
|
||||
@@ -629,26 +613,6 @@ export function createScreenSharingIssueEvent(attributes) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* The local participant failed to send a "selected endpoint" message to the
|
||||
* bridge.
|
||||
*
|
||||
* @param {Error} error - The error which caused the failure.
|
||||
* @returns {Object} The event in a format suitable for sending via
|
||||
* sendAnalytics.
|
||||
*/
|
||||
export function createSelectParticipantFailedEvent(error) {
|
||||
const event = {
|
||||
action: 'select.participant.failed'
|
||||
};
|
||||
|
||||
if (error) {
|
||||
event.error = error.toString();
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event associated with the "shared video" feature.
|
||||
*
|
||||
@@ -686,7 +650,6 @@ export function createShortcutEvent(
|
||||
attributes = {}) {
|
||||
return {
|
||||
action,
|
||||
actionSubject: 'keyboard.shortcut',
|
||||
actionSubjectId: shortcut,
|
||||
attributes,
|
||||
source: 'keyboard.shortcut',
|
||||
@@ -821,24 +784,6 @@ export function createToolbarEvent(buttonName, attributes = {}) {
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event associated with reactions.
|
||||
*
|
||||
* @param {string} action - Event action.
|
||||
* @param {string} name - Event name.
|
||||
* @param {string} source - Event source.
|
||||
* @returns {Object} The event in a format suitable for sending via
|
||||
* sendAnalytics.
|
||||
*/
|
||||
function createReactionEvent(action, name, source) {
|
||||
return {
|
||||
action,
|
||||
actionSubject: name,
|
||||
source: `reaction.${source}`,
|
||||
type: TYPE_UI
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event associated with a reaction button being clicked/pressed.
|
||||
*
|
||||
@@ -848,7 +793,13 @@ function createReactionEvent(action, name, source) {
|
||||
* sendAnalytics.
|
||||
*/
|
||||
export function createReactionMenuEvent(buttonName) {
|
||||
return createReactionEvent('clicked', buttonName, 'button');
|
||||
return {
|
||||
action: 'clicked',
|
||||
actionSubject: 'button',
|
||||
source: 'reaction',
|
||||
buttonName,
|
||||
type: TYPE_UI
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -858,7 +809,12 @@ export function createReactionMenuEvent(buttonName) {
|
||||
* sendAnalytics.
|
||||
*/
|
||||
export function createReactionSoundsDisabledEvent() {
|
||||
return createReactionEvent('disabled', 'sounds', 'settings');
|
||||
return {
|
||||
action: 'disabled',
|
||||
actionSubject: 'sounds',
|
||||
source: 'reaction.settings',
|
||||
type: TYPE_UI
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -925,6 +881,21 @@ export function createWelcomePageEvent(action, actionSubject, attributes = {}) {
|
||||
*/
|
||||
export function createScreensharingCaptureTakenEvent() {
|
||||
return {
|
||||
action: 'screen.sharing.capture'
|
||||
action: 'screen.sharing.capture.taken'
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event for an action on breakout rooms.
|
||||
*
|
||||
* @param {string} actionSubject - The subject that was acted upon.
|
||||
* @returns {Object} The event in a format suitable for sending via
|
||||
* sendAnalytics.
|
||||
*/
|
||||
export function createBreakoutRoomsEvent(actionSubject) {
|
||||
return {
|
||||
action: 'clicked',
|
||||
actionSubject: `${actionSubject}.button`,
|
||||
source: 'breakout.rooms'
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Abstract implementation of analytics handler
|
||||
* Abstract implementation of analytics handler.
|
||||
*/
|
||||
export default class AbstractHandler {
|
||||
/**
|
||||
|
||||
@@ -25,7 +25,7 @@ import {
|
||||
toURLString
|
||||
} from '../base/util';
|
||||
import { isVpaasMeeting } from '../jaas/functions';
|
||||
import { clearNotifications, showNotification } from '../notifications';
|
||||
import { NOTIFICATION_TIMEOUT_TYPE, clearNotifications, showNotification } from '../notifications';
|
||||
import { setFatalError } from '../overlay';
|
||||
|
||||
import {
|
||||
@@ -328,7 +328,7 @@ export function maybeRedirectToWelcomePage(options: Object = {}) {
|
||||
dispatch(showNotification({
|
||||
titleArguments: { appName: getName() },
|
||||
titleKey: 'dialog.thankYou'
|
||||
}));
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.STICKY));
|
||||
}
|
||||
|
||||
// if Welcome page is enabled redirect to welcome page after 3 sec, if
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
import React from 'react';
|
||||
import SplashScreen from 'react-native-splash-screen';
|
||||
|
||||
import { setColorScheme } from '../../base/color-scheme';
|
||||
import { DialogContainer } from '../../base/dialog';
|
||||
import { updateFlags } from '../../base/flags/actions';
|
||||
import { CALL_INTEGRATION_ENABLED, SERVER_URL_CHANGE_ENABLED } from '../../base/flags/constants';
|
||||
@@ -51,7 +50,7 @@ type Props = AbstractAppProps & {
|
||||
/**
|
||||
* Root app {@code Component} on mobile/React Native.
|
||||
*
|
||||
* @extends AbstractApp
|
||||
* @augments AbstractApp
|
||||
*/
|
||||
export class App extends AbstractApp {
|
||||
_init: Promise<*>;
|
||||
@@ -91,7 +90,6 @@ export class App extends AbstractApp {
|
||||
const { dispatch, getState } = this.state.store;
|
||||
|
||||
// We set these early enough so then we avoid any unnecessary re-renders.
|
||||
dispatch(setColorScheme(this.props.colorScheme));
|
||||
dispatch(updateFlags(this.props.flags));
|
||||
|
||||
// Check if serverURL is configured externally and not allowed to change.
|
||||
|
||||
@@ -17,7 +17,7 @@ import '../reducers';
|
||||
/**
|
||||
* Root app {@code Component} on Web/React.
|
||||
*
|
||||
* @extends AbstractApp
|
||||
* @augments AbstractApp
|
||||
*/
|
||||
export class App extends AbstractApp {
|
||||
/**
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
import { isRoomValid } from '../base/conference';
|
||||
import { toState } from '../base/redux';
|
||||
import { ConferenceNavigationContainer } from '../conference';
|
||||
import { isWelcomePageAppEnabled } from '../welcome';
|
||||
import { BlankPage, WelcomePage } from '../welcome/components';
|
||||
import RootNavigationContainer from '../welcome/components/RootNavigationContainer';
|
||||
|
||||
/**
|
||||
* Determines which route is to be rendered in order to depict a specific Redux
|
||||
@@ -26,27 +25,17 @@ export function _getRouteToRender(stateful) {
|
||||
* @returns {Promise}
|
||||
*/
|
||||
function _getMobileRoute(state) {
|
||||
const route = _getEmptyRoute();
|
||||
const route = {
|
||||
component: null,
|
||||
href: undefined
|
||||
};
|
||||
|
||||
if (isRoomValid(state['features/base/conference'].room)) {
|
||||
route.component = ConferenceNavigationContainer;
|
||||
} else if (isWelcomePageAppEnabled(state)) {
|
||||
route.component = WelcomePage;
|
||||
} else {
|
||||
route.component = BlankPage;
|
||||
route.component = RootNavigationContainer;
|
||||
}
|
||||
|
||||
return Promise.resolve(route);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default {@code Route}.
|
||||
*
|
||||
* @returns {Object}
|
||||
*/
|
||||
function _getEmptyRoute() {
|
||||
return {
|
||||
component: BlankPage,
|
||||
href: undefined
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,9 +7,7 @@ import { toState } from '../base/redux';
|
||||
import { Conference } from '../conference';
|
||||
import { getDeepLinkingPage } from '../deep-linking';
|
||||
import { UnsupportedDesktopBrowser } from '../unsupported-browser';
|
||||
import { isWelcomePageUserEnabled } from '../welcome';
|
||||
import { BlankPage, WelcomePage } from '../welcome/components';
|
||||
|
||||
import { BlankPage, isWelcomePageUserEnabled, WelcomePage } from '../welcome';
|
||||
|
||||
/**
|
||||
* Determines which route is to be rendered in order to depict a specific Redux
|
||||
|
||||
@@ -19,6 +19,7 @@ import '../base/sounds/middleware';
|
||||
import '../base/testing/middleware';
|
||||
import '../base/tracks/middleware';
|
||||
import '../base/user-interaction/middleware';
|
||||
import '../breakout-rooms/middleware';
|
||||
import '../calendar-sync/middleware';
|
||||
import '../chat/middleware';
|
||||
import '../conference/middleware';
|
||||
|
||||
@@ -8,6 +8,7 @@ import '../external-api/middleware';
|
||||
import '../keyboard-shortcuts/middleware';
|
||||
import '../local-recording/middleware';
|
||||
import '../no-audio-signal/middleware';
|
||||
import '../notifications/middleware';
|
||||
import '../noise-detection/middleware';
|
||||
import '../old-client-notification/middleware';
|
||||
import '../power-monitor/middleware';
|
||||
@@ -17,5 +18,6 @@ import '../screen-share/middleware';
|
||||
import '../shared-video/middleware';
|
||||
import '../talk-while-muted/middleware';
|
||||
import '../virtual-background/middleware';
|
||||
import '../facial-recognition/middleware';
|
||||
|
||||
import './middlewares.any';
|
||||
|
||||
@@ -5,7 +5,6 @@ import '../authentication/reducer';
|
||||
import '../av-moderation/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';
|
||||
@@ -17,7 +16,6 @@ import '../base/lastn/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';
|
||||
@@ -26,6 +24,7 @@ import '../base/sounds/reducer';
|
||||
import '../base/testing/reducer';
|
||||
import '../base/tracks/reducer';
|
||||
import '../base/user-interaction/reducer';
|
||||
import '../breakout-rooms/reducer';
|
||||
import '../calendar-sync/reducer';
|
||||
import '../chat/reducer';
|
||||
import '../deep-linking/reducer';
|
||||
@@ -54,4 +53,3 @@ import '../toolbox/reducer';
|
||||
import '../transcribing/reducer';
|
||||
import '../video-layout/reducer';
|
||||
import '../videosipgw/reducer';
|
||||
import '../welcome/reducer';
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
import '../base/devices/reducer';
|
||||
import '../e2ee/reducer';
|
||||
import '../facial-recognition/reducer';
|
||||
import '../feedback/reducer';
|
||||
import '../local-recording/reducer';
|
||||
import '../no-audio-signal/reducer';
|
||||
|
||||
@@ -29,7 +29,7 @@ type Props = {
|
||||
/**
|
||||
* Creates a ReactElement responsible for drawing audio levels.
|
||||
*
|
||||
* @extends {Component}
|
||||
* @augments {Component}
|
||||
*/
|
||||
class AudioLevelIndicator extends Component<Props> {
|
||||
/**
|
||||
|
||||
@@ -29,7 +29,7 @@ import './styles';
|
||||
type Props = {
|
||||
|
||||
/**
|
||||
* {@link JitsiConference} that needs authentication - will hold a valid
|
||||
* {@link JitsiConference} That needs authentication - will hold a valid
|
||||
* value in XMPP login + guest access mode.
|
||||
*/
|
||||
_conference: Object,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user