Compare commits
255 Commits
3795
...
ref-passwo
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
528204fb81 | ||
|
|
0e16008085 | ||
|
|
f66a919e08 | ||
|
|
8115fb5e78 | ||
|
|
c9f26dc7ac | ||
|
|
7321f706bb | ||
|
|
9b5f135dae | ||
|
|
dbbdcb0b00 | ||
|
|
06ae1861ee | ||
|
|
e0afd8fadb | ||
|
|
953f838a2a | ||
|
|
bf5f1f0168 | ||
|
|
cdf977ff3f | ||
|
|
ee1dc9dd8e | ||
|
|
7bec68e492 | ||
|
|
97fff02c15 | ||
|
|
b372b2ccf2 | ||
|
|
d00ead932b | ||
|
|
bb2b1b58ec | ||
|
|
ceeea7314c | ||
|
|
9d6a93119b | ||
|
|
08be68cda4 | ||
|
|
3a2081ffed | ||
|
|
57d14d9517 | ||
|
|
c5e693f14a | ||
|
|
a9da047d3a | ||
|
|
171b065db1 | ||
|
|
9da0b7fee3 | ||
|
|
716c9eb46f | ||
|
|
a85c72d859 | ||
|
|
0ba567856e | ||
|
|
7f1eb83dbd | ||
|
|
6e4c1f64d8 | ||
|
|
82aa51770a | ||
|
|
990c77bd3d | ||
|
|
5bb23b2d17 | ||
|
|
9cc05ef838 | ||
|
|
a21e3a1946 | ||
|
|
c05ca1d9fc | ||
|
|
1b05d7269c | ||
|
|
c170970992 | ||
|
|
d19a659871 | ||
|
|
955b24be9d | ||
|
|
de6c7e0117 | ||
|
|
feb8fe9e34 | ||
|
|
aff6d4b36d | ||
|
|
45c60717d6 | ||
|
|
6596e27f69 | ||
|
|
8cba7e91d3 | ||
|
|
3a871cbed8 | ||
|
|
a46fd60788 | ||
|
|
86ebfe8dad | ||
|
|
97735ff548 | ||
|
|
9fdc18d1ec | ||
|
|
4a21882345 | ||
|
|
cb0cea4ebd | ||
|
|
b894daa9cf | ||
|
|
06641a7dd6 | ||
|
|
94f7b570d7 | ||
|
|
ca5605620a | ||
|
|
8d0202113a | ||
|
|
f2e59226c0 | ||
|
|
951086e499 | ||
|
|
d3a26f9b4e | ||
|
|
e1a4478a06 | ||
|
|
ed8009883b | ||
|
|
4fd5dc0ee0 | ||
|
|
1bbb937d9d | ||
|
|
c1fb276937 | ||
|
|
3867d5d62e | ||
|
|
08ab513d4e | ||
|
|
a2eca4f029 | ||
|
|
3121494d4b | ||
|
|
92e81c3dbf | ||
|
|
2761a6dbb3 | ||
|
|
faf24ca7ec | ||
|
|
c5ce44f09d | ||
|
|
6969114675 | ||
|
|
1aba57e6bb | ||
|
|
e9785c8b3d | ||
|
|
03215d8906 | ||
|
|
9a5b19babe | ||
|
|
e5d87e66bf | ||
|
|
e00036d44a | ||
|
|
d8059fd0ee | ||
|
|
6fc7456196 | ||
|
|
0bd96b9c0e | ||
|
|
f502e13edc | ||
|
|
08f55ccb94 | ||
|
|
17ca9722b7 | ||
|
|
8cc9b78e21 | ||
|
|
25b4843327 | ||
|
|
d13edd8f63 | ||
|
|
cdc14586de | ||
|
|
a7f8bf2d8f | ||
|
|
8cd881945a | ||
|
|
579d08e27e | ||
|
|
5148c81dd8 | ||
|
|
40bc844caa | ||
|
|
c990a64ba9 | ||
|
|
f5a0a1ef8c | ||
|
|
58018a086c | ||
|
|
b3a7f5f38b | ||
|
|
435d11793d | ||
|
|
9ec3faa6b3 | ||
|
|
959d61468e | ||
|
|
9f28048742 | ||
|
|
19c9a808cf | ||
|
|
7576f850e9 | ||
|
|
7970b38823 | ||
|
|
b40363be31 | ||
|
|
9a0b924f99 | ||
|
|
52def54cd9 | ||
|
|
8d3b59a0d0 | ||
|
|
b0e7471a83 | ||
|
|
4616065b1d | ||
|
|
14855f3255 | ||
|
|
c40a7f736e | ||
|
|
8ffd226159 | ||
|
|
b8dda4c6c2 | ||
|
|
fca4977987 | ||
|
|
7bcece52ea | ||
|
|
155c6de822 | ||
|
|
d0bc3da0f5 | ||
|
|
011b7f9d00 | ||
|
|
9b0f5b0299 | ||
|
|
7e21c277b3 | ||
|
|
e6ade2cf84 | ||
|
|
99b21cdb2a | ||
|
|
677752c78d | ||
|
|
4e81a7abd3 | ||
|
|
5d8d0b9a01 | ||
|
|
2dd5d0a180 | ||
|
|
ccdfff8e9a | ||
|
|
829e3bfe15 | ||
|
|
e90cc0a615 | ||
|
|
b6ccc91038 | ||
|
|
beb4487044 | ||
|
|
add84af7b6 | ||
|
|
cb0d10fbe1 | ||
|
|
9a162c266c | ||
|
|
6654531112 | ||
|
|
b9cc6b6f96 | ||
|
|
6cbc04175c | ||
|
|
fb23aa54e8 | ||
|
|
b73d98f863 | ||
|
|
0289a93e5a | ||
|
|
401003b907 | ||
|
|
025e2b1ecb | ||
|
|
05a8591110 | ||
|
|
d2e6d57be8 | ||
|
|
41fd142977 | ||
|
|
04c0945930 | ||
|
|
5f2acb70de | ||
|
|
4dc10e82f1 | ||
|
|
582d4aff1c | ||
|
|
b13200ac92 | ||
|
|
53f937ba4e | ||
|
|
b9addaed71 | ||
|
|
fd8fb58eaf | ||
|
|
38d1032fec | ||
|
|
073fdc7b0e | ||
|
|
fedaa0ae6e | ||
|
|
f06fe69167 | ||
|
|
16c09c9645 | ||
|
|
24a1a60f04 | ||
|
|
d7ece58c6f | ||
|
|
aa11535db7 | ||
|
|
eea87be801 | ||
|
|
809ac42e4c | ||
|
|
cf27ad0dde | ||
|
|
2064fc8937 | ||
|
|
95eb551156 | ||
|
|
a7ac7790a8 | ||
|
|
94c48ec838 | ||
|
|
da68b9882d | ||
|
|
bd8a7edbd2 | ||
|
|
bde2343951 | ||
|
|
9b141816d6 | ||
|
|
6a7594cd9c | ||
|
|
cdbc5976a0 | ||
|
|
8fd0f56be7 | ||
|
|
5b0c6e088a | ||
|
|
202abf2a9a | ||
|
|
fb8ef366c6 | ||
|
|
7446e6165e | ||
|
|
5feaa421a8 | ||
|
|
a4333d3a80 | ||
|
|
02131f3346 | ||
|
|
8dbd1ba1b7 | ||
|
|
4c065f2de1 | ||
|
|
df895e5a61 | ||
|
|
bbf1927c70 | ||
|
|
86130c1478 | ||
|
|
15fb8a1525 | ||
|
|
64cbfb648f | ||
|
|
3e40bb19cd | ||
|
|
bbca0fc357 | ||
|
|
9bb789472e | ||
|
|
06fa175a6c | ||
|
|
5940f2890a | ||
|
|
7d09088186 | ||
|
|
34be081d87 | ||
|
|
3c36eece5e | ||
|
|
8eb0acada6 | ||
|
|
8307a8be2d | ||
|
|
d62190c644 | ||
|
|
58c4248da0 | ||
|
|
74af70a1d5 | ||
|
|
7b25b847ba | ||
|
|
18536cb14c | ||
|
|
01e36e1c56 | ||
|
|
5d96a226ed | ||
|
|
9855fac805 | ||
|
|
ed5351d250 | ||
|
|
b64260e554 | ||
|
|
7d67cb583e | ||
|
|
8e3c301d03 | ||
|
|
f9071b8b6b | ||
|
|
01abc4e8a8 | ||
|
|
c5bddda781 | ||
|
|
c2bc92ae05 | ||
|
|
a425e9c92e | ||
|
|
3bfa4744c8 | ||
|
|
bd5901d59c | ||
|
|
306c8ba8c2 | ||
|
|
5a6335207f | ||
|
|
97e8a6c3f3 | ||
|
|
523926d598 | ||
|
|
ab5627212d | ||
|
|
1b6c5a7141 | ||
|
|
a9767eda72 | ||
|
|
6c3a5793b4 | ||
|
|
c05b4a43e8 | ||
|
|
385669cbb8 | ||
|
|
5cfae2c419 | ||
|
|
92740707f0 | ||
|
|
775c531fe7 | ||
|
|
b8eda2b68d | ||
|
|
470c115e7c | ||
|
|
d9cf7aef3a | ||
|
|
c20c4bd5a3 | ||
|
|
74a5eb2d81 | ||
|
|
b25db3ce2e | ||
|
|
31d9fb12c8 | ||
|
|
ca9ca04d0f | ||
|
|
5a027f1585 | ||
|
|
5d86d202bd | ||
|
|
7ea7afebfb | ||
|
|
710307725b | ||
|
|
1cde7e63c7 | ||
|
|
a53d284bbe | ||
|
|
579e650a1d | ||
|
|
ee525ae569 | ||
|
|
63a411168e |
16
.github/workflows/ci.yml
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
name: Simple CI
|
||||
|
||||
on: [pull_request]
|
||||
|
||||
jobs:
|
||||
run-ci:
|
||||
name: Build Frontend
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: '12.x'
|
||||
- run: npm install
|
||||
- run: npm run lint
|
||||
- run: make
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
Jitsi Meet is an open-source (Apache) WebRTC JavaScript application that uses [Jitsi Videobridge](https://jitsi.org/videobridge) to provide high quality, [secure](#security) and scalable video conferences. Jitsi Meet in action can be seen at [here at the session #482 of the VoIP Users Conference](http://youtu.be/7vFUVClsNh0).
|
||||
|
||||
The Jitsi Meet client runs in your browser, without installing anything on your computer. You can try it out at https://meet.jit.si .
|
||||
The Jitsi Meet client runs in your browser, without installing anything else on your computer. You can try it out at https://meet.jit.si .
|
||||
|
||||
Jitsi Meet allows very efficient collaboration. Users can stream their desktop or only some windows. It also supports shared document editing with Etherpad.
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright @ 2018-present 8x8, Inc.
|
||||
* Copyright @ 2017-2018 Atlassian Pty Ltd
|
||||
* Copyright @ 2017-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.
|
||||
@@ -91,6 +90,7 @@ public class MainActivity extends JitsiMeetActivity {
|
||||
= new JitsiMeetConferenceOptions.Builder()
|
||||
.setWelcomePageEnabled(true)
|
||||
.setServerURL(buildURL("https://meet.jit.si"))
|
||||
.setFeatureFlag("call-integration.enabled", false)
|
||||
.build();
|
||||
JitsiMeet.setDefaultConferenceOptions(defaultOptions);
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 512 KiB After Width: | Height: | Size: 342 KiB |
|
Before Width: | Height: | Size: 396 KiB After Width: | Height: | Size: 264 KiB |
|
Before Width: | Height: | Size: 265 KiB After Width: | Height: | Size: 164 KiB |
|
Before Width: | Height: | Size: 279 KiB After Width: | Height: | Size: 174 KiB |
|
Before Width: | Height: | Size: 1.6 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 2.8 MiB After Width: | Height: | Size: 2.1 MiB |
|
Before Width: | Height: | Size: 4.0 MiB After Width: | Height: | Size: 3.1 MiB |
|
Before Width: | Height: | Size: 6.0 MiB After Width: | Height: | Size: 4.9 MiB |
|
Before Width: | Height: | Size: 948 KiB After Width: | Height: | Size: 694 KiB |
|
Before Width: | Height: | Size: 983 KiB After Width: | Height: | Size: 716 KiB |
|
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 950 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 2.7 MiB After Width: | Height: | Size: 1.8 MiB |
|
Before Width: | Height: | Size: 2.1 MiB After Width: | Height: | Size: 1.6 MiB |
|
Before Width: | Height: | Size: 1.3 MiB After Width: | Height: | Size: 1000 KiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.1 MiB |
@@ -20,5 +20,5 @@
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
|
||||
appVersion=20.0.0
|
||||
sdkVersion=2.6.0
|
||||
appVersion=20.2.0
|
||||
sdkVersion=2.8.0
|
||||
|
||||
@@ -9,8 +9,8 @@ THE_MVN_REPO=${MVN_REPO:-${1:-$DEFAULT_MVN_REPO}}
|
||||
MVN_HTTP=0
|
||||
DEFAULT_SDK_VERSION=$(grep sdkVersion ${THIS_DIR}/../gradle.properties | cut -d"=" -f2)
|
||||
SDK_VERSION=${OVERRIDE_SDK_VERSION:-${DEFAULT_SDK_VERSION}}
|
||||
RN_VERSION=$(jq -r '.dependencies."react-native"' ${THIS_DIR}/../../package.json)
|
||||
JSC_VERSION="r"$(jq -r '.dependencies."jsc-android"' ${THIS_DIR}/../../node_modules/react-native/package.json | cut -d . -f 1 | cut -c 2-)
|
||||
RN_VERSION=$(jq -r '.version' ${THIS_DIR}/../../node_modules/react-native/package.json)
|
||||
HERMES_VERSION=$(jq -r '.dependencies."hermes-engine"' ${THIS_DIR}/../../node_modules/react-native/package.json | cut -c 2-)
|
||||
DO_GIT_TAG=${GIT_TAG:-0}
|
||||
|
||||
if [[ $THE_MVN_REPO == http* ]]; then
|
||||
@@ -38,17 +38,19 @@ if [[ $MVN_HTTP == 1 ]]; then
|
||||
-DgeneratePom=false \
|
||||
-DpomFile=react-native-${RN_VERSION}.pom || true
|
||||
popd
|
||||
# Push JSC
|
||||
echo "Pushing JSC ${JSC_VERSION} to the Maven repo"
|
||||
pushd ${THIS_DIR}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION}
|
||||
# Push Hermes
|
||||
echo "Pushing Hermes ${HERMES_VERSION} to the Maven repo"
|
||||
pushd ${THIS_DIR}/../../node_modules/hermes-engine/android/
|
||||
mvn \
|
||||
deploy:deploy-file \
|
||||
-Durl=${MVN_REPO} \
|
||||
-DrepositoryId=${MVN_REPO_ID} \
|
||||
-Dfile=android-jsc-${JSC_VERSION}.aar \
|
||||
-Dfile=hermes-release.aar \
|
||||
-Dpackaging=aar \
|
||||
-DgeneratePom=false \
|
||||
-DpomFile=android-jsc-${JSC_VERSION}.pom || true
|
||||
-DgroupId=com.facebook \
|
||||
-DartifactId=hermes \
|
||||
-Dversion=${HERMES_VERSION} \
|
||||
-DgeneratePom=true || true
|
||||
popd
|
||||
else
|
||||
# Push React Native, if necessary
|
||||
@@ -65,17 +67,19 @@ else
|
||||
popd
|
||||
fi
|
||||
|
||||
# Push JSC, if necessary
|
||||
if [[ ! -d ${MVN_REPO}/org/webkit/android-jsc/${JSC_VERSION} ]]; then
|
||||
echo "Pushing JSC ${JSC_VERSION} to the Maven repo"
|
||||
pushd ${THIS_DIR}/../../node_modules/jsc-android/dist/org/webkit/android-jsc/${JSC_VERSION}
|
||||
# Push Hermes, if necessary
|
||||
if [[ ! -d ${MVN_REPO}/com/facebook/hermes/${HERMES_VERSION} ]]; then
|
||||
echo "Pushing Hermes ${HERMES_VERSION} to the Maven repo"
|
||||
pushd ${THIS_DIR}/../../node_modules/hermes-engine/android/
|
||||
mvn \
|
||||
deploy:deploy-file \
|
||||
-Durl=${MVN_REPO} \
|
||||
-Dfile=android-jsc-${JSC_VERSION}.aar \
|
||||
-Dfile=hermes-release.aar \
|
||||
-Dpackaging=aar \
|
||||
-DgeneratePom=false \
|
||||
-DpomFile=android-jsc-${JSC_VERSION}.pom
|
||||
-DgroupId=com.facebook \
|
||||
-DartifactId=hermes \
|
||||
-Dversion=${HERMES_VERSION} \
|
||||
-DgeneratePom=true
|
||||
popd
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import groovy.json.JsonSlurper
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
apply plugin: 'maven-publish'
|
||||
|
||||
@@ -31,6 +33,10 @@ android {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
pickFirst '**/libc++_shared.so'
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
@@ -38,7 +44,7 @@ dependencies {
|
||||
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.1.0'
|
||||
implementation 'androidx.fragment:fragment:1.1.0'
|
||||
implementation 'androidx.fragment:fragment:1.2.0'
|
||||
|
||||
//noinspection GradleDynamicVersion
|
||||
api 'com.facebook.react:react-native:+'
|
||||
@@ -218,6 +224,14 @@ publishing {
|
||||
dependency.appendNode('artifactId', artifactId)
|
||||
dependency.appendNode('version', it.moduleVersion)
|
||||
}
|
||||
|
||||
// Add Hermes dependency.
|
||||
def hermesPkg = new File("$rootDir/../node_modules/hermes-engine/package.json")
|
||||
def hermesVersion = new JsonSlurper().parseText(hermesPkg.text).version
|
||||
def hermesDependency = dependencies.appendNode('dependency')
|
||||
hermesDependency.appendNode('groupId', "com.facebook")
|
||||
hermesDependency.appendNode('artifactId', "hermes")
|
||||
hermesDependency.appendNode('version', hermesVersion)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -108,7 +108,8 @@ class AudioDeviceHandlerConnectionService implements
|
||||
*/
|
||||
private int supportedRouteMask = -1;
|
||||
|
||||
public AudioDeviceHandlerConnectionService() {
|
||||
public AudioDeviceHandlerConnectionService(AudioManager audioManager) {
|
||||
this.audioManager = audioManager;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -136,11 +137,10 @@ class AudioDeviceHandlerConnectionService implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(Context context, AudioModeModule audioModeModule) {
|
||||
public void start(AudioModeModule audioModeModule) {
|
||||
JitsiMeetLogger.i("Using " + TAG + " as the audio device handler");
|
||||
|
||||
module = audioModeModule;
|
||||
audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
|
||||
|
||||
RNConnectionService rcs = ReactInstanceManagerHolder.getNativeModule(RNConnectionService.class);
|
||||
if (rcs != null) {
|
||||
|
||||
@@ -117,7 +117,8 @@ class AudioDeviceHandlerGeneric implements
|
||||
}
|
||||
};
|
||||
|
||||
public AudioDeviceHandlerGeneric() {
|
||||
public AudioDeviceHandlerGeneric(AudioManager audioManager) {
|
||||
this.audioManager = audioManager;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -178,11 +179,10 @@ class AudioDeviceHandlerGeneric implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(Context context, AudioModeModule audioModeModule) {
|
||||
public void start(AudioModeModule audioModeModule) {
|
||||
JitsiMeetLogger.i("Using " + TAG + " as the audio device handler");
|
||||
|
||||
module = audioModeModule;
|
||||
audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
|
||||
|
||||
// Setup runtime device change detection.
|
||||
audioManager.registerAudioDeviceCallback(audioDeviceCallback, null);
|
||||
|
||||
@@ -59,7 +59,8 @@ class AudioDeviceHandlerLegacy implements
|
||||
*/
|
||||
private BluetoothHeadsetMonitor bluetoothHeadsetMonitor;
|
||||
|
||||
public AudioDeviceHandlerLegacy() {
|
||||
public AudioDeviceHandlerLegacy(AudioManager audioManager) {
|
||||
this.audioManager = audioManager;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -155,11 +156,11 @@ class AudioDeviceHandlerLegacy implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(Context context, AudioModeModule audioModeModule) {
|
||||
public void start(AudioModeModule audioModeModule) {
|
||||
JitsiMeetLogger.i("Using " + TAG + " as the audio device handler");
|
||||
|
||||
module = audioModeModule;
|
||||
audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
|
||||
Context context = module.getContext();
|
||||
|
||||
// Setup runtime device change detection.
|
||||
//
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.content.Context;
|
||||
import android.media.AudioManager;
|
||||
import android.os.Build;
|
||||
|
||||
import com.facebook.react.bridge.Arguments;
|
||||
@@ -85,6 +86,12 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
return supportsConnectionService && useConnectionService_;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link AudioManager} instance used to interact with the Android audio
|
||||
* subsystem.
|
||||
*/
|
||||
private AudioManager audioManager;
|
||||
|
||||
private AudioDeviceHandlerInterface audioDeviceHandler;
|
||||
|
||||
/**
|
||||
@@ -136,6 +143,8 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
*/
|
||||
public AudioModeModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
|
||||
audioManager = (AudioManager)reactContext.getSystemService(Context.AUDIO_SERVICE);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -198,7 +207,12 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
*/
|
||||
@Override
|
||||
public void initialize() {
|
||||
setAudioDeviceHandler();
|
||||
runInAudioThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
setAudioDeviceHandler();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void setAudioDeviceHandler() {
|
||||
@@ -207,14 +221,14 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
}
|
||||
|
||||
if (useConnectionService()) {
|
||||
audioDeviceHandler = new AudioDeviceHandlerConnectionService();
|
||||
audioDeviceHandler = new AudioDeviceHandlerConnectionService(audioManager);
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
audioDeviceHandler = new AudioDeviceHandlerGeneric();
|
||||
audioDeviceHandler = new AudioDeviceHandlerGeneric(audioManager);
|
||||
} else {
|
||||
audioDeviceHandler = new AudioDeviceHandlerLegacy();
|
||||
audioDeviceHandler = new AudioDeviceHandlerLegacy(audioManager);
|
||||
}
|
||||
|
||||
audioDeviceHandler.start(getReactApplicationContext(), this);
|
||||
audioDeviceHandler.start(this);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -292,9 +306,14 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
* @param use Boolean indicator of where it should be used or not.
|
||||
*/
|
||||
@ReactMethod
|
||||
public void setUseConnectionService(boolean use) {
|
||||
useConnectionService_ = use;
|
||||
setAudioDeviceHandler();
|
||||
public void setUseConnectionService(final boolean use) {
|
||||
runInAudioThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
useConnectionService_ = use;
|
||||
setAudioDeviceHandler();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -408,16 +427,24 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Needed on the legacy handler...
|
||||
*
|
||||
* @return Context for the application.
|
||||
*/
|
||||
Context getContext() {
|
||||
return getReactApplicationContext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Interface for the modules implementing the actual audio device management.
|
||||
*/
|
||||
interface AudioDeviceHandlerInterface {
|
||||
/**
|
||||
* Start detecting audio device changes.
|
||||
* @param context Android {@link Context} where detection should take place.
|
||||
* @param audioModeModule Reference to the main {@link AudioModeModule}.
|
||||
*/
|
||||
void start(Context context, AudioModeModule audioModeModule);
|
||||
void start(AudioModeModule audioModeModule);
|
||||
|
||||
/**
|
||||
* Stop audio device detection.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/*
|
||||
* Copyright @ 2019-present 8x8, Inc.
|
||||
* Copyright @ 2017-2018 Atlassian Pty Ltd
|
||||
* Copyright @ 2017-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,6 +17,7 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import android.app.Activity;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.facebook.hermes.reactexecutor.HermesExecutorFactory;
|
||||
@@ -31,13 +31,12 @@ import com.facebook.react.devsupport.DevInternalSettings;
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
|
||||
import com.oney.WebRTCModule.RTCVideoViewManager;
|
||||
import com.oney.WebRTCModule.WebRTCModule;
|
||||
|
||||
import org.webrtc.SoftwareVideoDecoderFactory;
|
||||
import org.webrtc.SoftwareVideoEncoderFactory;
|
||||
import org.webrtc.VideoDecoderFactory;
|
||||
import org.webrtc.VideoEncoderFactory;
|
||||
import org.webrtc.audio.AudioDeviceModule;
|
||||
import org.webrtc.audio.JavaAudioDeviceModule;
|
||||
|
||||
@@ -84,12 +83,10 @@ class ReactInstanceManagerHolder {
|
||||
|
||||
AudioDeviceModule adm = JavaAudioDeviceModule.builder(reactContext)
|
||||
.createAudioDeviceModule();
|
||||
VideoDecoderFactory videoDecoderFactory = new SoftwareVideoDecoderFactory();
|
||||
VideoEncoderFactory videoEncoderFactory = new SoftwareVideoEncoderFactory();
|
||||
|
||||
options.setAudioDeviceModule(adm);
|
||||
options.setVideoDecoderFactory(videoDecoderFactory);
|
||||
options.setVideoEncoderFactory(videoEncoderFactory);
|
||||
|
||||
options.setVideoDecoderFactory(new SoftwareVideoDecoderFactory());
|
||||
options.setVideoEncoderFactory(new SoftwareVideoEncoderFactory());
|
||||
|
||||
nativeModules.add(new WebRTCModule(reactContext, options));
|
||||
|
||||
|
||||
210
conference.js
@@ -2,6 +2,7 @@
|
||||
|
||||
import { openConnection } from './connection';
|
||||
|
||||
import { ENDPOINT_TEXT_MESSAGE_NAME } from './modules/API/constants';
|
||||
import AuthHandler from './modules/UI/authentication/AuthHandler';
|
||||
import Recorder from './modules/recorder/Recorder';
|
||||
|
||||
@@ -119,6 +120,7 @@ import {
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import { setSharedVideoStatus } from './react/features/shared-video';
|
||||
import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';
|
||||
import { createPresenterEffect } from './react/features/stream-effects/presenter';
|
||||
import { endpointMessageReceived } from './react/features/subtitles';
|
||||
import { createRnnoiseProcessorPromise } from './react/features/rnnoise';
|
||||
@@ -435,7 +437,6 @@ export default {
|
||||
* the tracks won't exist).
|
||||
*/
|
||||
_localTracksInitialized: false,
|
||||
isModerator: false,
|
||||
isSharingScreen: false,
|
||||
|
||||
/**
|
||||
@@ -659,10 +660,10 @@ export default {
|
||||
startAudioOnly: config.startAudioOnly,
|
||||
startScreenSharing: config.startScreenSharing,
|
||||
startWithAudioMuted: config.startWithAudioMuted
|
||||
|| config.startSilent
|
||||
|| isUserInteractionRequiredForUnmute(APP.store.getState()),
|
||||
|| config.startSilent
|
||||
|| isUserInteractionRequiredForUnmute(APP.store.getState()),
|
||||
startWithVideoMuted: config.startWithVideoMuted
|
||||
|| isUserInteractionRequiredForUnmute(APP.store.getState())
|
||||
|| isUserInteractionRequiredForUnmute(APP.store.getState())
|
||||
}))
|
||||
.then(([ tracks, con ]) => {
|
||||
tracks.forEach(track => {
|
||||
@@ -926,14 +927,6 @@ export default {
|
||||
this.muteVideo(!this.isLocalVideoMuted(), showUI);
|
||||
},
|
||||
|
||||
/**
|
||||
* Retrieve list of conference participants (without local user).
|
||||
* @returns {JitsiParticipant[]}
|
||||
*/
|
||||
listMembers() {
|
||||
return room.getParticipants();
|
||||
},
|
||||
|
||||
/**
|
||||
* Retrieve list of ids of conference participants (without local user).
|
||||
* @returns {string[]}
|
||||
@@ -953,6 +946,16 @@ export default {
|
||||
return user && user.isModerator();
|
||||
},
|
||||
|
||||
/**
|
||||
* Retrieve list of conference participants (without local user).
|
||||
* @returns {JitsiParticipant[]}
|
||||
*
|
||||
* NOTE: Used by jitsi-meet-torture!
|
||||
*/
|
||||
listMembers() {
|
||||
return room.getParticipants();
|
||||
},
|
||||
|
||||
get membersCount() {
|
||||
return room.getParticipants().length + 1;
|
||||
},
|
||||
@@ -1285,6 +1288,13 @@ export default {
|
||||
options.confID = `${locationURL.host}${locationURL.pathname}`;
|
||||
options.createVADProcessor = createRnnoiseProcessorPromise;
|
||||
|
||||
// Disable CallStats, if requessted.
|
||||
if (options.disableThirdPartyRequests) {
|
||||
delete options.callStatsID;
|
||||
delete options.callStatsSecret;
|
||||
delete options.getWiFiStatsMethod;
|
||||
}
|
||||
|
||||
return options;
|
||||
},
|
||||
|
||||
@@ -1415,7 +1425,7 @@ export default {
|
||||
* in case it fails.
|
||||
* @private
|
||||
*/
|
||||
_turnScreenSharingOff(didHaveVideo) {
|
||||
async _turnScreenSharingOff(didHaveVideo) {
|
||||
this._untoggleScreenSharing = null;
|
||||
this.videoSwitchInProgress = true;
|
||||
const { receiver } = APP.remoteControl;
|
||||
@@ -1425,6 +1435,9 @@ export default {
|
||||
}
|
||||
|
||||
this._stopProxyConnection();
|
||||
if (config.enableScreenshotCapture) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureEffect(false));
|
||||
}
|
||||
|
||||
// It can happen that presenter GUM is in progress while screensharing is being turned off. Here it needs to
|
||||
// wait for that GUM to be resolved in order to prevent leaking the presenter track(this.localPresenterVideo
|
||||
@@ -1441,6 +1454,20 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
// If system audio was also shared stop the AudioMixerEffect and dispose of the desktop audio track.
|
||||
if (this._mixerEffect) {
|
||||
await this.localAudio.setEffect(undefined);
|
||||
await this._desktopAudioStream.dispose();
|
||||
this._mixerEffect = undefined;
|
||||
this._desktopAudioStream = undefined;
|
||||
|
||||
// In case there was no local audio when screen sharing was started the fact that we set the audio stream to
|
||||
// null will take care of the desktop audio stream cleanup.
|
||||
} else if (this._desktopAudioStream) {
|
||||
await this.useAudioStream(null);
|
||||
this._desktopAudioStream = undefined;
|
||||
}
|
||||
|
||||
if (didHaveVideo) {
|
||||
promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))
|
||||
.then(([ stream ]) => this.useVideoStream(stream))
|
||||
@@ -1461,8 +1488,6 @@ export default {
|
||||
promise = promise.then(() => this.useVideoStream(null));
|
||||
}
|
||||
|
||||
APP.store.dispatch(toggleScreenshotCaptureEffect(false));
|
||||
|
||||
return promise.then(
|
||||
() => {
|
||||
this.videoSwitchInProgress = false;
|
||||
@@ -1582,26 +1607,31 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
return getDesktopStreamPromise.then(([ desktopStream ]) => {
|
||||
return getDesktopStreamPromise.then(desktopStreams => {
|
||||
// Stores the "untoggle" handler which remembers whether was
|
||||
// there any video before and whether was it muted.
|
||||
this._untoggleScreenSharing
|
||||
= this._turnScreenSharingOff.bind(this, didHaveVideo);
|
||||
desktopStream.on(
|
||||
JitsiTrackEvents.LOCAL_TRACK_STOPPED,
|
||||
() => {
|
||||
// If the stream was stopped during screen sharing
|
||||
// session then we should switch back to video.
|
||||
this.isSharingScreen
|
||||
&& this._untoggleScreenSharing
|
||||
&& this._untoggleScreenSharing();
|
||||
}
|
||||
);
|
||||
|
||||
const desktopVideoStream = desktopStreams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);
|
||||
|
||||
if (desktopVideoStream) {
|
||||
desktopVideoStream.on(
|
||||
JitsiTrackEvents.LOCAL_TRACK_STOPPED,
|
||||
() => {
|
||||
// If the stream was stopped during screen sharing
|
||||
// session then we should switch back to video.
|
||||
this.isSharingScreen
|
||||
&& this._untoggleScreenSharing
|
||||
&& this._untoggleScreenSharing();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// close external installation dialog on success.
|
||||
externalInstallation && $.prompt.close();
|
||||
|
||||
return desktopStream;
|
||||
return desktopStreams;
|
||||
}, error => {
|
||||
DSExternalInstallationInProgress = false;
|
||||
|
||||
@@ -1664,19 +1694,40 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new presenter track and apply the presenter effect.
|
||||
if (!this.localPresenterVideo && !mute) {
|
||||
// create a new presenter track and apply the presenter effect.
|
||||
let { height } = this.localVideo.track.getSettings();
|
||||
let { aspectRatio, height } = this.localVideo.track.getSettings();
|
||||
const { width } = this.localVideo.track.getSettings();
|
||||
let desktopResizeConstraints = {};
|
||||
let resizeDesktopStream = false;
|
||||
const DESKTOP_STREAM_CAP = 720;
|
||||
|
||||
// Workaround for Firefox since it doesn't return the correct width/height of the desktop stream
|
||||
// that is being currently shared.
|
||||
if (!height) {
|
||||
const desktopResizeConstraints = {
|
||||
// Determine the constraints if the desktop track needs to be resized.
|
||||
// Resizing is needed when the resolution cannot be determined or when
|
||||
// the window is bigger than 720p.
|
||||
if (height && width) {
|
||||
aspectRatio = aspectRatio ?? (width / height).toPrecision(4);
|
||||
const advancedConstraints = [ { aspectRatio } ];
|
||||
const isPortrait = height >= width;
|
||||
|
||||
// Determine which dimension needs resizing and resize only that side
|
||||
// keeping the aspect ratio same as before.
|
||||
if (isPortrait && width > DESKTOP_STREAM_CAP) {
|
||||
resizeDesktopStream = true;
|
||||
advancedConstraints.push({ width: DESKTOP_STREAM_CAP });
|
||||
} else if (!isPortrait && height > DESKTOP_STREAM_CAP) {
|
||||
resizeDesktopStream = true;
|
||||
advancedConstraints.push({ height: DESKTOP_STREAM_CAP });
|
||||
}
|
||||
desktopResizeConstraints.advanced = advancedConstraints;
|
||||
} else {
|
||||
resizeDesktopStream = true;
|
||||
desktopResizeConstraints = {
|
||||
width: 1280,
|
||||
height: 720,
|
||||
resizeMode: 'crop-and-scale'
|
||||
height: 720
|
||||
};
|
||||
|
||||
}
|
||||
if (resizeDesktopStream) {
|
||||
try {
|
||||
await this.localVideo.track.applyConstraints(desktopResizeConstraints);
|
||||
} catch (err) {
|
||||
@@ -1684,7 +1735,7 @@ export default {
|
||||
|
||||
return;
|
||||
}
|
||||
height = desktopResizeConstraints.height;
|
||||
height = this.localVideo.track.getSettings().height ?? DESKTOP_STREAM_CAP;
|
||||
}
|
||||
const defaultCamera = getUserSelectedCameraDeviceId(APP.store.getState());
|
||||
let effect;
|
||||
@@ -1731,10 +1782,34 @@ export default {
|
||||
this.videoSwitchInProgress = true;
|
||||
|
||||
return this._createDesktopTrack(options)
|
||||
.then(stream => this.useVideoStream(stream))
|
||||
.then(async streams => {
|
||||
const desktopVideoStream = streams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);
|
||||
|
||||
if (desktopVideoStream) {
|
||||
this.useVideoStream(desktopVideoStream);
|
||||
}
|
||||
|
||||
this._desktopAudioStream = streams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
|
||||
|
||||
if (this._desktopAudioStream) {
|
||||
// If there is a localAudio stream, mix in the desktop audio stream captured by the screen sharing
|
||||
// api.
|
||||
if (this.localAudio) {
|
||||
this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);
|
||||
|
||||
await this.localAudio.setEffect(this._mixerEffect);
|
||||
} else {
|
||||
// If no local stream is present ( i.e. no input audio devices) we use the screen share audio
|
||||
// stream as we would use a regular stream.
|
||||
await this.useAudioStream(this._desktopAudioStream);
|
||||
}
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
this.videoSwitchInProgress = false;
|
||||
APP.store.dispatch(toggleScreenshotCaptureEffect(true));
|
||||
if (config.enableScreenshotCapture) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureEffect(true));
|
||||
}
|
||||
sendAnalytics(createScreenSharingEvent('started'));
|
||||
logger.log('Screen sharing started');
|
||||
})
|
||||
@@ -1870,9 +1945,6 @@ export default {
|
||||
|
||||
logger.log(`USER ${id} connnected:`, user);
|
||||
APP.UI.addUser(user);
|
||||
|
||||
// check the roles for the new user and reflect them
|
||||
APP.UI.updateUserRole(user);
|
||||
});
|
||||
|
||||
room.on(JitsiConferenceEvents.USER_LEFT, (id, user) => {
|
||||
@@ -1903,19 +1975,8 @@ export default {
|
||||
logger.info(`My role changed, new role: ${role}`);
|
||||
|
||||
APP.store.dispatch(localParticipantRoleChanged(role));
|
||||
|
||||
if (this.isModerator !== room.isModerator()) {
|
||||
this.isModerator = room.isModerator();
|
||||
APP.UI.updateLocalRole(room.isModerator());
|
||||
}
|
||||
} else {
|
||||
APP.store.dispatch(participantRoleChanged(id, role));
|
||||
|
||||
const user = room.getParticipantById(id);
|
||||
|
||||
if (user) {
|
||||
APP.UI.updateUserRole(user);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -2030,7 +2091,22 @@ export default {
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.ENDPOINT_MESSAGE_RECEIVED,
|
||||
(...args) => APP.store.dispatch(endpointMessageReceived(...args)));
|
||||
(...args) => {
|
||||
APP.store.dispatch(endpointMessageReceived(...args));
|
||||
if (args && args.length >= 2) {
|
||||
const [ sender, eventData ] = args;
|
||||
|
||||
if (eventData.name === ENDPOINT_TEXT_MESSAGE_NAME) {
|
||||
APP.API.notifyEndpointTextMessageReceived({
|
||||
senderInfo: {
|
||||
jid: sender._jid,
|
||||
id: sender._id
|
||||
},
|
||||
eventData
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.LOCK_STATE_CHANGED,
|
||||
@@ -2261,9 +2337,19 @@ export default {
|
||||
|
||||
return stream;
|
||||
})
|
||||
.then(stream => this.useAudioStream(stream))
|
||||
.then(async stream => {
|
||||
// In case screen sharing audio is also shared we mix it with new input stream. The old _mixerEffect
|
||||
// will be cleaned up when the existing track is replaced.
|
||||
if (this._mixerEffect) {
|
||||
this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);
|
||||
|
||||
await stream.setEffect(this._mixerEffect);
|
||||
}
|
||||
|
||||
return this.useAudioStream(stream);
|
||||
})
|
||||
.then(() => {
|
||||
logger.log('switched local audio device');
|
||||
logger.log(`switched local audio device: ${this.localAudio?.getDeviceId()}`);
|
||||
|
||||
this._updateAudioDeviceId();
|
||||
})
|
||||
@@ -2640,12 +2726,6 @@ export default {
|
||||
// audio devices detected or if the local audio stream already exists.
|
||||
const available = audioDeviceCount > 0 || Boolean(this.localAudio);
|
||||
|
||||
logger.debug(
|
||||
`Microphone button enabled: ${available}`,
|
||||
`local audio: ${this.localAudio}`,
|
||||
`audio devices: ${audioMediaDevices}`,
|
||||
`device count: ${audioDeviceCount}`);
|
||||
|
||||
APP.store.dispatch(setAudioAvailable(available));
|
||||
APP.API.notifyAudioAvailabilityChanged(available);
|
||||
},
|
||||
@@ -2666,12 +2746,6 @@ export default {
|
||||
// config).
|
||||
const available = videoDeviceCount > 0 || Boolean(this.localVideo);
|
||||
|
||||
logger.debug(
|
||||
`Camera button enabled: ${available}`,
|
||||
`local video: ${this.localVideo}`,
|
||||
`video devices: ${videoMediaDevices}`,
|
||||
`device count: ${videoDeviceCount}`);
|
||||
|
||||
APP.store.dispatch(setVideoAvailable(available));
|
||||
APP.API.notifyVideoAvailabilityChanged(available);
|
||||
},
|
||||
|
||||
68
config.js
@@ -30,6 +30,9 @@ var config = {
|
||||
// BOSH URL. FIXME: use XEP-0156 to discover it.
|
||||
bosh: '//jitsi-meet.example.com/http-bind',
|
||||
|
||||
// Websocket URL
|
||||
// websocket: 'wss://jitsi-meet.example.com/xmpp-websocket',
|
||||
|
||||
// The name of client node advertised in XEP-0115 'c' stanza
|
||||
clientNode: 'http://jitsi.org/jitsimeet',
|
||||
|
||||
@@ -72,6 +75,7 @@ var config = {
|
||||
|
||||
// Disable measuring of audio levels.
|
||||
// disableAudioLevels: false,
|
||||
// audioLevelsInterval: 200,
|
||||
|
||||
// Enabling this will run the lib-jitsi-meet no audio detection module which
|
||||
// will notify the user if the current selected microphone has no audio
|
||||
@@ -106,12 +110,11 @@ var config = {
|
||||
|
||||
// w3c spec-compliant video constraints to use for video capture. Currently
|
||||
// used by browsers that return true from lib-jitsi-meet's
|
||||
// util#browser#usesNewGumFlow. The constraints are independency from
|
||||
// this config's resolution value. Defaults to requesting an ideal aspect
|
||||
// ratio of 16:9 with an ideal resolution of 720.
|
||||
// util#browser#usesNewGumFlow. The constraints are independent from
|
||||
// this config's resolution value. Defaults to requesting an ideal
|
||||
// resolution of 720p.
|
||||
// constraints: {
|
||||
// video: {
|
||||
// aspectRatio: 16 / 9,
|
||||
// height: {
|
||||
// ideal: 720,
|
||||
// max: 720,
|
||||
@@ -298,16 +301,19 @@ var config = {
|
||||
// estimation tests.
|
||||
// gatherStats: false,
|
||||
|
||||
// The interval at which PeerConnection.getStats() is called. Defaults to 10000
|
||||
// pcStatsInterval: 10000,
|
||||
|
||||
// To enable sending statistics to callstats.io you must provide the
|
||||
// Application ID and Secret.
|
||||
// callStatsID: '',
|
||||
// callStatsSecret: '',
|
||||
|
||||
// enables sending participants display name to callstats
|
||||
// enableDisplayNameInStats: false
|
||||
// enableDisplayNameInStats: false,
|
||||
|
||||
// enables sending participants email if available to callstats and other analytics
|
||||
// enableEmailInStats: false
|
||||
// enableEmailInStats: false,
|
||||
|
||||
// Privacy
|
||||
//
|
||||
@@ -337,9 +343,7 @@ var config = {
|
||||
stunServers: [
|
||||
|
||||
// { urls: 'stun:jitsi-meet.example.com:443' },
|
||||
{ urls: 'stun:stun.l.google.com:19302' },
|
||||
{ urls: 'stun:stun1.l.google.com:19302' },
|
||||
{ urls: 'stun:stun2.l.google.com:19302' }
|
||||
{ urls: 'stun:meet-jit-si-turnrelay.jitsi.net:443' }
|
||||
],
|
||||
|
||||
// Sets the ICE transport policy for the p2p connection. At the time
|
||||
@@ -383,7 +387,24 @@ var config = {
|
||||
// shard: "shard1",
|
||||
// region: "europe",
|
||||
// userRegion: "asia"
|
||||
}
|
||||
},
|
||||
|
||||
// Decides whether the start/stop recording audio notifications should play on record.
|
||||
// disableRecordAudioNotification: false,
|
||||
|
||||
// Information for the chrome extension banner
|
||||
// chromeExtensionBanner: {
|
||||
// // The chrome extension to be installed address
|
||||
// url: 'https://chrome.google.com/webstore/detail/jitsi-meetings/kglhbbefdnlheedjiejgomgmfplipfeb',
|
||||
|
||||
// // Extensions info which allows checking if they are installed or not
|
||||
// chromeExtensionsInfo: [
|
||||
// {
|
||||
// id: 'kglhbbefdnlheedjiejgomgmfplipfeb',
|
||||
// path: 'jitsi-logo-48x48.png'
|
||||
// }
|
||||
// ]
|
||||
// },
|
||||
|
||||
// Local Recording
|
||||
//
|
||||
@@ -401,7 +422,7 @@ var config = {
|
||||
// format: 'flac'
|
||||
//
|
||||
|
||||
// }
|
||||
// },
|
||||
|
||||
// Options related to end-to-end (participant to participant) ping.
|
||||
// e2eping: {
|
||||
@@ -413,22 +434,22 @@ var config = {
|
||||
// // with the measured RTT will be sent. Defaults to 60000, set
|
||||
// // to <= 0 to disable.
|
||||
// analyticsInterval: 60000,
|
||||
// }
|
||||
// },
|
||||
|
||||
// If set, will attempt to use the provided video input device label when
|
||||
// triggering a screenshare, instead of proceeding through the normal flow
|
||||
// for obtaining a desktop stream.
|
||||
// NOTE: This option is experimental and is currently intended for internal
|
||||
// use only.
|
||||
// _desktopSharingSourceDevice: 'sample-id-or-label'
|
||||
// _desktopSharingSourceDevice: 'sample-id-or-label',
|
||||
|
||||
// If true, any checks to handoff to another application will be prevented
|
||||
// and instead the app will continue to display in the current browser.
|
||||
// disableDeepLinking: false
|
||||
// disableDeepLinking: false,
|
||||
|
||||
// A property to disable the right click context menu for localVideo
|
||||
// the menu has option to flip the locally seen video for local presentations
|
||||
// disableLocalVideoFlip: false
|
||||
// disableLocalVideoFlip: false,
|
||||
|
||||
// Deployment specific URLs.
|
||||
// deploymentUrls: {
|
||||
@@ -438,7 +459,16 @@ var config = {
|
||||
// // If specified a 'Download our apps' button will be displayed in the overflow menu with a link
|
||||
// // to the specified URL for an app download page.
|
||||
// downloadAppsUrl: 'https://docs.example.com/our-apps.html'
|
||||
// }
|
||||
// },
|
||||
|
||||
// Options related to the remote participant menu.
|
||||
// remoteVideoMenu: {
|
||||
// // If set to true the 'Kick out' button will be disabled.
|
||||
// disableKick: true
|
||||
// },
|
||||
|
||||
// If set to true all muting operations of remote participants will be disabled.
|
||||
// disableRemoteMute: true,
|
||||
|
||||
// List of undocumented settings used in jitsi-meet
|
||||
/**
|
||||
@@ -490,6 +520,12 @@ var config = {
|
||||
startBitrate
|
||||
*/
|
||||
|
||||
|
||||
// Allow all above example options to include a trailing comma and
|
||||
// prevent fear when commenting out the last value.
|
||||
makeJsonParserHappy: 'even if last key had a trailing comma'
|
||||
|
||||
// no configuration value should follow this line.
|
||||
};
|
||||
|
||||
/* eslint-enable no-unused-vars, no-var */
|
||||
|
||||
@@ -15,6 +15,13 @@ import {
|
||||
|
||||
const logger = require('jitsi-meet-logger').getLogger(__filename);
|
||||
|
||||
/**
|
||||
* The feature announced so we can distinguish jibri participants.
|
||||
*
|
||||
* @type {string}
|
||||
*/
|
||||
export const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';
|
||||
|
||||
/**
|
||||
* Checks if we have data to use attach instead of connect. If we have the data
|
||||
* executes attach otherwise check if we have to wait for the data. If we have
|
||||
@@ -75,7 +82,15 @@ function connect(id, password, roomName) {
|
||||
const connectionConfig = Object.assign({}, config);
|
||||
const { issuer, jwt } = APP.store.getState()['features/base/jwt'];
|
||||
|
||||
connectionConfig.bosh += `?room=${roomName}`;
|
||||
// Use Websocket URL for the web app if configured. Note that there is no 'isWeb' check, because there's assumption
|
||||
// that this code executes only on web browsers/electron. This needs to be changed when mobile and web are unified.
|
||||
let serviceUrl = connectionConfig.websocket || connectionConfig.bosh;
|
||||
|
||||
serviceUrl += `?room=${roomName}`;
|
||||
|
||||
// FIXME Remove deprecated 'bosh' option assignment at some point(LJM will be accepting only 'serviceUrl' option
|
||||
// in future). It's included for the time being for Jitsi Meet and lib-jitsi-meet versions interoperability.
|
||||
connectionConfig.serviceUrl = connectionConfig.bosh = serviceUrl;
|
||||
|
||||
const connection
|
||||
= new JitsiMeetJS.JitsiConnection(
|
||||
@@ -83,6 +98,10 @@ function connect(id, password, roomName) {
|
||||
jwt && issuer && issuer !== 'anonymous' ? jwt : undefined,
|
||||
connectionConfig);
|
||||
|
||||
if (config.iAmRecorder) {
|
||||
connection.addFeature(DISCO_JIBRI_FEATURE);
|
||||
}
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
connection.addEventListener(
|
||||
JitsiConnectionEvents.CONNECTION_ESTABLISHED,
|
||||
|
||||
@@ -17,10 +17,11 @@ import parseURLParams from '../react/features/base/config/parseURLParams';
|
||||
|
||||
if (typeof createConnectionExternally === 'function') {
|
||||
// URL params have higher priority than config params.
|
||||
// Do not use external connect if websocket is enabled.
|
||||
let url
|
||||
= parseURLParams(window.location, true, 'hash')[
|
||||
'config.externalConnectUrl']
|
||||
|| config.externalConnectUrl;
|
||||
|| config.websocket ? undefined : config.externalConnectUrl;
|
||||
const isRecorder
|
||||
= parseURLParams(window.location, true, 'hash')['config.iAmRecorder'];
|
||||
|
||||
|
||||
130
css/_audio-preview.css
Normal file
@@ -0,0 +1,130 @@
|
||||
.audio-preview {
|
||||
&-content {
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
max-height: 456px;
|
||||
overflow: auto;
|
||||
width: 328px;
|
||||
}
|
||||
|
||||
&-header {
|
||||
color: #fff;
|
||||
display: flex;
|
||||
padding: 16px;
|
||||
|
||||
&-icon {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
&-text {
|
||||
font-weight: bold;
|
||||
margin-left: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
&-entry {
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
padding: 12px 0;
|
||||
margin-left: 48px;
|
||||
|
||||
&--selected {
|
||||
background: rgba(28,32,37,0.5);
|
||||
cursor: initial;
|
||||
margin-left: 0;
|
||||
padding-left: 21px;
|
||||
}
|
||||
|
||||
&-text {
|
||||
color: #fff;
|
||||
font-size: 15px;
|
||||
display: inline-block;
|
||||
line-height: 24px;
|
||||
text-overflow: ellipsis;
|
||||
max-width: 213px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
}
|
||||
|
||||
&-speaker {
|
||||
position: relative;
|
||||
|
||||
&:hover {
|
||||
.audio-preview-entry {
|
||||
background: rgba(255,255,255, 0.2);
|
||||
margin-left: 0;
|
||||
padding-left: 48px;
|
||||
|
||||
&--selected {
|
||||
padding-left: 21px;
|
||||
}
|
||||
}
|
||||
|
||||
.audio-preview-test-button {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
.audio-preview-entry-text {
|
||||
max-width: 256px;
|
||||
}
|
||||
}
|
||||
|
||||
&-microphone {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
||||
&-icon {
|
||||
border-radius: 50%;
|
||||
display: inline-block;
|
||||
width: 14px;
|
||||
|
||||
& svg {
|
||||
fill: #1C2025;
|
||||
}
|
||||
|
||||
&--check {
|
||||
background: #31B76A;
|
||||
margin-right: 13px;
|
||||
}
|
||||
|
||||
&--exclamation {
|
||||
margin-left: 6px;
|
||||
& svg {
|
||||
fill: #E54B4B;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-test-button {
|
||||
display: none;
|
||||
background: #FFF;
|
||||
border: 1px solid #D1DBE8;
|
||||
border-radius: 3px;
|
||||
color: #1C2025;
|
||||
cursor: pointer;
|
||||
font-weight: 600;
|
||||
font-size: 15px;
|
||||
line-height: 24px;
|
||||
padding: 4px 16px;
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
top: 8px;
|
||||
}
|
||||
|
||||
&-meter-mic {
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
top: 18px;
|
||||
}
|
||||
|
||||
// Override @atlaskit/InlineDialog container which is made with styled components
|
||||
& > div > div:nth-child(2) > div > div {
|
||||
outline: none;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,11 @@ body {
|
||||
fill: white;
|
||||
}
|
||||
|
||||
.jitsi-icon.gray svg {
|
||||
fill: #5E6D7A;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/**
|
||||
* AtlasKitThemeProvider sets a background color on an app-wrapping div, thereby
|
||||
* preventing transparency in filmstrip-only mode. The selector chosen to
|
||||
|
||||
93
css/_chrome-extension-banner.scss
Normal file
@@ -0,0 +1,93 @@
|
||||
.chrome-extension-banner {
|
||||
position: fixed;
|
||||
width: 406px;
|
||||
height: $chromeExtensionBannerHeight;
|
||||
background: #FFF;
|
||||
box-shadow: 0px 2px 48px rgba(0, 0, 0, 0.25);
|
||||
border-radius: 4px;
|
||||
z-index: 1000;
|
||||
float: right;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 20px 20px;
|
||||
top: $chromeExtensionBannerTop;
|
||||
right: $chromeExtensionBannerRight;
|
||||
&__pos_in_meeting {
|
||||
top: $chromeExtensionBannerTopInMeeting;
|
||||
right: $chromeExtensionBannerRightInMeeeting;
|
||||
}
|
||||
|
||||
&__container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
&__button-container {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
&__checkbox-container {
|
||||
display: $chromeExtensionBannerDontShowAgainDisplay;
|
||||
margin-left: 45px;
|
||||
margin-top: 16px;
|
||||
}
|
||||
|
||||
&__checkbox-label {
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
letter-spacing: -0.006em;
|
||||
color: #1C2025;
|
||||
}
|
||||
|
||||
&__icon-container {
|
||||
display: flex;
|
||||
background: url('../images/chromeLogo.svg');
|
||||
background-repeat: no-repeat;
|
||||
width: 27px;
|
||||
height: 27px;
|
||||
}
|
||||
|
||||
&__text-container {
|
||||
font-size: 14px;
|
||||
line-height: 18px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
letter-spacing: -0.006em;
|
||||
color: #151531;
|
||||
width: 329px;
|
||||
}
|
||||
|
||||
&__close-container {
|
||||
display: flex;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
}
|
||||
|
||||
&__gray-close-icon {
|
||||
fill: #5E6D7A;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&__button-open-url {
|
||||
background: #0A57EB;
|
||||
border-radius: 24px;
|
||||
margin-left: 45px;
|
||||
width: 236px;
|
||||
height: 40px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&__button-text {
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
letter-spacing: -0.006em;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
}
|
||||
30
css/_meter.css
Normal file
@@ -0,0 +1,30 @@
|
||||
.jitsi-icon {
|
||||
&.metr {
|
||||
display: inline-block;
|
||||
|
||||
& > svg {
|
||||
fill: #4E5E6C;
|
||||
width: 38px;
|
||||
}
|
||||
}
|
||||
|
||||
&.metr--disabled {
|
||||
& > svg {
|
||||
fill: #4E5E6C;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.metr-l-0 {
|
||||
rect:first-child {
|
||||
fill: #31B76A;
|
||||
}
|
||||
}
|
||||
|
||||
@for $i from 1 through 7 {
|
||||
.metr-l-#{$i} {
|
||||
rect:nth-child(-n+#{$i+1}) {
|
||||
fill: #31B76A;
|
||||
}
|
||||
}
|
||||
}
|
||||
79
css/_settings-button.scss
Normal file
@@ -0,0 +1,79 @@
|
||||
.settings-button {
|
||||
&-container {
|
||||
position: relative;
|
||||
|
||||
.toolbox-icon {
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
border: 1px solid #d1dbe8;
|
||||
justify-content: center;
|
||||
width: 38px;
|
||||
height: 38px;
|
||||
|
||||
&:hover {
|
||||
background-color: #daebfa;
|
||||
border: 1px solid #daebfa;
|
||||
}
|
||||
|
||||
&.toggled {
|
||||
background: #2a3a4b;
|
||||
border: 1px solid #5e6d7a;
|
||||
|
||||
svg {
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background-color: #5e6d7a;
|
||||
}
|
||||
}
|
||||
|
||||
&.disabled, .disabled & {
|
||||
cursor: initial;
|
||||
color: #fff;
|
||||
background-color: #a4b8d1;
|
||||
}
|
||||
|
||||
svg {
|
||||
fill: #5e6d7a;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&-small-icon {
|
||||
background: #FFF;
|
||||
border: 1px solid rgba(0, 0, 0, 0.2);
|
||||
border-radius: 50%;
|
||||
bottom: 0;
|
||||
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.25);
|
||||
cursor: pointer;
|
||||
height: 16px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
right: 4px;
|
||||
width: 16px;
|
||||
|
||||
&> svg {
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
&--disabled {
|
||||
background-color: #a4b8d1;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
&--hovered {
|
||||
bottom: -1px;
|
||||
height: 20px;
|
||||
right: 2px;
|
||||
width: 20px;
|
||||
|
||||
&> svg {
|
||||
margin-top: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -31,13 +31,6 @@
|
||||
display: inline-block !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows as a list item
|
||||
**/
|
||||
.show-list-item {
|
||||
display: list-item !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows a flex element.
|
||||
*/
|
||||
|
||||
@@ -260,3 +260,14 @@ $deepLinkingMobileButtonFontWeight: bold;
|
||||
$deepLinkingMobileButtonFontSize: inherit;
|
||||
|
||||
$primaryDeepLinkingMobileButtonBorderRadius: inherit;
|
||||
|
||||
/**
|
||||
* Chrome extension banner variables.
|
||||
*/
|
||||
$chromeExtensionBannerDontShowAgainDisplay: flex;
|
||||
$chromeExtensionBannerHeight: 128px;
|
||||
$chromeExtensionBannerTop: 80px;
|
||||
$chromeExtensionBannerRight: 16px;
|
||||
$chromeExtensionBannerTopInMeeting: 10px;
|
||||
$chromeExtensionBannerRightInMeeeting: 10px;
|
||||
|
||||
|
||||
65
css/_video-preview.css
Normal file
@@ -0,0 +1,65 @@
|
||||
.video-preview {
|
||||
max-height: 290px;
|
||||
overflow: auto;
|
||||
|
||||
&-entry {
|
||||
cursor: pointer;
|
||||
height: 135px;
|
||||
margin-bottom: 16px;
|
||||
position: relative;
|
||||
width: 240px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
&--selected {
|
||||
border: 3px solid #31B76A;
|
||||
cursor: default;
|
||||
height: 129px;
|
||||
width: 234px;
|
||||
}
|
||||
}
|
||||
|
||||
&-video {
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&-overlay {
|
||||
background: rgba(42, 58, 75, 0.6);
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
&-error {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
&-label {
|
||||
color: #fff;
|
||||
font-size: 13px;
|
||||
line-height: 20px;
|
||||
overflow: hidden;
|
||||
padding: 8px;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
text-overflow: ellipsis;
|
||||
width: 220px;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
// Override @atlaskit/InlineDialog container which is made with styled components
|
||||
& > div > div:nth-child(2) > div > div {
|
||||
outline: none;
|
||||
padding: 16px;
|
||||
}
|
||||
}
|
||||
@@ -173,18 +173,14 @@
|
||||
&__hoverOverlay {
|
||||
background: rgba(0,0,0,.6);
|
||||
border-radius: $borderRadius;
|
||||
position: relative;
|
||||
position: absolute;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
visibility: hidden;
|
||||
z-index: $zindex2;
|
||||
}
|
||||
|
||||
&.audio-only {
|
||||
.videoThumbnailProblemFilter {
|
||||
filter: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#localVideoWrapper {
|
||||
@@ -526,13 +522,16 @@
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
height: 50%;
|
||||
overflow: hidden;
|
||||
width: auto;
|
||||
overflow: hidden;
|
||||
|
||||
.userAvatar {
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
width: 100%;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -555,6 +554,9 @@
|
||||
}
|
||||
|
||||
.sharedVideoAvatar {
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
object-fit: cover;
|
||||
@@ -565,21 +567,6 @@
|
||||
filter: grayscale(.5) opacity(0.8);
|
||||
}
|
||||
|
||||
.remoteVideoProblemFilter {
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
.videoProblemFilter {
|
||||
-webkit-filter: blur(10px) grayscale(.5) opacity(0.8);
|
||||
filter: blur(10px) grayscale(.5) opacity(0.8);
|
||||
}
|
||||
|
||||
.videoThumbnailProblemFilter {
|
||||
-webkit-filter: grayscale(100%);
|
||||
filter: grayscale(100%);
|
||||
}
|
||||
|
||||
#remotePresenceMessage,
|
||||
#remoteConnectionMessage {
|
||||
position: absolute;
|
||||
@@ -610,24 +597,6 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
#localConnectionMessage {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
top:50%;
|
||||
z-index: $zindex2;
|
||||
font-weight: 600;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
color: #FFF;
|
||||
opacity: .80;
|
||||
text-shadow: 0px 0px 1px rgba(0,0,0,0.3),
|
||||
0px 1px 1px rgba(0,0,0,0.3),
|
||||
1px 0px 1px rgba(0,0,0,0.3),
|
||||
0px 0px 1px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.display-avatar-with-name {
|
||||
.avatar-container {
|
||||
visibility: visible;
|
||||
|
||||
@@ -55,6 +55,7 @@
|
||||
&#filmstripLocalVideo {
|
||||
align-self: flex-end;
|
||||
display: block;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
&.hidden {
|
||||
@@ -108,6 +109,7 @@
|
||||
*/
|
||||
padding: 1px 0;
|
||||
overflow-y: hidden;
|
||||
overflow-x: scroll;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.filmstrip__videos .videocontainer {
|
||||
display: none;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
background-size: contain;
|
||||
border: $thumbnailVideoBorder solid transparent;
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
display: none;
|
||||
}
|
||||
|
||||
#localConnectionMessage,
|
||||
#remoteConnectionMessage,
|
||||
.watermark {
|
||||
z-index: $filmstripVideosZ + 1;
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
display: flex;
|
||||
flex-direction: column-reverse;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
padding: ($desktopAppDragBarHeight - 5px) 5px 10px;
|
||||
/**
|
||||
* fixed positioning is necessary for remote menus and tooltips to pop
|
||||
@@ -48,7 +49,6 @@
|
||||
.filmstrip__videos {
|
||||
@extend %align-right;
|
||||
bottom: 0;
|
||||
overflow: visible !important;
|
||||
padding: 0;
|
||||
position:relative;
|
||||
right: 0;
|
||||
@@ -67,6 +67,7 @@
|
||||
border: $thumbnailsBorder solid transparent;
|
||||
padding-left: 0;
|
||||
transition: right 2s;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -80,6 +81,16 @@
|
||||
flex-direction: column-reverse;
|
||||
height: auto;
|
||||
justify-content: flex-start;
|
||||
|
||||
#filmstripLocalVideoThumbnail {
|
||||
width: calc(100% - 15px);
|
||||
|
||||
.videocontainer {
|
||||
height: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -96,18 +107,21 @@
|
||||
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
flex-direction: column-reverse;
|
||||
height: auto;
|
||||
justify-content: flex-end;
|
||||
overflow-x: hidden;
|
||||
overflow-y: scroll;
|
||||
|
||||
#filmstripRemoteVideosContainer {
|
||||
@include minHWAutoFix();
|
||||
flex-direction: column-reverse;
|
||||
/**
|
||||
* Add padding as a hack for Firefox not to show scrollbars when
|
||||
* unnecessary.
|
||||
*/
|
||||
padding: 1px 0;
|
||||
overflow-x: hidden;
|
||||
overflow: visible;
|
||||
width: calc(100% - 8px); // 8px for margin + border of the thumbnails
|
||||
|
||||
.videocontainer {
|
||||
height: 0px;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -122,6 +136,13 @@
|
||||
display: flex;
|
||||
transition: opacity 1s;
|
||||
}
|
||||
|
||||
.hide-scrollbar#filmstripRemoteVideos {
|
||||
margin-right: 7px; // Scrollbar size
|
||||
&::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -160,9 +181,24 @@
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* FF does not include the scroll width when calculating the size of the content. That's why we need to include
|
||||
* ourselves the width of the scroll so that the remote videos are aligned with the local one.
|
||||
*/
|
||||
@mixin filmstripSizeWithoutScroll {
|
||||
.vertical-filmstrip {
|
||||
#remoteVideos #filmstripRemoteVideos {
|
||||
#filmstripRemoteVideosContainer {
|
||||
width: calc(100% - 15px) // 8 px - margins + border of the thumbnails; 7px - for the scroll
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Firefox detection hack **/
|
||||
@-moz-document url-prefix() {
|
||||
@include undoColumnReverseVideos();
|
||||
@include filmstripSizeWithoutScroll();
|
||||
}
|
||||
|
||||
/** Edge detection hack **/
|
||||
|
||||
@@ -56,6 +56,10 @@
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
|
||||
.indicator-icon-container {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.indicator-container {
|
||||
float: none;
|
||||
}
|
||||
|
||||
@@ -85,5 +85,10 @@ $flagsImagePath: "../images/";
|
||||
@import 'third-party-branding/microsoft';
|
||||
@import 'avatar';
|
||||
@import 'promotional-footer';
|
||||
@import 'chrome-extension-banner';
|
||||
@import 'settings-button';
|
||||
@import 'meter';
|
||||
@import 'audio-preview';
|
||||
@import 'video-preview';
|
||||
|
||||
/* Modules END */
|
||||
|
||||
2
debian/compat
vendored
@@ -1 +1 @@
|
||||
8
|
||||
12
|
||||
|
||||
11
debian/control
vendored
@@ -16,8 +16,7 @@ Description: WebRTC JavaScript video conferences
|
||||
Videobridge to provide high quality, scalable video conferences.
|
||||
.
|
||||
It is a web interface to Jitsi Videobridge for audio and video
|
||||
forwarding and relaying, configured to work with jetty instance
|
||||
running embedded into Jitsi Videobridge
|
||||
forwarding and relaying.
|
||||
|
||||
Package: jitsi-meet-web-config
|
||||
Architecture: all
|
||||
@@ -27,9 +26,7 @@ Description: Configuration for web serving of Jitsi Meet
|
||||
Videobridge to provide high quality, scalable video conferences.
|
||||
.
|
||||
It is a web interface to Jitsi Videobridge for audio and video
|
||||
forwarding and relaying, configured to work with jetty instance
|
||||
running embedded into Jitsi Videobridge or using a webserver Nginx or
|
||||
Apache2.
|
||||
forwarding and relaying, using a webserver Nginx or Apache2.
|
||||
.
|
||||
This package contains configuration for Nginx to be used with
|
||||
Jitsi Meet.
|
||||
@@ -43,8 +40,7 @@ Description: Prosody configuration for Jitsi Meet
|
||||
Videobridge to provide high quality, scalable video conferences.
|
||||
.
|
||||
It is a web interface to Jitsi Videobridge for audio and video
|
||||
forwarding and relaying, configured to work with jetty instance
|
||||
running embedded into Jitsi Videobridge
|
||||
forwarding and relaying.
|
||||
.
|
||||
This package contains configuration for Prosody to be used with
|
||||
Jitsi Meet.
|
||||
@@ -56,5 +52,6 @@ Description: Prosody token authentication plugin for Jitsi Meet
|
||||
|
||||
Package: jitsi-meet-turnserver
|
||||
Architecture: all
|
||||
Breaks: apache2
|
||||
Depends: ${misc:Depends}, nginx (>= 1.13.10) | nginx-full (>= 1.13.10) | nginx-extras (>= 1.13.10), jitsi-meet-prosody, coturn, dnsutils
|
||||
Description: Configures coturn to be used with Jitsi Meet
|
||||
|
||||
11
debian/jitsi-meet-prosody.postinst
vendored
@@ -17,6 +17,9 @@ set -e
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
function generateRandomPassword() {
|
||||
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 16
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
configure)
|
||||
@@ -51,7 +54,7 @@ case "$1" in
|
||||
db_get jicofo/jicofo-authpassword
|
||||
if [ -z "$RET" ] ; then
|
||||
# if password is missing generate it, and store it
|
||||
JICOFO_AUTH_PASSWORD=`head -c 8 /dev/urandom | tr '\0-\377' 'a-zA-Z0-9a-zA-Z0-9a-zA-Z0-9a-zA-Z0-9@@@@####'`
|
||||
JICOFO_AUTH_PASSWORD=`generateRandomPassword`
|
||||
db_set jicofo/jicofo-authpassword "$JICOFO_AUTH_PASSWORD"
|
||||
else
|
||||
JICOFO_AUTH_PASSWORD="$RET"
|
||||
@@ -60,7 +63,7 @@ case "$1" in
|
||||
db_get jicofo/jicofosecret
|
||||
if [ -z "$RET" ] ; then
|
||||
# if secret is missing generate it, and store it
|
||||
JICOFO_SECRET=`head -c 8 /dev/urandom | tr '\0-\377' 'a-zA-Z0-9a-zA-Z0-9a-zA-Z0-9a-zA-Z0-9@@@@####'`
|
||||
JICOFO_SECRET=`generateRandomPassword`
|
||||
db_set jicofo/jicofosecret "$JICOFO_SECRET"
|
||||
else
|
||||
JICOFO_SECRET="$RET"
|
||||
@@ -83,7 +86,7 @@ case "$1" in
|
||||
db_get jitsi-meet-prosody/turn-secret
|
||||
if [ -z "$RET" ] ; then
|
||||
# 8-chars random secret used for the turnserver
|
||||
TURN_SECRET=`cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 8 | head -n 1`
|
||||
TURN_SECRET=`generateRandomPassword`
|
||||
db_set jitsi-meet-prosody/turn-secret "$TURN_SECRET"
|
||||
else
|
||||
TURN_SECRET="$RET"
|
||||
@@ -136,7 +139,7 @@ case "$1" in
|
||||
echo -e "\nComponent \"internal.auth.$JVB_HOSTNAME\" \"muc\"" >> $PROSODY_HOST_CONFIG
|
||||
echo -e " storage = \"null\"" >> $PROSODY_HOST_CONFIG
|
||||
echo -e " modules_enabled = { \"ping\"; }" >> $PROSODY_HOST_CONFIG
|
||||
echo -e " admins = { \"focusUser@auth.jitmeet.example.com\", \"jvb@auth.jitmeet.example.com\" }" >> $PROSODY_HOST_CONFIG
|
||||
echo -e " admins = { \"$JICOFO_AUTH_USER@auth.$JVB_HOSTNAME\", \"jvb@auth.$JVB_HOSTNAME\" }" >> $PROSODY_HOST_CONFIG
|
||||
fi
|
||||
|
||||
if [ ! -f /var/lib/prosody/$JVB_HOSTNAME.crt ]; then
|
||||
|
||||
10
debian/jitsi-meet-prosody.postrm
vendored
@@ -36,13 +36,17 @@ case "$1" in
|
||||
rm -f /etc/prosody/conf.avail/$JVB_HOSTNAME.cfg.lua
|
||||
rm -f /etc/prosody/conf.d/$JVB_HOSTNAME.cfg.lua
|
||||
|
||||
JICOFO_AUTH_DOMAIN="auth.$JVB_HOSTNAME"
|
||||
# clean up generated certificates
|
||||
rm -f /etc/prosody/certs/$JVB_HOSTNAME.crt
|
||||
rm -f /etc/prosody/certs/$JVB_HOSTNAME.key
|
||||
rm -f /etc/prosody/certs/auth.$JVB_HOSTNAME.crt
|
||||
rm -f /etc/prosody/certs/auth.$JVB_HOSTNAME.key
|
||||
rm -rf /var/lib/prosody/auth.$JVB_HOSTNAME.*
|
||||
rm -f /etc/prosody/certs/$JICOFO_AUTH_DOMAIN.crt
|
||||
rm -f /etc/prosody/certs/$JICOFO_AUTH_DOMAIN.key
|
||||
rm -rf /var/lib/prosody/$JICOFO_AUTH_DOMAIN.*
|
||||
rm -rf /var/lib/prosody/$JVB_HOSTNAME.*
|
||||
|
||||
# clean created users
|
||||
rm -rf /var/lib/prosody/`echo $JICOFO_AUTH_DOMAIN | sed -e "s/\./%2e/g"`
|
||||
fi
|
||||
|
||||
# Clear the debconf variable
|
||||
|
||||
1
debian/jitsi-meet-turnserver.links
vendored
@@ -1 +0,0 @@
|
||||
/usr/share/jitsi-meet-turnserver/jitsi-meet.conf /etc/nginx/modules-enabled/60-jitsi-meet.conf
|
||||
116
debian/jitsi-meet-turnserver.postinst
vendored
@@ -36,20 +36,60 @@ case "$1" in
|
||||
NGINX_CONFIG="/etc/nginx/sites-available/$JVB_HOSTNAME.conf"
|
||||
JITSI_MEET_CONFIG="/etc/jitsi/meet/$JVB_HOSTNAME-config.js"
|
||||
|
||||
NGINX_SITES_ENABLED="/etc/nginx/sites-enabled/"
|
||||
NGINX_CONFIG_ENABLED="${NGINX_SITES_ENABLED}${JVB_HOSTNAME}.conf"
|
||||
for site in ${NGINX_SITES_ENABLED}*; do
|
||||
# if it is not a file continue
|
||||
[ -f "${site}" ] || continue
|
||||
# if it is our config skip
|
||||
[ "${site}" != "${NGINX_CONFIG_ENABLED}" ] || continue
|
||||
# check whether other enabled hosts has listen 443
|
||||
if cat ${site} | grep -v "^[[:space:]]*#" | grep listen | grep -q "^.*[[:space:]:]443[;[:space:]].*" ; then
|
||||
# nothing to do
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
echo "turnserver not configured as other nginx sites use port 443"
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
db_stop
|
||||
exit 0
|
||||
fi
|
||||
done
|
||||
|
||||
# if there was a turn config backup it so we can configure
|
||||
# we cannot recognize at the moment is this a user config or default config when installing coturn
|
||||
if [[ -f $TURN_CONFIG ]] && ! grep -q "jitsi-meet coturn config" "$TURN_CONFIG" ; then
|
||||
mv $TURN_CONFIG $TURN_CONFIG.bak
|
||||
fi
|
||||
|
||||
# detect dpkg-reconfigure, just delete old links
|
||||
db_get jitsi-meet-turnserver/jvb-hostname
|
||||
JVB_HOSTNAME_OLD=$RET
|
||||
if [ -n "$RET" ] && [ ! "$JVB_HOSTNAME_OLD" = "$JVB_HOSTNAME" ] ; then
|
||||
rm -f $TURN_CONFIG
|
||||
if [[ -f $TURN_CONFIG ]] && grep -q "jitsi-meet coturn config" "$TURN_CONFIG" ; then
|
||||
rm -f $TURN_CONFIG
|
||||
fi
|
||||
fi
|
||||
|
||||
# this detect only old installations with no nginx
|
||||
db_get jitsi-meet/jvb-serve || true
|
||||
if [ ! -f $NGINX_CONFIG -o "$RET" = "true" ] ; then
|
||||
# nothing to do
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
echo "turnserver not configured as no nginx found to multiplex traffic"
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
db_stop
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ -f $TURN_CONFIG ]] ; then
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
echo "turnserver is already configured on this machine, skipping."
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
db_stop
|
||||
exit 0
|
||||
fi
|
||||
@@ -65,45 +105,53 @@ case "$1" in
|
||||
fi
|
||||
TURN_SECRET="$RET"
|
||||
|
||||
if [[ -f $TURN_CONFIG ]] && ! grep -q "jitsi-meet coturn config" "$TURN_CONFIG" ; then
|
||||
PUBLIC_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
|
||||
cp /usr/share/jitsi-meet-turnserver/turnserver.conf $TURN_CONFIG
|
||||
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" $TURN_CONFIG
|
||||
sed -i "s/__turnSecret__/$TURN_SECRET/g" $TURN_CONFIG
|
||||
sed -i "s/__external_ip_address__/$JVB_HOSTNAME/g" $TURN_CONFIG
|
||||
# no turn config exists, lt's copy template and fill it in
|
||||
PUBLIC_IP=$(dig +short myip.opendns.com @resolver1.opendns.com)
|
||||
cp /usr/share/jitsi-meet-turnserver/turnserver.conf $TURN_CONFIG
|
||||
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" $TURN_CONFIG
|
||||
sed -i "s/__turnSecret__/$TURN_SECRET/g" $TURN_CONFIG
|
||||
sed -i "s/__external_ip_address__/$JVB_HOSTNAME/g" $TURN_CONFIG
|
||||
|
||||
# SSL for nginx
|
||||
db_get jitsi-meet/cert-choice
|
||||
CERT_CHOICE="$RET"
|
||||
# Hack Debian Buster coturn to be able to bind privileged port 443
|
||||
COTURN_UNIT_FILE="/lib/systemd/system/coturn.service"
|
||||
if [[ -f $COTURN_UNIT_FILE ]] && ! grep -q "CAP_NET_BIND_SERVICE" "$COTURN_UNIT_FILE" ; then
|
||||
sed -i "s/\[Service\]/\[Service\]\nAmbientCapabilities=CAP_NET_BIND_SERVICE/g" $COTURN_UNIT_FILE
|
||||
systemctl daemon-reload
|
||||
fi
|
||||
|
||||
if [ "$CERT_CHOICE" = "I want to use my own certificate" ] ; then
|
||||
db_get jitsi-meet/cert-path-key
|
||||
CERT_KEY="$RET"
|
||||
db_get jitsi-meet/cert-path-crt
|
||||
CERT_CRT="$RET"
|
||||
# SSL for nginx
|
||||
db_get jitsi-meet/cert-choice
|
||||
CERT_CHOICE="$RET"
|
||||
|
||||
# replace self-signed certificate paths with user provided ones
|
||||
CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
|
||||
CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
|
||||
sed -i "s/pkey=\/etc\/jitsi\/meet\/.*key/pkey=$CERT_KEY_ESC/g" $TURN_CONFIG
|
||||
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
|
||||
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
|
||||
sed -i "s/cert=\/etc\/jitsi\/meet\/.*crt/cert=$CERT_CRT_ESC/g" $TURN_CONFIG
|
||||
fi
|
||||
if [ "$CERT_CHOICE" = "I want to use my own certificate" ] ; then
|
||||
db_get jitsi-meet/cert-path-key
|
||||
CERT_KEY="$RET"
|
||||
db_get jitsi-meet/cert-path-crt
|
||||
CERT_CRT="$RET"
|
||||
|
||||
sed -i "s/#TURNSERVER_ENABLED/TURNSERVER_ENABLED/g" /etc/default/coturn
|
||||
invoke-rc.d coturn restart || true
|
||||
# replace self-signed certificate paths with user provided ones
|
||||
CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
|
||||
CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
|
||||
sed -i "s/pkey=\/etc\/jitsi\/meet\/.*key/pkey=$CERT_KEY_ESC/g" $TURN_CONFIG
|
||||
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
|
||||
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
|
||||
sed -i "s/cert=\/etc\/jitsi\/meet\/.*crt/cert=$CERT_CRT_ESC/g" $TURN_CONFIG
|
||||
fi
|
||||
|
||||
NGINX_STREAM_CONFIG="/etc/nginx/modules-enabled/60-jitsi-meet.conf"
|
||||
if [ -f $NGINX_STREAM_CONFIG ] && [ -f $NGINX_CONFIG ] ; then
|
||||
sed -i "s/listen 443 ssl/listen 4444 ssl http2/g" $NGINX_CONFIG
|
||||
invoke-rc.d nginx reload || true
|
||||
fi
|
||||
sed -i "s/#TURNSERVER_ENABLED/TURNSERVER_ENABLED/g" /etc/default/coturn
|
||||
invoke-rc.d coturn restart || true
|
||||
|
||||
# Enable turn server in config.js
|
||||
if [ -f $JITSI_MEET_CONFIG ] ; then
|
||||
sed -i "s/\/\/ useStunTurn: true/useStunTurn: true/g" $JITSI_MEET_CONFIG
|
||||
fi
|
||||
NGINX_STREAM_CONFIG="/etc/nginx/modules-enabled/60-jitsi-meet.conf"
|
||||
if [ ! -f $NGINX_STREAM_CONFIG ] && [ -f $NGINX_CONFIG ] ; then
|
||||
ln -s /usr/share/jitsi-meet-turnserver/jitsi-meet.conf $NGINX_STREAM_CONFIG
|
||||
sed -i "s/listen 443 ssl/listen 4444 ssl http2/g" $NGINX_CONFIG
|
||||
sed -i "s/listen \[\:\:\]\:443 ssl/listen \[\:\:\]\:4444 ssl http2/g" $NGINX_CONFIG
|
||||
invoke-rc.d nginx reload || true
|
||||
fi
|
||||
|
||||
# Enable turn server in config.js
|
||||
if [ -f $JITSI_MEET_CONFIG ] ; then
|
||||
sed -i "s/\/\/ useStunTurn: true/useStunTurn: true/g" $JITSI_MEET_CONFIG
|
||||
fi
|
||||
|
||||
# and we're done with debconf
|
||||
|
||||
63
debian/jitsi-meet-turnserver.postrm
vendored
Normal file
@@ -0,0 +1,63 @@
|
||||
#!/bin/sh
|
||||
# postrm script for jitsi-meet-turnserver
|
||||
#
|
||||
# see: dh_installdeb(1)
|
||||
|
||||
set -e
|
||||
|
||||
# summary of how this script can be called:
|
||||
# * <postrm> `remove'
|
||||
# * <postrm> `purge'
|
||||
# * <old-postrm> `upgrade' <new-version>
|
||||
# * <new-postrm> `failed-upgrade' <old-version>
|
||||
# * <new-postrm> `abort-install'
|
||||
# * <new-postrm> `abort-install' <old-version>
|
||||
# * <new-postrm> `abort-upgrade' <old-version>
|
||||
# * <disappearer's-postrm> `disappear' <overwriter>
|
||||
# <overwriter-version>
|
||||
# for details, see http://www.debian.org/doc/debian-policy/ or
|
||||
# the debian-policy package
|
||||
|
||||
# Load debconf
|
||||
. /usr/share/debconf/confmodule
|
||||
|
||||
|
||||
case "$1" in
|
||||
remove)
|
||||
rm -rf /etc/nginx/modules-enabled/60-jitsi-meet.conf
|
||||
if [ -x "/etc/init.d/nginx" ]; then
|
||||
invoke-rc.d nginx reload || true
|
||||
fi
|
||||
if [ -x "/etc/init.d/apache2" ]; then
|
||||
invoke-rc.d apache2 reload || true
|
||||
fi
|
||||
;;
|
||||
purge)
|
||||
rm -rf /etc/nginx/modules-enabled/60-jitsi-meet.conf
|
||||
rm -rf /etc/turnserver.conf
|
||||
if [ -x "/etc/init.d/nginx" ]; then
|
||||
invoke-rc.d nginx reload || true
|
||||
fi
|
||||
if [ -x "/etc/init.d/apache2" ]; then
|
||||
invoke-rc.d apache2 reload || true
|
||||
fi
|
||||
# Clear the debconf variable
|
||||
db_purge
|
||||
;;
|
||||
upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "postrm called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# dh_installdeb will replace this with shell code automatically
|
||||
# generated by other debhelper scripts.
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
db_stop
|
||||
|
||||
exit 0
|
||||
64
debian/jitsi-meet-web-config.postinst
vendored
@@ -68,12 +68,11 @@ case "$1" in
|
||||
FORCE_APACHE="true"
|
||||
fi
|
||||
|
||||
UPLOADED_CERT_CHOICE="I want to use my own certificate"
|
||||
# if first time config ask for certs, or if we are reconfiguring
|
||||
if [ -z "$JVB_HOSTNAME_OLD" ] || [ "$RECONFIGURING" = "true" ] ; then
|
||||
# SSL for nginx
|
||||
db_get jitsi-meet/cert-choice
|
||||
CERT_CHOICE="$RET"
|
||||
UPLOADED_CERT_CHOICE="I want to use my own certificate"
|
||||
|
||||
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
|
||||
db_set jitsi-meet/cert-path-key "/etc/ssl/$JVB_HOSTNAME.key"
|
||||
@@ -104,24 +103,57 @@ case "$1" in
|
||||
if [ ! -f $JITSI_MEET_CONFIG ] ; then
|
||||
cp /usr/share/jitsi-meet-web-config/config.js $JITSI_MEET_CONFIG
|
||||
# replaces needed config for multidomain as it works only with nginx
|
||||
sed -i "s/conference.jitsi-meet.example.com/conference.<\!--# echo var=\"subdomain\" default=\"\" -->jitsi-meet.example.com/g" $JITSI_MEET_CONFIG
|
||||
if [[ "$FORCE_NGINX" = "true" ]] ; then
|
||||
sed -i "s/conference.jitsi-meet.example.com/conference.<\!--# echo var=\"subdomain\" default=\"\" -->jitsi-meet.example.com/g" $JITSI_MEET_CONFIG
|
||||
fi
|
||||
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" $JITSI_MEET_CONFIG
|
||||
fi
|
||||
|
||||
# this is new install let's configure jvb to serve meet
|
||||
# no-nginx, no-apache installed on machine, this is new install or reconfiguring old one which have jvb_serve set
|
||||
# getting rid of jetty serving web
|
||||
if [[ "$JVB_SERVE" = "true" ]] ; then
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
echo "You are using jetty to serve jitsi-meet, it is recommended to uninstall(purge) and use default installation that comes with nginx!"
|
||||
echo ""
|
||||
echo "When using the following command, any custom config will be LOST, please backup /etc/jitsi !!!"
|
||||
echo ""
|
||||
echo "You can purge your installation using the following command:"
|
||||
echo "apt-get purge jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-web jicofo jitsi-videobridge"
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
elif [[ "$FORCE_NGINX" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
|
||||
JVB_CONFIG="/etc/jitsi/videobridge/sip-communicator.properties"
|
||||
|
||||
# we will write to the file if missing create it
|
||||
if [ -f $JVB_CONFIG ] ; then
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
echo "You are using jetty to serve jitsi-meet, we are now upgrading you to use nginx!"
|
||||
echo ""
|
||||
echo "If you are using Let’s Encrypt certificates please re-run the script."
|
||||
echo ""
|
||||
echo "------------------------------------------------"
|
||||
echo ""
|
||||
|
||||
sed -i "s/org.jitsi.videobridge.rest.jetty/#org.jitsi.videobridge.rest.jetty/g" $JVB_CONFIG
|
||||
sed -i "s/org.jitsi.videobridge.TCP_HARVESTER_PORT/#org.jitsi.videobridge.TCP_HARVESTER_PORT/g" $JVB_CONFIG
|
||||
|
||||
if [ -d /run/systemd/system ]; then
|
||||
systemctl restart jitsi-videobridge2.service >/dev/null || true
|
||||
fi
|
||||
|
||||
# Removing this value will force nginx or apache to be locally configured
|
||||
JVB_HOSTNAME_OLD=""
|
||||
|
||||
db_get jitsi-meet/cert-choice
|
||||
CERT_CHOICE="$RET"
|
||||
# Fix certs on upgrade from jetty
|
||||
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
|
||||
db_get jitsi-meet/cert-path-key
|
||||
CERT_KEY="$RET"
|
||||
db_get jitsi-meet/cert-path-crt
|
||||
CERT_CRT="$RET"
|
||||
else
|
||||
# create self-signed certs
|
||||
CERT_KEY="/etc/jitsi/meet/$JVB_HOSTNAME.key"
|
||||
CERT_CRT="/etc/jitsi/meet/$JVB_HOSTNAME.crt"
|
||||
fi
|
||||
fi
|
||||
|
||||
db_set jitsi-meet/jvb-serve "false"
|
||||
fi
|
||||
|
||||
if [[ "$FORCE_NGINX" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
|
||||
|
||||
# this is a reconfigure, lets just delete old links
|
||||
if [ "$RECONFIGURING" = "true" ] ; then
|
||||
|
||||
1
debian/jitsi-meet-web.install
vendored
@@ -11,4 +11,5 @@ fonts /usr/share/jitsi-meet/
|
||||
images /usr/share/jitsi-meet/
|
||||
lang /usr/share/jitsi-meet/
|
||||
connection_optimization /usr/share/jitsi-meet/
|
||||
resources/robots.txt /usr/share/jitsi-meet/
|
||||
resources/*.sh /usr/share/jitsi-meet/scripts/
|
||||
|
||||
43
doc/README.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Documentation
|
||||
|
||||
This document is the entrypoint to different guides, divided in three groups:
|
||||
|
||||
* User guide: these documents are designed to help users of the service, to better
|
||||
understand all the available features and how to use them.
|
||||
|
||||
* Developer guide: these documents are designed to help developers who want to either
|
||||
integrate the Jitsi Meet API / SDK in their products or want to improve Jitsi Meet
|
||||
itself by developing new features or fixing bugs.
|
||||
|
||||
* DevOps guide: these documents are designed for DevOps folks, system administrators
|
||||
or anyone who wishes to deploy and operate their own Jitsi Meet instance.
|
||||
|
||||
## User guide
|
||||
|
||||
Work in progress.
|
||||
|
||||
## Developer guide
|
||||
|
||||
### Web
|
||||
|
||||
* [iframe API](https://github.com/jitsi/jitsi-meet/blob/master/doc/api.md)
|
||||
* [Jitsi Meet development](https://github.com/jitsi/jitsi-meet/blob/master/doc/development.md)
|
||||
|
||||
### Mobile
|
||||
|
||||
* [Building the mobile apps](https://github.com/jitsi/jitsi-meet/blob/master/doc/mobile.md)
|
||||
* [SDK usage examples](https://github.com/jitsi/jitsi-meet-sdk-samples)
|
||||
* [Enabling Dropbox support](https://github.com/jitsi/jitsi-meet/blob/master/doc/mobile-dropbox.md)
|
||||
* [Enabling Google authentication](https://github.com/jitsi/jitsi-meet/blob/master/doc/mobile-google-auth.md)
|
||||
|
||||
## DevOps guide
|
||||
|
||||
* [Quick install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md)
|
||||
* [Docker install](https://github.com/jitsi/docker-jitsi-meet/blob/master/README.md)
|
||||
* [Google Calendar, MS Calendar, Dropbox integrations](https://github.com/jitsi/jitsi-meet/blob/master/doc/integrations.md)
|
||||
* [Video tutorials on deployment and scalability](https://jitsi.org/tutorials/)
|
||||
* [Configuring a video SIP gateway](https://github.com/jitsi/jitsi-meet/blob/master/doc/sipgw-config.md)
|
||||
* [Enabling speaker stats](https://github.com/jitsi/jitsi-meet/blob/master/doc/speakerstats-prosody.md)
|
||||
* [Enabling TURN](https://github.com/jitsi/jitsi-meet/blob/master/doc/turn.md)
|
||||
* [Networking FAQ](https://github.com/jitsi/jitsi-meet/blob/master/doc/faq.md)
|
||||
* [Cloud APIs](https://github.com/jitsi/jitsi-meet/blob/master/doc/cloud-api.md)
|
||||
20
doc/api.md
@@ -270,6 +270,11 @@ api.executeCommand('email', 'example@example.com');
|
||||
api.executeCommand('avatarUrl', 'https://avatars0.githubusercontent.com/u/3671647');
|
||||
```
|
||||
|
||||
* **sendEndpointTextMessage** - Sends a text message to another participant through the datachannels.
|
||||
```javascript
|
||||
api.executeCommand('receiverParticipantId', 'text');
|
||||
```
|
||||
|
||||
You can also execute multiple commands using the `executeCommands` method:
|
||||
```javascript
|
||||
api.executeCommands(commands);
|
||||
@@ -323,6 +328,21 @@ changes. The listener will receive an object with the following structure:
|
||||
}
|
||||
```
|
||||
|
||||
* **endpointTextMessageReceived** - event notifications about a text message received through datachannels.
|
||||
The listener will receive an object with the following structure:
|
||||
```javascript
|
||||
{
|
||||
senderInfo: {
|
||||
jid: string, // the jid of the sender
|
||||
id: string // the participant id of the sender
|
||||
},
|
||||
eventData: {
|
||||
name: string // the name of the datachannel event: `endpoint-text-message`
|
||||
text: string // the received text from the sender
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
* **micError** - event notifications about Jitsi-Meet having failed to access the mic. The listener will receive an object with the following structure:
|
||||
```javascript
|
||||
{
|
||||
|
||||
@@ -50,6 +50,8 @@ Component "conference.jitmeet.example.com" "muc"
|
||||
-- "token_verification";
|
||||
}
|
||||
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"
|
||||
|
||||
@@ -11,3 +11,5 @@ no-tcp
|
||||
listening-port=443
|
||||
tls-listening-port=4445
|
||||
external-ip=__external_ip_address__
|
||||
|
||||
syslog
|
||||
|
||||
@@ -11,9 +11,8 @@ stream {
|
||||
}
|
||||
# since 1.13.10
|
||||
map $ssl_preread_alpn_protocols $upstream {
|
||||
"h2" web;
|
||||
"http/1.1" web;
|
||||
"h2,http/1.1" web;
|
||||
~\bh2\b web;
|
||||
~\bhttp/1\. web;
|
||||
default turn;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ server_names_hash_bucket_size 64;
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name jitsi-meet.example.com;
|
||||
|
||||
location ^~ /.well-known/acme-challenge/ {
|
||||
@@ -17,6 +18,7 @@ server {
|
||||
}
|
||||
server {
|
||||
listen 443 ssl;
|
||||
listen [::]:443 ssl;
|
||||
server_name jitsi-meet.example.com;
|
||||
|
||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
||||
@@ -59,6 +61,16 @@ server {
|
||||
proxy_set_header Host $http_host;
|
||||
}
|
||||
|
||||
# xmpp websockets
|
||||
location = /xmpp-websocket {
|
||||
proxy_pass http://127.0.0.1:5280/xmpp-websocket?prefix=$prefix&$args;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header Host $http_host;
|
||||
tcp_nodelay on;
|
||||
}
|
||||
|
||||
location ~ ^/([^/?&:'"]+)$ {
|
||||
try_files $uri @root_path;
|
||||
}
|
||||
@@ -90,4 +102,13 @@ server {
|
||||
|
||||
rewrite ^/(.*)$ /http-bind;
|
||||
}
|
||||
|
||||
# websockets for subdomains
|
||||
location ~ ^/([^/?&:'"]+)/xmpp-websocket {
|
||||
set $subdomain "$1.";
|
||||
set $subdir "$1/";
|
||||
set $prefix "$1";
|
||||
|
||||
rewrite ^/(.*)$ /xmpp-websocket;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,5 +10,6 @@ var config = {
|
||||
focus: 'focus.jitsi.example.com',
|
||||
},
|
||||
useNicks: false,
|
||||
bosh: '//jitsi.example.com/http-bind' // FIXME: use xep-0156 for that
|
||||
bosh: '//jitsi.example.com/http-bind', // FIXME: use xep-0156 for that
|
||||
websocket: 'wss://jitsi.example.com/xmpp-websocket'
|
||||
};
|
||||
|
||||
@@ -60,4 +60,12 @@ server {
|
||||
rewrite ^/(.*)$ /http-bind;
|
||||
}
|
||||
|
||||
# websockets for subdomains
|
||||
location ~ ^/([^/?&:'"]+)/xmpp-websocket {
|
||||
set $subdomain "$1.";
|
||||
set $subdir "$1/";
|
||||
set $prefix "$1";
|
||||
|
||||
rewrite ^/(.*)$ /xmpp-websocket;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,4 +4,4 @@ A. In general, if the tool ifconfig (or ipconfig) shows the assigned IP address
|
||||
|
||||
**2. Clients could communicate well in room created at meet.jit.si . The same clients still could connect to my self-hosted instance but can neither hear nor see one another. What's wrong?**
|
||||
|
||||
A. Most probably, the server is behind NAT. See this [resolved question](https://community.jitsi.org/t/cannot-see-video-or-hear-audio-on-self-hosted-instance/). You need to follow the steps detailed [here](https://github.com/jitsi/ice4j/blob/master/doc/quick-install.md#Advanced-configuration)
|
||||
A. Most probably, the server is behind NAT. See this [resolved question](https://community.jitsi.org/t/cannot-see-video-or-hear-audio-on-self-hosted-instance/). You need to follow the steps detailed [here](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md#Advanced-configuration)
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
# Server Installation for Jitsi Meet
|
||||
|
||||
|
||||
:warning: **WARNING:** Manual installation is not recommended. We recommend following the [quick-install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md) document. The current document describes the steps that are needed to install a working deployment, but steps are easy to mess up, and the debian packages are more up-to-date, where this document sometimes is not updated to latest changes.
|
||||
|
||||
|
||||
:warning: **WARNING:** Manual installation is not recommended. We recommend following the [quick-install](https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md) document. The current document describes the steps that are needed to install a working deployment, but steps are easy to mess up, and the debian packages are more up-to-date, where this document is sometimes not updated to reflect latest changes.
|
||||
|
||||
This describes configuring a server `jitsi.example.com` running Debian or a Debian Derivative. You will need to
|
||||
change references to that to match your host, and generate some passwords for
|
||||
@@ -22,7 +19,7 @@ This is how the network looks:
|
||||
443 |
|
||||
+-------+ |
|
||||
| | |
|
||||
| NginX | |
|
||||
| Nginx | |
|
||||
| | |
|
||||
+--+-+--+ |
|
||||
| | |
|
||||
@@ -31,7 +28,7 @@ This is how the network looks:
|
||||
| jitsi-meet +<---+ +--->+ prosody/xmpp | |
|
||||
| |files 5280 | | |
|
||||
+------------+ +--------------+ v
|
||||
5222,5347^ ^5347 4443
|
||||
5222,5347^ ^5347 4443,10000
|
||||
+--------+ | | +-------------+
|
||||
| | | | | |
|
||||
| jicofo +----^ ^----+ videobridge |
|
||||
@@ -112,7 +109,7 @@ Restart prosody XMPP server with the new config
|
||||
prosodyctl restart
|
||||
```
|
||||
|
||||
## Install nginx
|
||||
## Install Nginx
|
||||
```sh
|
||||
apt-get install nginx
|
||||
```
|
||||
@@ -122,12 +119,13 @@ Add a new file `jitsi.example.com` in `/etc/nginx/sites-available` (see also the
|
||||
server_names_hash_bucket_size 64;
|
||||
|
||||
server {
|
||||
listen 443;
|
||||
listen 0.0.0.0:443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
# tls configuration that is not covered in this guide
|
||||
# we recommend the use of https://certbot.eff.org/
|
||||
server_name jitsi.example.com;
|
||||
# set the root
|
||||
root /srv/jitsi.example.com;
|
||||
root /srv/jitsi-meet;
|
||||
index index.html;
|
||||
location ~ ^/([a-zA-Z0-9=\?]+)$ {
|
||||
rewrite ^/(.*)$ / break;
|
||||
@@ -142,6 +140,12 @@ server {
|
||||
proxy_set_header X-Forwarded-For $remote_addr;
|
||||
proxy_set_header Host $http_host;
|
||||
}
|
||||
# external_api.js must be accessible from the root of the
|
||||
# installation for the electron version of Jitsi Meet to work
|
||||
# https://github.com/jitsi/jitsi-meet-electron
|
||||
location /external_api.js {
|
||||
alias /srv/jitsi-meet/libs/external_api.min.js;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -152,6 +156,7 @@ ln -s ../sites-available/jitsi.example.com jitsi.example.com
|
||||
```
|
||||
|
||||
## Install Jitsi Videobridge
|
||||
Visit https://download.jitsi.org/jitsi-videobridge/linux to determine the current build number, download and unzip it:
|
||||
```sh
|
||||
wget https://download.jitsi.org/jitsi-videobridge/linux/jitsi-videobridge-linux-{arch-buildnum}.zip
|
||||
unzip jitsi-videobridge-linux-{arch-buildnum}.zip
|
||||
@@ -164,9 +169,15 @@ apt-get install openjdk-8-jre
|
||||
|
||||
_NOTE: When installing on older Debian releases keep in mind that you need JRE >= 1.7._
|
||||
|
||||
In the user home that will be starting Jitsi Videobridge create `.sip-communicator` folder and add the file `sip-communicator.properties` with one line in it:
|
||||
```
|
||||
Create `~/.sip-communicator/sip-communicator.properties` in the home folder of the user that will be starting Jitsi Videobridge:
|
||||
```sh
|
||||
mkdir -p ~/.sip-communicator
|
||||
cat > ~/.sip-communicator/sip-communicator.properties << EOF
|
||||
org.jitsi.impl.neomedia.transform.srtp.SRTPCryptoContext.checkReplay=false
|
||||
# The videobridge uses 443 by default with 4443 as a fallback, but since we're already
|
||||
# running nginx on 443 in this example doc, we specify 4443 manually to avoid a race condition
|
||||
org.jitsi.videobridge.TCP_HARVESTER_PORT=4443
|
||||
EOF
|
||||
```
|
||||
|
||||
Start the videobridge with:
|
||||
@@ -191,7 +202,7 @@ Clone source from Github repo:
|
||||
```sh
|
||||
git clone https://github.com/jitsi/jicofo.git
|
||||
```
|
||||
Build distribution package. Replace {os-name} with one of: 'lin', 'lin64', 'macosx', 'win', 'win64'.
|
||||
Build the package.
|
||||
```sh
|
||||
cd jicofo
|
||||
mvn package -DskipTests -Dassembly.skipAssembly=false
|
||||
@@ -199,8 +210,8 @@ mvn package -DskipTests -Dassembly.skipAssembly=false
|
||||
Run jicofo:
|
||||
```sh
|
||||
=======
|
||||
unzip target/jicofo-{os-name}-1.0-SNAPSHOT.zip
|
||||
cd jicofo-{os-name}-1.0-SNAPSHOT'
|
||||
unzip target/jicofo-1.1-SNAPSHOT-archive.zip
|
||||
cd jicofo-1.1-SNAPSHOT-archive'
|
||||
./jicofo.sh --host=localhost --domain=jitsi.example.com --secret=YOURSECRET2 --user_domain=auth.jitsi.example.com --user_name=focus --user_password=YOURSECRET3
|
||||
```
|
||||
|
||||
@@ -209,13 +220,14 @@ Checkout and configure Jitsi Meet:
|
||||
```sh
|
||||
cd /srv
|
||||
git clone https://github.com/jitsi/jitsi-meet.git
|
||||
mv jitsi-meet/ jitsi.example.com
|
||||
cd jitsi.example.com
|
||||
cd jitsi-meet
|
||||
npm install
|
||||
make
|
||||
```
|
||||
|
||||
Edit host names in `/srv/jitsi.example.com/config.js` (see also the example config file):
|
||||
_NOTE: When installing on older distributions keep in mind that you need Node.js >= 10 and npm >= 6._
|
||||
|
||||
Edit host names in `/srv/jitsi-meet/config.js` (see also the example config file):
|
||||
```
|
||||
var config = {
|
||||
hosts: {
|
||||
@@ -231,15 +243,19 @@ var config = {
|
||||
};
|
||||
```
|
||||
|
||||
Restart nginx to get the new configuration:
|
||||
Verify that nginx config is valid and reload nginx:
|
||||
```sh
|
||||
invoke-rc.d nginx restart
|
||||
nginx -t && nginx -s reload
|
||||
```
|
||||
|
||||
## Running behind NAT
|
||||
Jitsi-Videobridge can run behind a NAT, provided that all required ports are routed (forwarded) to the machine that it runs on. By default these ports are (TCP/443 or TCP/4443 and UDP 10000).
|
||||
Jitsi Videobridge can run behind a NAT, provided that both required ports are routed (forwarded) to the machine that it runs on. By default these ports are `TCP/4443` and `UDP/10000`.
|
||||
|
||||
The following extra lines need to be added the file `~/.sip-communicator/sip-communicator.properties` (in the home directory of the user running the videobridge):
|
||||
If you do not route these two ports, Jitsi Meet will only work with video for two people, breaking upon 3 or more people trying to show video.
|
||||
|
||||
`TCP/443` is required for the webserver which can be running on another machine than the Jitsi Videobrige is running on.
|
||||
|
||||
The following extra lines need to be added to the file `~/.sip-communicator/sip-communicator.properties` (in the home directory of the user running the videobridge):
|
||||
```
|
||||
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
|
||||
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
|
||||
@@ -248,6 +264,5 @@ org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
|
||||
# Hold your first conference
|
||||
You are now all set and ready to have your first meet by going to http://jitsi.example.com
|
||||
|
||||
|
||||
## Enabling recording
|
||||
[Jibri](https://github.com/jitsi/jibri)is a set of tools for recording and/or streaming a Jitsi Meet conference.
|
||||
[Jibri](https://github.com/jitsi/jibri) is a set of tools for recording and/or streaming a Jitsi Meet conference.
|
||||
|
||||
@@ -1,68 +1,75 @@
|
||||
# Jitsi Meet quick install
|
||||
|
||||
This document describes the required steps for a quick Jitsi Meet installation on a Debian based GNU/Linux system. Debian 8 (Jessie) or later, and Ubuntu 14.04 or later are supported out-of-the-box.
|
||||
This guide helps you ___host your own Jitsi server___. If you want to have a video conference without setting up any infrastructure, use https://meet.jit.si instead.
|
||||
|
||||
Debian Wheezy and other older systems may require additional things to be done. Specifically for Wheezy, [libc needs to be updated](http://lists.jitsi.org/pipermail/users/2015-September/010064.html).
|
||||
This document describes the required steps for a quick Jitsi Meet installation on a Debian based GNU/Linux system. Debian 9 (Stretch) or later, and Ubuntu 18.04 (Bionic Beaver) or later are supported out-of-the-box.
|
||||
|
||||
Also note that a recent default Ubuntu installation has only the `main` repository enabled, and Jitsi Meet needs packages from `universe`. Check your `/etc/apt/sources.list` file, and if `universe` is not present refer to [Ubuntu's documentation](https://help.ubuntu.com/community/Repositories/Ubuntu) on how to enable it. (Usually it amounts to copying the `main` lines and changing to `universe`.)
|
||||
On Ubuntu systems, Jitsi requires dependencies from Ubuntu's `universe` package repository. To ensure this is enabled, run `apt-add-repository universe` at the command-line.
|
||||
|
||||
N.B.:
|
||||
|
||||
a.) All commands are supposed to be run by root. If you are logged in as a regular user with sudo rights, please prepend ___sudo___ to each of the commands.
|
||||
|
||||
b.) You only need to do this if you want to ___host your own Jitsi server___. If you just want to have a video conference with someone, use https://meet.jit.si instead.
|
||||
_Note_: Many of the installation steps require elevated privileges. If you are logged in using a regular user account, you may need to temporarily increase your permissions (for example, by using `sudo` for individual commands).
|
||||
|
||||
## Basic Jitsi Meet install
|
||||
|
||||
### Add the repository
|
||||
### Set up the Fully Qualified Domain Name (FQDN) (optional)
|
||||
|
||||
If the machine used to host the Jitsi Meet instance has a FQDN (for example `meet.example.org`) already set up in DNS, `/etc/hostname` must contain this FQDN; if this is not the case yet, [change the hostname](https://wiki.debian.org/HowTo/ChangeHostname).
|
||||
|
||||
Then add the same FQDN in the `/etc/hosts` file, associating it with the loopback address:
|
||||
|
||||
127.0.0.1 localhost meet.example.org
|
||||
|
||||
Finally on the same machine test that you can ping the FQDN with: `ping "$(hostname)"`-
|
||||
|
||||
### Add the Jitsi package repository
|
||||
```sh
|
||||
echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
|
||||
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -
|
||||
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
|
||||
```
|
||||
|
||||
### Update the package lists
|
||||
|
||||
```sh
|
||||
apt-get update
|
||||
```
|
||||
|
||||
(If you get an error:
|
||||
E: The method driver /usr/lib/apt/methods/https could not be found.
|
||||
run:
|
||||
```sh
|
||||
apt-get install apt-transport-https
|
||||
```
|
||||
)
|
||||
|
||||
### Install Jitsi Meet
|
||||
|
||||
Note : Something to consider before installation is how you're planning to serve Jitsi Meet. The installer will check if Nginx or Apache is present (with this order) and configure a virtualhost within the web server it finds to serve Jitsi Meet. If none of the above is found it then configures itself to be served via jetty. So if for example you are planning on deploying Jitsi Meet with a web server, you have to make sure to install the server **before** installing jitsi-meet.
|
||||
_Note_: The installer will check if [Nginx](https://nginx.org/) or [Apache](https://httpd.apache.org/) is present (in that order) and configure a virtualhost within the web server it finds to serve Jitsi Meet. If none of the above is found it then defaults to Nginx.
|
||||
If you are already running Nginx on port 443 on the same machine you better skip the turnserver configuration as it will conflict with your current port 443, so use the command `apt install --no-install-recommends jitsi-meet`.
|
||||
|
||||
```sh
|
||||
# Ensure support is available for apt repositories served via HTTPS
|
||||
apt-get install apt-transport-https
|
||||
|
||||
# Retrieve the latest package versions across all repositories
|
||||
apt-get update
|
||||
|
||||
# Perform jitsi-meet installation
|
||||
apt-get -y install jitsi-meet
|
||||
```
|
||||
|
||||
During the installation, you will be asked to enter the hostname of the Jitsi Meet instance. If you have a FQDN hostname for the instance already set up in DNS, enter it there. If you don't have a resolvable hostname, you can enter the IP address of the machine (if it is static or doesn't change).
|
||||
During the installation, you will be asked to enter the hostname of the Jitsi Meet instance. If you have a [FQDN](https://en.wikipedia.org/wiki/Fully_qualified_domain_name) for the instance already set up in DNS, enter it there. If you don't have a resolvable hostname, you can enter the IP address of the machine (if it is static or doesn't change).
|
||||
|
||||
This hostname (or IP address) will be used for virtualhost configuration inside the Jitsi Meet and also, you and your correspondents will be using it to access the web conferences.
|
||||
|
||||
### Generate a Let's Encrypt certificate
|
||||
### Generate a Let's Encrypt certificate (optional, recommended)
|
||||
|
||||
Simply run the following in your shell
|
||||
In order to have encrypted communications, you need a [TLS certificate](https://en.wikipedia.org/wiki/Transport_Layer_Security). The easiest way is to use [Let's Encrypt](https://letsencrypt.org/).
|
||||
|
||||
_Note_: Jitsi Meet mobile apps *require* a valid certificate signed by a trusted [Certificate Authority](https://en.wikipedia.org/wiki/Certificate_authority) and will not be able to connect to your server if you choose a self-signed certificate.
|
||||
|
||||
Simply run the following in your shell:
|
||||
|
||||
```sh
|
||||
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
|
||||
```
|
||||
|
||||
Note that this script uses the [HTTP-01 challenge type](https://letsencrypt.org/docs/challenge-types/) and thus your instance needs to be accessible from the public internet. If you want to use a different challenge type, don't use this script and instead choose ___I want to use my own certificate___ during jitsi-meet installation.
|
||||
|
||||
#### Advanced configuration
|
||||
If installation is on a machine [behind NAT](https://github.com/jitsi/jitsi-meet/blob/master/doc/faq.md) further configuration of jitsi-videobridge is needed in order for it to be accessible.
|
||||
Provided that all required ports are routed (forwarded) to the machine that it runs on. By default these ports are (TCP/443 or TCP/4443 and UDP 10000).
|
||||
The following extra lines need to be added the file `/etc/jitsi/videobridge/sip-communicator.properties`:
|
||||
If the installation is on a machine [behind NAT](https://github.com/jitsi/jitsi-meet/blob/master/doc/faq.md) jitsi-videobridge should configure itself automatically on boot. If three way call does not work further configuration of jitsi-videobridge is needed in order for it to be accessible from outside.
|
||||
Provided that all required ports are routed (forwarded) to the machine that it runs on. By default these ports are (TCP/443 or TCP/4443 and UDP/10000).
|
||||
The following extra lines need to be added to the file `/etc/jitsi/videobridge/sip-communicator.properties`:
|
||||
```
|
||||
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
|
||||
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
|
||||
```
|
||||
See [the documenation of ice4j](https://github.com/jitsi/ice4j/blob/master/doc/configuration.md)
|
||||
And comment the existing `org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES`.
|
||||
See [the documentation of ice4j](https://github.com/jitsi/ice4j/blob/master/doc/configuration.md)
|
||||
for details.
|
||||
|
||||
Default deployments on systems using systemd will have low default values for maximum processes and open files. If the used bridge will expect higher number of participants the default values need to be adjusted (the default values are good for less than 100 participants).
|
||||
@@ -74,20 +81,24 @@ DefaultTasksMax=65000
|
||||
```
|
||||
To load the values and check them look [here](#systemd-details) for details.
|
||||
|
||||
By default, anyone who has access to your jitsi instance will be able to start a conferencee: if your server is open to the world, anyone can have a chat with anyone else. If you want to limit the ability to start a conference to registered users, set up a "secure domain". Follow the instructions at https://github.com/jitsi/jicofo#secure-domain.
|
||||
By default, anyone who has access to your jitsi instance will be able to start a conference: if your server is open to the world, anyone can have a chat with anyone else. If you want to limit the ability to start a conference to registered users, set up a "secure domain". Follow the instructions at https://github.com/jitsi/jicofo#secure-domain.
|
||||
|
||||
### Open a conference
|
||||
### Confirm that your installation is working
|
||||
|
||||
Launch a web browser (Chrome, Chromium or latest Opera) and enter in the URL bar the hostname (or IP address) you used in the previous step.
|
||||
Launch a web browser (Chrome, Chromium or latest Opera) and enter the hostname or IP address from the previous step into the address bar.
|
||||
|
||||
Confirm that you trust the self-signed certificate of the newly installed Jitsi Meet.
|
||||
If you used a self-signed certificate (as opposed to using Let's Encrypt), your web browser will ask you to confirm that you trust the certificate.
|
||||
|
||||
Enjoy!
|
||||
You should see a web page prompting you to create a new meeting. Make sure that you can successfully create a meeting and that other participants are able to join the session.
|
||||
|
||||
If this all worked, then congratulations! You have an operational Jitsi conference service.
|
||||
|
||||
## Adding sip-gateway to Jitsi Meet
|
||||
|
||||
### Install Jigasi
|
||||
|
||||
Jigasi is a server-side application acting as a gateway to Jitsi Meet conferences. It allows regular [SIP](https://en.wikipedia.org/wiki/Session_Initiation_Protocol) clients to join meetings and provides transcription capabilities.
|
||||
|
||||
```sh
|
||||
apt-get -y install jigasi
|
||||
```
|
||||
@@ -109,7 +120,7 @@ Enjoy!
|
||||
## Uninstall
|
||||
|
||||
```sh
|
||||
apt-get purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-turnserver jitsi-meet-web jicofo jitsi-videobridge
|
||||
apt-get purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-turnserver jitsi-meet-web jicofo jitsi-videobridge2
|
||||
```
|
||||
|
||||
Sometimes the following packages will fail to uninstall properly:
|
||||
@@ -119,13 +130,25 @@ Sometimes the following packages will fail to uninstall properly:
|
||||
|
||||
When this happens, just run the uninstall command a second time and it should be ok.
|
||||
|
||||
The reason for failure is that sometimes, the uninstall script is faster than the process that stops the daemons. The second run of the uninstall command fixes this, as by then the jigasi or jvb daemons are already stopped.
|
||||
The reason for the failure is that sometimes the uninstall script is faster than the process that stops the daemons. The second run of the uninstall command fixes this, as by then the jigasi or jitsi-videobridge daemons are already stopped.
|
||||
|
||||
#### Systemd details
|
||||
To reload the systemd changes on a running system execute `systemctl daemon-reload` and `service jitsi-videobridge restart`.
|
||||
To check the tasks part execute `service jitsi-videobridge status` and you should see `Tasks: XX (limit: 65000)`.
|
||||
To check the files and process part execute ```cat /proc/`cat /var/run/jitsi-videobridge.pid`/limits``` and you should see:
|
||||
To reload the systemd changes on a running system execute `systemctl daemon-reload` and `service jitsi-videobridge2 restart`.
|
||||
To check the tasks part execute `service jitsi-videobridge2 status` and you should see `Tasks: XX (limit: 65000)`.
|
||||
To check the files and process part execute ```cat /proc/`cat /var/run/jitsi-videobridge/jitsi-videobridge.pid`/limits``` and you should see:
|
||||
```
|
||||
Max processes 65000 65000 processes
|
||||
Max open files 65000 65000 files
|
||||
```
|
||||
|
||||
## Debugging problems
|
||||
|
||||
If you run into problems, one thing to try is using a different web browser. Some versions of some browsers are known to have issues with Jitsi Meet. You can also visit https://test.webrtc.org to test your browser's [WebRTC](https://en.wikipedia.org/wiki/WebRTC) support.
|
||||
|
||||
Another place to look is the various log files:
|
||||
|
||||
```
|
||||
/var/log/jitsi/jvb.log
|
||||
/var/log/jitsi/jicofo.log
|
||||
/var/log/prosody/prosody.log
|
||||
```
|
||||
|
||||
9
images/chromeLogo.svg
Normal file
|
After Width: | Height: | Size: 134 KiB |
@@ -13,7 +13,8 @@
|
||||
// IE11 and earlier can be identified via their user agent and be
|
||||
// redirected to a page that is known to have no newer js syntax.
|
||||
if (window.navigator.userAgent.match(/(MSIE|Trident)/)) {
|
||||
window.location.href = "static/recommendedBrowsers.html";
|
||||
var roomName = encodeURIComponent(window.location.pathname);
|
||||
window.location.href = "static/recommendedBrowsers.html" + "?room=" + roomName;
|
||||
}
|
||||
|
||||
window.indexLoadedTime = window.performance.now();
|
||||
|
||||
@@ -31,7 +31,7 @@ var interfaceConfig = {
|
||||
APP_NAME: 'Jitsi Meet',
|
||||
NATIVE_APP_NAME: 'Jitsi Meet',
|
||||
PROVIDER_NAME: 'Jitsi',
|
||||
LANG_DETECTION: false, // Allow i18n to detect the system language
|
||||
LANG_DETECTION: true, // Allow i18n to detect the system language
|
||||
INVITATION_POWERED_BY: true,
|
||||
|
||||
/**
|
||||
@@ -51,7 +51,7 @@ var interfaceConfig = {
|
||||
'fodeviceselection', 'hangup', 'profile', 'info', 'chat', 'recording',
|
||||
'livestreaming', 'etherpad', 'sharedvideo', 'settings', 'raisehand',
|
||||
'videoquality', 'filmstrip', 'invite', 'feedback', 'stats', 'shortcuts',
|
||||
'tileview', 'videobackgroundblur', 'download', 'help'
|
||||
'tileview', 'videobackgroundblur', 'download', 'help', 'mute-everyone'
|
||||
],
|
||||
|
||||
SETTINGS_SECTIONS: [ 'devices', 'language', 'moderator', 'profile', 'calendar' ],
|
||||
@@ -74,6 +74,7 @@ var interfaceConfig = {
|
||||
|
||||
// A html text to be shown to guests on the close page, false disables it
|
||||
CLOSE_PAGE_GUEST_HINT: false,
|
||||
SHOW_PROMOTIONAL_CLOSE_PAGE: false,
|
||||
RANDOM_AVATAR_URL_PREFIX: false,
|
||||
RANDOM_AVATAR_URL_SUFFIX: false,
|
||||
FILM_STRIP_MAX_HEIGHT: 120,
|
||||
@@ -127,7 +128,7 @@ var interfaceConfig = {
|
||||
* If indicated some of the error dialogs may point to the support URL for
|
||||
* help.
|
||||
*/
|
||||
SUPPORT_URL: 'https://github.com/jitsi/jitsi-meet/issues/new',
|
||||
SUPPORT_URL: 'https://community.jitsi.org/',
|
||||
|
||||
/**
|
||||
* Whether the connection indicator icon should hide itself based on
|
||||
@@ -191,15 +192,26 @@ var interfaceConfig = {
|
||||
AUTO_PIN_LATEST_SCREEN_SHARE: 'remote-only',
|
||||
|
||||
/**
|
||||
* If we should capture periodic screenshots of the content sharing.
|
||||
* If true, presence status: busy, calling, connected etc. is not displayed.
|
||||
*/
|
||||
ENABLE_SCREENSHOT_CAPTURE: false,
|
||||
|
||||
// If true, presence status: busy, calling, connected etc. is not displayed
|
||||
DISABLE_PRESENCE_STATUS: false,
|
||||
|
||||
// If true, notifications regarding joining/leaving are no longer displayed
|
||||
DISABLE_JOIN_LEAVE_NOTIFICATIONS: false
|
||||
/**
|
||||
* If true, notifications regarding joining/leaving are no longer displayed.
|
||||
*/
|
||||
DISABLE_JOIN_LEAVE_NOTIFICATIONS: false,
|
||||
|
||||
/**
|
||||
* Decides whether the chrome extension banner should be rendered on the landing page and during the meeting.
|
||||
* If this is set to false, the banner will not be rendered at all. If set to true, the check for extension(s)
|
||||
* being already installed is done before rendering.
|
||||
*/
|
||||
SHOW_CHROME_EXTENSION_BANNER: false
|
||||
|
||||
/**
|
||||
* When enabled, the kick participant button will not be presented for users without a JWT
|
||||
*/
|
||||
// HIDE_KICK_BUTTON_FOR_GUESTS: false
|
||||
|
||||
/**
|
||||
* How many columns the tile view can expand to. The respected range is
|
||||
|
||||
@@ -5,10 +5,10 @@ require_relative '../node_modules/@react-native-community/cli-platform-ios/nativ
|
||||
target 'jitsi-meet' do
|
||||
project 'app/app.xcodeproj'
|
||||
|
||||
pod 'Crashlytics', '~> 3.12.0'
|
||||
pod 'Fabric', '~> 1.9.0'
|
||||
pod 'Firebase/Core', '~> 5.18.0'
|
||||
pod 'Firebase/DynamicLinks', '~> 5.18.0'
|
||||
pod 'Crashlytics', '~> 3.14.0'
|
||||
pod 'Fabric', '~> 1.10.2'
|
||||
pod 'Firebase/Core', '~> 6.16.0'
|
||||
pod 'Firebase/DynamicLinks', '~> 6.16.0'
|
||||
end
|
||||
|
||||
target 'JitsiMeet' do
|
||||
|
||||
499
ios/Podfile.lock
@@ -11,46 +11,60 @@ PODS:
|
||||
- CocoaLumberjack (3.5.3):
|
||||
- CocoaLumberjack/Core (= 3.5.3)
|
||||
- CocoaLumberjack/Core (3.5.3)
|
||||
- Crashlytics (3.12.0):
|
||||
- Fabric (~> 1.9.0)
|
||||
- Crashlytics (3.14.0):
|
||||
- Fabric (~> 1.10.2)
|
||||
- DoubleConversion (1.1.6)
|
||||
- Fabric (1.9.0)
|
||||
- FBLazyVector (0.61.5)
|
||||
- FBReactNativeSpec (0.61.5):
|
||||
- Fabric (1.10.2)
|
||||
- FBLazyVector (0.61.5-jitsi.1)
|
||||
- FBReactNativeSpec (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTRequired (= 0.61.5)
|
||||
- RCTTypeSafety (= 0.61.5)
|
||||
- React-Core (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5)
|
||||
- Firebase/Core (5.18.0):
|
||||
- RCTRequired (= 0.61.5-jitsi.1)
|
||||
- RCTTypeSafety (= 0.61.5-jitsi.1)
|
||||
- React-Core (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.1)
|
||||
- Firebase/Core (6.16.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAnalytics (= 5.7.0)
|
||||
- Firebase/CoreOnly (5.18.0):
|
||||
- FirebaseCore (= 5.3.1)
|
||||
- Firebase/DynamicLinks (5.18.0):
|
||||
- FirebaseAnalytics (= 6.2.2)
|
||||
- Firebase/CoreOnly (6.16.0):
|
||||
- FirebaseCore (= 6.6.1)
|
||||
- Firebase/DynamicLinks (6.16.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseDynamicLinks (= 3.4.1)
|
||||
- FirebaseAnalytics (5.7.0):
|
||||
- FirebaseCore (~> 5.3)
|
||||
- FirebaseInstanceID (~> 3.6)
|
||||
- GoogleAppMeasurement (= 5.7.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 5.2)
|
||||
- GoogleUtilities/MethodSwizzler (~> 5.2)
|
||||
- GoogleUtilities/Network (~> 5.2)
|
||||
- "GoogleUtilities/NSData+zlib (~> 5.2)"
|
||||
- nanopb (~> 0.3)
|
||||
- FirebaseAnalyticsInterop (1.2.0)
|
||||
- FirebaseCore (5.3.1):
|
||||
- GoogleUtilities/Logger (~> 5.2)
|
||||
- FirebaseDynamicLinks (3.4.1):
|
||||
- FirebaseAnalytics (~> 5.1)
|
||||
- FirebaseAnalyticsInterop (~> 1.0)
|
||||
- FirebaseCore (~> 5.2)
|
||||
- FirebaseInstanceID (3.7.0):
|
||||
- FirebaseCore (~> 5.2)
|
||||
- GoogleUtilities/Environment (~> 5.2)
|
||||
- GoogleUtilities/UserDefaults (~> 5.2)
|
||||
- FirebaseDynamicLinks (~> 4.0.6)
|
||||
- FirebaseAnalytics (6.2.2):
|
||||
- FirebaseCore (~> 6.6)
|
||||
- FirebaseInstanceID (~> 4.3)
|
||||
- GoogleAppMeasurement (= 6.2.2)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 6.0)
|
||||
- GoogleUtilities/MethodSwizzler (~> 6.0)
|
||||
- GoogleUtilities/Network (~> 6.0)
|
||||
- "GoogleUtilities/NSData+zlib (~> 6.0)"
|
||||
- nanopb (= 0.3.9011)
|
||||
- FirebaseAnalyticsInterop (1.5.0)
|
||||
- FirebaseCore (6.6.1):
|
||||
- FirebaseCoreDiagnostics (~> 1.2)
|
||||
- FirebaseCoreDiagnosticsInterop (~> 1.2)
|
||||
- GoogleUtilities/Environment (~> 6.5)
|
||||
- GoogleUtilities/Logger (~> 6.5)
|
||||
- FirebaseCoreDiagnostics (1.2.2):
|
||||
- FirebaseCoreDiagnosticsInterop (~> 1.2)
|
||||
- GoogleDataTransportCCTSupport (~> 2.0)
|
||||
- GoogleUtilities/Environment (~> 6.5)
|
||||
- GoogleUtilities/Logger (~> 6.5)
|
||||
- nanopb (~> 0.3.901)
|
||||
- FirebaseCoreDiagnosticsInterop (1.2.0)
|
||||
- FirebaseDynamicLinks (4.0.8):
|
||||
- FirebaseAnalyticsInterop (~> 1.3)
|
||||
- FirebaseCore (~> 6.2)
|
||||
- FirebaseInstallations (1.1.1):
|
||||
- FirebaseCore (~> 6.6)
|
||||
- GoogleUtilities/UserDefaults (~> 6.5)
|
||||
- PromisesObjC (~> 1.2)
|
||||
- FirebaseInstanceID (4.3.2):
|
||||
- FirebaseCore (~> 6.6)
|
||||
- FirebaseInstallations (~> 1.0)
|
||||
- GoogleUtilities/Environment (~> 6.5)
|
||||
- GoogleUtilities/UserDefaults (~> 6.5)
|
||||
- Folly (2018.10.22.00):
|
||||
- boost-for-react-native
|
||||
- DoubleConversion
|
||||
@@ -61,33 +75,37 @@ PODS:
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- glog (0.3.5)
|
||||
- GoogleAppMeasurement (5.7.0):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 5.2)
|
||||
- GoogleUtilities/MethodSwizzler (~> 5.2)
|
||||
- GoogleUtilities/Network (~> 5.2)
|
||||
- "GoogleUtilities/NSData+zlib (~> 5.2)"
|
||||
- nanopb (~> 0.3)
|
||||
- GoogleAppMeasurement (6.2.2):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 6.0)
|
||||
- GoogleUtilities/MethodSwizzler (~> 6.0)
|
||||
- GoogleUtilities/Network (~> 6.0)
|
||||
- "GoogleUtilities/NSData+zlib (~> 6.0)"
|
||||
- nanopb (= 0.3.9011)
|
||||
- GoogleDataTransport (5.1.0)
|
||||
- GoogleDataTransportCCTSupport (2.0.1):
|
||||
- GoogleDataTransport (~> 5.1)
|
||||
- nanopb (~> 0.3.901)
|
||||
- GoogleSignIn (5.0.1):
|
||||
- AppAuth (~> 1.2)
|
||||
- GTMAppAuth (~> 1.0)
|
||||
- GTMSessionFetcher/Core (~> 1.1)
|
||||
- GoogleUtilities/AppDelegateSwizzler (5.4.1):
|
||||
- GoogleUtilities/AppDelegateSwizzler (6.5.2):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network
|
||||
- GoogleUtilities/Environment (5.4.1)
|
||||
- GoogleUtilities/Logger (5.4.1):
|
||||
- GoogleUtilities/Environment (6.5.2)
|
||||
- GoogleUtilities/Logger (6.5.2):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/MethodSwizzler (5.4.1):
|
||||
- GoogleUtilities/MethodSwizzler (6.5.2):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network (5.4.1):
|
||||
- GoogleUtilities/Network (6.5.2):
|
||||
- GoogleUtilities/Logger
|
||||
- "GoogleUtilities/NSData+zlib"
|
||||
- GoogleUtilities/Reachability
|
||||
- "GoogleUtilities/NSData+zlib (5.4.1)"
|
||||
- GoogleUtilities/Reachability (5.4.1):
|
||||
- "GoogleUtilities/NSData+zlib (6.5.2)"
|
||||
- GoogleUtilities/Reachability (6.5.2):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/UserDefaults (5.4.1):
|
||||
- GoogleUtilities/UserDefaults (6.5.2):
|
||||
- GoogleUtilities/Logger
|
||||
- GTMAppAuth (1.0.0):
|
||||
- AppAuth/Core (~> 1.0)
|
||||
@@ -97,175 +115,176 @@ PODS:
|
||||
- GTMSessionFetcher/Core (1.2.2)
|
||||
- GTMSessionFetcher/Full (1.2.2):
|
||||
- GTMSessionFetcher/Core (= 1.2.2)
|
||||
- nanopb (0.3.901):
|
||||
- nanopb/decode (= 0.3.901)
|
||||
- nanopb/encode (= 0.3.901)
|
||||
- nanopb/decode (0.3.901)
|
||||
- nanopb/encode (0.3.901)
|
||||
- nanopb (0.3.9011):
|
||||
- nanopb/decode (= 0.3.9011)
|
||||
- nanopb/encode (= 0.3.9011)
|
||||
- nanopb/decode (0.3.9011)
|
||||
- nanopb/encode (0.3.9011)
|
||||
- ObjectiveDropboxOfficial (3.9.4)
|
||||
- RCTRequired (0.61.5)
|
||||
- RCTTypeSafety (0.61.5):
|
||||
- FBLazyVector (= 0.61.5)
|
||||
- PromisesObjC (1.2.8)
|
||||
- RCTRequired (0.61.5-jitsi.1)
|
||||
- RCTTypeSafety (0.61.5-jitsi.1):
|
||||
- FBLazyVector (= 0.61.5-jitsi.1)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTRequired (= 0.61.5)
|
||||
- React-Core (= 0.61.5)
|
||||
- React (0.61.5):
|
||||
- React-Core (= 0.61.5)
|
||||
- React-Core/DevSupport (= 0.61.5)
|
||||
- React-Core/RCTWebSocket (= 0.61.5)
|
||||
- React-RCTActionSheet (= 0.61.5)
|
||||
- React-RCTAnimation (= 0.61.5)
|
||||
- React-RCTBlob (= 0.61.5)
|
||||
- React-RCTImage (= 0.61.5)
|
||||
- React-RCTLinking (= 0.61.5)
|
||||
- React-RCTNetwork (= 0.61.5)
|
||||
- React-RCTSettings (= 0.61.5)
|
||||
- React-RCTText (= 0.61.5)
|
||||
- React-RCTVibration (= 0.61.5)
|
||||
- React-Core (0.61.5):
|
||||
- RCTRequired (= 0.61.5-jitsi.1)
|
||||
- React-Core (= 0.61.5-jitsi.1)
|
||||
- React (0.61.5-jitsi.1):
|
||||
- React-Core (= 0.61.5-jitsi.1)
|
||||
- React-Core/DevSupport (= 0.61.5-jitsi.1)
|
||||
- React-Core/RCTWebSocket (= 0.61.5-jitsi.1)
|
||||
- React-RCTActionSheet (= 0.61.5-jitsi.1)
|
||||
- React-RCTAnimation (= 0.61.5-jitsi.1)
|
||||
- React-RCTBlob (= 0.61.5-jitsi.1)
|
||||
- React-RCTImage (= 0.61.5-jitsi.1)
|
||||
- React-RCTLinking (= 0.61.5-jitsi.1)
|
||||
- React-RCTNetwork (= 0.61.5-jitsi.1)
|
||||
- React-RCTSettings (= 0.61.5-jitsi.1)
|
||||
- React-RCTText (= 0.61.5-jitsi.1)
|
||||
- React-RCTVibration (= 0.61.5-jitsi.1)
|
||||
- React-Core (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-Core/Default (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.61.5):
|
||||
- React-Core/CoreModulesHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/Default (0.61.5):
|
||||
- React-Core/Default (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.61.5):
|
||||
- React-Core/DevSupport (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.61.5)
|
||||
- React-Core/RCTWebSocket (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-jsinspector (= 0.61.5)
|
||||
- React-Core/Default (= 0.61.5-jitsi.1)
|
||||
- React-Core/RCTWebSocket (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- React-jsinspector (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.61.5):
|
||||
- React-Core/RCTActionSheetHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.61.5):
|
||||
- React-Core/RCTAnimationHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.61.5):
|
||||
- React-Core/RCTBlobHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.61.5):
|
||||
- React-Core/RCTImageHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.61.5):
|
||||
- React-Core/RCTLinkingHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.61.5):
|
||||
- React-Core/RCTNetworkHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.61.5):
|
||||
- React-Core/RCTSettingsHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.61.5):
|
||||
- React-Core/RCTTextHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.61.5):
|
||||
- React-Core/RCTVibrationHeaders (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.61.5):
|
||||
- React-Core/RCTWebSocket (0.61.5-jitsi.1):
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core/Default (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsiexecutor (= 0.61.5)
|
||||
- React-Core/Default (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsiexecutor (= 0.61.5-jitsi.1)
|
||||
- Yoga
|
||||
- React-CoreModules (0.61.5):
|
||||
- FBReactNativeSpec (= 0.61.5)
|
||||
- React-CoreModules (0.61.5-jitsi.1):
|
||||
- FBReactNativeSpec (= 0.61.5-jitsi.1)
|
||||
- Folly (= 2018.10.22.00)
|
||||
- RCTTypeSafety (= 0.61.5)
|
||||
- React-Core/CoreModulesHeaders (= 0.61.5)
|
||||
- React-RCTImage (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5)
|
||||
- React-cxxreact (0.61.5):
|
||||
- RCTTypeSafety (= 0.61.5-jitsi.1)
|
||||
- React-Core/CoreModulesHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTImage (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (0.61.5-jitsi.1):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-jsinspector (= 0.61.5)
|
||||
- React-jsi (0.61.5):
|
||||
- React-jsinspector (= 0.61.5-jitsi.1)
|
||||
- React-jsi (0.61.5-jitsi.1):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-jsi/Default (= 0.61.5)
|
||||
- React-jsi/Default (0.61.5):
|
||||
- React-jsi/Default (= 0.61.5-jitsi.1)
|
||||
- React-jsi/Default (0.61.5-jitsi.1):
|
||||
- boost-for-react-native (= 1.63.0)
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-jsiexecutor (0.61.5):
|
||||
- React-jsiexecutor (0.61.5-jitsi.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-jsinspector (0.61.5)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-jsinspector (0.61.5-jitsi.1)
|
||||
- react-native-background-timer (2.1.1):
|
||||
- React
|
||||
- react-native-calendar-events (1.7.3):
|
||||
@@ -278,60 +297,60 @@ PODS:
|
||||
- React
|
||||
- react-native-webview (7.4.1):
|
||||
- React
|
||||
- React-RCTActionSheet (0.61.5):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.61.5)
|
||||
- React-RCTAnimation (0.61.5):
|
||||
- React-Core/RCTAnimationHeaders (= 0.61.5)
|
||||
- React-RCTBlob (0.61.5):
|
||||
- React-Core/RCTBlobHeaders (= 0.61.5)
|
||||
- React-Core/RCTWebSocket (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- React-RCTNetwork (= 0.61.5)
|
||||
- React-RCTImage (0.61.5):
|
||||
- React-Core/RCTImageHeaders (= 0.61.5)
|
||||
- React-RCTNetwork (= 0.61.5)
|
||||
- React-RCTLinking (0.61.5):
|
||||
- React-Core/RCTLinkingHeaders (= 0.61.5)
|
||||
- React-RCTNetwork (0.61.5):
|
||||
- React-Core/RCTNetworkHeaders (= 0.61.5)
|
||||
- React-RCTSettings (0.61.5):
|
||||
- React-Core/RCTSettingsHeaders (= 0.61.5)
|
||||
- React-RCTText (0.61.5):
|
||||
- React-Core/RCTTextHeaders (= 0.61.5)
|
||||
- React-RCTVibration (0.61.5):
|
||||
- React-Core/RCTVibrationHeaders (= 0.61.5)
|
||||
- ReactCommon/jscallinvoker (0.61.5):
|
||||
- React-RCTActionSheet (0.61.5-jitsi.1):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTAnimation (0.61.5-jitsi.1):
|
||||
- React-Core/RCTAnimationHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTBlob (0.61.5-jitsi.1):
|
||||
- React-Core/RCTBlobHeaders (= 0.61.5-jitsi.1)
|
||||
- React-Core/RCTWebSocket (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- React-RCTNetwork (= 0.61.5-jitsi.1)
|
||||
- React-RCTImage (0.61.5-jitsi.1):
|
||||
- React-Core/RCTImageHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTNetwork (= 0.61.5-jitsi.1)
|
||||
- React-RCTLinking (0.61.5-jitsi.1):
|
||||
- React-Core/RCTLinkingHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTNetwork (0.61.5-jitsi.1):
|
||||
- React-Core/RCTNetworkHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTSettings (0.61.5-jitsi.1):
|
||||
- React-Core/RCTSettingsHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTText (0.61.5-jitsi.1):
|
||||
- React-Core/RCTTextHeaders (= 0.61.5-jitsi.1)
|
||||
- React-RCTVibration (0.61.5-jitsi.1):
|
||||
- React-Core/RCTVibrationHeaders (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/jscallinvoker (0.61.5-jitsi.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- ReactCommon/turbomodule (0.61.5):
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule (0.61.5-jitsi.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5)
|
||||
- ReactCommon/turbomodule/samples (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (0.61.5):
|
||||
- React-Core (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/samples (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/core (0.61.5-jitsi.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5)
|
||||
- ReactCommon/turbomodule/samples (0.61.5):
|
||||
- React-Core (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/samples (0.61.5-jitsi.1):
|
||||
- DoubleConversion
|
||||
- Folly (= 2018.10.22.00)
|
||||
- glog
|
||||
- React-Core (= 0.61.5)
|
||||
- React-cxxreact (= 0.61.5)
|
||||
- React-jsi (= 0.61.5)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5)
|
||||
- React-Core (= 0.61.5-jitsi.1)
|
||||
- React-cxxreact (= 0.61.5-jitsi.1)
|
||||
- React-jsi (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/jscallinvoker (= 0.61.5-jitsi.1)
|
||||
- ReactCommon/turbomodule/core (= 0.61.5-jitsi.1)
|
||||
- RNCAsyncStorage (1.3.4):
|
||||
- React
|
||||
- RNGoogleSignin (3.0.1):
|
||||
@@ -352,13 +371,13 @@ DEPENDENCIES:
|
||||
- Amplitude-iOS (~> 4.0.4)
|
||||
- BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
|
||||
- CocoaLumberjack (~> 3.5.3)
|
||||
- Crashlytics (~> 3.12.0)
|
||||
- Crashlytics (~> 3.14.0)
|
||||
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
|
||||
- Fabric (~> 1.9.0)
|
||||
- Fabric (~> 1.10.2)
|
||||
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector/`)
|
||||
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec/`)
|
||||
- Firebase/Core (~> 5.18.0)
|
||||
- Firebase/DynamicLinks (~> 5.18.0)
|
||||
- Firebase/Core (~> 6.16.0)
|
||||
- Firebase/DynamicLinks (~> 6.16.0)
|
||||
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
|
||||
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
|
||||
- ObjectiveDropboxOfficial (~> 3.9.4)
|
||||
@@ -401,23 +420,29 @@ SPEC REPOS:
|
||||
- Amplitude-iOS
|
||||
- boost-for-react-native
|
||||
- CocoaLumberjack
|
||||
- ObjectiveDropboxOfficial
|
||||
trunk:
|
||||
- AppAuth
|
||||
- Crashlytics
|
||||
- Fabric
|
||||
- Firebase
|
||||
- FirebaseAnalytics
|
||||
- FirebaseAnalyticsInterop
|
||||
- FirebaseCore
|
||||
- FirebaseCoreDiagnostics
|
||||
- FirebaseCoreDiagnosticsInterop
|
||||
- FirebaseDynamicLinks
|
||||
- FirebaseInstallations
|
||||
- FirebaseInstanceID
|
||||
- GoogleAppMeasurement
|
||||
- GoogleUtilities
|
||||
- nanopb
|
||||
- ObjectiveDropboxOfficial
|
||||
trunk:
|
||||
- AppAuth
|
||||
- GoogleDataTransport
|
||||
- GoogleDataTransportCCTSupport
|
||||
- GoogleSignIn
|
||||
- GoogleUtilities
|
||||
- GTMAppAuth
|
||||
- GTMSessionFetcher
|
||||
- nanopb
|
||||
- PromisesObjC
|
||||
|
||||
EXTERNAL SOURCES:
|
||||
BVLinearGradient:
|
||||
@@ -501,58 +526,64 @@ SPEC CHECKSUMS:
|
||||
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
|
||||
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
|
||||
CocoaLumberjack: 2f44e60eb91c176d471fdba43b9e3eae6a721947
|
||||
Crashlytics: 07fb167b1694128c1c9a5a5cc319b0e9c3ca0933
|
||||
Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df
|
||||
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
|
||||
Fabric: f988e33c97f08930a413e08123064d2e5f68d655
|
||||
FBLazyVector: aaeaf388755e4f29cd74acbc9e3b8da6d807c37f
|
||||
FBReactNativeSpec: 118d0d177724c2d67f08a59136eb29ef5943ec75
|
||||
Firebase: 02f3281965c075426141a0ce1277e9de6649cab9
|
||||
FirebaseAnalytics: 23851fe602c872130a2c5c55040b302120346cc2
|
||||
FirebaseAnalyticsInterop: efbe45c8385ec626e29f9525e5ebd38520dfb6c1
|
||||
FirebaseCore: 52f851b30e11360f1e67cf04b1edfebf0a47a2d3
|
||||
FirebaseDynamicLinks: f209c3caccd82102caa0e91d393e3ccc593501fd
|
||||
FirebaseInstanceID: bd6fc5a258884e206fd5c474ebe4f5b00e21770e
|
||||
Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74
|
||||
FBLazyVector: 4a5251159a3ed05dc11cc8b74cf937869935814b
|
||||
FBReactNativeSpec: 6fa602a20993212cc9877a81838578ffb0008bc9
|
||||
Firebase: 497158b816d0a86fc31babbd05546fcd7e6083ff
|
||||
FirebaseAnalytics: cf95d3aab897612783020fbd98401d5366f135ee
|
||||
FirebaseAnalyticsInterop: 3f86269c38ae41f47afeb43ebf32a001f58fcdae
|
||||
FirebaseCore: 85064903ed6c28e47fec9c7bd149d94ba1b6b6e7
|
||||
FirebaseCoreDiagnostics: e9b4cd8ba60dee0f2d13347332e4b7898cca5b61
|
||||
FirebaseCoreDiagnosticsInterop: 296e2c5f5314500a850ad0b83e9e7c10b011a850
|
||||
FirebaseDynamicLinks: 417dc6dbb6013233c77558290d73296f429656a6
|
||||
FirebaseInstallations: acb3216eb9784d3b1d2d2d635ff74fa892cc0c44
|
||||
FirebaseInstanceID: 7ee0d6777013bb952f377b41965bf132b6a075be
|
||||
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
|
||||
glog: 1f3da668190260b06b429bb211bfbee5cd790c28
|
||||
GoogleAppMeasurement: 6cf307834da065863f9faf4c0de0a936d81dd832
|
||||
GoogleAppMeasurement: d0560d915abf15e692e8538ba1d58442217b6aff
|
||||
GoogleDataTransport: b29a21d813e906014ca16c00897827e40e4a24ab
|
||||
GoogleDataTransportCCTSupport: 6f15a89b0ca35d6fa523e1f752ef818588885988
|
||||
GoogleSignIn: 3a51b9bb8e48b635fd7f4272cee06ca260345b86
|
||||
GoogleUtilities: 1e25823cbf46540b4284f6ef8e17b3a68ee12bbc
|
||||
GoogleUtilities: ad0f3b691c67909d03a3327cc205222ab8f42e0e
|
||||
GTMAppAuth: 4deac854479704f348309e7b66189e604cf5e01e
|
||||
GTMSessionFetcher: 61bb0f61a4cb560030f1222021178008a5727a23
|
||||
nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48
|
||||
nanopb: 18003b5e52dab79db540fe93fe9579f399bd1ccd
|
||||
ObjectiveDropboxOfficial: a5afefc83f6467c42c45f2253f583f2ad1ffc701
|
||||
RCTRequired: b153add4da6e7dbc44aebf93f3cf4fcae392ddf1
|
||||
RCTTypeSafety: 9aa1b91d7f9310fc6eadc3cf95126ffe818af320
|
||||
React: b6a59ef847b2b40bb6e0180a97d0ca716969ac78
|
||||
React-Core: 688b451f7d616cc1134ac95295b593d1b5158a04
|
||||
React-CoreModules: d04f8494c1a328b69ec11db9d1137d667f916dcb
|
||||
React-cxxreact: d0f7bcafa196ae410e5300736b424455e7fb7ba7
|
||||
React-jsi: cb2cd74d7ccf4cffb071a46833613edc79cdf8f7
|
||||
React-jsiexecutor: d5525f9ed5f782fdbacb64b9b01a43a9323d2386
|
||||
React-jsinspector: fa0ecc501688c3c4c34f28834a76302233e29dc0
|
||||
PromisesObjC: c119f3cd559f50b7ae681fa59dc1acd19173b7e6
|
||||
RCTRequired: f63dd90a89a60602acdd44c42e5d2645ca60ab79
|
||||
RCTTypeSafety: 24a3c6d55684046ed550b1d0ef083a9bf71c8bd4
|
||||
React: 71c5a51135f291c3b32c0b558e167b858ae50e84
|
||||
React-Core: e82c03ff91062abf963f35bf99a357154e570285
|
||||
React-CoreModules: e236aeecd18cec37743c8c50562431db5302f668
|
||||
React-cxxreact: 526ec106aa1bf2b3f6aab2a7d528d1d23d5f59c2
|
||||
React-jsi: 4f35c1a2273d193a80c1c3831c808413840c260c
|
||||
React-jsiexecutor: de1c37cf59ae9adcbf2be82eea0e090dc3f3205e
|
||||
React-jsinspector: b76c4e84a7833bb4c90549d59ed53ec299ff912b
|
||||
react-native-background-timer: 0d34748e53a972507c66963490c775321a88f6f2
|
||||
react-native-calendar-events: 2fe35a9294af05de0ed819d3a1b5dac048d2c010
|
||||
react-native-keep-awake: eba3137546b10003361b37c761f6c429b59814ae
|
||||
react-native-netinfo: 8d8db463bcc5db66a8ac5c48a7d86beb3b92f61a
|
||||
react-native-webrtc: 86d841823e66d68cc1f86712db1c2956056bf0c2
|
||||
react-native-webview: 4dbc1d2a4a6b9c5e9e723c62651917aa2b5e579e
|
||||
React-RCTActionSheet: 600b4d10e3aea0913b5a92256d2719c0cdd26d76
|
||||
React-RCTAnimation: 791a87558389c80908ed06cc5dfc5e7920dfa360
|
||||
React-RCTBlob: d89293cc0236d9cb0933d85e430b0bbe81ad1d72
|
||||
React-RCTImage: 6b8e8df449eb7c814c99a92d6b52de6fe39dea4e
|
||||
React-RCTLinking: 121bb231c7503cf9094f4d8461b96a130fabf4a5
|
||||
React-RCTNetwork: fb353640aafcee84ca8b78957297bd395f065c9a
|
||||
React-RCTSettings: 8db258ea2a5efee381fcf7a6d5044e2f8b68b640
|
||||
React-RCTText: 9ccc88273e9a3aacff5094d2175a605efa854dbe
|
||||
React-RCTVibration: a49a1f42bf8f5acf1c3e297097517c6b3af377ad
|
||||
ReactCommon: 198c7c8d3591f975e5431bec1b0b3b581aa1c5dd
|
||||
React-RCTActionSheet: b72ddbfbe15b44ce691d128e4b582f4bb9abb540
|
||||
React-RCTAnimation: cfaefba5024499d336b76ab850e6bd33b232b5e3
|
||||
React-RCTBlob: c427e643bef82999deeab97489ba43298ecfbe24
|
||||
React-RCTImage: 79934bc96f3349da6a75b1d61cad594a932e4097
|
||||
React-RCTLinking: 12b153399567c30efac0b32bb00f9c064587dc26
|
||||
React-RCTNetwork: 603ad75778a54521b7797fd07c67dff562317526
|
||||
React-RCTSettings: 8d45fcf14513582539ea1ddea69391207de7f046
|
||||
React-RCTText: b4c29897c3df0c9f112e29aa3167fa6caf40b690
|
||||
React-RCTVibration: a1bcfcdc0b5a73a1b0829a34cee22bd0e95bacba
|
||||
ReactCommon: 675681aba4fecff5acbc0e440530cc422103c610
|
||||
RNCAsyncStorage: 8e31405a9f12fbf42c2bb330e4560bfd79c18323
|
||||
RNGoogleSignin: 39336070b35fc4cea6a98cf111e00480317be0ae
|
||||
RNSound: c980916b596cc15c8dcd2f6ecd3b13c4881dbe20
|
||||
RNSVG: aac12785382e8fd4f28d072fe640612e34914631
|
||||
RNWatch: 09738b339eceb66e4d80a2371633ca5fb380fa42
|
||||
Yoga: f2a7cd4280bfe2cca5a7aed98ba0eb3d1310f18b
|
||||
Yoga: 7b4209fda2441f99d54dd6cf4c82b094409bb68f
|
||||
|
||||
PODFILE CHECKSUM: 0fdfa45ae809c9460c80be3e0d4bbb822fccc418
|
||||
PODFILE CHECKSUM: f615794fb9184757b00cd16e534824ba6ee2fc98
|
||||
|
||||
COCOAPODS: 1.8.4
|
||||
|
||||
@@ -19,7 +19,7 @@ There are 2 ways to integrate the SDK into your project:
|
||||
|
||||
Follow the instructions [here](https://github.com/jitsi/jitsi-meet-ios-sdk-releases/blob/master/README.md).
|
||||
|
||||
### Builduing it yourself
|
||||
### Building it yourself
|
||||
|
||||
1. Install all required [dependencies](https://github.com/jitsi/jitsi-meet/blob/master/doc/mobile.md).
|
||||
|
||||
|
||||
@@ -293,7 +293,7 @@
|
||||
B35383AD1DDA0083008F406A /* Adjust embedded framework architectures */,
|
||||
0BB7DA181EC9E695007AAE98 /* Adjust ATS */,
|
||||
DEF4813D224925A2002AD03A /* Copy Google Plist file */,
|
||||
DEC2069321CBBD6900072F03 /* Setup Fabric */,
|
||||
DEC2069321CBBD6900072F03 /* Setup Crashlytics */,
|
||||
DE11877A21EE09640078D059 /* Setup Google reverse URL handler */,
|
||||
DE4F6D6E22005C0400DE699E /* Setup Dropbox */,
|
||||
0BEA5C491F7B8F73000D0AB4 /* Embed Watch Content */,
|
||||
@@ -492,7 +492,7 @@
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "INFO_PLIST=\"$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH\"\nDROPBOX_KEY_FILE=\"$PROJECT_DIR/dropbox.key\"\n\nif [[ -f $DROPBOX_KEY_FILE ]]; then\n /usr/libexec/PlistBuddy -c \"Delete :LSApplicationQueriesSchemes\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes array\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes:0 string 'dbapi-2'\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :LSApplicationQueriesSchemes:1 string 'dbapi-8-emm'\" $INFO_PLIST\n\n DROPBOX_KEY=$(head -n 1 $DROPBOX_KEY_FILE)\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLName string dropbox\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLSchemes array\" $INFO_PLIST\n /usr/libexec/PlistBuddy -c \"Add :CFBundleURLTypes:2:CFBundleURLSchemes:0 string $DROPBOX_KEY\" $INFO_PLIST\nfi\n";
|
||||
};
|
||||
DEC2069321CBBD6900072F03 /* Setup Fabric */ = {
|
||||
DEC2069321CBBD6900072F03 /* Setup Crashlytics */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
@@ -501,14 +501,14 @@
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
name = "Setup Fabric";
|
||||
name = "Setup Crashlytics";
|
||||
outputFileListPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "${PODS_ROOT}/Fabric/run\n";
|
||||
shellScript = "GOOGLE_PLIST=\"$PROJECT_DIR/GoogleService-Info.plist\"\n\nif [[ -f $GOOGLE_PLIST ]]; then\n if [ \"${CONFIGURATION}\" != \"Debug\" ]; then\n find \"${DWARF_DSYM_FOLDER_PATH}\" -name \"*.dSYM\" | xargs -I \\{\\} ${PODS_ROOT}/Fabric/upload-symbols -gsp $GOOGLE_PLIST -p ios \\{\\}\n fi\nfi\n";
|
||||
};
|
||||
DEF4813D224925A2002AD03A /* Copy Google Plist file */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>20.0.0</string>
|
||||
<string>20.2.0</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>20.0.0</string>
|
||||
<string>20.2.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>20.0.0</string>
|
||||
<string>20.2.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>2.6.0</string>
|
||||
<string>2.8.0</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>$(CURRENT_PROJECT_VERSION)</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"bg": "Búlgar",
|
||||
"ca": "Català",
|
||||
"cs": "Txec",
|
||||
"da": "Danès",
|
||||
"de": "Alemany",
|
||||
"el": "Grec",
|
||||
"enGB": "Anglès (Regne Unit)",
|
||||
@@ -12,9 +13,9 @@
|
||||
"esUS": "Espanyol (Amèrica llatina)",
|
||||
"fi": "Finès",
|
||||
"fr": "Francès",
|
||||
"frCA": "Francès (Canadenc)",
|
||||
"frCA": "Francès (Canadà)",
|
||||
"hr": "Croat",
|
||||
"hu": "",
|
||||
"hu": "Hongarès",
|
||||
"hy": "Armeni",
|
||||
"it": "Italià",
|
||||
"ja": "Japonès",
|
||||
@@ -28,5 +29,5 @@
|
||||
"tr": "Turc",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Xinès (Xina)",
|
||||
"zhTW": "Coreà"
|
||||
}
|
||||
"zhTW": "Xinès (Taiwan)"
|
||||
}
|
||||
|
||||
33
lang/languages-da.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"en": "Engelsk",
|
||||
"af": "Sydafrikansk",
|
||||
"bg": "Bulgarsk",
|
||||
"ca": "Katalansk",
|
||||
"cs": "Tjekkisk",
|
||||
"da": "Dansk",
|
||||
"de": "Tysk",
|
||||
"el": "Græsk",
|
||||
"enGB": "Engelsk (Storbritannien)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spansk",
|
||||
"esUS": "Spansk (Latin Amerika)",
|
||||
"fi": "Finsk",
|
||||
"fr": "Fransk",
|
||||
"frCA": "Fransk (Canada)",
|
||||
"hr": "Kroatisk",
|
||||
"hu": "Ungarsk",
|
||||
"hy": "Armensk",
|
||||
"it": "Italiensk",
|
||||
"ja": "Japansk",
|
||||
"ko": "Koreansk",
|
||||
"nl": "Hollandsk",
|
||||
"oc": "Occitansk",
|
||||
"pl": "Polsk",
|
||||
"ptBR": "Portugisisk (Brazilien)",
|
||||
"ru": "Russisk",
|
||||
"sv": "Svensk",
|
||||
"tr": "Tyrkisk",
|
||||
"vi": "Vietnamesisk",
|
||||
"zhCN": "Kinesisk (China)",
|
||||
"zhTW": "Kinesisk (Taiwan)"
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"en": "Englisch",
|
||||
"af": "",
|
||||
"az": "",
|
||||
"af": "Afrikaans",
|
||||
"az": "Aserbaidschanisch",
|
||||
"bg": "Bulgarisch",
|
||||
"cs": "",
|
||||
"cs": "Tschechisch",
|
||||
"de": "Deutsch",
|
||||
"el": "",
|
||||
"el": "Griechisch",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanisch",
|
||||
"fr": "Französisch",
|
||||
"hy": "Armenisch",
|
||||
"it": "Italienisch",
|
||||
"ja": "",
|
||||
"ko": "",
|
||||
"ja": "Japanisch",
|
||||
"ko": "Koreanisch",
|
||||
"nb": "Norwegisch (Bokmal)",
|
||||
"oc": "Okzitanisch",
|
||||
"pl": "Polnisch",
|
||||
@@ -22,6 +22,6 @@
|
||||
"sl": "Slowenisch",
|
||||
"sv": "Schwedisch",
|
||||
"tr": "Türkisch",
|
||||
"vi": "",
|
||||
"vi": "Vietnamesisch",
|
||||
"zhCN": "Chinesisch (China)"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"af": "Africano",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalán",
|
||||
"cs": "Czech",
|
||||
"cs": "Checo",
|
||||
"de": "Alemán",
|
||||
"el": "Griego",
|
||||
"enGB": "Inglés (Reino Unido)",
|
||||
@@ -14,7 +14,7 @@
|
||||
"fr": "Francés",
|
||||
"frCA": "Franco (Canadiense)",
|
||||
"hr": "Croata",
|
||||
"hu": "",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Armenio",
|
||||
"it": "Italiano",
|
||||
"ja": "Jopones",
|
||||
@@ -28,5 +28,5 @@
|
||||
"tr": "Turco",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chino (China)",
|
||||
"zhTW": "Chino (Taiwán)\"msgstr \""
|
||||
"zhTW": "Chino (Taiwan)"
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"en": "English",
|
||||
"af": "Afrikaans",
|
||||
"en": "Inglés",
|
||||
"af": "Africano",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalán",
|
||||
"cs": "Checoslovaco",
|
||||
"cs": "Checo",
|
||||
"de": "Alemán",
|
||||
"el": "Griego",
|
||||
"enGB": "Inglés",
|
||||
@@ -19,14 +19,14 @@
|
||||
"it": "Italiano",
|
||||
"ja": "Japonés",
|
||||
"ko": "Coreano",
|
||||
"nl": "Neerlandés",
|
||||
"nl": "Holandés",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polonés",
|
||||
"pl": "Polaco",
|
||||
"ptBR": "Portugués (Brasil)",
|
||||
"ru": "Ruso",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chino (China)",
|
||||
"zhTW": "Chino (Taiwan)\"msgstr \""
|
||||
"zhTW": "Chino (Taiwan)"
|
||||
}
|
||||
33
lang/languages-et.json
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
"en": "Inglise keel",
|
||||
"af": "Afrikaani keel",
|
||||
"bg": "Bulgaaria keel",
|
||||
"ca": "Katalaani keel",
|
||||
"cs": "Tšehhi keel",
|
||||
"de": "Saksa keel",
|
||||
"el": "Kreeka keel",
|
||||
"enGB": "Inglise keel (Ühendkuningriik)",
|
||||
"eo": "Esperanto keel",
|
||||
"es": "Hispaania keel",
|
||||
"esUS": "Hispaania keel (Ladina-Ameerika)",
|
||||
"et": "Eesti keel",
|
||||
"fi": "Soome keel",
|
||||
"fr": "Prantsuse keel",
|
||||
"frCA": "Prantsuse keel (Kanada)",
|
||||
"hr": "Horvaadi keel",
|
||||
"hu": "Ungari keel",
|
||||
"hy": "Armeenia keel",
|
||||
"it": "Itaalia keel",
|
||||
"ja": "Jaapani keel",
|
||||
"ko": "Korea keel",
|
||||
"nl": "Hollandi keel",
|
||||
"oc": "Oksitaani keel",
|
||||
"pl": "Poola keel",
|
||||
"ptBR": "Portigali keel (Brasiilia)",
|
||||
"ru": "Vene keel",
|
||||
"sv": "Roosi keel",
|
||||
"tr": "Türgi keel",
|
||||
"vi": "Vietnami keel",
|
||||
"zhCN": "Hiina keel (Hiina)",
|
||||
"zhTW": "Hiina keel (Tai)"
|
||||
}
|
||||
32
lang/languages-gl.json
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
"en": "Inglés",
|
||||
"af": "Afrikans",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalán",
|
||||
"cs": "Checo",
|
||||
"de": "Alemán",
|
||||
"el": "Grego",
|
||||
"enGB": "Inglés (RU)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Castelán",
|
||||
"esUS": "Español (Hispanoamérica)",
|
||||
"fi": "Finés",
|
||||
"fr": "Francés",
|
||||
"frCA": "Francés (Canadá)",
|
||||
"hr": "Croata",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Armenio",
|
||||
"it": "Italiano",
|
||||
"ja": "Xaponés",
|
||||
"ko": "Coreano",
|
||||
"nl": "Neerlandés",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polaco",
|
||||
"ptBR": "Portugués (Brasil)",
|
||||
"ru": "Ruso",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chinés (China)",
|
||||
"zhTW": "Chinés (Taiwan)"
|
||||
}
|
||||
@@ -28,5 +28,5 @@
|
||||
"tr": "Török",
|
||||
"vi": "Vietnámi",
|
||||
"zhCN": "Kínai (Kína)",
|
||||
"zhTW": "Kínai (Tajvan)\"msgstr \""
|
||||
"zhTW": "Kínai (Tajvan)"
|
||||
}
|
||||
34
lang/languages-is.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"en": "Enska",
|
||||
"af": "Afríkanska",
|
||||
"bg": "Búlgarska",
|
||||
"ca": "Katalónska",
|
||||
"cs": "Tékkneska",
|
||||
"da": "Danska",
|
||||
"de": "Þýska",
|
||||
"el": "Gríska",
|
||||
"enGB": "Enska (Bretland)",
|
||||
"eo": "Esperantó",
|
||||
"es": "Spænska",
|
||||
"esUS": "Spænska (spænskumælandi Ameríka)",
|
||||
"et": "Eistneska",
|
||||
"fi": "Finnska",
|
||||
"fr": "Franska",
|
||||
"frCA": "Franska (kanadísk)",
|
||||
"hr": "Króatíska",
|
||||
"hu": "Ungverska",
|
||||
"hy": "Armenska",
|
||||
"it": "Ítalska",
|
||||
"ja": "Japanska",
|
||||
"ko": "Kóreska",
|
||||
"nl": "Hollenska",
|
||||
"oc": "Occitanska",
|
||||
"pl": "Pólska",
|
||||
"ptBR": "Portúgalska (Brasilía)",
|
||||
"ru": "Rússneska",
|
||||
"sv": "Sænska",
|
||||
"tr": "Tyrkneska",
|
||||
"vi": "Víetnamska",
|
||||
"zhCN": "Kínverska (Kína)",
|
||||
"zhTW": "Kínverska (Taívan)"
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"en": "Inglese",
|
||||
"af": "",
|
||||
"af": "Afrikaans",
|
||||
"az": "Azero",
|
||||
"bg": "Bulgaro",
|
||||
"cs": "Ceco",
|
||||
@@ -24,4 +24,4 @@
|
||||
"tr": "Turco",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Cinese (Cina)"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
{
|
||||
"en": "",
|
||||
"en": "Engelsk",
|
||||
"af": "",
|
||||
"az": "",
|
||||
"bg": "",
|
||||
"cs": "",
|
||||
"de": "",
|
||||
"el": "",
|
||||
"de": "Tysk",
|
||||
"el": "Gresk",
|
||||
"eo": "",
|
||||
"es": "",
|
||||
"fr": "",
|
||||
"es": "Spansk",
|
||||
"fr": "Fransk",
|
||||
"hy": "",
|
||||
"it": "",
|
||||
"ja": "",
|
||||
"ko": "",
|
||||
"it": "Italiensk",
|
||||
"ja": "Japansk",
|
||||
"ko": "Koreansk",
|
||||
"nb": "",
|
||||
"oc": "",
|
||||
"pl": "",
|
||||
"ptBR": "",
|
||||
"ru": "",
|
||||
"ru": "Russisk",
|
||||
"sk": "",
|
||||
"sl": "",
|
||||
"sv": "",
|
||||
"tr": "",
|
||||
"vi": "",
|
||||
"zhCN": ""
|
||||
}
|
||||
"sv": "Svensk",
|
||||
"tr": "Tyrkisk",
|
||||
"vi": "Vietnamesisk",
|
||||
"zhCN": "",
|
||||
"da": "Dansk"
|
||||
}
|
||||
|
||||
@@ -1,32 +1,32 @@
|
||||
{
|
||||
"en": "Angielski",
|
||||
"af": "Afrykanerski",
|
||||
"bg": "Bułgarski",
|
||||
"ca": "Kataloński",
|
||||
"cs": "Czeski",
|
||||
"de": "Niemiecki",
|
||||
"el": "Grecki",
|
||||
"enGB": "Angielski (Zjednoczone Królestwo)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Hiszpański",
|
||||
"esUS": "Hiszpański (Ameryka Łacińska)",
|
||||
"fi": "Fiński",
|
||||
"fr": "Francuski",
|
||||
"frCA": "Francuski (kanadyjski)",
|
||||
"hr": "Chorwacki",
|
||||
"hu": "Węgierski",
|
||||
"hy": "Ormiański",
|
||||
"it": "Włoski",
|
||||
"ja": "Japoński",
|
||||
"ko": "Koreański",
|
||||
"nl": "Holenderski",
|
||||
"oc": "Oksytański",
|
||||
"pl": "Polski",
|
||||
"ptBR": "Portugalski (brazylijski)",
|
||||
"ru": "Rosyjski",
|
||||
"sv": "Szwedzki",
|
||||
"tr": "Turecki",
|
||||
"vi": "Wietnamski",
|
||||
"zhCN": "Chiński (Chiny)",
|
||||
"zhTW": "Chiński (Tajwan)\"msgstr \""
|
||||
"en": "angielski",
|
||||
"af": "afrykanerski",
|
||||
"bg": "bułgarski",
|
||||
"ca": "kataloński",
|
||||
"cs": "czeski",
|
||||
"de": "niemiecki",
|
||||
"el": "grecki",
|
||||
"enGB": "angielski (Zjednoczone Królestwo)",
|
||||
"eo": "esperanto",
|
||||
"es": "hiszpański",
|
||||
"esUS": "hiszpański (Ameryka Łacińska)",
|
||||
"fi": "fiński",
|
||||
"fr": "francuski",
|
||||
"frCA": "francuski (kanadyjski)",
|
||||
"hr": "chorwacki",
|
||||
"hu": "węgierski",
|
||||
"hy": "ormiański",
|
||||
"it": "włoski",
|
||||
"ja": "japoński",
|
||||
"ko": "koreański",
|
||||
"nl": "holenderski",
|
||||
"oc": "oksytański",
|
||||
"pl": "polski",
|
||||
"ptBR": "portugalski (brazylijski)",
|
||||
"ru": "rosyjski",
|
||||
"sv": "szwedzki",
|
||||
"tr": "turecki",
|
||||
"vi": "wietnamski",
|
||||
"zhCN": "chiński (Chiny)",
|
||||
"zhTW": "chiński (Tajwan)"
|
||||
}
|
||||
@@ -28,5 +28,5 @@
|
||||
"tr": "Turco",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chinês (China)",
|
||||
"zhTW": "Chinês (Taiwan)\"msgstr \""
|
||||
"zhTW": "Chinês (Taiwan)"
|
||||
}
|
||||
34
lang/languages-sc.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"en": "Inglesu",
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bùlgaru",
|
||||
"ca": "Catalanu",
|
||||
"cs": "Tzecu",
|
||||
"da": "Danesu",
|
||||
"de": "Tedescu",
|
||||
"el": "Gregu",
|
||||
"enGB": "Inglesu (Rennu Unidu)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Castillianu",
|
||||
"esUS": "Castillianu (Amèrica de su Sud)",
|
||||
"fi": "Finlandesu",
|
||||
"fr": "Frantzesu",
|
||||
"frCA": "Frantzesu (Canadesu)",
|
||||
"hr": "Croatu",
|
||||
"hu": "Ungheresu",
|
||||
"hy": "Armenu",
|
||||
"it": "Italianu",
|
||||
"ja": "Giaponesu",
|
||||
"ko": "Coreanu",
|
||||
"nl": "Olandesu",
|
||||
"oc": "Otzitanu",
|
||||
"pl": "Polacu",
|
||||
"ptBR": "Portughesu (Brasile)",
|
||||
"ru": "Russu",
|
||||
"sc": "Sardu",
|
||||
"sv": "Isvedesu",
|
||||
"tr": "Turcu",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Tzinesu (Tzina)",
|
||||
"zhTW": "Tzinesu (Taiwan)"
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
{
|
||||
"en": "İngilizce",
|
||||
"af": "",
|
||||
"af": "Afrikanca",
|
||||
"az": "",
|
||||
"bg": "Bulgarca",
|
||||
"cs": "",
|
||||
"cs": "Çekçe",
|
||||
"de": "Almanca",
|
||||
"el": "",
|
||||
"el": "Yunanca",
|
||||
"eo": "Esperanto",
|
||||
"es": "İspanyolca",
|
||||
"fr": "Fransızca",
|
||||
"hy": "Ermenice",
|
||||
"it": "İtalyanca",
|
||||
"ja": "",
|
||||
"ko": "",
|
||||
"ja": "Japonca",
|
||||
"ko": "Korece",
|
||||
"nb": "Norveççe Bokmal",
|
||||
"oc": "Oksitan dili",
|
||||
"pl": "Lehçe",
|
||||
@@ -22,6 +22,17 @@
|
||||
"sl": "Slovence",
|
||||
"sv": "Isveççe",
|
||||
"tr": "Türkçe",
|
||||
"vi": "",
|
||||
"zhCN": "Çince (Tayvan)"
|
||||
}
|
||||
"vi": "Vietnamca",
|
||||
"zhCN": "Çince (Tayvan)",
|
||||
"zhTW": "Çince (Tayvan)",
|
||||
"nl": "Flemenkçe",
|
||||
"hu": "Macarca",
|
||||
"hr": "Hırvatça",
|
||||
"frCA": "Fransızca (Kanada)",
|
||||
"fi": "Fince",
|
||||
"et": "Estonca",
|
||||
"esUS": "İspanyolca (Latin Amerika)",
|
||||
"enGB": "İngilizce (Birleşik Krallık)",
|
||||
"da": "Danca",
|
||||
"ca": "Katalanca"
|
||||
}
|
||||
|
||||
@@ -28,5 +28,5 @@
|
||||
"tr": "Turkish",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "中文 简体 (中国)",
|
||||
"zhTW": "中文 正體 (台灣)\"msgstr \""
|
||||
"zhTW": "中文 正體 (台灣)"
|
||||
}
|
||||
@@ -4,12 +4,14 @@
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
"da": "Danish",
|
||||
"de": "German",
|
||||
"el": "Greek",
|
||||
"enGB": "English (United Kingdom)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanish",
|
||||
"esUS": "Spanish (Latin America)",
|
||||
"et": "Estonian",
|
||||
"fi": "Finnish",
|
||||
"fr": "French",
|
||||
"frCA": "French (Canadian)",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
"disabled": "Не можете да каните хора.",
|
||||
"failedToAdd": "Неуспешно добавяне на участници",
|
||||
"footerText": "Изходящите разговори не са разрешени.",
|
||||
"loading": "Търсене на хора и телефонни номера.",
|
||||
"loading": "Търсене на хора и телефонни номера",
|
||||
"loadingNumber": "Валидиране на номера",
|
||||
"loadingPeople": "Търсене на хора",
|
||||
"noResults": "Няма резултати",
|
||||
@@ -72,13 +72,17 @@
|
||||
"DISCONNECTED": "Изключен",
|
||||
"DISCONNECTING": "Прекъсване на връзката",
|
||||
"ERROR": "Грешка",
|
||||
"RECONNECTING": "Появи се проблем с мрежата. Връзваме се наново..."
|
||||
"RECONNECTING": "Появи се проблем с мрежата. Връзваме се наново...",
|
||||
"LOW_BANDWIDTH": "Виеото на {{displayName}} беше изключено поради слаба Интернет връзка",
|
||||
"GOT_SESSION_ID": "Отваряне на сесията...Завърши",
|
||||
"GET_SESSION_ID_ERROR": "Грешка при отваряне на сесията: {{code}}",
|
||||
"FETCH_SESSION_ID": "Отваряне на сесия..."
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Адрес:",
|
||||
"bandwidth": "Предполагаема скорост:",
|
||||
"bitrate": "Скорост:",
|
||||
"bridgeCount": "Брой сървъри:",
|
||||
"bridgeCount": "Брой сървъри: ",
|
||||
"connectedTo": "Свързан към:",
|
||||
"framerate": "Кадри в секунда:",
|
||||
"less": "Скриване",
|
||||
@@ -196,24 +200,24 @@
|
||||
"maxUsersLimitReachedTitle": "Достигнат е лимита за максимален брой участници",
|
||||
"micConstraintFailedError": "Микрофонът Ви не покрива някои от изискванията.",
|
||||
"micNotFoundError": "Не е открит микрофон.",
|
||||
"micNotSendingData": "Пуснете микрофона си от системните настройки на компютъра ви.",
|
||||
"micNotSendingData": "Пуснете микрофона си от системните настройки на компютъра ви",
|
||||
"micNotSendingDataTitle": "Микрофона ви е спрян от системните настройки",
|
||||
"micPermissionDeniedError": "Не сте дали разрешение за използване на микрофона. Ще можете да се присъедините в беседата, но другите няма да Ви чуват. Използвайте бутона с камерата в адресната лента, за да оправите това.",
|
||||
"micUnknownError": "Невъзможен достъп до микрофона по неясна причина.",
|
||||
"muteParticipantBody": "Вие няма да можете да спрете заглушаването на участника, но той ще може да го направи по всяко време.",
|
||||
"muteParticipantButton": "Изключи микрофона",
|
||||
"muteParticipantDialog": "Сигурни ли сте че искате да заглушите този участник? Няма да можете да пуснете обратно звука му, но участника ще може да направи това сам.",
|
||||
"muteParticipantDialog": "Сигурни ли сте че искате да заглушите този участник? Няма да можете да пуснете обратно звука му, но участникът ще може да направи това сам.",
|
||||
"muteParticipantTitle": "Спиране звука на участник?",
|
||||
"Ok": "Готово",
|
||||
"passwordLabel": "Парола",
|
||||
"passwordLabel": "Тази среща е заключена. Моля въведете $t(lockRoomPassword) за да влезнете.",
|
||||
"passwordNotSupported": "Задаването на $t(lockRoomPassword) за срещата не се поддържа.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) не се поддържа",
|
||||
"passwordRequired": "Изисква се $t(lockRoomPassword) ",
|
||||
"passwordRequired": "Изисква се $t(lockRoomPassword)",
|
||||
"popupError": "Браузърът Ви блокира изскачащите прозорци от този уеб сайт. Моля, разрешете изскачащите прозорци от настройките за сигурност на браузъра си и след това опитайте отново.",
|
||||
"popupErrorTitle": "Блокиран изскачащ прозорец",
|
||||
"recording": "Запис",
|
||||
"recordingDisabledForGuestTooltip": "Гостите не могат да стартират запис",
|
||||
"recordingDisabledTooltip": "Стартирането на запис е спряно",
|
||||
"recordingDisabledForGuestTooltip": "Гостите не могат да стартират запис.",
|
||||
"recordingDisabledTooltip": "Стартирането на запис е спряно.",
|
||||
"rejoinNow": "Повторно присъединяване сега",
|
||||
"remoteControlAllowedMessage": "{{user}} прие заявката Ви за отдалечено управление!",
|
||||
"remoteControlDeniedMessage": "{{user}} отказа заявката Ви за отдалечено управление!",
|
||||
@@ -231,7 +235,7 @@
|
||||
"retry": "Повторен опит",
|
||||
"screenSharingFailedToInstall": "Опа! Разширението за споделяне на екрана не успя да се инсталира.",
|
||||
"screenSharingFailedToInstallTitle": "Разширението за споделяне на екрана не успя да се инсталира",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Нещо се обърка докато се опитвахме да споделим екрана. Моля уверете се че сте дали права за това.",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Нещо се обърка докато се опитвахме да споделим екрана. Моля уверете се че сте дали права за това. ",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Упс! Не успяхме да стартираме споделянето на екрана!",
|
||||
"screenSharingPermissionDeniedError": "Опа! Нещо се обърка с разрешенията на разширението за споделяне на екрана. Моля, презаредете и опитайте отново.",
|
||||
"sendPrivateMessage": "Наскоро получихте лично съобщение. Искате да отговорите на това съобшение или да изпратите до всички?",
|
||||
@@ -266,7 +270,14 @@
|
||||
"WaitForHostMsgWOk": "Конференцията <b>{{room}}</b> все още не е започнала. Ако сте домакинът тогава натиснете бутона за да се идентифицирате. В противен случай изчакайте докато домакинът пристигне.",
|
||||
"WaitingForHost": "Чакаме домакина ...",
|
||||
"Yes": "Да",
|
||||
"yourEntireScreen": "Целия екран"
|
||||
"yourEntireScreen": "Целия екран",
|
||||
"screenSharingAudio": "Сподели и звука",
|
||||
"muteEveryoneStartMuted": "Всички да влизат без звук",
|
||||
"muteEveryoneSelf": "себе си",
|
||||
"muteEveryoneTitle": "Заглуши всички?",
|
||||
"muteEveryoneDialog": "Сигурни ли сте, че искате да заглушите всички? Няма да можете да пуснете звука им отново, но участниците ще могат да направят това сами.",
|
||||
"muteEveryoneElseTitle": "Заглушете всички освен {{whom}}?",
|
||||
"muteEveryoneElseDialog": "След като заглушите някой, няма да можете да пуснете обратно звука му, но участникът ще може да направи това сам."
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "в момента е {{status}}"
|
||||
@@ -279,7 +290,7 @@
|
||||
"bad": "Лошо",
|
||||
"detailsLabel": "Разкажете ни повече.",
|
||||
"good": "Добра",
|
||||
"rateExperience": "Моля, оценете качеството на срещата.",
|
||||
"rateExperience": "Моля, оценете качеството на срещата",
|
||||
"veryBad": "Много лошо",
|
||||
"veryGood": "Много добра"
|
||||
},
|
||||
@@ -298,7 +309,7 @@
|
||||
"country": "Страна",
|
||||
"dialANumber": "За влизане в срещата, наберете един от изброените номера и въведете кода.",
|
||||
"dialInConferenceID": "Код:",
|
||||
"dialInNotSupported": "Съжаляваме, обаждането в момента не се поддържа. ",
|
||||
"dialInNotSupported": "Съжаляваме, обаждането в момента не се поддържа.",
|
||||
"dialInNumber": "Тел:",
|
||||
"dialInSummaryError": "Проблем при достъпа на информация за опциите за влизане през телефон. Моля опитайте отново по-късно.",
|
||||
"dialInTollFree": "Безплатен",
|
||||
@@ -353,7 +364,7 @@
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Работим върху това да освободим ресурси за излъчване. Моля, опитайте отново след няколко минути.",
|
||||
"busyTitle": "Всички излъчватели в момента са заети.",
|
||||
"busyTitle": "Всички излъчватели в момента са заети",
|
||||
"changeSignIn": "Смяна на акаунти.",
|
||||
"choose": "Изберете предаване на живо",
|
||||
"chooseCTA": "Изберете опция за предаване. Влезли сте като {{email}}.",
|
||||
@@ -379,7 +390,9 @@
|
||||
"signOut": "Излизане",
|
||||
"start": "Започни излъчване на живо",
|
||||
"streamIdHelp": "Какво е това?",
|
||||
"unavailableTitle": "Излъчването на живо е недостъпно"
|
||||
"unavailableTitle": "Излъчването на живо е недостъпно",
|
||||
"googlePrivacyPolicy": "Политика за поверителност на Google",
|
||||
"youtubeTerms": "Условия за ползване на YouTube"
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -437,7 +450,7 @@
|
||||
"somebody": "Някой",
|
||||
"startSilentTitle": "Влязохте с опция да не чувате аудио!",
|
||||
"startSilentDescription": "Влезте повторно за да пуснете звука",
|
||||
"suboptimalBrowserWarning": "Опасяваме се, че няма да можете да се насладите на срещата. Работим по въпроса, междувременно използвайте някой от <a href='static/recommendedBrowsers.html' target='_blank'>напълно поддържаните браузъри</a>.",
|
||||
"suboptimalBrowserWarning": "Опасяваме се, че няма да можете да се насладите на срещата. Работим по въпроса, междувременно използвайте някой от <a href='static/recommendedBrowsers.html' target='_blank'>напълно поддържаните браузъри</a>.",
|
||||
"suboptimalExperienceTitle": "Внимание",
|
||||
"unmute": "Пускане на микрофона",
|
||||
"newDeviceCameraTitle": "Засечена е нова камера",
|
||||
@@ -476,7 +489,7 @@
|
||||
"busyTitle": "Всички възможности за запис в момента са заети",
|
||||
"error": "Грешка при опит за запис. Моля опитайте отново.",
|
||||
"expandedOff": "Записът спря",
|
||||
"expandedOn": "Срещата се записва в момента",
|
||||
"expandedOn": "Срещата се записва в момента.",
|
||||
"expandedPending": "Записът започва...",
|
||||
"failedToStart": "Неуспешен опит за записване",
|
||||
"fileSharingdescription": "Споделете записа с участниците в срещата",
|
||||
@@ -519,7 +532,9 @@
|
||||
"selectMic": "Микрофон",
|
||||
"startAudioMuted": "Всички започват заглушени",
|
||||
"startVideoMuted": "Всички започват скрити",
|
||||
"title": "Настройки"
|
||||
"title": "Настройки",
|
||||
"speakers": "Говорители",
|
||||
"microphones": "Микрофони"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Разширени",
|
||||
@@ -598,7 +613,10 @@
|
||||
"tileView": "Превключване на изглед галерия",
|
||||
"toggleCamera": "Пускане/спиране на камера",
|
||||
"videomute": "Пускане/спиране на видеото",
|
||||
"videoblur": "Пускане/спиране на замъгляване на видеото"
|
||||
"videoblur": "Пускане/спиране на замъгляване на видеото",
|
||||
"toggleFilmstrip": "Превключи видео миниатюрите",
|
||||
"muteEveryone": "Заглуши всички",
|
||||
"moreOptions": "Покажи повече опции"
|
||||
},
|
||||
"addPeople": "Добавяне на участници в разговора",
|
||||
"audioOnlyOff": "Спиране режима с нисък трафик",
|
||||
@@ -626,7 +644,7 @@
|
||||
"mute": "Спиране/пускане на микрофона",
|
||||
"noAudioSignalTitle": "Няма сигнал идващ от микрофона!",
|
||||
"noAudioSignalDesc": "Ако не сте спрели звука на устройството от системните настройки, сменете с друго устройство.",
|
||||
"noAudioSignalDescSuggestion": "Ако не сте спрели звука на устройството от системните настройки, използвайте някое от следните устройства:",
|
||||
"noAudioSignalDescSuggestion": "Ако не сте спрели звука на устройството от системните настройки, използвайте някое от предложените устройства.",
|
||||
"openChat": "Отвори съобщенията",
|
||||
"pip": "Пусни Картина-в-Картина",
|
||||
"privateMessage": "Изпрати лично съобщение",
|
||||
@@ -648,7 +666,13 @@
|
||||
"toggleCamera": "Пускане/спиране на камера",
|
||||
"videomute": "Пускане/спиране на камерата",
|
||||
"startvideoblur": "Замъгли фона ми",
|
||||
"stopvideoblur": "Спиране замъгляването на фона"
|
||||
"stopvideoblur": "Спиране замъгляването на фона",
|
||||
"noisyAudioInputDesc": "Изглежда доста шум идва от микрофона ви, заглушете го или сменете устройството.",
|
||||
"noisyAudioInputTitle": "Изглежда е шумно около вас!",
|
||||
"noAudioSignalDialInLinkDesc": "Номера за обаждане",
|
||||
"noAudioSignalDialInDesc": "Може да влезнете чрез обаждане на:",
|
||||
"muteEveryone": "Заглуши всички",
|
||||
"moreOptions": "Повече опции"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Пускане / Спиране на субтитри",
|
||||
@@ -714,7 +738,8 @@
|
||||
"muted": "Изключен микрофон",
|
||||
"remoteControl": "Отдалечено управление",
|
||||
"show": "Покажи на главния екран",
|
||||
"videomute": "Участник е спрял камерата си"
|
||||
"videomute": "Участник е спрял камерата си",
|
||||
"domuteOthers": "Заглушете всички останали"
|
||||
},
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
@@ -744,6 +769,19 @@
|
||||
"roomnameHint": "Въведете името или връзката на стаята в която искате да влезете. Също може да си измислите име. Само го споделете с някой, за да може и той да въведе същото име за да се срещнете.",
|
||||
"sendFeedback": "Изпращане на отзиви",
|
||||
"terms": "Условия",
|
||||
"title": "Сигурна, с много възможности, и напълно безплатна платформа за видео конференции"
|
||||
"title": "Сигурна, с много възможности, и напълно безплатна платформа за видео конференции",
|
||||
"getHelp": "Търсене на помощ"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Място за помощ"
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"youAreAlone": "Вие сте сами в срещата",
|
||||
"button": "Поканете участници"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"dontShowAgain": "Не показвай повече",
|
||||
"buttonText": "Инсталирайте разширението за Chrome",
|
||||
"installExtensionText": "Инсталирайте разширенията за Google Calendar и Office 365"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,249 +1,269 @@
|
||||
{
|
||||
"addPeople": {
|
||||
"add": "",
|
||||
"countryNotSupported": "",
|
||||
"countryReminder": "",
|
||||
"disabled": "",
|
||||
"failedToAdd": "",
|
||||
"footerText": "",
|
||||
"loading": "",
|
||||
"loadingNumber": "",
|
||||
"loadingPeople": "",
|
||||
"noResults": "",
|
||||
"noValidNumbers": "",
|
||||
"searchNumbers": "",
|
||||
"searchPeople": "",
|
||||
"searchPeopleAndNumbers": "",
|
||||
"telephone": "",
|
||||
"title": ""
|
||||
"add": "Pozvat",
|
||||
"countryNotSupported": "Toto místo zatím nepodporujeme.",
|
||||
"countryReminder": "Voláte mimo USA? Nezapomeňte začít kódem své země!",
|
||||
"disabled": "Nemůžete pozvat lidi.",
|
||||
"failedToAdd": "Nepodařilo se přidat účastníky",
|
||||
"footerText": "Vytáčení je zakázáno.",
|
||||
"loading": "Hledání lidí a telefonních čísel",
|
||||
"loadingNumber": "Ověření telefonního čísla",
|
||||
"loadingPeople": "Hledání lidí pro pozvání",
|
||||
"noResults": "Žádné odpovídající výsledky vyhledávání",
|
||||
"noValidNumbers": "Zadejte telefonní číslo",
|
||||
"searchNumbers": "Přidat telefonní čísla",
|
||||
"searchPeople": "Hledat lidi",
|
||||
"searchPeopleAndNumbers": "Hledat lidi nebo přidat jejich telefonní čísla",
|
||||
"telephone": "Telefonní číslo: {{number}}",
|
||||
"title": "Pozvěte lidi na toto setkání"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"headphones": "Sluchátka",
|
||||
"phone": "Telefon",
|
||||
"speaker": "Řečník"
|
||||
"speaker": "Reproduktor",
|
||||
"none": "Nejsou k dispozici žádná zvuková zařízení"
|
||||
},
|
||||
"audioOnly": {
|
||||
"audioOnly": "Jen zvuk"
|
||||
"audioOnly": "Nízká přenosová rychlost"
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "",
|
||||
"confirmAddLink": "",
|
||||
"addMeetingURL": "Přidejte odkaz na schůzku",
|
||||
"confirmAddLink": "Chcete k této události přidat odkaz Jitsi?",
|
||||
"error": {
|
||||
"appConfiguration": "",
|
||||
"generic": "",
|
||||
"notSignedIn": ""
|
||||
"appConfiguration": "Integrace kalendáře není správně nakonfigurována.",
|
||||
"generic": "Došlo k chybě. Zkontrolujte nastavení kalendáře nebo zkuste aktualizovat kalendář.",
|
||||
"notSignedIn": "Při ověřování k zobrazení kalendářových událostí došlo k chybě. Zkontrolujte prosím nastavení kalendáře a zkuste se znovu přihlásit."
|
||||
},
|
||||
"join": "",
|
||||
"joinTooltip": "",
|
||||
"nextMeeting": "",
|
||||
"noEvents": "",
|
||||
"ongoingMeeting": "",
|
||||
"permissionButton": "",
|
||||
"permissionMessage": "",
|
||||
"refresh": "",
|
||||
"today": ""
|
||||
"join": "Připojit se",
|
||||
"joinTooltip": "Připojit se k videohovoru",
|
||||
"nextMeeting": "další videohovor",
|
||||
"noEvents": "Nejsou naplánovány žádné události.",
|
||||
"ongoingMeeting": "současný videohovor",
|
||||
"permissionButton": "Otevřít nastavení",
|
||||
"permissionMessage": "K zobrazení videohovorů v aplikaci je potřeba oprávnění Kalendář.",
|
||||
"refresh": "Obnovit kalendář",
|
||||
"today": "Dnes"
|
||||
},
|
||||
"chat": {
|
||||
"error": "",
|
||||
"messagebox": "",
|
||||
"error": "Chyba: vaše zpráva nebyla odeslána. Důvod: {{error}}",
|
||||
"messagebox": "Napište zprávu",
|
||||
"nickname": {
|
||||
"popover": "Zvolte si přezdívku",
|
||||
"title": ""
|
||||
"title": "K zahájení chatu vložte přezdívku"
|
||||
},
|
||||
"title": ""
|
||||
"title": "Chat",
|
||||
"fieldPlaceHolder": "Zde napište svou zprávu",
|
||||
"messageTo": "Soukromá zpráva pro {{recipient}}",
|
||||
"you": "vy",
|
||||
"privateNotice": "Soukromá zpráva pro {{recipient}}",
|
||||
"noMessagesMessage": "V tomto videohovoru ještě nejsou žádné zprávy. Začněte konverzaci!"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": ""
|
||||
"joiningRoom": "Probíhá připojování k videohovoru..."
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "",
|
||||
"AUTHENTICATING": "Ověřit",
|
||||
"AUTHFAIL": "",
|
||||
"CONNECTED": "",
|
||||
"CONNECTING": "Připojení:",
|
||||
"CONNFAIL": "",
|
||||
"DISCONNECTED": "odpojeno",
|
||||
"DISCONNECTING": "odpojeno",
|
||||
"ERROR": "",
|
||||
"RECONNECTING": ""
|
||||
"ATTACHED": "Přiložený",
|
||||
"AUTHENTICATING": "Ověřování",
|
||||
"AUTHFAIL": "Ověřování selhalo",
|
||||
"CONNECTED": "Připojeno",
|
||||
"CONNECTING": "Připojování",
|
||||
"CONNFAIL": "Připojení selhalo",
|
||||
"DISCONNECTED": "Odpojeno",
|
||||
"DISCONNECTING": "Odpojování",
|
||||
"ERROR": "Chyba",
|
||||
"RECONNECTING": "",
|
||||
"LOW_BANDWIDTH": "Video pro {{displayName}} bylo vypnuto pro snížení přenosové rychlosti",
|
||||
"GOT_SESSION_ID": "Získávání session-id... Hotovo",
|
||||
"GET_SESSION_ID_ERROR": "Chyba při získávání session-id: {{code}}",
|
||||
"FETCH_SESSION_ID": "Získává se session-id..."
|
||||
},
|
||||
"\u0005connection": {},
|
||||
"connectionindicator": {
|
||||
"address": "Adresa:",
|
||||
"bandwidth": "Odhadovaná šířka pásma:",
|
||||
"bitrate": "Přenosová rychlost:",
|
||||
"bridgeCount": "",
|
||||
"connectedTo": "",
|
||||
"bridgeCount": "Počet serverů: ",
|
||||
"connectedTo": "Připojeno k:",
|
||||
"framerate": "Rychlost snímkování:",
|
||||
"less": "Zobrazit méně",
|
||||
"localaddress": "Místní adresa:",
|
||||
"localaddress_0": "Místní adresa:",
|
||||
"localaddress_1": "Místní adresy:",
|
||||
"localaddress_2": "Místní adresy:",
|
||||
"localaddress_plural_2": "Místní adresy:",
|
||||
"localaddress_plural_5": "Místních adres:",
|
||||
"localport": "Místní port:",
|
||||
"localport_0": "Místní port:",
|
||||
"localport_1": "Místní porty:",
|
||||
"localport_2": "Místní porty:",
|
||||
"localport_plural_2": "Místní porty:",
|
||||
"localport_plural_5": "Místních portů:",
|
||||
"more": "Zobrazit více",
|
||||
"packetloss": "Ztracené pakety:",
|
||||
"quality": {
|
||||
"good": "",
|
||||
"good": "Dobré",
|
||||
"inactive": "Neaktivní",
|
||||
"lost": "Ztraceno",
|
||||
"nonoptimal": "Není optimální",
|
||||
"poor": "Slabý"
|
||||
},
|
||||
"remoteaddress": "Vzdálená adresa:",
|
||||
"remoteaddress_0": "Vzdálená adresa:",
|
||||
"remoteaddress_1": "Vzdálené adresy:",
|
||||
"remoteaddress_2": "Vzdálené adresy:",
|
||||
"remoteaddress_plural_2": "Vzdálené adresy:",
|
||||
"remoteaddress_plural_5": "Vzdálených adres:",
|
||||
"remoteport": "Vzdálený port:",
|
||||
"remoteport_0": "Vzdálený port:",
|
||||
"remoteport_1": "Vzdálené porty:",
|
||||
"remoteport_2": "Vzdálené porty:",
|
||||
"remoteport_plural_2": "Vzdálené porty:",
|
||||
"remoteport_plural_5": "Vzdálených portů:",
|
||||
"resolution": "Rozlišení:",
|
||||
"status": "Připojení:",
|
||||
"transport": "Přenos:",
|
||||
"transport_0": "Přenos:",
|
||||
"transport_1": "Přenosy:",
|
||||
"transport_2": "Přenosy:",
|
||||
"transport_plural_2": "Přenosy:",
|
||||
"transport_plural_5": "Přenosů:",
|
||||
"turn": "(otočit)"
|
||||
"turn": "(otočit)",
|
||||
"e2e_rtt": "E2E RTT:"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "",
|
||||
"today": "",
|
||||
"yesterday": ""
|
||||
"earlier": "Dříve",
|
||||
"today": "Dnes",
|
||||
"yesterday": "Včera"
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "",
|
||||
"description": "",
|
||||
"descriptionWithoutWeb": "",
|
||||
"appNotInstalled": "Pro připojení k tomuto videohovoru potřebujete mít na svém telefonu aplikaci {{app}}.",
|
||||
"description": "Nic se nestalo? Zkusili jsme spustit videohovor v desktopové aplikaci {{app}}. Zkuste to znovu nebo spusťte webovou aplikaci {{app}}.",
|
||||
"descriptionWithoutWeb": "Nic se nestalo? Zkusili jsme spustit videohovor v desktopové aplikaci {{app}}.",
|
||||
"downloadApp": "Stažení aplikace",
|
||||
"launchWebButton": "",
|
||||
"openApp": "",
|
||||
"title": "",
|
||||
"tryAgainButton": ""
|
||||
"launchWebButton": "Spustit na webu",
|
||||
"openApp": "Pokračovat do aplikace",
|
||||
"title": "Spustit videohovor v {{app}}...",
|
||||
"tryAgainButton": "Zkusit znovu na desktopu"
|
||||
},
|
||||
"defaultLink": "např. {{url}}",
|
||||
"deviceError": {
|
||||
"cameraError": "",
|
||||
"cameraPermission": "",
|
||||
"microphoneError": "",
|
||||
"microphonePermission": ""
|
||||
"cameraError": "Chyba při přístupu ke kameře",
|
||||
"cameraPermission": "Aplikace nemá oprávnění přistupovat ke kameře",
|
||||
"microphoneError": "Chyba při přístupu k mikrofonu",
|
||||
"microphonePermission": "Aplikace nemá oprávnění přistupovat k mikrofonu"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"noPermission": "",
|
||||
"previewUnavailable": "",
|
||||
"selectADevice": "",
|
||||
"testAudio": ""
|
||||
"noPermission": "Oprávnění není uděleno",
|
||||
"previewUnavailable": "Náhled není dostupný",
|
||||
"selectADevice": "Zvolte zvukové zařízení",
|
||||
"testAudio": "Vyzkoušet zvuk"
|
||||
},
|
||||
"dialog": {
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": ""
|
||||
"liveStreaming": "Živý stream"
|
||||
},
|
||||
"allow": "Povolit",
|
||||
"alreadySharedVideoMsg": "",
|
||||
"alreadySharedVideoTitle": "",
|
||||
"applicationWindow": "",
|
||||
"Back": "",
|
||||
"cameraConstraintFailedError": "",
|
||||
"cameraNotFoundError": "",
|
||||
"cameraNotSendingData": "",
|
||||
"cameraNotSendingDataTitle": "",
|
||||
"cameraPermissionDeniedError": "",
|
||||
"cameraUnknownError": "",
|
||||
"cameraUnsupportedResolutionError": "",
|
||||
"alreadySharedVideoMsg": "Video už sdílí jiný účastník. Tato konference umožňuje sdílet jen jedno video současně.",
|
||||
"alreadySharedVideoTitle": "Je povoleno jen jedno sdílené video",
|
||||
"applicationWindow": "Okno aplikace",
|
||||
"Back": "Zpět",
|
||||
"cameraConstraintFailedError": "Vaše kamera nesplňuje některé požadované parametry.",
|
||||
"cameraNotFoundError": "Kamera nebyla nalezena.",
|
||||
"cameraNotSendingData": "Nelze přistupovat ke kameře. Zkontrolujte prosím, zda ji už nepoužívá jiná aplikace, vyberte jiné zařízení v nabídce nastavení nebo zkuste aplikaci znovu načíst.",
|
||||
"cameraNotSendingDataTitle": "Nelze přistupovat ke kameře",
|
||||
"cameraPermissionDeniedError": "Neudělili jste oprávnění k použití kamery. Můžete se sice připojit ke konferenci, ale ostatní vás neuvidí. Opravíte to stiskem tlačítka kamery v adresním řádku.",
|
||||
"cameraUnknownError": "Z neznámého důvodu nelze používat kameru.",
|
||||
"cameraUnsupportedResolutionError": "Vaše kamera nepodporuje požadované rozlišení obrazu.",
|
||||
"Cancel": "Storno",
|
||||
"close": "",
|
||||
"close": "Zavřít",
|
||||
"conferenceDisconnectMsg": "Možná byste měli zkontrolovat připojení k síti. Znovu se připojíte za {{seconds}} s...",
|
||||
"conferenceDisconnectTitle": "Byl jste odhlášen.",
|
||||
"conferenceReloadMsg": "Pokoušíme se to opravit. Znovu se připojíte za {{seconds}} s...",
|
||||
"conferenceReloadMsg": "Pokoušíme se to opravit. Znovu se připojíte za {{seconds}} s...",
|
||||
"conferenceReloadTitle": "Bohužel, něco se pokazilo.",
|
||||
"confirm": "",
|
||||
"confirmNo": "",
|
||||
"confirmYes": "",
|
||||
"confirm": "Potvrdit",
|
||||
"confirmNo": "Ne",
|
||||
"confirmYes": "Ano",
|
||||
"connectError": "Jejda! Něco se pokazilo a do konference se nepodařilo připojit.",
|
||||
"connectErrorWithMsg": "Jejda! Něco se pokazilo a do konference se nepodařilo připojit: {{msg}}",
|
||||
"connecting": "Připojení:",
|
||||
"connecting": "Připojení",
|
||||
"contactSupport": "Kontaktovat podporu",
|
||||
"copy": "Kopírovat",
|
||||
"dismiss": "OK",
|
||||
"displayNameRequired": "",
|
||||
"displayNameRequired": "Ahoj! Jak se jmenuješ?",
|
||||
"done": "Hotovo",
|
||||
"enterDisplayName": "",
|
||||
"error": "",
|
||||
"externalInstallationMsg": "",
|
||||
"externalInstallationTitle": "",
|
||||
"goToStore": "",
|
||||
"gracefulShutdown": "",
|
||||
"IamHost": "",
|
||||
"incorrectRoomLockPassword": "",
|
||||
"enterDisplayName": "Vložte prosím své jméno",
|
||||
"error": "Chyba",
|
||||
"externalInstallationMsg": "Je potřeba nainstalovat rozšíření pro sdílení plochy.",
|
||||
"externalInstallationTitle": "Požadováno rozšíření",
|
||||
"goToStore": "Jít do webového obchodu",
|
||||
"gracefulShutdown": "Naše služba je nyní mimo provoz kvůli údržbě. Zkuste to prosím znovu později.",
|
||||
"IamHost": "Jsem hostitel",
|
||||
"incorrectRoomLockPassword": "Chybné heslo",
|
||||
"incorrectPassword": "Uživatelské jméno nebo heslo není správně",
|
||||
"inlineInstallationMsg": "",
|
||||
"inlineInstallExtension": "",
|
||||
"inlineInstallationMsg": "Je potřeba nainstalovat rozšíření pro sdílení plochy.",
|
||||
"inlineInstallExtension": "Nainstalovat",
|
||||
"internalError": "Jejda! Něco se pokazilo. Objevila se následující chyba: {{error}}",
|
||||
"internalErrorTitle": "Vnitřní chyba",
|
||||
"kickMessage": "",
|
||||
"kickParticipantButton": "",
|
||||
"kickParticipantDialog": "",
|
||||
"kickParticipantTitle": "",
|
||||
"kickTitle": "",
|
||||
"liveStreaming": "",
|
||||
"liveStreamingDisabledForGuestTooltip": "",
|
||||
"kickMessage": "Pro více informací můžete kontaktovat {{participantDisplayName}}.",
|
||||
"kickParticipantButton": "Vyhodit",
|
||||
"kickParticipantDialog": "Opravdu chcete vyhodit tohoto účastníka?",
|
||||
"kickParticipantTitle": "Vyhodit tohoto účastníka?",
|
||||
"kickTitle": "Au! {{participantDisplayName}} vás vyhodil z videohovoru",
|
||||
"liveStreaming": "Živý streaming",
|
||||
"liveStreamingDisabledForGuestTooltip": "Hosté nemohou spustit živý streaming.",
|
||||
"liveStreamingDisabledTooltip": "",
|
||||
"lockMessage": "Konferenci se nepodařilo uzamknout.",
|
||||
"lockRoom": "",
|
||||
"lockRoom": "Přidat videohovor $t(lockRoomPasswordUppercase)",
|
||||
"lockTitle": "Zamknutí selhalo",
|
||||
"logoutQuestion": "Jste si jistí, že se chcete odhlásit a ukončit konferenci?",
|
||||
"logoutTitle": "Odhlásit",
|
||||
"maxUsersLimitReached": "",
|
||||
"maxUsersLimitReachedTitle": "",
|
||||
"micConstraintFailedError": "",
|
||||
"micNotFoundError": "",
|
||||
"micNotSendingData": "",
|
||||
"micNotSendingDataTitle": "",
|
||||
"micPermissionDeniedError": "",
|
||||
"micUnknownError": "",
|
||||
"maxUsersLimitReached": "Byl dosažen limit počtu účastníků. Konference je plná. Kontaktujte prosím vlastníka videohovoru nebo to zkuste znovu později!",
|
||||
"maxUsersLimitReachedTitle": "Dosažen limit počtu účastníků",
|
||||
"micConstraintFailedError": "Váš mikrofon nesplňuje některé požadované parametry.",
|
||||
"micNotFoundError": "Mikrofon nebyl nalezen.",
|
||||
"micNotSendingData": "Jít do nastavení počítače, zapnout mikrofon a nastavit jeho citlivost",
|
||||
"micNotSendingDataTitle": "Váš mikrofon je vypnutý v nastavení systému",
|
||||
"micPermissionDeniedError": "Neudělili jste oprávnění pro použití mikrofonu. Můžete se sice připojit ke konferenci, ale ostatní vás neuslyší. Opravíte to stiskem tlačítka kamery v adresním řádku.",
|
||||
"micUnknownError": "Z neznámého důvodu nelze použít mikrofon.",
|
||||
"muteParticipantBody": "",
|
||||
"muteParticipantButton": "Ztlumený zvuk",
|
||||
"muteParticipantDialog": "",
|
||||
"muteParticipantTitle": "",
|
||||
"muteParticipantTitle": "Umlčet tohoto účastníka?",
|
||||
"Ok": "Ok",
|
||||
"passwordLabel": "",
|
||||
"passwordNotSupported": "Nastavení hesla pro konferenci není podporováno.",
|
||||
"passwordNotSupportedTitle": "",
|
||||
"passwordRequired": "",
|
||||
"passwordNotSupported": "Nastavení konference $t(lockRoomPassword) není podporováno.",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) není podporováno",
|
||||
"passwordRequired": "Požadováno $t(lockRoomPasswordUppercase)",
|
||||
"popupError": "Váš prohlížeč blokuje vyskakovací okna. V nastavení zabezpečení prosím povolte vyskakování oken a zkuste to znovu.",
|
||||
"popupErrorTitle": "Vyskakovací okno je zablokované",
|
||||
"recording": "",
|
||||
"recordingDisabledForGuestTooltip": "",
|
||||
"recordingDisabledTooltip": "",
|
||||
"recording": "Záznam",
|
||||
"recordingDisabledForGuestTooltip": "Hosté nemohou spustit záznam.",
|
||||
"recordingDisabledTooltip": "Zahájení záznamu vypnuto.",
|
||||
"rejoinNow": "Znovu se připojit",
|
||||
"remoteControlAllowedMessage": "",
|
||||
"remoteControlDeniedMessage": "",
|
||||
"remoteControlErrorMessage": "",
|
||||
"remoteControlRequestMessage": "",
|
||||
"remoteControlShareScreenWarning": "",
|
||||
"remoteControlStopMessage": "",
|
||||
"remoteControlTitle": "",
|
||||
"remoteControlAllowedMessage": "{{user}} přijal(a) vaši žádost o dálkové ovládání!",
|
||||
"remoteControlDeniedMessage": "{{user}} odmítl(a) vaši žádost o dálkové ovládání!",
|
||||
"remoteControlErrorMessage": "Při požadavku na oprávnění k dálkového ovládání od {{user}} došlo k chybě!",
|
||||
"remoteControlRequestMessage": "Umožníte {{user}} dálkově ovládat váš počítač?",
|
||||
"remoteControlShareScreenWarning": "Nezapomeňte, že stiskem \"Povolit\" budete sdílet svou obrazovku!",
|
||||
"remoteControlStopMessage": "Relace dálkového ovládání skončila!",
|
||||
"remoteControlTitle": "Dálkové ovládání počítače",
|
||||
"Remove": "Odstranit",
|
||||
"removePassword": "",
|
||||
"removeSharedVideoMsg": "",
|
||||
"removeSharedVideoTitle": "",
|
||||
"reservationError": "",
|
||||
"reservationErrorMsg": "",
|
||||
"removePassword": "Odstranit $t(lockRoomPassword)",
|
||||
"removeSharedVideoMsg": "Opravdu chcete odstranit sdílené video?",
|
||||
"removeSharedVideoTitle": "Odstranit sdílené video",
|
||||
"reservationError": "Systémová chyba rezervace",
|
||||
"reservationErrorMsg": "Chyba: {{code}}, zpráva: {{msg}}",
|
||||
"retry": "Opakovat",
|
||||
"screenSharingFailedToInstall": "Doplněk pro sdílení obrazovky se nepodařilo nainstalovat",
|
||||
"screenSharingFailedToInstall": "Doplněk pro sdílení obrazovky se nepodařilo nainstalovat.",
|
||||
"screenSharingFailedToInstallTitle": "Doplněk pro sdílení obrazovky se nepodařilo nainstalovat",
|
||||
"screenSharingFirefoxPermissionDeniedError": "",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "",
|
||||
"screenSharingPermissionDeniedError": "",
|
||||
"serviceUnavailable": "",
|
||||
"serviceUnavailable": "Služba není dostupná",
|
||||
"sessTerminated": "Volání ukončeno",
|
||||
"Share": "Sdílet",
|
||||
"shareVideoLinkError": "Zadejte prosím správný odkaz na youtube video.",
|
||||
"shareVideoTitle": "Sdílet obraz",
|
||||
"shareYourScreen": "",
|
||||
"shareYourScreenDisabled": "",
|
||||
"shareYourScreenDisabledForGuest": "",
|
||||
"startLiveStreaming": "",
|
||||
"startRecording": "",
|
||||
"shareYourScreen": "Sdílet obrazovku",
|
||||
"shareYourScreenDisabled": "Sdílení obrazovky vypnuto.",
|
||||
"shareYourScreenDisabledForGuest": "Hosté nemohou sdílet obrazovku.",
|
||||
"startLiveStreaming": "Spustit živý stream",
|
||||
"startRecording": "Spustit záznam",
|
||||
"startRemoteControlErrorMessage": "",
|
||||
"stopLiveStreaming": "",
|
||||
"stopRecording": "",
|
||||
@@ -254,79 +274,85 @@
|
||||
"thankYou": "Děkujeme, že používáte {{appName}}!",
|
||||
"token": "token",
|
||||
"tokenAuthFailed": "Bohužel nemáte povoleno se k tomuto volání připojit.",
|
||||
"tokenAuthFailedTitle": "",
|
||||
"tokenAuthFailedTitle": "Ověření selhalo",
|
||||
"transcribing": "",
|
||||
"unlockRoom": "",
|
||||
"unlockRoom": "Odstranit videohovor $t(lockRoomPassword)",
|
||||
"userPassword": "uživatelské heslo",
|
||||
"WaitForHostMsg": "",
|
||||
"WaitForHostMsgWOk": "",
|
||||
"WaitingForHost": "",
|
||||
"Yes": "",
|
||||
"yourEntireScreen": ""
|
||||
"Yes": "Ano",
|
||||
"yourEntireScreen": "Celá vaše obrazovka",
|
||||
"sendPrivateMessageTitle": "Poslat soukromě?",
|
||||
"sendPrivateMessageOk": "Poslat soukromě",
|
||||
"sendPrivateMessageCancel": "Poslat do skupiny",
|
||||
"sendPrivateMessage": "Nedávno vám přišla soukromá zpráva. Chcete na ni odpovědět soukromě, nebo chcete poslat zprávu do skupiny?",
|
||||
"screenSharingAudio": "Sdílet zvuk",
|
||||
"muteEveryoneStartMuted": "Nyní jsou všichni umlčeni",
|
||||
"muteEveryoneTitle": "Umlčet všechny?",
|
||||
"muteEveryoneElseTitle": "Umlčet všechny kromě {{whom}}?"
|
||||
},
|
||||
"\u0005dialog": {},
|
||||
"dialOut": {
|
||||
"statusMessage": ""
|
||||
"statusMessage": "je nyní {{status}}"
|
||||
},
|
||||
"feedback": {
|
||||
"average": "",
|
||||
"bad": "",
|
||||
"detailsLabel": "",
|
||||
"good": "",
|
||||
"rateExperience": "",
|
||||
"veryBad": "",
|
||||
"veryGood": ""
|
||||
"average": "Průměrná",
|
||||
"bad": "Špatná",
|
||||
"detailsLabel": "Řekněte nám o tom víc.",
|
||||
"good": "Dobrá",
|
||||
"rateExperience": "Ohodnoťte svoji zkušenost s videohovorem",
|
||||
"veryBad": "Velmi špatná",
|
||||
"veryGood": "Velmi dobrá"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "",
|
||||
"audioCallTitle": "",
|
||||
"answer": "Odpovědět",
|
||||
"audioCallTitle": "Příchozí hovor",
|
||||
"decline": "OK",
|
||||
"productLabel": "",
|
||||
"videoCallTitle": ""
|
||||
"productLabel": "od Jitsi Meet",
|
||||
"videoCallTitle": "Příchozí videohovor"
|
||||
},
|
||||
"info": {
|
||||
"accessibilityLabel": "",
|
||||
"addPassword": "",
|
||||
"cancelPassword": "",
|
||||
"conferenceURL": "",
|
||||
"country": "",
|
||||
"dialANumber": "",
|
||||
"dialInConferenceID": "",
|
||||
"dialInNotSupported": "",
|
||||
"accessibilityLabel": "Více info",
|
||||
"addPassword": "Přidat $t(lockRoomPassword)",
|
||||
"cancelPassword": "Zrušit $t(lockRoomPassword)",
|
||||
"conferenceURL": "Odkaz:",
|
||||
"country": "Země",
|
||||
"dialANumber": "Pro připojení k videohovoru vytočte tato čísla a vložte PIN.",
|
||||
"dialInConferenceID": "PIN:",
|
||||
"dialInNotSupported": "Omlouváme se, ale vytáčení není nyní podporováno.",
|
||||
"dialInNumber": "",
|
||||
"dialInSummaryError": "",
|
||||
"dialInTollFree": "",
|
||||
"genericError": "",
|
||||
"inviteLiveStream": "",
|
||||
"invitePhone": "",
|
||||
"dialInTollFree": "Zdarma",
|
||||
"genericError": "Ups, něco se pokazilo.",
|
||||
"inviteLiveStream": "K zobrazení živého vysílání tohoto meetingu, klikněte na tento odkaz: {{url}}",
|
||||
"invitePhone": "Pro připojení telefonicky použijte: {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "",
|
||||
"inviteURLFirstPartGeneral": "",
|
||||
"inviteURLFirstPartGeneral": "Připojte se k meetingu.",
|
||||
"inviteURLFirstPartPersonal": "",
|
||||
"inviteURLSecondPart": "",
|
||||
"liveStreamURL": "",
|
||||
"moreNumbers": "",
|
||||
"noNumbers": "",
|
||||
"noPassword": "Hotovo",
|
||||
"noRoom": "",
|
||||
"numbers": "",
|
||||
"password": "",
|
||||
"liveStreamURL": "Živé vysílání:",
|
||||
"moreNumbers": "Více čísel",
|
||||
"noNumbers": "Žádná čísla pro připojení po telefonu.",
|
||||
"noPassword": "Bez hesla",
|
||||
"noRoom": "Nebyla vybrána místnost pro připojení po telefonu.",
|
||||
"numbers": "Čísla pro připojení telefonicky",
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"title": "Sdílet",
|
||||
"tooltip": "",
|
||||
"label": ""
|
||||
"tooltip": "Sdílet odkaz k tomuto meetingu",
|
||||
"label": "Informace o meetingu"
|
||||
},
|
||||
"\u0005info": {},
|
||||
"inviteDialog": {
|
||||
"alertText": "",
|
||||
"header": "",
|
||||
"searchCallOnlyPlaceholder": "",
|
||||
"searchPeopleOnlyPlaceholder": "",
|
||||
"searchPlaceholder": "",
|
||||
"send": ""
|
||||
"alertText": "Pozvání některých účastníků selhalo.",
|
||||
"header": "Pozvat",
|
||||
"searchCallOnlyPlaceholder": "Vložte telefonní číslo",
|
||||
"searchPeopleOnlyPlaceholder": "Hledat účastníky",
|
||||
"searchPlaceholder": "Účastník nebo telefonní číslo",
|
||||
"send": "Odeslat"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "",
|
||||
"retry": "",
|
||||
"support": "",
|
||||
"retry": "Zkusit znovu",
|
||||
"support": "Podpora",
|
||||
"supportMsg": ""
|
||||
},
|
||||
"keyboardShortcuts": {
|
||||
@@ -334,18 +360,18 @@
|
||||
"focusRemote": "Vybrat obraz jiného volajícího",
|
||||
"fullScreen": "Zobrazení / Opuštění režimu celé obrazovky",
|
||||
"keyboardShortcuts": "Klávesové zkratky",
|
||||
"localRecording": "",
|
||||
"localRecording": "Spravovat kvalitu hovoru",
|
||||
"mute": "Ztlumení nebo zesílení vašeho mikrofonu",
|
||||
"pushToTalk": "Zmáčknout a mluvit",
|
||||
"raiseHand": "Přihlásit nebo odhlásit se o slovo",
|
||||
"showSpeakerStats": "Zobrazení statistiky řečníka",
|
||||
"toggleChat": "Otevřít nebo zavřít chat",
|
||||
"toggleFilmstrip": "",
|
||||
"toggleFilmstrip": "Zobrazit / Skrýt videonáhledy účastníků",
|
||||
"toggleScreensharing": "Přepnutí mezi kamerou a sdílením obrazovky",
|
||||
"toggleShortcuts": "",
|
||||
"videoMute": "Spuštění nebo vypnutí vaší kamery"
|
||||
"toggleShortcuts": "Zobrazení / Skrytí klávesových zkratek",
|
||||
"videoMute": "Spuštění / Vypnutí vaší kamery",
|
||||
"videoQuality": "Spravovat kvalitu hovoru"
|
||||
},
|
||||
"\u0005keyboardShortcuts": {},
|
||||
"liveStreaming": {
|
||||
"busy": "",
|
||||
"busyTitle": "",
|
||||
@@ -366,25 +392,25 @@
|
||||
"on": "",
|
||||
"pending": "",
|
||||
"serviceName": "",
|
||||
"signedInAs": "",
|
||||
"signIn": "",
|
||||
"signInCTA": "",
|
||||
"signOut": "",
|
||||
"signedInAs": "Nyní jste přihlášen(a) jako:",
|
||||
"signIn": "Přihlásit se účtem Google",
|
||||
"signInCTA": "Přihlaste se nebo vložte svůj klíč ze služby YouTube.",
|
||||
"signOut": "Odhlásit se",
|
||||
"start": "",
|
||||
"streamIdHelp": "",
|
||||
"streamIdHelp": "Co je tohle?",
|
||||
"unavailableTitle": ""
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
"off": "",
|
||||
"on": "",
|
||||
"unknown": ""
|
||||
"off": "Vyp",
|
||||
"on": "Zap",
|
||||
"unknown": "Neznámý"
|
||||
},
|
||||
"dialogTitle": "",
|
||||
"duration": "",
|
||||
"durationNA": "",
|
||||
"encoding": "",
|
||||
"label": "",
|
||||
"dialogTitle": "Ovládání místních záznamů",
|
||||
"duration": "Doba trvání",
|
||||
"durationNA": "N/A",
|
||||
"encoding": "Kódování",
|
||||
"label": "LOR",
|
||||
"labelToolTip": "",
|
||||
"localRecording": "",
|
||||
"me": "Já",
|
||||
@@ -395,25 +421,25 @@
|
||||
"notModerator": ""
|
||||
},
|
||||
"moderator": "Moderátor",
|
||||
"no": "",
|
||||
"participant": "",
|
||||
"participantStats": "",
|
||||
"no": "Ne",
|
||||
"participant": "Účastník",
|
||||
"participantStats": "Zobrazit statistiku účastníků",
|
||||
"sessionToken": "",
|
||||
"start": "",
|
||||
"stop": "",
|
||||
"yes": ""
|
||||
"start": "Spustit záznam",
|
||||
"stop": "Zastavit záznam",
|
||||
"yes": "Ano"
|
||||
},
|
||||
"lockRoomPassword": "Heslo",
|
||||
"lockRoomPassword": "heslo",
|
||||
"lockRoomPasswordUppercase": "Heslo",
|
||||
"me": "já",
|
||||
"notify": {
|
||||
"connectedOneMember": "",
|
||||
"connectedThreePlusMembers": "",
|
||||
"connectedOneMember": "{{name}} se připojil",
|
||||
"connectedThreePlusMembers": "{{name}} a {{count}} dalších se připojili",
|
||||
"connectedTwoMembers": "",
|
||||
"disconnected": "odpojeno",
|
||||
"focus": "Vybrat konferenci",
|
||||
"focusFail": "{{component}} není k dispozici - další pokus za {{ms}} sec",
|
||||
"grantedTo": "Moderátorská práva přidělena účastníkovi{{to}}!",
|
||||
"grantedTo": "Moderátorská práva přidělena účastníkovi {{to}}!",
|
||||
"invitedOneMember": "",
|
||||
"invitedThreePlusMembers": "",
|
||||
"invitedTwoMembers": "",
|
||||
@@ -433,39 +459,37 @@
|
||||
"suboptimalExperienceDescription": "Sakra... všimli jsme si, že vaše zkušenost s {{appName}} není úplně skvělá. Hledáme cesty, jak bychom to mohli zlepšit. Než se tak stane, vyzkoušejte některý z <a href='static/recommendedBrowsers.html' target='_blank'>plně podporovaných prohlížečů</a>.",
|
||||
"suboptimalExperienceTitle": "Varování prohlížeče",
|
||||
"unmute": "",
|
||||
"newDeviceCameraTitle": "",
|
||||
"newDeviceAudioTitle": "",
|
||||
"newDeviceAction": ""
|
||||
"newDeviceCameraTitle": "Detekována nová kamera",
|
||||
"newDeviceAudioTitle": "Detekováno nové zvukové zařízení",
|
||||
"newDeviceAction": "Použít"
|
||||
},
|
||||
"\u0005notify": {},
|
||||
"passwordSetRemotely": "",
|
||||
"passwordDigitsOnly": "",
|
||||
"poweredby": "poháněno",
|
||||
"passwordSetRemotely": "nastaveno jiným účastníkem",
|
||||
"passwordDigitsOnly": "Až {{number}} číslic",
|
||||
"poweredby": "Poháněno",
|
||||
"presenceStatus": {
|
||||
"busy": "",
|
||||
"calling": "",
|
||||
"connected": "",
|
||||
"connecting": "Připojení:",
|
||||
"connecting2": "Připojení:",
|
||||
"disconnected": "odpojeno",
|
||||
"expired": "",
|
||||
"ignored": "",
|
||||
"initializingCall": "",
|
||||
"invited": "",
|
||||
"rejected": "",
|
||||
"ringing": ""
|
||||
"busy": "Obsazeno",
|
||||
"calling": "Vytáčím...",
|
||||
"connected": "Spojování",
|
||||
"connecting": "Spojování...",
|
||||
"connecting2": "Spojování*...",
|
||||
"disconnected": "Odpojeno",
|
||||
"expired": "Spojení vypršelo",
|
||||
"ignored": "Spojení ignorováno",
|
||||
"initializingCall": "Nastavuji hovor...",
|
||||
"invited": "Pozván",
|
||||
"rejected": "Odmítnuto",
|
||||
"ringing": "Zvoní..."
|
||||
},
|
||||
"\u0005presenceStatus": {},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Nastavte si jméno",
|
||||
"setEmailInput": "Zadejte e-mail",
|
||||
"setEmailLabel": "Nastavte si email vašeho gravataru",
|
||||
"title": ""
|
||||
"title": "Profil"
|
||||
},
|
||||
"recording": {
|
||||
"authDropboxText": "",
|
||||
"availableSpace": "",
|
||||
"beta": "",
|
||||
"authDropboxText": "Nahrát na Dropbox",
|
||||
"availableSpace": "Dostupný prostor: {{spaceLeft}} MB (přibližně {{duration}} minut záznamu)",
|
||||
"beta": "BETA",
|
||||
"busy": "",
|
||||
"busyTitle": "",
|
||||
"error": "",
|
||||
@@ -494,42 +518,43 @@
|
||||
"calendar": {
|
||||
"about": "",
|
||||
"disconnect": "odpojeno",
|
||||
"microsoftSignIn": "",
|
||||
"microsoftSignIn": "Přihlásit se účtem Microsoft",
|
||||
"signedIn": "",
|
||||
"title": "Kalendář"
|
||||
},
|
||||
"devices": "",
|
||||
"devices": "Zařízení",
|
||||
"followMe": "Všichni sledují mě",
|
||||
"language": "",
|
||||
"loggedIn": "",
|
||||
"language": "Jazyk",
|
||||
"loggedIn": "Přihlášen jako {{name}}",
|
||||
"moderator": "Moderátor",
|
||||
"more": "",
|
||||
"name": "",
|
||||
"noDevice": "Hotovo",
|
||||
"more": "Více",
|
||||
"name": "Jméno",
|
||||
"noDevice": "Žádné zařízení",
|
||||
"selectAudioOutput": "Zvukový výstup",
|
||||
"selectCamera": "Kamera",
|
||||
"selectMic": "Mikrofon",
|
||||
"startAudioMuted": "Při připojení všem zlumit zvuk",
|
||||
"startVideoMuted": "Všechny připojovat jako skrýté",
|
||||
"title": ""
|
||||
},
|
||||
"\u0005settings": {
|
||||
"calendar": {}
|
||||
"title": "Nastavení",
|
||||
"speakers": "Reproduktory",
|
||||
"microphones": "Mikrofony"
|
||||
},
|
||||
"settingsView": {
|
||||
"alertOk": "",
|
||||
"alertTitle": "",
|
||||
"alertOk": "OK",
|
||||
"alertTitle": "Varování",
|
||||
"alertURLText": "",
|
||||
"buildInfoSection": "",
|
||||
"conferenceSection": "",
|
||||
"displayName": "",
|
||||
"email": "",
|
||||
"header": "",
|
||||
"profileSection": "",
|
||||
"serverURL": "",
|
||||
"displayName": "Zobrazované jméno",
|
||||
"email": "E-mail",
|
||||
"header": "Nastavení",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "URL serveru",
|
||||
"startWithAudioMuted": "",
|
||||
"startWithVideoMuted": "",
|
||||
"version": ""
|
||||
"version": "",
|
||||
"showAdvanced": "Zobrazit pokročilá nastavení",
|
||||
"advanced": "Pokročilé"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "",
|
||||
@@ -539,10 +564,10 @@
|
||||
"speakerStats": {
|
||||
"hours": "",
|
||||
"minutes": "",
|
||||
"name": "",
|
||||
"name": "Řečník",
|
||||
"seconds": "",
|
||||
"speakerStats": "",
|
||||
"speakerTime": ""
|
||||
"speakerStats": "Statistika řečníků",
|
||||
"speakerTime": "Mluvil již"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
@@ -568,7 +593,7 @@
|
||||
"kick": "",
|
||||
"localRecording": "",
|
||||
"lockRoom": "",
|
||||
"moreActions": "",
|
||||
"moreActions": "Více možností",
|
||||
"moreActionsMenu": "",
|
||||
"mute": "",
|
||||
"pip": "",
|
||||
@@ -579,11 +604,11 @@
|
||||
"Settings": "",
|
||||
"sharedvideo": "",
|
||||
"shareRoom": "",
|
||||
"shareYourScreen": "",
|
||||
"shortcuts": "",
|
||||
"shareYourScreen": "Sdílet obrazovku",
|
||||
"shortcuts": "Zobrazit zkratky",
|
||||
"show": "",
|
||||
"speakerStats": "",
|
||||
"tileView": "",
|
||||
"speakerStats": "Statistika řečníků",
|
||||
"tileView": "Přepnout režim zobrazení",
|
||||
"toggleCamera": "",
|
||||
"videomute": "",
|
||||
"videoblur": ""
|
||||
@@ -593,13 +618,13 @@
|
||||
"audioOnlyOn": "",
|
||||
"audioRoute": "",
|
||||
"authenticate": "Ověřit",
|
||||
"callQuality": "",
|
||||
"callQuality": "Kvalita hovoru",
|
||||
"chat": "Otevřít / Zavřít chat",
|
||||
"closeChat": "",
|
||||
"documentClose": "Otevřít / Zavřít sdílený dokument",
|
||||
"documentOpen": "Otevřít / Zavřít sdílený dokument",
|
||||
"enterFullScreen": "",
|
||||
"enterTileView": "",
|
||||
"enterFullScreen": "Přepnout na celou obrazovku",
|
||||
"enterTileView": "Přepnout režim zobrazení",
|
||||
"exitFullScreen": "",
|
||||
"exitTileView": "",
|
||||
"feedback": "",
|
||||
@@ -608,32 +633,29 @@
|
||||
"login": "Přihlásit se",
|
||||
"logout": "Odhlásit",
|
||||
"lowerYourHand": "",
|
||||
"moreActions": "",
|
||||
"moreActions": "Více možností",
|
||||
"mute": "Ztlumit / Zesílit",
|
||||
"openChat": "",
|
||||
"pip": "",
|
||||
"profile": "Upravit váš profil",
|
||||
"raiseHand": "Příhlásit / Odhlásit se o slovo",
|
||||
"raiseYourHand": "",
|
||||
"Settings": "",
|
||||
"sharedvideo": "Sdílet YouTube video",
|
||||
"Settings": "Nastavení",
|
||||
"sharedvideo": "Sdílet obraz YouTube videa",
|
||||
"shareRoom": "",
|
||||
"shortcuts": "",
|
||||
"speakerStats": "",
|
||||
"shortcuts": "Klávesové zkratky",
|
||||
"speakerStats": "Statistiky řečníků",
|
||||
"startScreenSharing": "",
|
||||
"startSubtitles": "",
|
||||
"stopScreenSharing": "",
|
||||
"stopSubtitles": "",
|
||||
"stopSharedVideo": "",
|
||||
"talkWhileMutedPopup": "Snažíte se mluvit? Máte ztlumené audio.",
|
||||
"tileViewToggle": "",
|
||||
"tileViewToggle": "Přepnout režim zobrazení",
|
||||
"toggleCamera": "",
|
||||
"videomute": "Zapnutí / Vypnutí kamery",
|
||||
"startvideoblur": "",
|
||||
"stopvideoblur": ""
|
||||
},
|
||||
"\u0005toolbar": {
|
||||
"accessibilityLabel": {}
|
||||
"startvideoblur": "Rozmazat pozadí",
|
||||
"stopvideoblur": "Zrušit rozmazání"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "",
|
||||
@@ -660,71 +682,94 @@
|
||||
"safariGrantPermissions": "Pokud se váš prohlížeč ptá na práva, vyberte <b><i>OK</i></b> a potvrďte."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "",
|
||||
"busyTitle": "",
|
||||
"errorAlreadyInvited": "",
|
||||
"errorInvite": "",
|
||||
"errorInviteFailed": "",
|
||||
"errorInviteFailedTitle": "",
|
||||
"errorInviteTitle": "",
|
||||
"pending": ""
|
||||
"busy": "Pracujeme na uvolnění prostředků. Zkuste to prosím znovu za několik minut.",
|
||||
"busyTitle": "Služba Místnost je nyní zaneprázdněna",
|
||||
"errorAlreadyInvited": "{{displayName}} byl(a) již pozván(a)",
|
||||
"errorInvite": "Konference ještě nebyla založena. Zkuste to prosím později.",
|
||||
"errorInviteFailed": "Na vyřešení problému pracujeme. Zkuste to prosím znovu později.",
|
||||
"errorInviteFailedTitle": "Pozvání {{displayName}} selhalo",
|
||||
"errorInviteTitle": "Chyba při pozvání do místnosti",
|
||||
"pending": "{{displayName}} byl(a) pozván(a)"
|
||||
},
|
||||
"videoStatus": {
|
||||
"audioOnly": "",
|
||||
"audioOnlyExpanded": "",
|
||||
"callQuality": "",
|
||||
"hd": "",
|
||||
"highDefinition": "",
|
||||
"labelTooiltipNoVideo": "",
|
||||
"labelTooltipAudioOnly": "",
|
||||
"ld": "",
|
||||
"lowDefinition": "",
|
||||
"onlyAudioAvailable": "",
|
||||
"onlyAudioSupported": "",
|
||||
"p2pEnabled": "",
|
||||
"p2pVideoQualityDescription": "",
|
||||
"recHighDefinitionOnly": "",
|
||||
"sd": "",
|
||||
"standardDefinition": ""
|
||||
"audioOnly": "AU",
|
||||
"audioOnlyExpanded": "Jste v režimu nízké přenosové rychlosti. V tomto režimu je k dispozici jen zvuk a sdílení obrazovky.",
|
||||
"callQuality": "Nastavení kvality hovoru",
|
||||
"hd": "HD",
|
||||
"hdTooltip": "Sledujete obraz ve vysoké kvalitě",
|
||||
"highDefinition": "Vysoká kvalita",
|
||||
"labelTooiltipNoVideo": "Žádné video",
|
||||
"labelTooltipAudioOnly": "Zapnut režim nízké přenosové rychlosti",
|
||||
"ld": "LD",
|
||||
"ldTooltip": "Sledujete obraz v nízké kvalitě",
|
||||
"lowDefinition": "Nizká kvalita",
|
||||
"onlyAudioAvailable": "Je k dispozici jen zvuk",
|
||||
"onlyAudioSupported": "V tomto prohlížeči podporujeme jen zvuk.",
|
||||
"p2pEnabled": "Zapnut režim peer to peer",
|
||||
"p2pVideoQualityDescription": "V režimu peer to peer lze kvalitu videa přepínat jen mezi vysokou a pouhým zvukem. Ostatní nastavení se ignorují, dokud tento režim neopustíte.",
|
||||
"recHighDefinitionOnly": "Bude preferována vysoká kvalita.",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Sledujete obraz v běžné kvalitě",
|
||||
"standardDefinition": "Běžná kvalita"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"domute": "Ztlumený zvuk",
|
||||
"domute": "Umlčet",
|
||||
"flip": "Převrátit",
|
||||
"kick": "Vyhodit",
|
||||
"moderator": "Moderátor",
|
||||
"mute": "",
|
||||
"mute": "Účastník je umlčen",
|
||||
"muted": "Ztlumený zvuk",
|
||||
"remoteControl": "Vzdálené ovládání",
|
||||
"show": "",
|
||||
"videomute": ""
|
||||
"videomute": "Účastník si vypnul kameru",
|
||||
"domuteOthers": "Umlčet všechny ostatní"
|
||||
},
|
||||
"\u0005videothumbnail": {},
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
"join": "",
|
||||
"join": "Dotykem se připojíte",
|
||||
"roomname": "Zadejte jméno místnosti"
|
||||
},
|
||||
"appDescription": "Jděte na to, videokonference v rámci celého týmu. Do konference můžete pozvat kohokoliv. Veškerá komunikace přes aplikaci {{app}} je plně šifrovaná, 100% open source zajištuje, že aplikaci můžete využívat bez omezení a navíc se nemusíte ani registrovat.",
|
||||
"appDescription": "Videokonference pro celý Váš tým, zdarma, bez nároků na Vaše data. Do konference můžete pozvat kohokoliv. Veškerá komunikace přes aplikaci {{app}} je plně šifrovaná, 100% open source zajištuje, že aplikaci můžete využívat bez omezení a navíc se nemusíte ani registrovat.",
|
||||
"audioVideoSwitch": {
|
||||
"audio": "Hlas",
|
||||
"video": "Obraz"
|
||||
},
|
||||
"calendar": "Kalendář",
|
||||
"connectCalendarButton": "",
|
||||
"connectCalendarText": "",
|
||||
"enterRoomTitle": "",
|
||||
"connectCalendarButton": "Připojit váš kalendář",
|
||||
"connectCalendarText": "Připojte si kalendář a uvidíte všechny videohovory v {{app}}. Můžete si také přidat videohovory {{provider}} do kalendáře a spouštět je jedním klikem.",
|
||||
"enterRoomTitle": "Začít nový videohovor",
|
||||
"go": "ZAČÍT",
|
||||
"join": "PŘIPOJIT",
|
||||
"info": "",
|
||||
"info": "Informace",
|
||||
"privacy": "Soukromí",
|
||||
"recentList": "",
|
||||
"recentListDelete": "",
|
||||
"recentListEmpty": "",
|
||||
"reducedUIText": "",
|
||||
"recentList": "Nedávné",
|
||||
"recentListDelete": "Smazat",
|
||||
"recentListEmpty": "Váš seznam nedávných hovorů je prázdný. Spojte se s kolegy z Vašeho týmu, poté zde naleznete seznam nedávných hovorů.",
|
||||
"reducedUIText": "Vítejte v {{app}}!",
|
||||
"roomname": "Zadejte jméno místnosti",
|
||||
"roomnameHint": "Zadejte název nebo URL odkaz místnosti ke které se chcete připojit. Pokud jste místnost vytvořili, ujistěte se, že ostatní účastníci schůzky zadají stejné jméno jako vy.",
|
||||
"sendFeedback": "Poslat zpětnou vazbu",
|
||||
"terms": "Podmínky používání",
|
||||
"title": ""
|
||||
"title": "Bezpečná, plnohodnotná a zdarma dostupná videokonference",
|
||||
"roomNameAllowedChars": "Název videohovoru nesmí obsahovat žádný z těchto znaků: ?, &, :, ', \", %, #.",
|
||||
"getHelp": "Získat pomoc",
|
||||
"goSmall": "ZAČÍT"
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"youAreAlone": "Jste jediný/á v tomto videohovoru",
|
||||
"button": "Pozvat další"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Centrum pomoci"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"dontShowAgain": "Toto už znovu neukazovat",
|
||||
"buttonText": "Nainstalovat rozšíření Chrome",
|
||||
"installExtensionText": "Nainstalovat rozšíření pro integraci Google Calendar a Office 365"
|
||||
},
|
||||
"defaultNickname": "Franta Uživatel",
|
||||
"raisedHand": "Chtěl(a) bych mluvit",
|
||||
"documentSharing": {
|
||||
"title": "Sdílený dokument"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
772
lang/main-da.json
Normal file
@@ -0,0 +1,772 @@
|
||||
{
|
||||
"addPeople": {
|
||||
"add": "Inviter",
|
||||
"countryNotSupported": "Vi supporterer ikke dette land endnu.",
|
||||
"countryReminder": "Ringer du til uden for USA? Benyt venligst landekode!",
|
||||
"disabled": "Du kan ikke invitere deltagere.",
|
||||
"failedToAdd": "Kunne ikke tilføje deltagere.",
|
||||
"footerText": "Udgående opkald er slået fra.",
|
||||
"loading": "Søger efter personer og telefonnumre.",
|
||||
"loadingNumber": "Validerer telefonnummer",
|
||||
"loadingPeople": "Søger efter folk der kan inviteres",
|
||||
"noResults": "Der blev ikke fundet noget",
|
||||
"noValidNumbers": "Indtast venligst er telefonnummer",
|
||||
"searchNumbers": "Tilføj telefonnummer",
|
||||
"searchPeople": "Søg efter personer",
|
||||
"searchPeopleAndNumbers": "Søg efter personer eller tilføj deres telefonnummer",
|
||||
"telephone": "Telefon: {{number}}",
|
||||
"title": "Inviter personer til dette møde"
|
||||
},
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"headphones": "Høretelefoner",
|
||||
"phone": "Telefon",
|
||||
"speaker": "Højtaler",
|
||||
"none": "Der er ikke nogen lyd enheder tilgængelige"
|
||||
},
|
||||
"audioOnly": {
|
||||
"audioOnly": "Kun lyd"
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Tilføj et mødelink",
|
||||
"confirmAddLink": "Ønsker du at tilføj et Jitsi link til denne aftale?",
|
||||
"error": {
|
||||
"appConfiguration": "Kalender integration er ikke sat korrekt op.",
|
||||
"generic": "Der er sket en fejl. Verificer venligst dine kalenderindstilliinger eller prøv på at genopfriske din kalender.",
|
||||
"notSignedIn": "Der er sket en fejl under log ind for at hente kalenderaftalerne. Kontroller venligst dine kalenderindstilliinger og forsøg at logge ind igen."
|
||||
},
|
||||
"join": "Deltag",
|
||||
"joinTooltip": "Deltag i mødet",
|
||||
"nextMeeting": "næste møde",
|
||||
"noEvents": "Der er ikke nogen kommande aftaler i kalenderen.",
|
||||
"ongoingMeeting": "igangværende møde",
|
||||
"permissionButton": "Åben indstillinger",
|
||||
"permissionMessage": "Kalender tilladelsen er nødvendig for at kunne se dine aftaler i appen.",
|
||||
"refresh": "Genopfrisk aftaler",
|
||||
"today": "I dag"
|
||||
},
|
||||
"chat": {
|
||||
"error": "Fejl: din besked \"{{originalText}}\" blev ikke sendt. Årsag: {{error}}",
|
||||
"fieldPlaceHolder": "Skriv din besked her",
|
||||
"messagebox": "Indtast en besked",
|
||||
"messageTo": "Privat besked til {{recipient}}",
|
||||
"noMessagesMessage": "Der er ikke nogen beskeder i mødet endnu. Skriv noget!",
|
||||
"nickname": {
|
||||
"popover": "Vælg dit navn/alias",
|
||||
"title": "Indtast et navn/alias for at deltage i chatten"
|
||||
},
|
||||
"privateNotice": "Privat besked til {{recipient}}",
|
||||
"title": "Chat",
|
||||
"you": "dig"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "Installér plugin for Google Kalender og Office 365 integration",
|
||||
"buttonText": "Installér Chrome plugin",
|
||||
"dontShowAgain": "Vis ikke dette igen"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Forbinder dig til mødet..."
|
||||
},
|
||||
"connection": {
|
||||
"ATTACHED": "Forbundet",
|
||||
"AUTHENTICATING": "Autoriserer",
|
||||
"AUTHFAIL": "Autorisation lykkedes ikke",
|
||||
"CONNECTED": "Forbundet",
|
||||
"CONNECTING": "Forbinder",
|
||||
"CONNFAIL": "Forbindelse kunne ikke oprettes",
|
||||
"DISCONNECTED": "Frakoblet",
|
||||
"DISCONNECTING": "Frakobler",
|
||||
"ERROR": "Fejl",
|
||||
"RECONNECTING": "Et netværksproblem opstod. Forbinder igen...",
|
||||
"GET_SESSION_ID_ERROR": "Hent session-id fejl: {{code}}",
|
||||
"GOT_SESSION_ID": "HEnter session-id... Udført",
|
||||
"LOW_BANDWIDTH": "Video for {{displayName}} er slået fra for at spare båndbredde"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Adresse:",
|
||||
"bandwidth": "Estimeret båndbredde:",
|
||||
"bitrate": "Bitrate:",
|
||||
"bridgeCount": "Server antal: ",
|
||||
"connectedTo": "Forbundet til:",
|
||||
"e2e_rtt": "E2E RTT:",
|
||||
"framerate": "Frame rate:",
|
||||
"less": "Vis mindre",
|
||||
"localaddress": "Lokal adresse:",
|
||||
"localaddress_plural": "Lokale adresser:",
|
||||
"localport": "Lokal port:",
|
||||
"localport_plural": "Lokale porte:",
|
||||
"more": "Vis mere",
|
||||
"packetloss": "Pakke tab:",
|
||||
"quality": {
|
||||
"good": "God",
|
||||
"inactive": "Inaktiv",
|
||||
"lost": "Tabt",
|
||||
"nonoptimal": "Ikke optimal",
|
||||
"poor": "Dårlig"
|
||||
},
|
||||
"remoteaddress": "Fjernadresse:",
|
||||
"remoteaddress_plural": "Fjernadresser:",
|
||||
"remoteport": "Fjern port:",
|
||||
"remoteport_plural": "Fjern porte:",
|
||||
"resolution": "Opløsning:",
|
||||
"status": "Forbindelse:",
|
||||
"transport": "Transport:",
|
||||
"transport_plural": "Transporter:",
|
||||
"turn": " (turn)"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "Tidligere",
|
||||
"today": "I dag",
|
||||
"yesterday": "I går"
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Du skal bruge {{app}} mobil appen for at forbinde til dette møde med din mobiltelefon.",
|
||||
"description": "Skete der ikke noget? Vi forsøgte at åbne dit videomøde i {{app}} desktop appen. Prøv igen eller start mødet på {{app}} web app.",
|
||||
"descriptionWithoutWeb": "",
|
||||
"downloadApp": "Download appen",
|
||||
"launchWebButton": "Start på web",
|
||||
"openApp": "Fortsæt til appen",
|
||||
"title": "Start dit møde i {{app}}...",
|
||||
"tryAgainButton": "Prøv igen"
|
||||
},
|
||||
"defaultLink": "e.g. {{url}}",
|
||||
"defaultNickname": "ex. Jane Pink",
|
||||
"deviceError": {
|
||||
"cameraError": "Kunne ikke forbinde til dit kamera",
|
||||
"cameraPermission": "Kamera tilladelse mangler",
|
||||
"microphoneError": "Kunne ikke forbinde til din mikrofon",
|
||||
"microphonePermission": "Mikrofon tilladelse mangler"
|
||||
},
|
||||
"deviceSelection": {
|
||||
"noPermission": "Tilladelse ikke givet",
|
||||
"previewUnavailable": "Forhåndsvisning mangler",
|
||||
"selectADevice": "Vælg en enhed",
|
||||
"testAudio": "Afspil testlyd"
|
||||
},
|
||||
"dialog": {
|
||||
"accessibilityLabel": {
|
||||
"liveStreaming": "Live Stream"
|
||||
},
|
||||
"allow": "Tillad",
|
||||
"alreadySharedVideoMsg": "En anden deltager deler allerede en video. Denne konference tillader kun en delt video af gangen.",
|
||||
"alreadySharedVideoTitle": "Det er kun muligt at dele en video af gangen",
|
||||
"applicationWindow": "Applikations vindue",
|
||||
"Back": "Tilbage",
|
||||
"cameraConstraintFailedError": "Dit kamera lever ikke op til de nødvendige krav..",
|
||||
"cameraNotFoundError": "Kamera kunne ikke findes.",
|
||||
"cameraNotSendingData": "Vi kan ikke tilgå dit kamera. Kontroller venligst om der er en anden applikation der gør brug af dit kamera, eller vælg en andet kamera og genindlæs siden.",
|
||||
"cameraNotSendingDataTitle": "Kan ikke tilgå kamera",
|
||||
"cameraPermissionDeniedError": "Du har ikke givet tilladelse til at bruge dit kamera. Du kan stadig deltage i mødet men de andre deltagere vil ikke kunne se dig. Gør brug af kamera knappen i adressebaren for at give tilladelse.",
|
||||
"cameraUnknownError": "Kan ikke gør brug af dit kamera, årsag ukendt.",
|
||||
"cameraUnsupportedResolutionError": "Dit kamera supporterer ikke den nødvendige opløsning.",
|
||||
"Cancel": "Afbryd",
|
||||
"close": "Luk",
|
||||
"conferenceDisconnectMsg": "Kontroller venligst din netværksforbindelse. Forbinder igen om {{seconds}} sekunder...",
|
||||
"conferenceDisconnectTitle": "Din forbindelse er blevet afbrudt.",
|
||||
"conferenceReloadMsg": "Forsøger at genoprette forbindelsen. Forbinder igen om {{seconds}} sekunder...",
|
||||
"conferenceReloadTitle": "Der er desværre gået noget galt.",
|
||||
"confirm": "Bekræft",
|
||||
"confirmNo": "Nej",
|
||||
"confirmYes": "Ja",
|
||||
"connectError": "Det var ikke muligt at forbinde til mødet.",
|
||||
"connectErrorWithMsg": "Det var ikke muligt at forbinde til mødet: {{msg}}",
|
||||
"connecting": "Forbinder",
|
||||
"contactSupport": "Kontakt support",
|
||||
"copy": "Kopier invitation",
|
||||
"dismiss": "Afbryd",
|
||||
"displayNameRequired": "Navn/alias er påkrævet",
|
||||
"done": "Gem",
|
||||
"enterDisplayName": "Indtast venligst dit navn/alias",
|
||||
"error": "Fejl",
|
||||
"externalInstallationMsg": "Du skal installerer vores skærmdelings plugin.",
|
||||
"externalInstallationTitle": "Plugin skal bruges",
|
||||
"goToStore": "Gå til webstore",
|
||||
"gracefulShutdown": "Vores service er pt. under vedligeholdese. Forsøg venligst igen senere.",
|
||||
"IamHost": "Jeg er vært",
|
||||
"incorrectRoomLockPassword": "",
|
||||
"incorrectPassword": "Forkert brugernavn eller adgangskode",
|
||||
"inlineInstallationMsg": "Du skal installerer vores skærmdelings plugin.",
|
||||
"inlineInstallExtension": "Installer nu",
|
||||
"internalError": "Der er opstået en fejl: {{error}}",
|
||||
"internalErrorTitle": "Intern fejl",
|
||||
"kickMessage": "Du er blevet afbrudt fra mødet!",
|
||||
"kickParticipantButton": "Afbryd",
|
||||
"kickParticipantDialog": "Er du sikker på at du vil afbryde den deltager?",
|
||||
"kickParticipantTitle": "Afbryd denne deltager?",
|
||||
"kickTitle": "Afbrudt fra møde",
|
||||
"liveStreaming": "Live Streaming",
|
||||
"liveStreamingDisabledForGuestTooltip": "Gæster kan ikke starte en live stream.",
|
||||
"liveStreamingDisabledTooltip": "Live streaming er slået fra.",
|
||||
"lockMessage": "Kunne ikke sikre mødet.",
|
||||
"lockRoom": "Tilføj adgangskode",
|
||||
"lockTitle": "Sikring fejlet",
|
||||
"logoutQuestion": "Er du sikker på at du vil logge ud og stoppe mødet?",
|
||||
"logoutTitle": "Log ud",
|
||||
"maxUsersLimitReached": "Grænsen for antal deltagere er nået. Mødet er fuldt. Kontakt ejeren af mødet eller prøv igen senere!",
|
||||
"maxUsersLimitReachedTitle": "Maksimum antal deltagere nået",
|
||||
"micConstraintFailedError": "Din mikrofon supporterer ikke de nødvendige specifikationer.",
|
||||
"micNotFoundError": "Mikrofon ikke fundet.",
|
||||
"micNotSendingData": "Vi kunne ikke tilgå din mikrofon. Vælg en anden mikrofon under indstillinger eller genindlæs applikationen.",
|
||||
"micNotSendingDataTitle": "Kunne ikke tilgå din mikrofon",
|
||||
"micPermissionDeniedError": "Du har ikke givet tilladelse til at bruge din mikrofon. Du kan stadig deltage i mødet men de andre deltagere kan ikke høre dig. Benyt kamera knappen i adressbaren for at give tilladelse.",
|
||||
"micUnknownError": "Kan ikke tilgå mikrofon af ukendt årsag.",
|
||||
"muteEveryoneElseDialog": "Er du sikker på at du vil slå lyden fra for denne deltager? Du kan ikke tænde igen, men de kan selv tænde til enhver tid.",
|
||||
"muteEveryoneElseTitle": "Slå lyd fra for alle undtagen {{whom}}?",
|
||||
"muteEveryoneDialog": "Er du sikker på at du vil slå lyden fra for denne deltager? Du kan ikke tænde igen, men de kan selv tænde til enhver tid.",
|
||||
"muteEveryoneTitle": "Slå lyd fra for alle?",
|
||||
"muteEveryoneSelf": "dig selv",
|
||||
"muteEveryoneStartMuted": "Lyden er slpet fra for alle fra nu af",
|
||||
"muteParticipantBody": "Du kan ikke tænde for deres mikrofon, men de kan selv tænde for deres mikrofon til enhver tid.",
|
||||
"muteParticipantButton": "Slå lyd fra",
|
||||
"muteParticipantDialog": "Er du sikker på at du vil slå lyden fra for denne deltager? Du kan ikke tænde igen, men de kan selv tænde til enhver tid.",
|
||||
"muteParticipantTitle": "Slå lyd fra for denne deltager?",
|
||||
"Ok": "Ok",
|
||||
"passwordLabel": "Adgangskode",
|
||||
"passwordNotSupported": "Sætte en adgangskode for mødet er ikke understøttet.",
|
||||
"passwordNotSupportedTitle": "Adgangskode er ikke understøttet",
|
||||
"passwordRequired": "Adgangskode påkrævet",
|
||||
"popupError": "Din browser blockerer for pop-upper fra denne hjemmeside. Slå venligst pop-upper til i din browsers indstillinger og forsøg igen.",
|
||||
"popupErrorTitle": "Pop-up blokkeret",
|
||||
"recording": "Optager",
|
||||
"recordingDisabledForGuestTooltip": "Gæster kan ikke starte en optagelse.",
|
||||
"recordingDisabledTooltip": "Start optagelse er slået fra.",
|
||||
"rejoinNow": "Deltag igen",
|
||||
"remoteControlAllowedMessage": "{{user}} accepterede din fjernstyring anmodning!",
|
||||
"remoteControlDeniedMessage": "{{user}} afviste din fjernstyring anmodning!",
|
||||
"remoteControlErrorMessage": "En fejl er opstået ved anmodning om fjernstyring for {{user}}!",
|
||||
"remoteControlRequestMessage": "Vil du tillade at {{user}} fjerstyrer din computer?",
|
||||
"remoteControlShareScreenWarning": "Bemærk at hvis du vælger \"Tillad\" så vil du tillade fjernstyring!",
|
||||
"remoteControlStopMessage": "Fjernstyrings sessionen er afsluttet!",
|
||||
"remoteControlTitle": "Fjerstyring",
|
||||
"Remove": "Fjern",
|
||||
"removePassword": "Fjern adgangskode",
|
||||
"removeSharedVideoMsg": "Er du sikker på at du vil fjerne di delte video?",
|
||||
"removeSharedVideoTitle": "Fjern delt video",
|
||||
"reservationError": "Reservation - system fejl",
|
||||
"reservationErrorMsg": "Fejlkode: {{code}}, fejl: {{msg}}",
|
||||
"retry": "Forsøg igen",
|
||||
"screenSharingFailedToInstall": "Skærmdelings-plugin kunne ikke installeres.",
|
||||
"screenSharingFailedToInstallTitle": "Skærmdelings-plugin kunne ikke installeres.",
|
||||
"screenSharingFirefoxPermissionDeniedError": "Noget gik galt under skærmdeling. Kontroller venligst at du har givet tilladelse til skærmdeling. ",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Skærmdeling kunne ikke startes!",
|
||||
"screenSharingPermissionDeniedError": "Noget gik galt under skærmdeling. Kontroller venligst at du har givet tilladelse til skærmdeling. Genindlæs siden og forsøg igen.",
|
||||
"sendPrivateMessage": "Du har modtage en privat besked. Ønsker du at svare private eller øsnker du at svare til gruppen?",
|
||||
"sendPrivateMessageCancel": "Send til gruppen",
|
||||
"sendPrivateMessageOk": "Send privat",
|
||||
"sendPrivateMessageTitle": "Send privat?",
|
||||
"serviceUnavailable": "Service er ikke tilgængelig",
|
||||
"sessTerminated": "Møde afsluttet",
|
||||
"Share": "Del",
|
||||
"shareVideoLinkError": "Angiv venligst et validt Youtube link.",
|
||||
"shareVideoTitle": "Del en video",
|
||||
"shareYourScreen": "Del din skærm",
|
||||
"shareYourScreenDisabled": "Skærmdeling er ikke slået til.",
|
||||
"shareYourScreenDisabledForGuest": "Gæster kan ikke dele deres skærm.",
|
||||
"startLiveStreaming": "Start live stream",
|
||||
"startRecording": "Start optagelse",
|
||||
"startRemoteControlErrorMessage": "Der er sket en fejl under opstart af fjern kontrol sessionen!",
|
||||
"stopLiveStreaming": "Stop live stream",
|
||||
"stopRecording": "Stop optagelse",
|
||||
"stopRecordingWarning": "Er du sikker på at du ønsker at stoppe optagelesen?",
|
||||
"stopStreamingWarning": "Er du sikker på at du ønsker at stoppe live streaming?",
|
||||
"streamKey": "Live stream nøgle",
|
||||
"Submit": "Gem",
|
||||
"thankYou": "Tak for at du har benyttet {{appName}}!",
|
||||
"token": "token",
|
||||
"tokenAuthFailed": "Beklager, du kan ikke deltage i dette møde.",
|
||||
"tokenAuthFailedTitle": "Log ind fejlede",
|
||||
"transcribing": "Transcribering",
|
||||
"unlockRoom": "Fjern møde adgangskode",
|
||||
"userPassword": "bruger adgangskode",
|
||||
"WaitForHostMsg": "Mødet <b>{{room}}</b> er ikke startet endnu. Hvis du er hosten log venligst ind, ellers vent på at hosten kommer.",
|
||||
"WaitForHostMsgWOk": "Mødet <b>{{room}}</b> er ikke startet endnu. Hvis du er hosten tryk venligst på OK for at logge ind, ellers vent på at hosten kommer.",
|
||||
"WaitingForHost": "Venter på host ...",
|
||||
"Yes": "Ja",
|
||||
"yourEntireScreen": "Hele din skærm"
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "er nu {{status}}"
|
||||
},
|
||||
"documentSharing": {
|
||||
"title": "Delt dokument"
|
||||
},
|
||||
"feedback": {
|
||||
"average": "Normal",
|
||||
"bad": "Dårlig",
|
||||
"detailsLabel": "Uddyb.",
|
||||
"good": "God",
|
||||
"rateExperience": "Vurder din oplevelse",
|
||||
"veryBad": "Meget dårlig",
|
||||
"veryGood": "Meget god"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Besvar",
|
||||
"audioCallTitle": "Indkommende opkald",
|
||||
"decline": "Afvis",
|
||||
"productLabel": "fra Appinux skærmbesøg",
|
||||
"videoCallTitle": "Indkommende videoopkald"
|
||||
},
|
||||
"info": {
|
||||
"accessibilityLabel": "Vis info",
|
||||
"addPassword": "Tilføj adgangskode",
|
||||
"cancelPassword": "Annulé adgangskode",
|
||||
"conferenceURL": "Link:",
|
||||
"country": "Land",
|
||||
"dialANumber": "For at deltage i mødet ring til et af følgende telefonnumre og indtast pinkode.",
|
||||
"dialInConferenceID": "Pinkode:",
|
||||
"dialInNotSupported": "Deltagelse vis telfonen er pt. ikke understøttet.",
|
||||
"dialInNumber": "Ring ind:",
|
||||
"dialInSummaryError": "Der er opstået en fejl under hentning af ring ind information. Forsøg venligst igen senere.",
|
||||
"dialInTollFree": "Gratis",
|
||||
"genericError": "Der er opstået en fejl",
|
||||
"inviteLiveStream": "For at se en live stream i dette møde klik på dette link: {{url}}",
|
||||
"invitePhone": "Ring-ind: {{number}},,{{conferenceID}}#",
|
||||
"invitePhoneAlternatives": "",
|
||||
"inviteURLFirstPartGeneral": "Der er blevet inviteret til at deltage i et møde.",
|
||||
"inviteURLFirstPartPersonal": "{{name}} inviterer dig til at deltage i et møde.\n",
|
||||
"inviteURLSecondPart": "\nDeltag i mødet:\n{{url}}\n",
|
||||
"liveStreamURL": "Live stream:",
|
||||
"moreNumbers": "Flere telefonnumre",
|
||||
"noNumbers": "Ring-ind nummer findes ikke.",
|
||||
"noPassword": "Ingen",
|
||||
"noRoom": "Ring-ind møde information blev ikke angivet.",
|
||||
"numbers": "Ring-ind numre",
|
||||
"password": "Adgangskode:",
|
||||
"title": "Del",
|
||||
"tooltip": "Del link og rind-ind information for dette møde",
|
||||
"label": "Møde information"
|
||||
},
|
||||
"inviteDialog": {
|
||||
"alertText": "Kunne ikke invitere nogle af deltagerne.",
|
||||
"header": "Invitér",
|
||||
"searchCallOnlyPlaceholder": "Indtast telefonnummer",
|
||||
"searchPeopleOnlyPlaceholder": "Søg efter deltagere",
|
||||
"searchPlaceholder": "Deltager eller telefonnummer",
|
||||
"send": "Send"
|
||||
},
|
||||
"inlineDialogFailure": {
|
||||
"msg": "Der er opstået en fejl.",
|
||||
"retry": "Forsøg igen",
|
||||
"support": "Support",
|
||||
"supportMsg": "Hvis denne fejl bliver ved, kontakt"
|
||||
},
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Fokusér på din video",
|
||||
"focusRemote": "Fokusér på en anden persons video",
|
||||
"fullScreen": "Vis eller annullér fuld skærm",
|
||||
"keyboardShortcuts": "Tastaturgenveje",
|
||||
"localRecording": "Vis eller skjul optage kontrolknapper",
|
||||
"mute": "Slå lyd fra eller til for din mikrofon",
|
||||
"pushToTalk": "Tryk for at tale",
|
||||
"raiseHand": "Lyft eller sænk din hånd",
|
||||
"showSpeakerStats": "Vis højtaler statistik",
|
||||
"toggleChat": "Åben eller luk chat",
|
||||
"toggleFilmstrip": "Vis eller skjul video små billeder",
|
||||
"toggleScreensharing": "Skift mellem video og skærmdeling",
|
||||
"toggleShortcuts": "Vis eller skjul tastaturgenveje",
|
||||
"videoMute": "Tænd eller sluk dit kamera",
|
||||
"videoQuality": "Indstil opkaldskvalitet"
|
||||
},
|
||||
"liveStreaming": {
|
||||
"busy": "Der arbejdes på at frigive streamingresourcer, forsøg venligst igen om et par minutter.",
|
||||
"busyTitle": "Alle streamers er optaget",
|
||||
"changeSignIn": "Skift konto.",
|
||||
"choose": "Vælg en live stream",
|
||||
"chooseCTA": "Vælg en stream mulighed. Du er pt. logget ind som {{email}}.",
|
||||
"enterStreamKey": "Indtast din Youtube live stream her.",
|
||||
"error": "Fejl under live streaming. Forsøg venligst igen.",
|
||||
"errorAPI": "En fejl opstod ved forsøg på at tilgå din YouTube broadcast. Forsøg venligst at logge ind igen.",
|
||||
"errorLiveStreamNotEnabled": "Live Streaming er ikke slpet til for {{email}}. Slå venligst live streaming til eller log ind på en konto der har live streaming slået til.",
|
||||
"expandedOff": "Live stream er stoppet",
|
||||
"expandedOn": "Mødet bliver pt. streamet til Youtube.",
|
||||
"expandedPending": "Live streaming starter...",
|
||||
"failedToStart": "Kunne ikke starte live streaming",
|
||||
"getStreamKeyManually": "Vi kunne ikke hente nogle live streams. Forsøg at hente din live stream nøgle fra Youtube.",
|
||||
"invalidStreamKey": "Live stream nøgle er muligvis forkert.",
|
||||
"off": "Live Streaming er stoppet",
|
||||
"offBy": "{{name}} stoppede live streaming",
|
||||
"on": "Live Streaming",
|
||||
"onBy": "{{name}} startede live streaming",
|
||||
"pending": "Starter Live Stream...",
|
||||
"serviceName": "Live Streaming service",
|
||||
"signedInAs": "Du er pt. logget ind som:",
|
||||
"signIn": "Log ind med Google",
|
||||
"signInCTA": "Log ind eller indtast din live stream nøgle fra YouTube.",
|
||||
"signOut": "Log ud",
|
||||
"start": "Start en live stream",
|
||||
"streamIdHelp": "Hvad er dette?",
|
||||
"unavailableTitle": "Live Streaming er ikke tilgængelig"
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
"off": "Slået fra",
|
||||
"on": "Slået til",
|
||||
"unknown": "Ukendt"
|
||||
},
|
||||
"dialogTitle": "Optage kontrolknapper",
|
||||
"duration": "Varighed",
|
||||
"durationNA": "Ikke tilgængelig",
|
||||
"encoding": "Encoding",
|
||||
"label": "Optager",
|
||||
"labelToolTip": "Optager er slået til",
|
||||
"localRecording": "Local Recording",
|
||||
"me": "Mig",
|
||||
"messages": {
|
||||
"engaged": "Optager er slået til.",
|
||||
"finished": "Optagelses session {{token}} afsluttet. Send venligst den optagede fil til moderator.",
|
||||
"finishedModerator": "Optagelses session {{token}} afsluttet. Optagelsen er gemt. Bed deltageren om at sende deres optagelser.",
|
||||
"notModerator": "Du er ikke moderator. Du kan ikke starte eller stoppe optagelser."
|
||||
},
|
||||
"moderator": "Moderator",
|
||||
"no": "Nej",
|
||||
"participant": "Deltager",
|
||||
"participantStats": "Deltager statistik",
|
||||
"sessionToken": "Sessionsnøgle",
|
||||
"start": "Start optagelse",
|
||||
"stop": "Stop optagelse",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"lockRoomPassword": "adgangskode",
|
||||
"lockRoomPasswordUppercase": "Adgangskode",
|
||||
"me": "mig",
|
||||
"notify": {
|
||||
"connectedOneMember": "{{name}} deltager nu i mødet",
|
||||
"connectedThreePlusMembers": "{{name}} og {{count}} andre deltager nu i mødet",
|
||||
"connectedTwoMembers": "{{first}} og {{second}} deltager nu i mødet",
|
||||
"disconnected": "afbrudt",
|
||||
"focus": "Konference fokus",
|
||||
"focusFail": "{{component}} ikke tilgængelig - forsøg igen om {{ms}} sekunder",
|
||||
"grantedTo": "Moderator rettigheder er givet til {{to}}!",
|
||||
"invitedOneMember": "{{name}} er blevet inviteret",
|
||||
"invitedThreePlusMembers": "{{name}} og {{count}} andre er blevet inviteret",
|
||||
"invitedTwoMembers": "{{first}} og {{second}} er blevet inviteret",
|
||||
"kickParticipant": "{{kicked}} blev afbrudt fra mødet af {{kicker}}",
|
||||
"me": "Mig",
|
||||
"moderator": "Moderator rettigheder givet!",
|
||||
"muted": "Du har startet samtalen med lyden slået fra.",
|
||||
"mutedTitle": "Din lyd er slået fra!",
|
||||
"mutedRemotelyTitle": "Din lyd er slået fra af {{participantDisplayName}}!",
|
||||
"mutedRemotelyDescription": "",
|
||||
"passwordRemovedRemotely": "",
|
||||
"passwordSetRemotely": "",
|
||||
"raisedHand": "{{name}} ønsker at få ordet.",
|
||||
"somebody": "Nogen",
|
||||
"startSilentTitle": "",
|
||||
"startSilentDescription": "",
|
||||
"suboptimalExperienceDescription": "Hmmm... vi er bange for at din oplevelse med {{appName}} ikke vil være optimal. Vi arbejder på at forbedre dette, men indtil da så forsøg venligst at bruge en af følgende <a href='static/recommendedBrowsers.html' target='_blank'>fuldt understøttede internet browsere</a>.",
|
||||
"suboptimalExperienceTitle": "Browser Advarsel",
|
||||
"unmute": "",
|
||||
"newDeviceCameraTitle": "Nyt kamerat fundet",
|
||||
"newDeviceAudioTitle": "Ny lyd enhed fundet",
|
||||
"newDeviceAction": "Benyt"
|
||||
},
|
||||
"passwordSetRemotely": "sat af et andet medlem",
|
||||
"passwordDigitsOnly": "Op til {{number}} tal",
|
||||
"poweredby": "powered by",
|
||||
"presenceStatus": {
|
||||
"busy": "Optaget",
|
||||
"calling": "Ringer op...",
|
||||
"connected": "Forbundet",
|
||||
"connecting": "Forbinder...",
|
||||
"connecting2": "Forbinder*...",
|
||||
"disconnected": "Forbindelse afbrudt",
|
||||
"expired": "Udløbet",
|
||||
"ignored": "Ignoreret",
|
||||
"initializingCall": "Starter opkald...",
|
||||
"invited": "Inviteret",
|
||||
"rejected": "Afvist",
|
||||
"ringing": "Ringer..."
|
||||
},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Vælg navn/alias",
|
||||
"setEmailInput": "Indtast email",
|
||||
"setEmailLabel": "Indtast gravatar email",
|
||||
"title": "Profil"
|
||||
},
|
||||
"raisedHand": "Ønsker at tale",
|
||||
"recording": {
|
||||
"authDropboxText": "Upload til Dropbox",
|
||||
"availableSpace": "Tilgængelig plads: {{spaceLeft}} MB (plads til ca. {{duration}} minutters optagelse)",
|
||||
"beta": "BETA",
|
||||
"busy": "Der arbejdes på at frigive optagelsesresourcer. Prøv venligst igen om nogle få minutter.",
|
||||
"busyTitle": "Alle optagere er pt optaget",
|
||||
"error": "Fejl under optagelse, forsøg venligst igen om lidt.",
|
||||
"expandedOff": "Optagelse er stoppet½",
|
||||
"expandedOn": "Mødet bliver pt. optaget.",
|
||||
"expandedPending": "Optagelse starter...",
|
||||
"failedToStart": "Kunne ikke start optagelse",
|
||||
"fileSharingdescription": "Del optagelse med deltagere",
|
||||
"live": "LIVE",
|
||||
"loggedIn": "Logget ind som {{userName}}",
|
||||
"off": "Optagelse stoppet",
|
||||
"offBy": "{{name}} stoppede optagelsen",
|
||||
"on": "Optager",
|
||||
"onBy": "{{name}} startede optagelsen",
|
||||
"pending": "Gør klar til at optage mødet...",
|
||||
"rec": "REC",
|
||||
"serviceDescription": "Din optagelse bliver gemt af optager servicen",
|
||||
"serviceName": "Optager service",
|
||||
"signIn": "Log ind",
|
||||
"signOut": "Log ud",
|
||||
"unavailable": "Optager service {{serviceName}} er ikke tilgængelig. Der arbejdes på at løse problemet, forsøg igen senere.",
|
||||
"unavailableTitle": "Optagelse ikke tilgængelig"
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Træk ned for update"
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
"about": "{{appName}}s kalenderintegration benyttes til at sikkert tilgå din kalender så den kan læse fremtidige aftaler.",
|
||||
"disconnect": "Afbryd",
|
||||
"microsoftSignIn": "Log ind med Microsoft",
|
||||
"signedIn": "Henter kalenderaftaler for {{email}}. Tryk på Afbryd knappen for at afbryde forbindelsen.",
|
||||
"title": "Kalender"
|
||||
},
|
||||
"devices": "Enheder",
|
||||
"followMe": "Alle følger mig",
|
||||
"language": "Sprog",
|
||||
"loggedIn": "Logget ind som {{name}}",
|
||||
"moderator": "Moderator",
|
||||
"more": "Mere",
|
||||
"name": "Navn",
|
||||
"noDevice": "Ingen",
|
||||
"selectAudioOutput": "Lyd udgang",
|
||||
"selectCamera": "Kamera",
|
||||
"selectMic": "Mikrofon",
|
||||
"startAudioMuted": "Alle starter med lyden slået fra",
|
||||
"startVideoMuted": "Alle starter skjult",
|
||||
"title": "Indstillinger"
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Avanceret",
|
||||
"alertOk": "OK",
|
||||
"alertTitle": "Advarsel",
|
||||
"alertURLText": "Den indtastede server url er ikke korrekt",
|
||||
"buildInfoSection": "Build Information",
|
||||
"conferenceSection": "Konference",
|
||||
"disableCallIntegration": "Slå indbygget opkalds integration fra",
|
||||
"disableP2P": "Slå Peer-To-Peer fra",
|
||||
"displayName": "Navn/alias",
|
||||
"email": "Email",
|
||||
"header": "Indstillinger",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Server URL",
|
||||
"showAdvanced": "Show advanced settings",
|
||||
"startWithAudioMuted": "Start med lyden slået fra",
|
||||
"startWithVideoMuted": "Start med video slået fra",
|
||||
"version": "Version"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "\n\n=====\n\nØnsker du at ringe ind fra din telefon?\n\n{{defaultDialInNumber}}Klik på dette link for at se telefonnummeret for dette møde\n{{dialInfoPageUrl}}",
|
||||
"mainText": "Klik på det følgende link for at deltage i mødet:\n{{roomUrl}}"
|
||||
},
|
||||
"speaker": "Højtaler",
|
||||
"speakerStats": {
|
||||
"hours": "{{count}}t",
|
||||
"minutes": "{{count}}m",
|
||||
"name": "Navn",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerStats": "Højtaler info",
|
||||
"speakerTime": "Højtaler tid"
|
||||
},
|
||||
"startupoverlay": {
|
||||
"policyText": " ",
|
||||
"title": "{{app}} har brug for adgang til din mikrofon og kamera."
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
"rejoinKeyTitle": "Forbind igen",
|
||||
"text": "Tryk på <i>Forbind igen </i> knappen for at deltage igen.",
|
||||
"title": "Dit møde blev afbrudt da din computer gik i dvale."
|
||||
},
|
||||
"toolbar": {
|
||||
"accessibilityLabel": {
|
||||
"audioOnly": "Tænd/sluk lyd",
|
||||
"audioRoute": "Vælg lydenhed",
|
||||
"callQuality": "Indstil møde kvalitet",
|
||||
"cc": "Slå undertekst fra/til",
|
||||
"chat": "Slå chat fra/til",
|
||||
"document": "Slå delte dokumenter fra/til",
|
||||
"download": "Hent vores apps",
|
||||
"feedback": "Giv tilbagemelding",
|
||||
"fullScreen": "Slå fuld skærm fra/til",
|
||||
"hangup": "Forlad mødet",
|
||||
"help": "Hjælp",
|
||||
"invite": "Inviter deltagere",
|
||||
"kick": "Afbryd deltager",
|
||||
"localRecording": "Slå optagekontroller fra/til",
|
||||
"lockRoom": "Slå mødeadgangskode fra/til",
|
||||
"moreActions": "Slå \"Flere indstillinger\" menu fra/til",
|
||||
"moreActionsMenu": "Flere indtstillinger",
|
||||
"moreOptions": "Show more options",
|
||||
"mute": "Slå lyd til/fra",
|
||||
"muteEveryone": "Mute everyone",
|
||||
"pip": "Slå Billede-i-billede fra/til",
|
||||
"privateMessage": "Send privat besked",
|
||||
"profile": "Redigér profil",
|
||||
"raiseHand": "Slå løft hånden fra/til",
|
||||
"recording": "Slå optagelse til/fra",
|
||||
"remoteMute": "Slå lyd fra for deltager",
|
||||
"Settings": "Slå indstillinger fra/til",
|
||||
"sharedvideo": "Slå Youtube video deling fra/til",
|
||||
"shareRoom": "Invitér nogen",
|
||||
"shareYourScreen": "Slå skærmdeling fra/til",
|
||||
"shortcuts": "Slå genveje fra/til",
|
||||
"show": "Vis",
|
||||
"speakerStats": "Slå højtaler info fra/til",
|
||||
"tileView": "Slå tileview fra/til",
|
||||
"toggleCamera": "Slå kamera fra/til",
|
||||
"videomute": "Slå video fra/til",
|
||||
"videoblur": "Slå baggrundsløring fra/til"
|
||||
},
|
||||
"addPeople": "Tilføj deltager til mødet",
|
||||
"audioOnlyOff": "Slå kun-lyd møder fra",
|
||||
"audioOnlyOn": "Slå kun-lyd møder til",
|
||||
"audioRoute": "Vælg lydenhed",
|
||||
"authenticate": "Log ind",
|
||||
"callQuality": "Indstil møde kvalitet",
|
||||
"chat": "Åben / Luk chat",
|
||||
"closeChat": "Luk chat",
|
||||
"documentClose": "Luk delt dokument",
|
||||
"documentOpen": "Åben delt dokument",
|
||||
"download": "Hent vores apps",
|
||||
"enterFullScreen": "Vis fuld skærm",
|
||||
"enterTileView": "Tileview",
|
||||
"exitFullScreen": "Luk fuld skærm",
|
||||
"exitTileView": "Luk Tileview",
|
||||
"feedback": "Giv tilbagemeldign",
|
||||
"hangup": "Forlad",
|
||||
"help": "Hjælp",
|
||||
"invite": "Invitér deltagere",
|
||||
"login": "Log ind",
|
||||
"logout": "Log ud",
|
||||
"lowerYourHand": "Ta hånden ned",
|
||||
"moreActions": "Flere handlinger",
|
||||
"moreOptions": "Flere indstillinger",
|
||||
"mute": "Slå lyd fra / Slå lyd til",
|
||||
"muteEveryone": "Slå lyd fra for alle",
|
||||
"noAudioSignalTitle": "Der kommer ingen input fra din mikrofon!",
|
||||
"noAudioSignalDesc": "Hvis du ikke med vilje har slået den fra under systemindstillinger eller hardware, kan du overveje at skifte enhed.",
|
||||
"noAudioSignalDescSuggestion": "Hvis du ikke med vilje har slået den fra under systemindstillinger eller hardware, skal du overveje at skifte til den foreslåede enhed.",
|
||||
"noAudioSignalDialInDesc": "Du kan også ringe op ved hjælp af:",
|
||||
"noAudioSignalDialInLinkDesc": "Opkaldsnumre",
|
||||
"noisyAudioInputTitle": "Det lyder som om din mikrofon laver støj!",
|
||||
"noisyAudioInputDesc": "Det lyder som om din mikrofon laver støj. Overvej venligst at slå lyden fra eller skifte enhed.",
|
||||
"openChat": "Åben chat",
|
||||
"pip": "Benyt Billede-i-billede",
|
||||
"privateMessage": "Send private message",
|
||||
"profile": "Rediger profil",
|
||||
"raiseHand": "Ræk hånden op / Tag hånden ned",
|
||||
"raiseYourHand": "Ræk hånden op",
|
||||
"Settings": "Indstillinger",
|
||||
"sharedvideo": "Del en Youtube video",
|
||||
"shareRoom": "Invitér deltagere",
|
||||
"shortcuts": "Vis genveje",
|
||||
"speakerStats": "Højtaler info",
|
||||
"startScreenSharing": "Start skærmdeling",
|
||||
"startSubtitles": "Vis undertekster",
|
||||
"stopScreenSharing": "Stop skærmdeling",
|
||||
"stopSubtitles": "Skjul undertekster",
|
||||
"stopSharedVideo": "Stop YouTube video",
|
||||
"talkWhileMutedPopup": "Forsøger du at sige noget? Din lyd er slået fra.",
|
||||
"tileViewToggle": "Slå tileview fra/til",
|
||||
"toggleCamera": "Slå kamera fra/til",
|
||||
"videomute": "Start / Stop kamera",
|
||||
"startvideoblur": "Slå baggrundssløring til",
|
||||
"stopvideoblur": "Slå baggrundssløring fra"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Start / Stop undertekster",
|
||||
"error": "Transkription mislykkedes. Prøv venligst igen.",
|
||||
"expandLabel": "Transkription er i øjeblikket tændt",
|
||||
"failedToStart": "Transkription kunne ikke starte",
|
||||
"labelToolTip": "Mødet transkriberes",
|
||||
"off": "Transkription stoppet",
|
||||
"pending": "Forbereder sig til at transkribere mødet ...",
|
||||
"start": "Begynd at vise undertekster",
|
||||
"stop": "Stop med at få vist undertekster",
|
||||
"tr": "TR"
|
||||
},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser.",
|
||||
"chromeGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser.",
|
||||
"edgeGrantPermissions": "Vælg <b><i>Ja</i> </b>, når din browser beder om tilladelser.",
|
||||
"electronGrantPermissions": "Giv tilladelse til at bruge dit kamera og din mikrofon",
|
||||
"firefoxGrantPermissions": "Vælg <b> <i> Del valgt enhed </i> </b>, når din browser beder om tilladelser.",
|
||||
"iexplorerGrantPermissions": "Vælg <b><i>OK</i> </b>, når din browser beder om tilladelser.",
|
||||
"nwjsGrantPermissions": "Giv tilladelse til at bruge dit kamera og din mikrofon",
|
||||
"operaGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser.",
|
||||
"react-nativeGrantPermissions": "Vælg <b><i> Tillad</i> </b>, når din browser beder om tilladelser.",
|
||||
"safariGrantPermissions": "Vælg <b><i>OK</i> </b>, når din browser beder om tilladelser."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Vi arbejder på at frigøre ressourcer. Prøv igen om et par minutter.",
|
||||
"busyTitle": "Mødeservice er i øjeblikket optaget",
|
||||
"errorAlreadyInvited": "{{displayName}} allerede inviteret",
|
||||
"errorInvite": "Mødet er endnu ikke etableret. Prøv igen senere.",
|
||||
"errorInviteFailed": "Vi arbejder på at løse problemet. Prøv igen senere.",
|
||||
"errorInviteFailedTitle": "Inviterer {{displayName}} mislykkedes",
|
||||
"errorInviteTitle": "Fejl ved indbydelse til møde",
|
||||
"pending": "{{displayName}} er blevet inviteret"
|
||||
},
|
||||
"videoStatus": {
|
||||
"audioOnly": "AUD",
|
||||
"audioOnlyExpanded": "Du er i kun-lyd tilstand. Denne tilstand sparrer båndbredde, men du kan ikke se andres video.",
|
||||
"callQuality": "Opkaldskvalitet",
|
||||
"hd": "HD",
|
||||
"hdTooltip": "Viser HD video",
|
||||
"highDefinition": "Høj opløsning",
|
||||
"labelTooiltipNoVideo": "Ingen video",
|
||||
"labelTooltipAudioOnly": "Tilstand kun-lyd er slået til",
|
||||
"ld": "LD",
|
||||
"ldTooltip": "Viser lav opløsnings video",
|
||||
"lowDefinition": "Lav opløsning",
|
||||
"onlyAudioAvailable": "Kun-lyd er tilgængelig",
|
||||
"onlyAudioSupported": "Vi understøtter kun-lyd i denne browser.",
|
||||
"p2pEnabled": "Peer to Peer slået til",
|
||||
"p2pVideoQualityDescription": "I peer-to-peer tilstand kan den modtagne opkaldskvalitet kun skiftes mellem høj og kun-lyd. Andre indstillinger vil ikke virke, før peer to peer er afsluttet.",
|
||||
"recHighDefinitionOnly": "Foretrækker høj opløsning.",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Vider normal opløsnings video",
|
||||
"standardDefinition": "Standard opløsning"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"domute": "Slå lyd fra",
|
||||
"domuteOthers": "Slå lyd fra for alle andre",
|
||||
"flip": "Flip",
|
||||
"kick": "Afbryd",
|
||||
"moderator": "Moderator",
|
||||
"mute": "Medlemmets lyd er slået fra",
|
||||
"muted": "Lyd slået fra",
|
||||
"remoteControl": "Fjernbetjening",
|
||||
"show": "",
|
||||
"videomute": "Deltageren har stoppet kameraet"
|
||||
},
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
"join": "Tryk for at deltage",
|
||||
"roomname": "Skriv møde navn"
|
||||
},
|
||||
"appDescription": "Chat med hele dit team eller inviter alle du kender. {{app}} er en fuldt krypteret, 100% open source videokonference løsning som du kan bruge hele dagen, hver dag, gratis - uden at du behøver en konto. ",
|
||||
"audioVideoSwitch": {
|
||||
"audio": "Lyd",
|
||||
"video": "Video"
|
||||
},
|
||||
"calendar": "Kalender",
|
||||
"connectCalendarButton": "Forbind til din kalender",
|
||||
"connectCalendarText": "",
|
||||
"enterRoomTitle": "Start et nyt møde",
|
||||
"go": "Start",
|
||||
"join": "Deltag",
|
||||
"info": "Info",
|
||||
"privacy": "Privatliv",
|
||||
"recentList": "Seneste",
|
||||
"recentListDelete": "Slet",
|
||||
"recentListEmpty": "Din seneste liste er i øjeblikket tom. Chat med dit team, og du finder alle dine seneste møder her.",
|
||||
"reducedUIText": "",
|
||||
"roomname": "Indtast mødenavn",
|
||||
"roomnameHint": "Indtast mødenavnet, du vil deltage i.",
|
||||
"sendFeedback": "Giv tilbagemelding",
|
||||
"betingelser": "Betingelser",
|
||||
"title": "Skærmbesøg & videomøder"
|
||||
}
|
||||
}
|
||||
@@ -20,39 +20,49 @@
|
||||
"audioDevices": {
|
||||
"bluetooth": "Bluetooth",
|
||||
"headphones": "Kopfhörer",
|
||||
"phone": "Telefon",
|
||||
"speaker": "Sprecher"
|
||||
"phone": "Hörer",
|
||||
"speaker": "Lautsprecher",
|
||||
"none": "Keine Audiogeräte verfügbar"
|
||||
},
|
||||
"audioOnly": {
|
||||
"audioOnly": "Nur Audio"
|
||||
},
|
||||
"calendarSync": {
|
||||
"addMeetingURL": "Meeting-Link hinzufügen",
|
||||
"confirmAddLink": "Wollen Sie einen Jitsi-Link zu dieser Veranstaltung hinzufügen?",
|
||||
"confirmAddLink": "Wollen Sie einen Jitsi-Link zu diesem Termin hinzufügen?",
|
||||
"error": {
|
||||
"appConfiguration": "Kalenderintegration ist nicht richtig konfiguriert.",
|
||||
"generic": "Ein Fehler ist aufgetreten. Prüfen Sie Ihre Kalendereinstellungen oder versuchen Sie, den Kalender zu aktualisieren.",
|
||||
"notSignedIn": "Ein Fehler ist während der Authentifizierung zur Anzeige von Kalendererveranstaltungen aufgetreten. Prüfen Sie Ihre Kalendereinstellungen oder versuchen Sie, sich erneut anzumelden."
|
||||
"notSignedIn": "Ein Fehler ist während der Authentifizierung zur Anzeige von Kalenderterminen aufgetreten. Prüfen Sie Ihre Kalendereinstellungen oder versuchen Sie, sich erneut anzumelden."
|
||||
},
|
||||
"join": "Teilnehmen",
|
||||
"joinTooltip": "Am Meeting teilnehmen",
|
||||
"nextMeeting": "Nächste Konferenz",
|
||||
"noEvents": "Es sind keine bevorstehenden Veranstaltungen geplant.",
|
||||
"noEvents": "Es gibt keine bevorstehenden Termine.",
|
||||
"ongoingMeeting": "Laufendes Meeting",
|
||||
"permissionButton": "Einstellungen öffnen",
|
||||
"permissionMessage": "Die App benötigt Zugriff auf den Kalender um die Termine und Konferenzen anzuzeigen.",
|
||||
"permissionMessage": "Die App benötigt Zugriff auf den Kalender, um Termine und Konferenzen anzuzeigen.",
|
||||
"refresh": "Kalender aktualisieren",
|
||||
"today": "Heute"
|
||||
},
|
||||
"\u0005calendarSync": {},
|
||||
"chat": {
|
||||
"error": "",
|
||||
"error": "Fehler: Ihre Nachricht wurde nicht versendet. Grund: {{error}}",
|
||||
"fieldPlaceHolder": "Geben Sie Ihre Nachricht hier ein",
|
||||
"messagebox": "Nachricht eingeben",
|
||||
"messageTo": "Private Nachricht an {{recipient}}",
|
||||
"noMessagesMessage": "Es gibt noch keine Nachricht in dieser Konferenz. Starten Sie hier eine Unterhaltung!",
|
||||
"nickname": {
|
||||
"popover": "Name",
|
||||
"title": "Geben Sie einen Alias zum Chatten ein"
|
||||
},
|
||||
"title": "Chatten"
|
||||
"privateNotice": "Private Nachricht an {{recipient}}",
|
||||
"title": "Chatten",
|
||||
"you": "Sie"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"installExtensionText": "Installieren Sie die Erweiterung für die Integration von Google Calendar und Office 365",
|
||||
"buttonText": "Chrome-Erweiterung installieren",
|
||||
"dontShowAgain": "Hinweis nicht mehr anzeigen"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Eine Verbindung zu Ihrem Meeting wird hergestellt…"
|
||||
@@ -67,7 +77,10 @@
|
||||
"DISCONNECTED": "Getrennt",
|
||||
"DISCONNECTING": "Verbindung wird getrennt",
|
||||
"ERROR": "Fehler",
|
||||
"RECONNECTING": "Es ist ein Netzwerkproblem aufgetreten. Verbinde..."
|
||||
"FETCH_SESSION_ID": "Sitzungs-ID erhalten...",
|
||||
"GET_SESSION_ID_ERROR": "Sitzungs-ID-Fehler erhalten: {{code}}",
|
||||
"GOT_SESSION_ID": "Sitzungs-ID erhalten... Beendet",
|
||||
"LOW_BANDWIDTH": "Video für {{displayName}} wurde ausgeschaltet, um Bandbreite einzusparen"
|
||||
},
|
||||
"connectionindicator": {
|
||||
"address": "Adresse:",
|
||||
@@ -75,6 +88,7 @@
|
||||
"bitrate": "Bitrate:",
|
||||
"bridgeCount": "Serverzahl: ",
|
||||
"connectedTo": "Verbunden mit:",
|
||||
"e2e_rtt": "E2E RTT:",
|
||||
"framerate": "Bildwiederholrate:",
|
||||
"less": "Weniger anzeigen",
|
||||
"localaddress": "Lokale Adresse:",
|
||||
@@ -97,7 +111,7 @@
|
||||
"resolution": "Auflösung:",
|
||||
"status": "Verbindung:",
|
||||
"transport": "Protokoll:",
|
||||
"turn": " (TURN)"
|
||||
"transport_plural": "Protokolle:"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "Früher",
|
||||
@@ -105,9 +119,9 @@
|
||||
"yesterday": "Gestern"
|
||||
},
|
||||
"deepLinking": {
|
||||
"appNotInstalled": "Sie benötigen die {{app}} App um der Konferenz auf dem Smartphone beizutreten.",
|
||||
"description": "Nichts passiert? Wir haben versucht die Konferenz in {{app}} zu öffnen. Versuchen Sie es erneut oder treten Sie der Konferenz in {{app}} im Web bei.",
|
||||
"descriptionWithoutWeb": "",
|
||||
"appNotInstalled": "Sie benötigen die „{{app}}“-App, um der Konferenz auf dem Smartphone beizutreten.",
|
||||
"description": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. Versuchen Sie es erneut oder treten Sie der Konferenz in {{app}} im Web bei.",
|
||||
"descriptionWithoutWeb": "Ist nichts passiert? Wir haben versucht, Ihre Besprechung in der „{{{app}}}“-Desktop-App zu starten.",
|
||||
"downloadApp": "App herunterladen",
|
||||
"launchWebButton": "Im Web öffnen",
|
||||
"openApp": "In der App fortfahren",
|
||||
@@ -115,6 +129,7 @@
|
||||
"tryAgainButton": "Erneut mit der nativen Applikation versuchen"
|
||||
},
|
||||
"defaultLink": "Bsp.: {{url}}",
|
||||
"defaultNickname": "Z.B. Jane Pink",
|
||||
"deviceError": {
|
||||
"cameraError": "Fehler beim Zugriff auf die Kamera",
|
||||
"cameraPermission": "Fehler beim Bezug der Kamera-Zugriffsberechtigungen",
|
||||
@@ -132,19 +147,19 @@
|
||||
"liveStreaming": "Livestream:"
|
||||
},
|
||||
"allow": "Erlauben",
|
||||
"alreadySharedVideoMsg": "",
|
||||
"alreadySharedVideoMsg": "Ein anderer Teilnehmer gibt bereits ein Video weiter. Bei dieser Konferenz ist jeweils nur ein geteiltes Video möglich.",
|
||||
"alreadySharedVideoTitle": "Nur ein geteiltes Video gleichzeitig",
|
||||
"applicationWindow": "Anwendungsfenster",
|
||||
"Back": "Zurück",
|
||||
"cameraConstraintFailedError": "Ihre Kamera erfüllt die notwendigen Anforderungen nicht.",
|
||||
"cameraNotFoundError": "Kamera nicht gefunden.",
|
||||
"cameraNotSendingData": "Die Kamera ist nicht verfügbar. Bitte prüfen ob eine andere Applikation die Kamera verwendet, eine andere Kamera vom Einstellungs-Menu auswählen oder die Applikation neu laden.",
|
||||
"cameraNotSendingData": "Die Kamera ist nicht verfügbar. Bitte prüfen, ob eine andere Applikation die Kamera verwendet, eine andere Kamera vom Einstellungs-Menü auswählen oder die Applikation neu laden.",
|
||||
"cameraNotSendingDataTitle": "Zugriff auf Kamera nicht möglich",
|
||||
"cameraPermissionDeniedError": "Die Berechtigung zur Verwendung der Kamera wurde nicht erteilt. Sie können trotzdem an der Konferenz teilnehmen, aber die anderen Teilnehmer können Sie nicht sehen. Verwenden Sie die Kamera-Schaltfläche in der Adressleiste um die Berechtigungen zu erteilen.",
|
||||
"cameraUnknownError": "Die Kamera kann aus einem unbekannten Grund nicht verwendet werden.",
|
||||
"cameraUnsupportedResolutionError": "Die Kamera unterstützt die erforderliche Auflösung nicht.",
|
||||
"Cancel": "Abbrechen",
|
||||
"close": "Schliessen",
|
||||
"close": "Schließen",
|
||||
"conferenceDisconnectMsg": "Prüfen Sie allenfalls Ihre Netzwerkverbindung. Verbinde in {{seconds}} Sekunden...",
|
||||
"conferenceDisconnectTitle": "Ihre Verbindung ist getrennt worden.",
|
||||
"conferenceReloadMsg": "Wir versuchen das zu beheben. Verbinde in {{seconds}} Sekunden...",
|
||||
@@ -158,69 +173,75 @@
|
||||
"contactSupport": "Support kontaktieren",
|
||||
"copy": "Kopieren",
|
||||
"dismiss": "OK",
|
||||
"displayNameRequired": "",
|
||||
"displayNameRequired": "Hallo! Wie ist Ihr Name?",
|
||||
"done": "Fertig",
|
||||
"enterDisplayName": "",
|
||||
"enterDisplayName": "Bitte geben Sie hier Ihren Namen ein",
|
||||
"error": "Fehler",
|
||||
"externalInstallationMsg": "Die Bildschirmfreigabeerweiterung muss installiert werden.",
|
||||
"externalInstallationMsg": "Die Bildschirmfreigabe-Erweiterung muss installiert werden.",
|
||||
"externalInstallationTitle": "Erweiterung erforderlich",
|
||||
"goToStore": "Zum Store",
|
||||
"gracefulShutdown": "Der Dienst steht momentan wegen Wartungsarbeiten nicht zur Verfügung. Bitte versuchen Sie es später noch einmal.",
|
||||
"IamHost": "Ich bin der Organisator",
|
||||
"incorrectRoomLockPassword": "",
|
||||
"incorrectRoomLockPassword": "Falsches Passwort",
|
||||
"incorrectPassword": "Benutzername oder Passwort ungültig",
|
||||
"inlineInstallationMsg": "Die Bildschirmfreigabeerweiterung muss installiert werden.",
|
||||
"inlineInstallationMsg": "Die Bildschirmfreigabe-Erweiterung muss installiert werden.",
|
||||
"inlineInstallExtension": "Jetzt installieren",
|
||||
"internalError": "Oh! Es hat etwas nicht funktioniert. Der folgende Fehler ist aufgetreten: {{error}}",
|
||||
"internalErrorTitle": "Interner Fehler",
|
||||
"kickMessage": "",
|
||||
"kickMessage": "Sie können sich für weitere Einzelheiten an {{participantDisplayName}}} wenden.",
|
||||
"kickParticipantButton": "Entfernen",
|
||||
"kickParticipantDialog": "Wollen Sie diesen Teilnehmer wirklich entfernen?",
|
||||
"kickParticipantTitle": "Teilnehmer stummschalten?",
|
||||
"kickTitle": "",
|
||||
"liveStreaming": "Live-Streaming",
|
||||
"liveStreamingDisabledForGuestTooltip": "Gäste können kein Live-Streaming starten.",
|
||||
"liveStreamingDisabledTooltip": "Starten des Live-Streams deaktiviert.",
|
||||
"kickParticipantTitle": "Teilnehmer entfernen?",
|
||||
"kickTitle": "Autsch! {{participantDisplayName}} hat Sie aus dem Meeting geworfen.",
|
||||
"liveStreaming": "Livestreaming",
|
||||
"liveStreamingDisabledForGuestTooltip": "Gäste können kein Livestreaming starten.",
|
||||
"liveStreamingDisabledTooltip": "Starten des Livestreams deaktiviert.",
|
||||
"lockMessage": "Die Konferenz konnte nicht gesperrt werden.",
|
||||
"lockRoom": "",
|
||||
"lockRoom": "Meeting $t(lockRoomPasswordUppercase) hinzufügen",
|
||||
"lockTitle": "Sperren fehlgeschlagen",
|
||||
"logoutQuestion": "Sind Sie sicher, dass Sie sich abmelden und die Konferenz verlassen möchten?",
|
||||
"logoutTitle": "Abmelden",
|
||||
"maxUsersLimitReached": "",
|
||||
"maxUsersLimitReachedTitle": "",
|
||||
"maxUsersLimitReached": "Das Limit für die maximale Teilnehmerzahl ist erreicht. Die Konferenz ist voll. Bitte wenden Sie sich an den Besitzer des Meetings oder versuchen Sie es später noch einmal!",
|
||||
"maxUsersLimitReachedTitle": "Maximales Teilnehmerlimit erreicht",
|
||||
"micConstraintFailedError": "Ihr Mikrofon erfüllt die notwendigen Anforderungen nicht.",
|
||||
"micNotFoundError": "Mikrofon nicht gefunden.",
|
||||
"micNotSendingData": "",
|
||||
"micNotSendingDataTitle": "",
|
||||
"micNotSendingData": "Gehen Sie zu den Einstellungen Ihres Computers, um die Stummschaltung Ihres Mikrofons aufzuheben und seinen Pegel einzustellen.",
|
||||
"micNotSendingDataTitle": "Ihr Mikrofon ist durch Ihre Systemeinstellungen stumm geschaltet.",
|
||||
"micPermissionDeniedError": "Die Berechtigung zur Verwendung des Mikrofons wurde nicht erteilt. Sie können trotzdem an der Konferenz teilnehmen, aber die anderen Teilnehmer können Sie nicht hören. Verwenden Sie die Kamera-Schaltfläche in der Adressleiste um die Berechtigungen zu erteilen.",
|
||||
"micUnknownError": "Das Mikrofon kann aus einem unbekannten Grund nicht verwendet werden.",
|
||||
"muteEveryoneElseDialog": "Einmal stummgeschaltet, können Sie deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneElseTitle": "Alle außer {{whom}} stummschaten?",
|
||||
"muteEveryoneDialog": "Wollen Sie wirklich alle stummschalten? Sie können deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneTitle": "Alle stummschalten?",
|
||||
"muteEveryoneSelf": "sich selbst",
|
||||
"muteEveryoneStartMuted": "Alle beginnen von jetzt an stummgeschaltet",
|
||||
"muteParticipantBody": "Sie können die Stummschaltung anderer Teilnehmer nicht aufheben, aber ein Teilnehmer kann seine eigene Stummschaltung jederzeit beenden.",
|
||||
"muteParticipantButton": "Stummschalten",
|
||||
"muteParticipantDialog": "Wollen Sie diesen Teilnehmer wirklich stummschalten? Sie können die Stummschaltung nicht wieder aufheben, der Teilnehmer kann dies aber jederzeit selbst tun.",
|
||||
"muteParticipantTitle": "Teilnehmer stummschalten?",
|
||||
"Ok": "OK",
|
||||
"passwordLabel": "",
|
||||
"passwordLabel": "$t(lockRoomPasswordUppercase)",
|
||||
"passwordNotSupported": "Setzen eines Konferenz-Passworts ist nicht unterstützt",
|
||||
"passwordNotSupportedTitle": "",
|
||||
"passwordRequired": "",
|
||||
"popupError": "Ihr Browser blockiert Popups von dieser Website. Bitte aktivieren Sie Popups in den Sicherheitseinstellungen des Browsers und versuchen Sie es erneut.",
|
||||
"popupErrorTitle": "Popup blockiert",
|
||||
"passwordNotSupportedTitle": "$t(lockRoomPasswordUppercase) nicht unterstützt",
|
||||
"passwordRequired": "$t(lockRoomPasswordUppercase) erforderlich",
|
||||
"popupError": "Ihr Browser blockiert Pop-ups von dieser Website. Bitte aktivieren Sie Pop-ups in den Sicherheitseinstellungen des Browsers und versuchen Sie es erneut.",
|
||||
"popupErrorTitle": "Pop-up blockiert",
|
||||
"recording": "Aufnahme",
|
||||
"recordingDisabledForGuestTooltip": "Gäste können kein Aufzeichnungen starten.",
|
||||
"recordingDisabledForGuestTooltip": "Gäste können keine Aufzeichnungen starten.",
|
||||
"recordingDisabledTooltip": "Start der Aufzeichnung deaktiviert.",
|
||||
"rejoinNow": "Jetzt erneut beitreten",
|
||||
"remoteControlAllowedMessage": "{{user}} hat die Anfrage zur Fernsteuerung angenommen.",
|
||||
"remoteControlDeniedMessage": "{{user}} hat die Anfrage zur Fernsteuerung verweigert.",
|
||||
"remoteControlErrorMessage": "Beim Anfordern der Fernsteuerungsberechtigung von {{user}} ist ein Fehler aufgetreten.",
|
||||
"remoteControlRequestMessage": "Möchten Sie {{user}} erlauben den Computer fernzusteuern?",
|
||||
"remoteControlShareScreenWarning": "Achtung, wenn Sie die Anfrage genehmigen starten Sie die Bildschirmfreigabe!",
|
||||
"remoteControlRequestMessage": "Möchten Sie {{user}} erlauben, den Computer fernzusteuern?",
|
||||
"remoteControlShareScreenWarning": "Achtung, wenn Sie die Anfrage genehmigen, starten Sie die Bildschirmfreigabe!",
|
||||
"remoteControlStopMessage": "Die Fernsteuerung wurde beendet.",
|
||||
"remoteControlTitle": "Fernsteuerung",
|
||||
"Remove": "Entfernen",
|
||||
"removePassword": "",
|
||||
"removeSharedVideoMsg": "Sind Sie sicher dass Sie das geteilte Video entfernen möchten?",
|
||||
"removePassword": "$t(lockRoomPassword) entfernen",
|
||||
"removeSharedVideoMsg": "Sind Sie sicher, dass Sie das geteilte Video entfernen möchten?",
|
||||
"removeSharedVideoTitle": "Freigegebenes Video entfernen",
|
||||
"reservationError": "Fehler im Reservationssystem",
|
||||
"reservationError": "Fehler im Reservierungssystem",
|
||||
"reservationErrorMsg": "Fehler, Nummer: {{code}}, Nachricht: {{msg}}",
|
||||
"retry": "Wiederholen",
|
||||
"screenSharingFailedToInstall": "Oh! Die Erweiterung für die Bildschirmfreigabe konnte nicht installiert werden.",
|
||||
@@ -228,6 +249,10 @@
|
||||
"screenSharingFirefoxPermissionDeniedError": "Die Bildschirmfreigabe ist leider fehlgeschlagen. Bitte stellen Sie sicher, dass die Berechtigung für die Bildschirmfreigabe im Browser erteilt wurde.",
|
||||
"screenSharingFirefoxPermissionDeniedTitle": "Die Bildschirmfreigabe konnte nicht gestartet werden.",
|
||||
"screenSharingPermissionDeniedError": "Oh! Beim Anfordern der Bildschirmfreigabe-Berechtigungen hat etwas nicht funktioniert. Bitte aktualisieren und erneut versuchen.",
|
||||
"sendPrivateMessage": "Sie haben kürzlich eine private Nachricht erhalten. Hatten Sie die Absicht, darauf privat zu antworten, oder wollen Sie Ihre Nachricht an die Gruppe senden?",
|
||||
"sendPrivateMessageCancel": "An die Gruppe senden",
|
||||
"sendPrivateMessageOk": "Privat antworten",
|
||||
"sendPrivateMessageTitle": "Privat antworten?",
|
||||
"serviceUnavailable": "Dienst nicht verfügbar",
|
||||
"sessTerminated": "Konferenz beendet",
|
||||
"Share": "Teilen",
|
||||
@@ -239,33 +264,33 @@
|
||||
"startLiveStreaming": "Einen Livestream starten",
|
||||
"startRecording": "Aufnahme starten",
|
||||
"startRemoteControlErrorMessage": "Beim Versuch die Fernsteuerung zu starten ist ein Fehler aufgetreten.",
|
||||
"stopLiveStreaming": "Live-Streaming stoppen",
|
||||
"stopLiveStreaming": "Livestreaming stoppen",
|
||||
"stopRecording": "Aufnahme stoppen",
|
||||
"stopRecordingWarning": "Sind Sie sicher dass Sie die Aufnahme stoppen möchten?",
|
||||
"stopStreamingWarning": "Sind Sie sicher dass Sie das Live-Streaming stoppen möchten?",
|
||||
"stopRecordingWarning": "Sind Sie sicher, dass Sie die Aufnahme stoppen möchten?",
|
||||
"stopStreamingWarning": "Sind Sie sicher, dass Sie das Livestreaming stoppen möchten?",
|
||||
"streamKey": "Name/Schlüssel für den Stream",
|
||||
"Submit": "OK",
|
||||
"thankYou": "Danke für die Verwendung von {{appName}}!",
|
||||
"token": "Token",
|
||||
"tokenAuthFailed": "Sie sind nicht berechtigt dieser Konferenz beizutreten.",
|
||||
"tokenAuthFailed": "Sie sind nicht berechtigt, dieser Konferenz beizutreten.",
|
||||
"tokenAuthFailedTitle": "Authentifizierung fehlgeschlagen",
|
||||
"transcribing": "Wird transkribiert",
|
||||
"unlockRoom": "",
|
||||
"unlockRoom": "Meeting $t(lockRoomPassword) entfernen",
|
||||
"userPassword": "Benutzerpasswort",
|
||||
"WaitForHostMsg": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Wenn Sie der Veranstalter sind, authentifizieren Sie sich. Warten Sie andernfalls, bis der Veranstalter erscheint.",
|
||||
"WaitForHostMsgWOk": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Wenn Sie der Veranstalter sind, drücken Sie zum Authentifizieren auf OK. Warten Sie andernfalls, bis der Veranstalter erscheint.",
|
||||
"WaitForHostMsg": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Wenn Sie der Organisator sind, authentifizieren Sie sich. Warten Sie andernfalls, bis der Veranstalter erscheint.",
|
||||
"WaitForHostMsgWOk": "Die Konferenz <b>{{room}}</b> wurde noch nicht gestartet. Wenn Sie der Organisator sind, drücken Sie zum Authentifizieren auf OK. Warten Sie andernfalls, bis der Veranstalter erscheint.",
|
||||
"WaitingForHost": "Warten auf den Organisator...",
|
||||
"Yes": "Ja",
|
||||
"yourEntireScreen": "Ganzer Bildschirm"
|
||||
},
|
||||
"\u0005dialog": {
|
||||
"accessibilityLabel": {}
|
||||
},
|
||||
"dialOut": {
|
||||
"statusMessage": "ist jetzt {{status}}"
|
||||
},
|
||||
"documentSharing": {
|
||||
"title": "Freigegebenes Dokument"
|
||||
},
|
||||
"feedback": {
|
||||
"average": "Durschnittlich",
|
||||
"average": "Durchschnittlich",
|
||||
"bad": "Schlecht",
|
||||
"detailsLabel": "Sagen Sie uns mehr dazu.",
|
||||
"good": "Gut",
|
||||
@@ -282,32 +307,32 @@
|
||||
},
|
||||
"info": {
|
||||
"accessibilityLabel": "Informationen anzeigen",
|
||||
"addPassword": "",
|
||||
"cancelPassword": "",
|
||||
"addPassword": "$t(lockRoomPassword) hinzufügen",
|
||||
"cancelPassword": "$t(lockRoomPassword) löschen",
|
||||
"conferenceURL": "Link:",
|
||||
"country": "Land",
|
||||
"dialANumber": "Um am Metting teilzunehmen, müssen Sie eine dieser Nummern wählen und dann die PIN eingeben.",
|
||||
"dialANumber": "Um am Meeting teilzunehmen, müssen Sie eine dieser Nummern wählen und dann die PIN eingeben.",
|
||||
"dialInConferenceID": "PIN:",
|
||||
"dialInNotSupported": "Entschuldigung, leider wird das Einwählen derzeit nicht unterstützt.",
|
||||
"dialInNumber": "Einwählen:",
|
||||
"dialInSummaryError": "Fehler beim Abrufen der Einwählinformationen. Versuchen Sie es später erneut.",
|
||||
"dialInSummaryError": "Fehler beim Abrufen der Einwahlinformationen. Versuchen Sie es später erneut.",
|
||||
"dialInTollFree": "Gebührenfrei",
|
||||
"genericError": "Es ist leider etwas schiefgegangen.",
|
||||
"inviteLiveStream": "Klicken Sie auf {{url}} um den Livestream dieser Konferenz zu öffnen",
|
||||
"invitePhone": "",
|
||||
"invitePhoneAlternatives": "",
|
||||
"invitePhone": "Wenn Sie stattdessen per Telefon beitreten möchten, tippen Sie hier: {{number}},,{{conferenceID}}#\n",
|
||||
"invitePhoneAlternatives": "Suche nach einer anderen Einwahlnummer?\nMeetings-Einwahlnummern sehen: {{{url}}\n\n\n\nWenn Sie sich auch über ein Raumtelefon einwählen, nehmen Sie teil, ohne sich mit dem Ton zu verbinden: {{silentUrl}}",
|
||||
"inviteURLFirstPartGeneral": "Sie wurden zur Teilnahme an einem Meeting eingeladen.",
|
||||
"inviteURLFirstPartPersonal": "",
|
||||
"inviteURLSecondPart": "",
|
||||
"inviteURLFirstPartPersonal": "{{name}} lädt Sie zu einem Meeting ein.\n",
|
||||
"inviteURLSecondPart": "\nAm Meeting teilnehmen:\n{{url}}\n",
|
||||
"liveStreamURL": "Livestream:",
|
||||
"moreNumbers": "Weitere Telefonnummern",
|
||||
"noNumbers": "Keine Telefonnummern verfügbar.",
|
||||
"noPassword": "Kein",
|
||||
"noRoom": "Keine Konferenz für die Einwähl-Informationen angegeben.",
|
||||
"noRoom": "Keine Konferenz für die Einwahlinformationen angegeben.",
|
||||
"numbers": "Einwählnummern",
|
||||
"password": "",
|
||||
"password": "$t(lockRoomPasswordUppercase):",
|
||||
"title": "Teilen",
|
||||
"tooltip": "Freigabe-Link und Einwählinformationen für dieses Meeting",
|
||||
"tooltip": "Freigabe-Link und Einwahlinformationen für dieses Meeting",
|
||||
"label": "Meeting-Informationen"
|
||||
},
|
||||
"inviteDialog": {
|
||||
@@ -322,7 +347,7 @@
|
||||
"msg": "Es ist ein Fehler aufgetreten.",
|
||||
"retry": "Erneut versuchen",
|
||||
"support": "Support",
|
||||
"supportMsg": "Wenn der Fehler erneut auftritt, bitte kontaktieren sie"
|
||||
"supportMsg": "Wenn der Fehler erneut auftritt, bitte kontaktieren Sie"
|
||||
},
|
||||
"keyboardShortcuts": {
|
||||
"focusLocal": "Lokales Video fokussieren",
|
||||
@@ -331,45 +356,46 @@
|
||||
"keyboardShortcuts": "Tastenkürzel",
|
||||
"localRecording": "Lokale Aufzeichnungssteuerelemente ein- oder ausblenden",
|
||||
"mute": "Stummschaltung aktivieren oder deaktivieren",
|
||||
"pushToTalk": "Drücken um zu sprechen",
|
||||
"pushToTalk": "Push-to-Talk (Sprechtaste)",
|
||||
"raiseHand": "Hand erheben",
|
||||
"showSpeakerStats": "Statistiken für Sprecher anzeigen",
|
||||
"toggleChat": "Chat öffnen oder schliessen",
|
||||
"toggleChat": "Chat öffnen oder schließen",
|
||||
"toggleFilmstrip": "Video-Miniaturansichten ein- oder ausblenden",
|
||||
"toggleScreensharing": "Zwischen Kamera und Bildschirmfreigabe wechseln",
|
||||
"toggleShortcuts": "Tastenkombinationen ein- oder ausblenden",
|
||||
"videoMute": "Kamera starten oder stoppen"
|
||||
"videoMute": "Kamera starten oder stoppen",
|
||||
"videoQuality": "Anrufqualität verwalten"
|
||||
},
|
||||
"\u0005keyboardShortcuts": {},
|
||||
"liveStreaming": {
|
||||
"busy": "Es werden Resourcen zum Streamen bereitgestellt. Bitte in ein paar Minuten erneut versuchen.",
|
||||
"busy": "Es werden Ressourcen zum Streamen bereitgestellt. Bitte in ein paar Minuten erneut versuchen.",
|
||||
"busyTitle": "Alle Streaming-Instanzen sind in Gebrauch",
|
||||
"changeSignIn": "Konten wechseln.",
|
||||
"choose": "Live stream auswählen",
|
||||
"choose": "Livestream auswählen",
|
||||
"chooseCTA": "Streaming-Option auswählen. Sie sind aktuell als {{email}} angemeldet.",
|
||||
"enterStreamKey": "Name/Schlüssel für den YouTube Livestream hier eingeben.",
|
||||
"error": "Das Live-Streaming ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
||||
"errorAPI": "Beim abrufen der YouTube Livestreams ist ein Fehler aufgetreten. Bitte versuchen Sie sich erneut anzumelden.",
|
||||
"errorLiveStreamNotEnabled": "Live-Streaming ist für {{email}} nicht aktiviert. Aktivieren Sie das Live-Streaming oder melden Sie sich bei einem Konto mit aktiviertem Live-Streaming an.",
|
||||
"expandedOff": "Live-Streaming wurde angehalten",
|
||||
"enterStreamKey": "Name/Schlüssel für den YouTube-Livestream hier eingeben.",
|
||||
"error": "Das Livestreaming ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
||||
"errorAPI": "Beim Abrufen der YouTube-Livestreams ist ein Fehler aufgetreten. Bitte versuchen Sie, sich erneut anzumelden.",
|
||||
"errorLiveStreamNotEnabled": "Livestreaming ist für {{email}} nicht aktiviert. Aktivieren Sie das Livestreaming oder melden Sie sich bei einem Konto mit aktiviertem Livestreaming an.",
|
||||
"expandedOff": "Livestreaming wurde angehalten",
|
||||
"expandedOn": "Das Meeting wird momentan an YouTube gestreamt.",
|
||||
"expandedPending": "Live-Streaming wird gestartet...",
|
||||
"failedToStart": "Live-Streaming konnte nicht gestartet werden",
|
||||
"getStreamKeyManually": "",
|
||||
"invalidStreamKey": "Der Live-Stream-Schlüssel ist u. U. falsch.",
|
||||
"off": "Live-Streaming gestoppt",
|
||||
"on": "Live-Streaming",
|
||||
"pending": "Live-Stream wird gestartet...",
|
||||
"serviceName": "Live Streaming-Dienst",
|
||||
"expandedPending": "Livestreaming wird gestartet...",
|
||||
"failedToStart": "Livestreaming konnte nicht gestartet werden",
|
||||
"getStreamKeyManually": "Wir waren nicht in der Lage, Livestreams abzurufen. Versuchen Sie, Ihren Livestream-Schlüssel von YouTube zu erhalten.",
|
||||
"invalidStreamKey": "Der Livestream-Schlüssel ist u. U. falsch.",
|
||||
"off": "Livestreaming gestoppt",
|
||||
"offBy": "{{name}} stoppte das Livestreaming",
|
||||
"on": "Livestreaming",
|
||||
"onBy": "{{name}} startete das Livestreaming",
|
||||
"pending": "Livestream wird gestartet...",
|
||||
"serviceName": "Livestreaming-Dienst",
|
||||
"signedInAs": "Sie sind derzeit angemeldet als:",
|
||||
"signIn": "Mit Google anmelden",
|
||||
"signInCTA": "Anmelden oder den Name/Schlüssel des YouTube Livestreams eingeben.",
|
||||
"signInCTA": "Anmelden oder den Namen/Schlüssel des YouTube-Livestreams eingeben.",
|
||||
"signOut": "Abmelden",
|
||||
"start": "Einen Livestream starten",
|
||||
"streamIdHelp": "Was ist das?",
|
||||
"unavailableTitle": "Live-Streaming nicht verfügbar"
|
||||
"unavailableTitle": "Livestreaming nicht verfügbar"
|
||||
},
|
||||
"\u0005liveStreaming": {},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
"off": "Aus",
|
||||
@@ -379,7 +405,7 @@
|
||||
"dialogTitle": "Lokale Aufzeichnungssteuerelemente",
|
||||
"duration": "Dauer",
|
||||
"durationNA": "N. v.",
|
||||
"encoding": "Codierung",
|
||||
"encoding": "Kodierung",
|
||||
"label": "LOR",
|
||||
"labelToolTip": "Lokale Aufzeichnung ist aktiviert",
|
||||
"localRecording": "Lokale Aufzeichnung",
|
||||
@@ -387,7 +413,7 @@
|
||||
"messages": {
|
||||
"engaged": "Lokale Aufzeichnung ist aktiviert",
|
||||
"finished": "Aufzeichnung der Sitzung {{token}} ist beendet. Senden Sie die aufgezeichnete Datei an den Moderator.",
|
||||
"finishedModerator": "Aufzeichnung der Sitzung {{token}} ist beendet. Die Aufzeichnung der lokalen Verlaufs wurde gespeichert. Bitten Sie die anderen Teilnehmer, ihre Aufzeichnungen zu übermitteln.",
|
||||
"finishedModerator": "Aufzeichnung der Sitzung {{token}} ist beendet. Die Aufzeichnung des lokalen Verlaufs wurde gespeichert. Bitten Sie die anderen Teilnehmer, ihre Aufzeichnungen zu übermitteln.",
|
||||
"notModerator": "Sie sind nicht der Moderator. Sie können die lokale Aufzeichnung nicht starten oder stoppen."
|
||||
},
|
||||
"moderator": "Moderator",
|
||||
@@ -399,7 +425,6 @@
|
||||
"stop": "Aufnahme stoppen",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"\u0005localRecording": {},
|
||||
"lockRoomPassword": "Passwort",
|
||||
"lockRoomPasswordUppercase": "Passwort",
|
||||
"me": "ich",
|
||||
@@ -412,30 +437,30 @@
|
||||
"focusFail": "{{component}} ist im Moment nicht verfügbar - wiederholen in {{ms}} Sekunden",
|
||||
"grantedTo": "Moderatorenrechte an {{to}} vergeben.",
|
||||
"invitedOneMember": "{{displayName}} wurde eingeladen",
|
||||
"invitedThreePlusMembers": "",
|
||||
"invitedTwoMembers": "",
|
||||
"kickParticipant": "",
|
||||
"invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen",
|
||||
"invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen",
|
||||
"kickParticipant": "Sie können sich für weitere Einzelheiten an {{participantDisplayName}}} wenden.",
|
||||
"me": "Ich",
|
||||
"moderator": "Moderatorenrechte vergeben",
|
||||
"muted": "Der Konferenz wurde stumm beigetreten.",
|
||||
"mutedTitle": "Stummschaltung aktiv!",
|
||||
"mutedRemotelyTitle": "",
|
||||
"mutedRemotelyDescription": "",
|
||||
"passwordRemovedRemotely": "",
|
||||
"passwordSetRemotely": "",
|
||||
"mutedRemotelyTitle": "Sie wurden von {{participantDisplayName}} stummgeschaltet!",
|
||||
"mutedRemotelyDescription": "Sie können jederzeit die Stummschaltung aufheben, wenn Sie bereit sind zu sprechen. Wenn Sie fertig sind, können sich wieder stummschalten, um Geräusche vom Meeting fernzuhalten.",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) von einem anderen Teilnehmer entfernt",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) von einem anderen Teilnehmer gesetzt",
|
||||
"raisedHand": "{{name}} möchte sprechen.",
|
||||
"somebody": "Jemand",
|
||||
"startSilentTitle": "",
|
||||
"startSilentDescription": "",
|
||||
"suboptimalExperienceDescription": "Tut uns leid, aber die Konferenz wird mit {{appName}} kein grossartiges Erlebnis. Wir versuchen immer die Situation zu verbessern, bis dahin empfehlen wir aber die Verwendung einer der <a href=\"static/recommendedBrowsers.html\" target=\"_blank\">vollständig unterstützen Browser</a>.",
|
||||
"startSilentTitle": "Sie sind ohne Audioausgabe beigetreten!",
|
||||
"startSilentDescription": "Treten Sie dem Meeting noch einmal bei, um Ihr Audio zu aktivieren",
|
||||
"suboptimalExperienceDescription": "Tut uns leid, aber die Konferenz wird mit {{appName}} kein großartiges Erlebnis. Wir versuchen immer die Situation zu verbessern, bis dahin empfehlen wir aber die Verwendung einer der <a href=\"static/recommendedBrowsers.html\" target=\"_blank\">vollständig unterstützen Browser</a>.",
|
||||
"suboptimalExperienceTitle": "Browserwarnung",
|
||||
"unmute": "",
|
||||
"unmute": "Stummschaltung aufheben",
|
||||
"newDeviceCameraTitle": "Neue Kamera erkannt",
|
||||
"newDeviceAudioTitle": "Neues Audiogerät erkannt",
|
||||
"newDeviceAction": "Verwenden"
|
||||
},
|
||||
"passwordSetRemotely": "von einem anderen Teilnehmer gesetzt",
|
||||
"passwordDigitsOnly": "",
|
||||
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
|
||||
"poweredby": "Betrieben von",
|
||||
"presenceStatus": {
|
||||
"busy": "Beschäftigt",
|
||||
@@ -451,18 +476,18 @@
|
||||
"rejected": "Abgelehnt",
|
||||
"ringing": "Es klingelt…"
|
||||
},
|
||||
"\u0005presenceStatus": {},
|
||||
"profile": {
|
||||
"setDisplayNameLabel": "Anzeigename festlegen",
|
||||
"setEmailInput": "E-Mail eingeben",
|
||||
"setEmailLabel": "E-Mail Adresse für Gravatar",
|
||||
"setEmailLabel": "E-Mail-Adresse für Gravatar",
|
||||
"title": "Profil"
|
||||
},
|
||||
"raisedHand": "Ich möchte sprechen",
|
||||
"recording": {
|
||||
"authDropboxText": "In Dropbox hochladen",
|
||||
"availableSpace": "Verfügbarer Speicherplatz: {{spaceLeft}} MB (ca. {{duration}} Minuten Aufzeichnung)",
|
||||
"beta": "BETA",
|
||||
"busy": "Es werden Resourcen für eine Aufnahme bereitgestellt. Bitte in ein paar Minuten erneut versuchen.",
|
||||
"busy": "Es werden Ressourcen für eine Aufnahme bereitgestellt. Bitte in ein paar Minuten erneut versuchen.",
|
||||
"busyTitle": "Alle Aufnahme-Instanzen sind in Gebrauch",
|
||||
"error": "Die Aufzeichnung ist fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
||||
"expandedOff": "Aufzeichnung wurde gestoppt",
|
||||
@@ -473,7 +498,9 @@
|
||||
"live": "LIVE",
|
||||
"loggedIn": "Als {{userName}} angemeldet",
|
||||
"off": "Aufnahme gestoppt",
|
||||
"offBy": "{{name}} stoppte die Aufnahme",
|
||||
"on": "Aufnahme",
|
||||
"onBy": "{{name}} startete die Aufnahme",
|
||||
"pending": "Aufzeichnung des Meetings wird vorbereitet…",
|
||||
"rec": "AUFZ",
|
||||
"serviceDescription": "Ihre Aufzeichnung wird vom Aufzeichnungsdienst gespeichert",
|
||||
@@ -484,14 +511,14 @@
|
||||
"unavailableTitle": "Aufnahme nicht verfügbar"
|
||||
},
|
||||
"sectionList": {
|
||||
"pullToRefresh": "Ziehen um zu aktualisieren"
|
||||
"pullToRefresh": "Ziehen, um zu aktualisieren"
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Veranstaltungen zu ermöglichen.",
|
||||
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Termine zu ermöglichen.",
|
||||
"disconnect": "Getrennt",
|
||||
"microsoftSignIn": "Mit Microsoft anmelden",
|
||||
"signedIn": "Momentan wird auf Kalenderveranstaltungen von {{email}} zugegriffen. Klicken Sie auf die folgende Schaltfläche „Trennen“, um den Zugriff auf die Kalenderveranstaltungen zu stoppen.",
|
||||
"signedIn": "Momentan wird auf Kalendertermine von {{email}} zugegriffen. Klicken Sie auf die folgende Schaltfläche „Trennen“, um den Zugriff auf die Kalendertermine zu stoppen.",
|
||||
"title": "Kalender"
|
||||
},
|
||||
"devices": "Geräte",
|
||||
@@ -509,27 +536,28 @@
|
||||
"startVideoMuted": "Alle Teilnehmer treten ohne Video bei",
|
||||
"title": "Einstellungen"
|
||||
},
|
||||
"\u0005settings": {
|
||||
"calendar": {}
|
||||
},
|
||||
"settingsView": {
|
||||
"advanced": "Erweitert",
|
||||
"alertOk": "OK",
|
||||
"alertTitle": "Warnung",
|
||||
"alertURLText": "Die angegebene Server URL ist ungültig",
|
||||
"alertURLText": "Die angegebene Server-URL ist ungültig",
|
||||
"buildInfoSection": "Build-Informationen",
|
||||
"conferenceSection": "Konferenz",
|
||||
"disableCallIntegration": "Native Anrufintegration deaktivieren",
|
||||
"disableP2P": "Ende-zu-Ende-Modus deaktivieren",
|
||||
"displayName": "Anzeigename",
|
||||
"email": "E-Mail",
|
||||
"header": "Einstellungen",
|
||||
"profileSection": "Profil",
|
||||
"serverURL": "Server URL",
|
||||
"serverURL": "Server-URL",
|
||||
"showAdvanced": "Erweiterte Einstellungen anzeigen",
|
||||
"startWithAudioMuted": "Stumm beitreten",
|
||||
"startWithVideoMuted": "Ohne Video beitreten",
|
||||
"version": "Version"
|
||||
},
|
||||
"share": {
|
||||
"dialInfoText": "",
|
||||
"mainText": ""
|
||||
"dialInfoText": "\n\n=====\n\nWollen Sie sich nur auf Ihrem Telefon einwählen?\n\n{{{defaultDialInNumber}}}Klicken Sie auf diesen Link, um die eingewählten Telefonnummern für dieses Meeting zu sehen\n{{dialInfoPageUrl}}",
|
||||
"mainText": "Klicken Sie auf den folgenden Link, um dem Meeting beizutreten:\n{{roomUrl}}"
|
||||
},
|
||||
"speaker": "Sprecher",
|
||||
"speakerStats": {
|
||||
@@ -546,28 +574,33 @@
|
||||
},
|
||||
"suspendedoverlay": {
|
||||
"rejoinKeyTitle": "Erneut teilnehmen",
|
||||
"text": "<i>Erneut teilnehmen</i> Schaltfläche betätigen um erneut zu verbinden.",
|
||||
"title": "Die Konferenz wurde unterbrochen weil der Standbymodus aktiviert wurde."
|
||||
"text": "„<i>Erneut teilnehmen</i>“-Schaltfläche betätigen, um erneut zu verbinden.",
|
||||
"title": "Die Konferenz wurde unterbrochen, weil der Standby-Modus aktiviert wurde."
|
||||
},
|
||||
"toolbar": {
|
||||
"accessibilityLabel": {
|
||||
"audioOnly": "Nur Audio ein-/ausschalten",
|
||||
"audioOnly": "„Nur Audio“ ein-/ausschalten",
|
||||
"audioRoute": "Audiogerät auswählen",
|
||||
"callQuality": "Qualitätseinstellungen",
|
||||
"cc": "Untertitel ein-/ausschalten",
|
||||
"chat": "Chatfenster ein-/ausblenden",
|
||||
"document": "Geteiltes Dokument schliessen",
|
||||
"feedback": "Feedback hinterlasen",
|
||||
"fullScreen": "Vollbildschirm ein-/ausblenden",
|
||||
"document": "Geteiltes Dokument schließen",
|
||||
"download": "Unsere Apps herunterladen",
|
||||
"feedback": "Feedback hinterlassen",
|
||||
"fullScreen": "Vollbildmodus aktivieren/deaktivieren",
|
||||
"hangup": "Anruf beenden",
|
||||
"help": "Hilfe",
|
||||
"invite": "Teilnehmer einladen",
|
||||
"kick": "Teilnehmer entfernen",
|
||||
"localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten",
|
||||
"lockRoom": "Meeting-Passwort ein-/auschalten",
|
||||
"moreActions": "Menü „Weitere Aktionen“ ein-/ausschalten",
|
||||
"moreActionsMenu": "Menü „Weitere Aktionen“",
|
||||
"moreOptions": "Menü „Weitere Optionen“",
|
||||
"mute": "„Audio stummschalten“ ein-/ausschalten",
|
||||
"muteEveryone": "Alle stummschalten",
|
||||
"pip": "Bild-in-Bild-Modus ein-/ausschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
"raiseHand": "„Melden“ ein-/ausschalten",
|
||||
"recording": "Aufzeichnung ein-/ausschalten",
|
||||
@@ -577,12 +610,12 @@
|
||||
"shareRoom": "Person einladen",
|
||||
"shareYourScreen": "Bildschirmfreigabe ein-/ausschalten",
|
||||
"shortcuts": "Tastenkombinationen ein-/ausblenden",
|
||||
"show": "",
|
||||
"show": "Im Vordergrund anzeigen",
|
||||
"speakerStats": "Sprecherstatistik ein-/ausblenden",
|
||||
"tileView": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"videomute": "„Video stummschalten“ ein-/ausschalten",
|
||||
"videoblur": ""
|
||||
"videoblur": "Video-Unschärfe ein-/ausschalten"
|
||||
},
|
||||
"addPeople": "Teilnehmer zur Konferenz hinzufügen",
|
||||
"audioOnlyOff": "Modus „Nur Audio“ deaktivieren",
|
||||
@@ -590,24 +623,36 @@
|
||||
"audioRoute": "Audiogerät auswählen",
|
||||
"authenticate": "Anmelden",
|
||||
"callQuality": "Qualitätseinstellungen",
|
||||
"chat": "Chat öffnen / schliessen",
|
||||
"chat": "Chat öffnen / schließen",
|
||||
"closeChat": "Chat schließen",
|
||||
"documentClose": "Geteiltes Dokument schliessen",
|
||||
"documentClose": "Geteiltes Dokument schließen",
|
||||
"documentOpen": "Geteiltes Dokument öffnen",
|
||||
"download": "Unsere Apps herunterladen",
|
||||
"enterFullScreen": "Vollbildmodus",
|
||||
"enterTileView": "Kachelansicht einschalten",
|
||||
"exitFullScreen": "Vollbildmodus verlassen",
|
||||
"exitTileView": "Kachelansicht ausschalten",
|
||||
"feedback": "Feedback hinterlasen",
|
||||
"feedback": "Feedback hinterlassen",
|
||||
"hangup": "Verlassen",
|
||||
"help": "Hilfe",
|
||||
"invite": "Teilnehmer einladen",
|
||||
"login": "Anmelden",
|
||||
"logout": "Abmelden",
|
||||
"lowerYourHand": "Hand senken",
|
||||
"moreActions": "Weitere Einstellungen",
|
||||
"moreOptions": "Weitere Optionen",
|
||||
"mute": "Stummschaltung aktivieren / deaktivieren",
|
||||
"muteEveryone": "Alle stummschalten",
|
||||
"noAudioSignalTitle": "Es kommt kein Input von Ihrem Mikrofon!",
|
||||
"noAudioSignalDesc": "Wenn Sie das Gerät nicht absichtlich über die Systemeinstellungen oder die Hardware stumm geschaltet haben, sollten Sie einen Wechsel des Geräts in Erwägung ziehen.",
|
||||
"noAudioSignalDescSuggestion": "Wenn Sie das Gerät nicht absichtlich über die Systemeinstellungen oder die Hardware stummgeschaltet haben, sollten Sie einen Wechsel auf das vorgeschlagene Gerät in Erwägung ziehen.",
|
||||
"noAudioSignalDialInDesc": "Sie können sich auch über die Einwahlnummer einwählen:",
|
||||
"noAudioSignalDialInLinkDesc" : "Einwahlnummern:",
|
||||
"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",
|
||||
"pip": "Bild-in-Bild-Modus einschalten",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
"raiseHand": "Hand erheben",
|
||||
"raiseYourHand": "Melden",
|
||||
@@ -620,16 +665,13 @@
|
||||
"startSubtitles": "Untertitel einschalten",
|
||||
"stopScreenSharing": "Bildschirmfreigabe stoppen",
|
||||
"stopSubtitles": "Untertitel ausschalten",
|
||||
"stopSharedVideo": "YouTube Video stoppen",
|
||||
"talkWhileMutedPopup": "Versuchen sie zu sprechen? Ihr Mikrofon ist stummgeschaltet.",
|
||||
"stopSharedVideo": "YouTube-Video stoppen",
|
||||
"talkWhileMutedPopup": "Versuchen Sie zu sprechen? Ihr Mikrofon ist stummgeschaltet.",
|
||||
"tileViewToggle": "Kachelansicht ein-/ausschalten",
|
||||
"toggleCamera": "Kamera ein-/ausschalten",
|
||||
"toggleCamera": "Kamera wechseln",
|
||||
"videomute": "Kamera starten / stoppen",
|
||||
"startvideoblur": "",
|
||||
"stopvideoblur": ""
|
||||
},
|
||||
"\u0005toolbar": {
|
||||
"accessibilityLabel": {}
|
||||
"startvideoblur": "Hintergrundunschärfe aktivieren",
|
||||
"stopvideoblur": "Hintergrundunschärfe deaktivieren"
|
||||
},
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Untertitel ein-/ausschalten",
|
||||
@@ -643,18 +685,17 @@
|
||||
"stop": "Anzeige der Untertitel stoppen",
|
||||
"tr": "TR"
|
||||
},
|
||||
"\u0005transcribing": {},
|
||||
"userMedia": {
|
||||
"androidGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"chromeGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"edgeGrantPermissions": "Wählen Sie <b><i>Ja</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"androidGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"chromeGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"edgeGrantPermissions": "Wählen Sie <b><i>Ja</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"electronGrantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen",
|
||||
"firefoxGrantPermissions": "Wählen Sie <b><i>Markiertes Gerät teilen</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"iexplorerGrantPermissions": "Wählen Sie <b><i>OK</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"firefoxGrantPermissions": "Wählen Sie <b><i>Markiertes Gerät teilen</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"iexplorerGrantPermissions": "Wählen Sie <b><i>OK</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"nwjsGrantPermissions": "Bitte Berechtigungen zur Verwendung der Kamera und des Mikrofons erteilen",
|
||||
"operaGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"react-nativeGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b> wenn der Browser um Berechtigungen bittet.",
|
||||
"safariGrantPermissions": "Wählen Sie <b><i>OK</i></b> wenn der Browser um Berechtigungen bittet."
|
||||
"operaGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"react-nativeGrantPermissions": "Wählen Sie <b><i>Erlauben</i></b>, wenn der Browser um Berechtigungen bittet.",
|
||||
"safariGrantPermissions": "Wählen Sie <b><i>OK</i></b>, wenn der Browser um Berechtigungen bittet."
|
||||
},
|
||||
"videoSIPGW": {
|
||||
"busy": "Es stehen keine freien Ressourcen zur Verfügung. Bitte versuchen Sie es später noch einmal.",
|
||||
@@ -669,58 +710,68 @@
|
||||
"videoStatus": {
|
||||
"audioOnly": "AUD",
|
||||
"audioOnlyExpanded": "Sie befinden sich im Modus „Nur Audio“. Dieser Modus benötigt weniger Bandbreite, Sie sehen jedoch nicht die Videos der anderen.",
|
||||
"callQuality": "",
|
||||
"callQuality": "Videoqualität",
|
||||
"hd": "HD",
|
||||
"hdTooltip": "Video wird in hoher Auflösung angezeigt",
|
||||
"highDefinition": "Hohe Auflösung",
|
||||
"labelTooiltipNoVideo": "Kein Video",
|
||||
"labelTooltipAudioOnly": "Nur-Audio Modus aktiv",
|
||||
"labelTooltipAudioOnly": "„Nur Audio“-Modus aktiv",
|
||||
"ld": "LD",
|
||||
"ldTooltip": "Video wird in niedriger Auflösung angezeigt",
|
||||
"lowDefinition": "Niedrige Auflösung",
|
||||
"onlyAudioAvailable": "Nur Ton",
|
||||
"onlyAudioSupported": "In diesem Browser wird nur Audio unterstützt.",
|
||||
"p2pEnabled": "Ende-zu-Ende aktiviert",
|
||||
"p2pVideoQualityDescription": "",
|
||||
"p2pVideoQualityDescription": "Im Ende-zu-Ende-Modus kann die empfangene Videoqualität nur zwischen „Hoch“ und „Nur Audio“ umgeschaltet werden. Andere Einstellungen werden erst beim Verlassen des Ende-zu-Ende-Modus berücksichtigt.",
|
||||
"recHighDefinitionOnly": "Hohe Qualität wird bevorzugt.",
|
||||
"sd": "SD",
|
||||
"sdTooltip": "Video wird in Standardauflösung angezeigt",
|
||||
"standardDefinition": "Standardauflösung"
|
||||
},
|
||||
"videothumbnail": {
|
||||
"domute": "Stummschalten",
|
||||
"domuteOthers": "Alle anderen stummschalten",
|
||||
"flip": "Spiegeln",
|
||||
"kick": "Hinauswerfen",
|
||||
"moderator": "Moderator",
|
||||
"mute": "Teilnehmer ist stumm geschaltet",
|
||||
"muted": "Stummgeschaltet",
|
||||
"remoteControl": "Fernsteuerung",
|
||||
"show": "",
|
||||
"videomute": ""
|
||||
"show": "Im Vordergrund anzeigen",
|
||||
"videomute": "Teilnehmer hat die Kamera angehalten"
|
||||
},
|
||||
"welcomepage": {
|
||||
"accessibilityLabel": {
|
||||
"join": "Zum Teilnehmen tippen",
|
||||
"roomname": "Konferenzname eingeben"
|
||||
},
|
||||
"appDescription": "Auf geht's! Beginne eine Videokonferenz mit dem ganzen Team. Oder eigentlich, lade alle ein die du kennst. {{app}} ist eine vollständig verschlüsselte, aus 100% Open-Source-Software bestehende Videokonferenzlösung die du den ganzen Tag kostenlos verwenden kannst — ohne Registrierung.",
|
||||
"appDescription": "Auf geht's! Starten Sie eine Videokonferenz mit dem ganzen Team. Oder besser noch: Laden Sie alle ein, die Sie kennen. {{app}} ist eine vollständig verschlüsselte, aus 100% Open-Source-Software bestehende Videokonferenzlösung, die Sie den ganzen Tag kostenlos verwenden können — ohne Registrierung.",
|
||||
"audioVideoSwitch": {
|
||||
"audio": "Sprache",
|
||||
"audio": "Audio",
|
||||
"video": "Video"
|
||||
},
|
||||
"calendar": "Kalender",
|
||||
"connectCalendarButton": "Kalender verbinden",
|
||||
"connectCalendarText": "Verbinden Sie Ihren Kalender, um all Ihre Meetings in {{app}} anzuzeigen. Fügen Sie zudem {{provider}}-Meetings in Ihren Kalender ein und starten Sie sie mit nur einem Klick.",
|
||||
"enterRoomTitle": "Neues Meeting starten",
|
||||
"roomNameAllowedChars": "Der Meeting-Name sollte keines der folgenden Zeichen enthalten: ?, &, :, ', \", %, #.",
|
||||
"go": "Los",
|
||||
"goSmall": "Los",
|
||||
"join": "Beitreten",
|
||||
"info": "Informationen",
|
||||
"privacy": "Privatsphäre",
|
||||
"recentList": "Letzte\"",
|
||||
"privacy": "Datenschutz",
|
||||
"recentList": "Letzte",
|
||||
"recentListDelete": "Löschen",
|
||||
"recentListEmpty": "Die Liste „Letzte“ ist momentan leer. Chatten Sie mit Ihrem Team. Sie finden all Ihre letzten Meetings hier.",
|
||||
"reducedUIText": "",
|
||||
"reducedUIText": "Willkommen bei {{app}}!",
|
||||
"roomname": "Konferenzname eingeben",
|
||||
"roomnameHint": "Name oder URL der Konferenz der Sie beitreten möchten. Sie können einen Namen erfinden, er muss nur den anderen Teilnehmern übermittelt werden damit sie der gleichen Konferenz beitreten.",
|
||||
"sendFeedback": "Senden Sie uns Ihr Feedback",
|
||||
"terms": "Bedingungen",
|
||||
"roomnameHint": "Name oder URL der Konferenz, der Sie beitreten möchten. Sie können einen Namen erfinden, er muss nur den anderen Teilnehmern übermittelt werden, damit diese der gleichen Konferenz beitreten.",
|
||||
"sendFeedback": "Feedback senden",
|
||||
"terms": "AGB",
|
||||
"title": "Sichere, mit umfassenden Funktionen ausgestattete und vollkommen kostenlose Videokonferenzen"
|
||||
},
|
||||
"lonelyMeetingExperience": {
|
||||
"button": "Weitere einladen",
|
||||
"youAreAlone": "Sie sind der einzige in diesem Meeting"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||