mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-05-28 22:00:05 +00:00
Compare commits
178 Commits
6702
...
saghul-pat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e95f2f7341 | ||
|
|
c56db8af77 | ||
|
|
a66c770053 | ||
|
|
2eaa87a719 | ||
|
|
a2e8a7f28f | ||
|
|
af072c3070 | ||
|
|
f42772ec5b | ||
|
|
2556a7ab77 | ||
|
|
3cbf160f2b | ||
|
|
744960bb1a | ||
|
|
76471a0ea9 | ||
|
|
0ba033e07d | ||
|
|
cb3fb3ada9 | ||
|
|
48a6472b3b | ||
|
|
691e92b7ec | ||
|
|
6e36340a83 | ||
|
|
ae424c95de | ||
|
|
95b2979eb3 | ||
|
|
a0c130568b | ||
|
|
643cc2db81 | ||
|
|
6bce0bc917 | ||
|
|
93566e313e | ||
|
|
a7c653bc30 | ||
|
|
4b969cf4ab | ||
|
|
3081b41d0d | ||
|
|
30e5d213cb | ||
|
|
752da71387 | ||
|
|
645609974a | ||
|
|
4f2f6df2bb | ||
|
|
e93c480e7c | ||
|
|
a795e0797a | ||
|
|
94ec2c720d | ||
|
|
b11e14ea34 | ||
|
|
f5f55c4f23 | ||
|
|
243a330318 | ||
|
|
98bc87ea18 | ||
|
|
f7926c9cfb | ||
|
|
533501deb6 | ||
|
|
f38c9f5450 | ||
|
|
55b80c948f | ||
|
|
971fe0481f | ||
|
|
1259e54d46 | ||
|
|
0cb95f1dd6 | ||
|
|
5cde9a138b | ||
|
|
867c488e10 | ||
|
|
7d9c13a618 | ||
|
|
48ed3b7dc6 | ||
|
|
04abfe1a3b | ||
|
|
d45decc393 | ||
|
|
88f8f48465 | ||
|
|
8127ea2479 | ||
|
|
b22915c169 | ||
|
|
14fcd153e5 | ||
|
|
48efe36cdf | ||
|
|
0c373e105b | ||
|
|
e57c7f92a8 | ||
|
|
70fa44f85f | ||
|
|
bcc5beb73d | ||
|
|
4ef4e45ee4 | ||
|
|
c9ff0bb75f | ||
|
|
282817db28 | ||
|
|
93ab7725e7 | ||
|
|
53ccb97d34 | ||
|
|
6346d99d0e | ||
|
|
79c4cabbad | ||
|
|
7a9f51b01b | ||
|
|
a884a6b232 | ||
|
|
b00a17c1c3 | ||
|
|
99955df5c8 | ||
|
|
c0f0803f01 | ||
|
|
b2c864cbba | ||
|
|
31957d4085 | ||
|
|
4f83fc2a6d | ||
|
|
4bd27730ce | ||
|
|
817d7f0c0d | ||
|
|
19a9b17425 | ||
|
|
cc33930259 | ||
|
|
6223e16ca5 | ||
|
|
99385ae3d7 | ||
|
|
17cace070e | ||
|
|
cdb2436b73 | ||
|
|
10db5ecf1f | ||
|
|
cbb8b5f620 | ||
|
|
f3e4c57036 | ||
|
|
1731d5188d | ||
|
|
2c7dc5e40e | ||
|
|
74cd486232 | ||
|
|
30f3bac217 | ||
|
|
84fc4dd63f | ||
|
|
936a1a6b0e | ||
|
|
f4e8f860b1 | ||
|
|
ee544d25f8 | ||
|
|
c32866f6a2 | ||
|
|
215c2825de | ||
|
|
edb614783b | ||
|
|
0e19bc9cd6 | ||
|
|
caff0c64af | ||
|
|
fcb1845e2a | ||
|
|
977295bd87 | ||
|
|
ed139f53ca | ||
|
|
5692c3cb4d | ||
|
|
ed62409ad5 | ||
|
|
b52b4c2a78 | ||
|
|
36bef94c3c | ||
|
|
a995b33753 | ||
|
|
bfb15a2523 | ||
|
|
1d59c8122d | ||
|
|
31766c891b | ||
|
|
7a3b8d6ac4 | ||
|
|
edf5e1c094 | ||
|
|
7cd39b7983 | ||
|
|
49bcf5c179 | ||
|
|
2b3989e5e6 | ||
|
|
9b1e662a93 | ||
|
|
73160de3b7 | ||
|
|
f5fc524030 | ||
|
|
6e3b3879cc | ||
|
|
c9f9708166 | ||
|
|
7a8350356a | ||
|
|
2596c463fe | ||
|
|
2de0520835 | ||
|
|
c276c204ac | ||
|
|
67cf6e6d18 | ||
|
|
b321cf3639 | ||
|
|
8e54a69160 | ||
|
|
93e5e48648 | ||
|
|
c945b9cc5e | ||
|
|
7c3d2010e4 | ||
|
|
894c5cd788 | ||
|
|
1c7e457879 | ||
|
|
b6b536962d | ||
|
|
b625b7b0ec | ||
|
|
eb59949dfa | ||
|
|
69f4b116a9 | ||
|
|
75d7c4b160 | ||
|
|
b5065306e5 | ||
|
|
9f5a56bbc7 | ||
|
|
b4809fe083 | ||
|
|
6dedc7fb1a | ||
|
|
a780051720 | ||
|
|
51ac3ef64a | ||
|
|
a915238b49 | ||
|
|
687837310a | ||
|
|
7f879d2154 | ||
|
|
faec46dd17 | ||
|
|
33ec975e19 | ||
|
|
db6165209b | ||
|
|
27775de48d | ||
|
|
8818f4f4e6 | ||
|
|
aebe4885bb | ||
|
|
146cc2f9c9 | ||
|
|
3b5878d078 | ||
|
|
6ab996568b | ||
|
|
4755f5a031 | ||
|
|
0b48e55a35 | ||
|
|
9e1ac3bea6 | ||
|
|
7249406960 | ||
|
|
a9f5829e58 | ||
|
|
4bb1697115 | ||
|
|
2938d1f2dc | ||
|
|
10d202439b | ||
|
|
af0715dc17 | ||
|
|
601e21ffcd | ||
|
|
ff29196f3a | ||
|
|
748b66b04a | ||
|
|
ca4db54e6e | ||
|
|
3eecf8063f | ||
|
|
440339dea8 | ||
|
|
dbb0a953c6 | ||
|
|
442ae6c3cb | ||
|
|
30051d2b0e | ||
|
|
9ae236a010 | ||
|
|
6f209a8139 | ||
|
|
69567fb371 | ||
|
|
66cddddd3e | ||
|
|
485c875ee5 | ||
|
|
ceb1cd9673 | ||
|
|
4d817af060 |
15
.devcontainer/devcontainer.json
Normal file
15
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "Jitsi Meet Dev Container",
|
||||
"image": "mcr.microsoft.com/devcontainers/universal:2",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/node:1": {
|
||||
"version": "16"
|
||||
}
|
||||
},
|
||||
"hostRequirements": {
|
||||
"cpus": 4,
|
||||
"memory": "8gb",
|
||||
"storage": "32gb"
|
||||
},
|
||||
"postCreateCommand": "bash -i -c 'nvm use && npm install && cp tsconfig.web.json tsconfig.json'"
|
||||
}
|
||||
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
@@ -19,7 +19,7 @@ jobs:
|
||||
run: npm run lang-sort
|
||||
- name: Check if the git repository is clean
|
||||
run: $(exit $(git status --porcelain --untracked-files=no | head -255 | wc -l)) || (echo "Dirty git tree"; git diff; exit 1)
|
||||
- run: npm run lint
|
||||
- run: npm run lint:ci
|
||||
- run: for file in lang/*.json; do npx --yes jsonlint -q $file || exit 1; done
|
||||
linux-build:
|
||||
name: Build Frontend (Linux)
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -92,3 +92,4 @@ twa/*.apk
|
||||
twa/*.aab
|
||||
twa/assetlinks.json
|
||||
|
||||
tsconfig.json
|
||||
|
||||
@@ -76,7 +76,7 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.5.1'
|
||||
|
||||
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.7'
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#17A0DB</color>
|
||||
<color name="colorPrimaryDark">#1081B2</color>
|
||||
<color name="navigationBarColor">#161618</color>
|
||||
</resources>
|
||||
@@ -2,7 +2,7 @@
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
|
||||
<item name="android:editTextBackground">@drawable/rn_edit_text_material</item>
|
||||
<item name="android:forceDarkAllowed">false</item>
|
||||
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
|
||||
<item name="android:navigationBarColor">@color/navigationBarColor</item>
|
||||
<item name="android:windowDisablePreview">true</item>
|
||||
</style>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import groovy.json.JsonSlurper
|
||||
import org.apache.tools.ant.taskdefs.condition.Os
|
||||
import org.gradle.util.VersionNumber
|
||||
|
||||
// Top-level build file where you can add configuration options common to all
|
||||
@@ -12,16 +11,16 @@ buildscript {
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.0.4'
|
||||
classpath 'com.google.gms:google-services:4.3.10'
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
|
||||
classpath 'com.google.gms:google-services:4.3.14'
|
||||
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.2'
|
||||
}
|
||||
}
|
||||
|
||||
ext {
|
||||
buildToolsVersion = "31.0.0"
|
||||
compileSdkVersion = 31
|
||||
compileSdkVersion = 32
|
||||
minSdkVersion = 23
|
||||
targetSdkVersion = 31
|
||||
targetSdkVersion = 32
|
||||
supportLibVersion = "28.0.0"
|
||||
|
||||
if (System.properties['os.arch'] == "aarch64") {
|
||||
|
||||
@@ -22,6 +22,8 @@ import android.os.Build;
|
||||
import android.telecom.CallAudioState;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -49,6 +51,8 @@ class AudioDeviceHandlerConnectionService implements
|
||||
*/
|
||||
private AudioModeModule module;
|
||||
|
||||
private RNConnectionService rcs;
|
||||
|
||||
/**
|
||||
* Converts any of the "DEVICE_" constants into the corresponding
|
||||
* {@link android.telecom.CallAudioState} "ROUTE_" number.
|
||||
@@ -141,8 +145,8 @@ class AudioDeviceHandlerConnectionService implements
|
||||
JitsiMeetLogger.i("Using " + TAG + " as the audio device handler");
|
||||
|
||||
module = audioModeModule;
|
||||
rcs = module.getContext().getNativeModule(RNConnectionService.class);
|
||||
|
||||
RNConnectionService rcs = ReactInstanceManagerHolder.getNativeModule(RNConnectionService.class);
|
||||
if (rcs != null) {
|
||||
rcs.setCallAudioStateListener(this);
|
||||
} else {
|
||||
@@ -152,9 +156,9 @@ class AudioDeviceHandlerConnectionService implements
|
||||
|
||||
@Override
|
||||
public void stop() {
|
||||
RNConnectionService rcs = ReactInstanceManagerHolder.getNativeModule(RNConnectionService.class);
|
||||
if (rcs != null) {
|
||||
rcs.setCallAudioStateListener(null);
|
||||
rcs = null;
|
||||
} else {
|
||||
JitsiMeetLogger.w(TAG + " Couldn't set call audio state listener, module is null");
|
||||
}
|
||||
|
||||
@@ -26,10 +26,13 @@ import com.facebook.react.bridge.Arguments;
|
||||
import com.facebook.react.bridge.Promise;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.bridge.ReactContext;
|
||||
import com.facebook.react.bridge.ReactMethod;
|
||||
import com.facebook.react.bridge.WritableArray;
|
||||
import com.facebook.react.bridge.WritableMap;
|
||||
import com.facebook.react.module.annotations.ReactModule;
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||
|
||||
|
||||
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
|
||||
@@ -196,7 +199,7 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
deviceInfo.putBoolean("selected", device.equals(selectedDevice));
|
||||
data.pushMap(deviceInfo);
|
||||
}
|
||||
ReactInstanceManagerHolder.emitEvent(DEVICE_CHANGE_EVENT, data);
|
||||
getContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(DEVICE_CHANGE_EVENT, data);
|
||||
JitsiMeetLogger.i(TAG + " Updating audio device list");
|
||||
}
|
||||
});
|
||||
@@ -212,6 +215,10 @@ class AudioModeModule extends ReactContextBaseJavaModule {
|
||||
return NAME;
|
||||
}
|
||||
|
||||
public ReactContext getContext(){
|
||||
return this.getReactApplicationContext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the audio device handler module. This function is called *after* all Catalyst
|
||||
* modules have been created, and that's why we use it, because {@link AudioDeviceHandlerConnectionService}
|
||||
|
||||
46
android/sdk/src/main/java/org/jitsi/meet/sdk/H264Utils.java
Normal file
46
android/sdk/src/main/java/org/jitsi/meet/sdk/H264Utils.java
Normal file
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* Copyright 2017 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import org.webrtc.VideoCodecInfo;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
/** Container for static helper functions related to dealing with H264 codecs. */
|
||||
class H264Utils {
|
||||
public static final String H264_FMTP_PROFILE_LEVEL_ID = "profile-level-id";
|
||||
public static final String H264_FMTP_LEVEL_ASYMMETRY_ALLOWED = "level-asymmetry-allowed";
|
||||
public static final String H264_FMTP_PACKETIZATION_MODE = "packetization-mode";
|
||||
|
||||
public static final String H264_PROFILE_CONSTRAINED_BASELINE = "42e0";
|
||||
public static final String H264_PROFILE_CONSTRAINED_HIGH = "640c";
|
||||
public static final String H264_LEVEL_3_1 = "1f"; // 31 in hex.
|
||||
public static final String H264_CONSTRAINED_HIGH_3_1 =
|
||||
H264_PROFILE_CONSTRAINED_HIGH + H264_LEVEL_3_1;
|
||||
public static final String H264_CONSTRAINED_BASELINE_3_1 =
|
||||
H264_PROFILE_CONSTRAINED_BASELINE + H264_LEVEL_3_1;
|
||||
|
||||
public static Map<String, String> getDefaultH264Params(boolean isHighProfile) {
|
||||
final Map<String, String> params = new HashMap<>();
|
||||
params.put(VideoCodecInfo.H264_FMTP_LEVEL_ASYMMETRY_ALLOWED, "1");
|
||||
params.put(VideoCodecInfo.H264_FMTP_PACKETIZATION_MODE, "1");
|
||||
params.put(VideoCodecInfo.H264_FMTP_PROFILE_LEVEL_ID,
|
||||
isHighProfile ? VideoCodecInfo.H264_CONSTRAINED_HIGH_3_1
|
||||
: VideoCodecInfo.H264_CONSTRAINED_BASELINE_3_1);
|
||||
return params;
|
||||
}
|
||||
|
||||
public static VideoCodecInfo DEFAULT_H264_BASELINE_PROFILE_CODEC =
|
||||
new VideoCodecInfo("H264", getDefaultH264Params(/* isHighProfile= */ false));
|
||||
public static VideoCodecInfo DEFAULT_H264_HIGH_PROFILE_CODEC =
|
||||
new VideoCodecInfo("H264", getDefaultH264Params(/* isHighProfile= */ true));
|
||||
}
|
||||
@@ -31,12 +31,12 @@ import com.facebook.react.common.LifecycleState;
|
||||
import com.facebook.react.jscexecutor.JSCExecutorFactory;
|
||||
import com.facebook.react.modules.core.DeviceEventManagerModule;
|
||||
import com.facebook.react.uimanager.ViewManager;
|
||||
import com.oney.WebRTCModule.EglUtils;
|
||||
import com.oney.WebRTCModule.RTCVideoViewManager;
|
||||
import com.oney.WebRTCModule.WebRTCModule;
|
||||
|
||||
import org.devio.rn.splashscreen.SplashScreenModule;
|
||||
import org.webrtc.SoftwareVideoDecoderFactory;
|
||||
import org.webrtc.SoftwareVideoEncoderFactory;
|
||||
import org.webrtc.EglBase;
|
||||
import org.webrtc.audio.AudioDeviceModule;
|
||||
import org.webrtc.audio.JavaAudioDeviceModule;
|
||||
|
||||
@@ -89,8 +89,10 @@ class ReactInstanceManagerHolder {
|
||||
.createAudioDeviceModule();
|
||||
options.setAudioDeviceModule(adm);
|
||||
|
||||
options.setVideoDecoderFactory(new SoftwareVideoDecoderFactory());
|
||||
options.setVideoEncoderFactory(new SoftwareVideoEncoderFactory());
|
||||
EglBase.Context eglContext = EglUtils.getRootEglBaseContext();
|
||||
|
||||
options.setVideoDecoderFactory(new WebRTCVideoDecoderFactory(eglContext));
|
||||
options.setVideoEncoderFactory(new WebRTCVideoEncoderFactory(eglContext));
|
||||
|
||||
nativeModules.add(new WebRTCModule(reactContext, options));
|
||||
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
/** Enumeration of supported video codec types. */
|
||||
public enum VideoCodecMimeType {
|
||||
VP8("video/x-vnd.on2.vp8"),
|
||||
VP9("video/x-vnd.on2.vp9"),
|
||||
H264("video/avc"),
|
||||
AV1("video/av01");
|
||||
|
||||
private final String mimeType;
|
||||
|
||||
private VideoCodecMimeType(String mimeType) {
|
||||
this.mimeType = mimeType;
|
||||
}
|
||||
|
||||
String mimeType() {
|
||||
return mimeType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.webrtc.EglBase;
|
||||
import org.webrtc.HardwareVideoDecoderFactory;
|
||||
import org.webrtc.SoftwareVideoDecoderFactory;
|
||||
import org.webrtc.VideoCodecInfo;
|
||||
import org.webrtc.VideoDecoder;
|
||||
import org.webrtc.VideoDecoderFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This is a custom video decoder factory for WebRTC which behaves similarly
|
||||
* to the default one in iOS. It supports the following codecs:
|
||||
*
|
||||
* - In hardware: H.264 (baseline)
|
||||
* - In software: VP8, VP9, AV1
|
||||
*/
|
||||
public class WebRTCVideoDecoderFactory implements VideoDecoderFactory {
|
||||
private final VideoDecoderFactory hardwareVideoDecoderFactory;
|
||||
private final VideoDecoderFactory softwareVideoDecoderFactory = new SoftwareVideoDecoderFactory();
|
||||
|
||||
public WebRTCVideoDecoderFactory(@Nullable EglBase.Context eglContext) {
|
||||
this.hardwareVideoDecoderFactory = new HardwareVideoDecoderFactory(eglContext);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public VideoDecoder createDecoder(VideoCodecInfo codecInfo) {
|
||||
if (codecInfo.name.equalsIgnoreCase(VideoCodecMimeType.H264.name())) {
|
||||
return this.hardwareVideoDecoderFactory.createDecoder(codecInfo);
|
||||
}
|
||||
|
||||
return this.softwareVideoDecoderFactory.createDecoder(codecInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VideoCodecInfo[] getSupportedCodecs() {
|
||||
List<VideoCodecInfo> codecs = new ArrayList<>();
|
||||
|
||||
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
|
||||
|
||||
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package org.jitsi.meet.sdk;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import org.webrtc.EglBase;
|
||||
import org.webrtc.HardwareVideoEncoderFactory;
|
||||
import org.webrtc.SoftwareVideoEncoderFactory;
|
||||
import org.webrtc.VideoCodecInfo;
|
||||
import org.webrtc.VideoEncoder;
|
||||
import org.webrtc.VideoEncoderFactory;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* This is a custom video encoder factory for WebRTC which behaves similarly
|
||||
* to the default one in iOS. It supports the following codecs:
|
||||
*
|
||||
* - In hardware: H.264 (baseline)
|
||||
* - In software: VP8, VP9, AV1
|
||||
*/
|
||||
public class WebRTCVideoEncoderFactory implements VideoEncoderFactory {
|
||||
private final VideoEncoderFactory hardwareVideoEncoderFactory;
|
||||
private final VideoEncoderFactory softwareVideoEncoderFactory = new SoftwareVideoEncoderFactory();
|
||||
|
||||
public WebRTCVideoEncoderFactory(@Nullable EglBase.Context eglContext) {
|
||||
this.hardwareVideoEncoderFactory =
|
||||
new HardwareVideoEncoderFactory(eglContext, false, false);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public VideoEncoder createEncoder(VideoCodecInfo codecInfo) {
|
||||
if (codecInfo.name.equalsIgnoreCase(VideoCodecMimeType.H264.name())) {
|
||||
return this.hardwareVideoEncoderFactory.createEncoder(codecInfo);
|
||||
}
|
||||
|
||||
return this.softwareVideoEncoderFactory.createEncoder(codecInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public VideoCodecInfo[] getSupportedCodecs() {
|
||||
List<VideoCodecInfo> codecs = new ArrayList<>();
|
||||
|
||||
codecs.add(H264Utils.DEFAULT_H264_BASELINE_PROFILE_CODEC);
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP8.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.VP9.name(), new HashMap<>()));
|
||||
codecs.add(new VideoCodecInfo(VideoCodecMimeType.AV1.name(), new HashMap<>()));
|
||||
|
||||
return codecs.toArray(new VideoCodecInfo[codecs.size()]);
|
||||
}
|
||||
}
|
||||
607
conference.js
607
conference.js
@@ -27,7 +27,6 @@ import {
|
||||
} from './react/features/app/actions';
|
||||
import { showModeratedNotification } from './react/features/av-moderation/actions';
|
||||
import { shouldShowModeratedNotification } from './react/features/av-moderation/functions';
|
||||
import { setAudioOnly } from './react/features/base/audio-only';
|
||||
import {
|
||||
AVATAR_URL_COMMAND,
|
||||
CONFERENCE_LEAVE_REASONS,
|
||||
@@ -45,6 +44,7 @@ import {
|
||||
conferenceUniqueIdSet,
|
||||
conferenceWillJoin,
|
||||
conferenceWillLeave,
|
||||
dataChannelClosed,
|
||||
dataChannelOpened,
|
||||
e2eRttChanged,
|
||||
getConferenceOptions,
|
||||
@@ -55,19 +55,18 @@ import {
|
||||
p2pStatusChanged,
|
||||
sendLocalParticipant
|
||||
} from './react/features/base/conference';
|
||||
import {
|
||||
getMultipleVideoSendingSupportFeatureFlag,
|
||||
getReplaceParticipant
|
||||
} from './react/features/base/config/functions';
|
||||
import { getReplaceParticipant } from './react/features/base/config/functions';
|
||||
import {
|
||||
checkAndNotifyForNewDevice,
|
||||
getAvailableDevices,
|
||||
getDefaultDeviceId,
|
||||
notifyCameraError,
|
||||
notifyMicError,
|
||||
setAudioOutputDeviceId,
|
||||
updateDeviceList
|
||||
} from './react/features/base/devices';
|
||||
} from './react/features/base/devices/actions.web';
|
||||
import {
|
||||
getDefaultDeviceId,
|
||||
setAudioOutputDeviceId
|
||||
} from './react/features/base/devices/functions.web';
|
||||
import {
|
||||
JitsiConferenceErrors,
|
||||
JitsiConferenceEvents,
|
||||
@@ -75,7 +74,6 @@ import {
|
||||
JitsiConnectionEvents,
|
||||
JitsiE2ePingEvents,
|
||||
JitsiMediaDevicesEvents,
|
||||
JitsiParticipantConnectionStatus,
|
||||
JitsiTrackErrors,
|
||||
JitsiTrackEvents,
|
||||
browser
|
||||
@@ -99,9 +97,7 @@ import {
|
||||
getNormalizedDisplayName,
|
||||
getVirtualScreenshareParticipantByOwnerId,
|
||||
localParticipantAudioLevelChanged,
|
||||
localParticipantConnectionStatusChanged,
|
||||
localParticipantRoleChanged,
|
||||
participantConnectionStatusChanged,
|
||||
participantKicked,
|
||||
participantMutedUs,
|
||||
participantPresenceChanged,
|
||||
@@ -110,20 +106,15 @@ import {
|
||||
screenshareParticipantDisplayNameChanged,
|
||||
updateRemoteParticipantFeatures
|
||||
} from './react/features/base/participants';
|
||||
import {
|
||||
getUserSelectedCameraDeviceId,
|
||||
updateSettings
|
||||
} from './react/features/base/settings';
|
||||
import { updateSettings } from './react/features/base/settings';
|
||||
import {
|
||||
addLocalTrack,
|
||||
createLocalPresenterTrack,
|
||||
createLocalTracksF,
|
||||
destroyLocalTracks,
|
||||
getLocalJitsiAudioTrack,
|
||||
getLocalJitsiVideoTrack,
|
||||
getLocalTracks,
|
||||
getLocalVideoTrack,
|
||||
isLocalCameraTrackMuted,
|
||||
isLocalTrackMuted,
|
||||
isUserInteractionRequiredForUnmute,
|
||||
replaceLocalTrack,
|
||||
@@ -141,24 +132,21 @@ import {
|
||||
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
|
||||
import { setNoiseSuppressionEnabled } from './react/features/noise-suppression/actions';
|
||||
import {
|
||||
DATA_CHANNEL_CLOSED_NOTIFICATION_ID,
|
||||
NOTIFICATION_TIMEOUT_TYPE,
|
||||
hideNotification,
|
||||
isModerationNotificationDisplayed,
|
||||
showNotification
|
||||
showNotification,
|
||||
showWarningNotification
|
||||
} from './react/features/notifications';
|
||||
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
|
||||
import { suspendDetected } from './react/features/power-monitor';
|
||||
import {
|
||||
initPrejoin,
|
||||
isPrejoinPageVisible,
|
||||
makePrecallTest,
|
||||
setJoiningInProgress
|
||||
} from './react/features/prejoin';
|
||||
import { initPrejoin, makePrecallTest, setJoiningInProgress } from './react/features/prejoin/actions';
|
||||
import { isPrejoinPageVisible } from './react/features/prejoin/functions';
|
||||
import { disableReceiver, stopReceiver } from './react/features/remote-control';
|
||||
import { isScreenAudioShared, setScreenAudioShareState } from './react/features/screen-share/';
|
||||
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture';
|
||||
import { isScreenshotCaptureEnabled } from './react/features/screenshot-capture/functions';
|
||||
import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';
|
||||
import { createPresenterEffect } from './react/features/stream-effects/presenter';
|
||||
import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise';
|
||||
import { endpointMessageReceived } from './react/features/subtitles';
|
||||
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
|
||||
@@ -190,15 +178,6 @@ let _connectionPromise;
|
||||
*/
|
||||
let _onConnectionPromiseCreated;
|
||||
|
||||
/**
|
||||
* This promise is used for chaining mutePresenterVideo calls in order to avoid calling GUM multiple times if it takes
|
||||
* a while to finish.
|
||||
*
|
||||
* @type {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
let _prevMutePresenterVideo = Promise.resolve();
|
||||
|
||||
/*
|
||||
* Logic to open a desktop picker put on the window global for
|
||||
* lib-jitsi-meet to detect and invoke
|
||||
@@ -482,12 +461,6 @@ export default {
|
||||
|
||||
isSharingScreen: false,
|
||||
|
||||
/**
|
||||
* The local presenter video track (if any).
|
||||
* @type {JitsiLocalTrack|null}
|
||||
*/
|
||||
localPresenterVideo: null,
|
||||
|
||||
/**
|
||||
* Returns an object containing a promise which resolves with the created tracks &
|
||||
* the errors resulting from that process.
|
||||
@@ -532,22 +505,10 @@ export default {
|
||||
firePermissionPromptIsShownEvent: true
|
||||
};
|
||||
|
||||
// FIXME is there any simpler way to rewrite this spaghetti below ?
|
||||
if (options.startScreenSharing) {
|
||||
// This option has been deprecated since it is no longer supported as per the w3c spec.
|
||||
// https://w3c.github.io/mediacapture-screen-share/#dom-mediadevices-getdisplaymedia. If the user has not
|
||||
// interacted with the webpage before the getDisplayMedia call, the promise will be rejected by the
|
||||
// browser. This has already been implemented in Firefox and Safari and will be implemented in Chrome soon.
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=1198918
|
||||
// Please note that Spot uses the same config option to use an external video input device label as
|
||||
// screenshare and calls getUserMedia instead of getDisplayMedia for capturing the media. Therefore it
|
||||
// needs to be supported here if _desktopSharingSourceDevice is provided.
|
||||
const errMessage = new Error('startScreenSharing config option is no longer supported for web browsers');
|
||||
const desktopPromise = config._desktopSharingSourceDevice
|
||||
? this._createDesktopTrack()
|
||||
: Promise.reject(errMessage);
|
||||
|
||||
tryCreateLocalTracks = desktopPromise
|
||||
// Spot uses the _desktopSharingSourceDevice config option to use an external video input device label as
|
||||
// screenshare and calls getUserMedia instead of getDisplayMedia for capturing the media.
|
||||
if (options.startScreenSharing && config._desktopSharingSourceDevice) {
|
||||
tryCreateLocalTracks = this._createDesktopTrack()
|
||||
.then(([ desktopStream ]) => {
|
||||
if (!requestedAudio) {
|
||||
return [ desktopStream ];
|
||||
@@ -912,8 +873,7 @@ export default {
|
||||
isLocalVideoMuted() {
|
||||
// If the tracks are not ready, read from base/media state
|
||||
return this._localTracksInitialized
|
||||
? isLocalCameraTrackMuted(
|
||||
APP.store.getState()['features/base/tracks'])
|
||||
? isLocalTrackMuted(APP.store.getState()['features/base/tracks'], MEDIA_TYPE.VIDEO)
|
||||
: isVideoMutedByUser(APP.store);
|
||||
},
|
||||
|
||||
@@ -1033,36 +993,6 @@ export default {
|
||||
this.muteAudio(!this.isLocalAudioMuted(), showUI);
|
||||
},
|
||||
|
||||
/**
|
||||
* Simulates toolbar button click for presenter video mute. Used by
|
||||
* shortcuts and API.
|
||||
* @param mute true for mute and false for unmute.
|
||||
* @param {boolean} [showUI] when set to false will not display any error
|
||||
* dialogs in case of media permissions error.
|
||||
*/
|
||||
async mutePresenter(mute, showUI = true) {
|
||||
const maybeShowErrorDialog = error => {
|
||||
showUI && APP.store.dispatch(notifyCameraError(error));
|
||||
};
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
|
||||
if (mute) {
|
||||
try {
|
||||
await localVideo.setEffect(undefined);
|
||||
} catch (err) {
|
||||
logger.error('Failed to remove the presenter effect', err);
|
||||
maybeShowErrorDialog(err);
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
await localVideo.setEffect(await this._createPresenterStreamEffect());
|
||||
} catch (err) {
|
||||
logger.error('Failed to apply the presenter effect', err);
|
||||
maybeShowErrorDialog(err);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Simulates toolbar button click for video mute. Used by shortcuts and API.
|
||||
* @param mute true for mute and false for unmute.
|
||||
@@ -1071,8 +1001,6 @@ export default {
|
||||
*/
|
||||
muteVideo(mute, showUI = true) {
|
||||
if (this.videoSwitchInProgress) {
|
||||
// Turning the camera on while the screen sharing mode is being turned off is causing issues around
|
||||
// the presenter mode handling. It should be okay for the user to click the button again once that's done.
|
||||
console.warn('muteVideo - unable to perform operations while video switch is in progress');
|
||||
|
||||
return;
|
||||
@@ -1085,13 +1013,6 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.isSharingScreen) {
|
||||
// Chain _mutePresenterVideo calls
|
||||
_prevMutePresenterVideo = _prevMutePresenterVideo.then(() => this._mutePresenterVideo(mute));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// If not ready to modify track's state yet adjust the base/media
|
||||
if (!this._localTracksInitialized) {
|
||||
// This will only modify base/media.video.muted which is then synced
|
||||
@@ -1403,8 +1324,6 @@ export default {
|
||||
// Restore initial state.
|
||||
this._localTracksInitialized = false;
|
||||
this.isSharingScreen = false;
|
||||
this.localPresenterVideo = null;
|
||||
|
||||
this.roomName = roomName;
|
||||
|
||||
const { tryCreateLocalTracks, errors } = this.createInitialLocalTracks(options);
|
||||
@@ -1500,30 +1419,13 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
// In the multi-stream mode, add the track to the conference if there is no existing track, replace it
|
||||
// otherwise.
|
||||
if (getMultipleVideoSendingSupportFeatureFlag(state)) {
|
||||
const trackAction = oldTrack
|
||||
? replaceLocalTrack(oldTrack, newTrack, room)
|
||||
: addLocalTrack(newTrack);
|
||||
// Add the track to the conference if there is no existing track, replace it otherwise.
|
||||
const trackAction = oldTrack
|
||||
? replaceLocalTrack(oldTrack, newTrack, room)
|
||||
: addLocalTrack(newTrack);
|
||||
|
||||
APP.store.dispatch(trackAction)
|
||||
.then(() => {
|
||||
this.setVideoMuteStatus();
|
||||
})
|
||||
.then(resolve)
|
||||
.catch(error => {
|
||||
logger.error(`useVideoStream failed: ${error}`);
|
||||
reject(error);
|
||||
})
|
||||
.then(onFinish);
|
||||
|
||||
return;
|
||||
}
|
||||
APP.store.dispatch(
|
||||
replaceLocalTrack(oldTrack, newTrack, room))
|
||||
APP.store.dispatch(trackAction)
|
||||
.then(() => {
|
||||
this._setSharingScreen(newTrack);
|
||||
this.setVideoMuteStatus();
|
||||
})
|
||||
.then(resolve)
|
||||
@@ -1536,33 +1438,6 @@ export default {
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Sets `this.isSharingScreen` depending on provided video stream.
|
||||
* In case new screen sharing status is not equal previous one
|
||||
* it updates desktop sharing buttons in UI
|
||||
* and notifies external application.
|
||||
*
|
||||
* @param {JitsiLocalTrack} [newStream] new stream to use or null
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_setSharingScreen(newStream) {
|
||||
const wasSharingScreen = this.isSharingScreen;
|
||||
|
||||
this.isSharingScreen = newStream && newStream.videoType === 'desktop';
|
||||
|
||||
if (wasSharingScreen !== this.isSharingScreen) {
|
||||
const details = {};
|
||||
|
||||
if (this.isSharingScreen) {
|
||||
details.sourceType = newStream.sourceType;
|
||||
}
|
||||
|
||||
APP.API.notifyScreenSharingStatusChanged(
|
||||
this.isSharingScreen, details);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Start using provided audio stream.
|
||||
* Stops previous audio stream.
|
||||
@@ -1642,35 +1517,6 @@ export default {
|
||||
const tracks = APP.store.getState()['features/base/tracks'];
|
||||
const duration = getLocalVideoTrack(tracks)?.jitsiTrack.getDuration() ?? 0;
|
||||
|
||||
// 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
|
||||
// will be null when SS is being turned off, but it will initialize once GUM resolves).
|
||||
let promise = _prevMutePresenterVideo = _prevMutePresenterVideo.then(() => {
|
||||
// mute the presenter track if it exists.
|
||||
if (this.localPresenterVideo) {
|
||||
return (
|
||||
this.localPresenterVideo.dispose().then(() => {
|
||||
APP.store.dispatch(trackRemoved(this.localPresenterVideo));
|
||||
this.localPresenterVideo = null;
|
||||
})
|
||||
.then(() => {
|
||||
|
||||
// This is needed only for setting the correct muted state in features/base/media.
|
||||
// NOTE: It is important to be executed after we have disposed and removed the presenter track.
|
||||
// This way all the side effects won't be executed and we won't start additional O/A cycle for
|
||||
// replacing the track with video with the one without video. This O/A cycle is not needed since
|
||||
// we are trying to destroy all tracks. Also due to the current async nature of muting the
|
||||
// presenter, the final removal of the screen sharing track (see the code at the end of the
|
||||
// function) can be executed between the removal of the stream with video and adding the
|
||||
// original screen sharing stream to the peer connection. This will lead to a failure to remove
|
||||
// the screen sharing track, compromising the screen sharing state in jitsi-meet and the user
|
||||
// won't be able to turn off the screen sharing.
|
||||
APP.store.dispatch(setVideoMuted(true, MEDIA_TYPE.PRESENTER));
|
||||
})
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// If system audio was also shared stop the AudioMixerEffect and dispose of the desktop audio track.
|
||||
if (this._mixerEffect) {
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
@@ -1689,9 +1535,10 @@ export default {
|
||||
}
|
||||
|
||||
APP.store.dispatch(setScreenAudioShareState(false));
|
||||
let promise;
|
||||
|
||||
if (didHaveVideo && !ignoreDidHaveVideo) {
|
||||
promise = promise.then(() => createLocalTracksF({ devices: [ 'video' ] }))
|
||||
promise = createLocalTracksF({ devices: [ 'video' ] })
|
||||
.then(([ stream ]) => {
|
||||
logger.debug(`_turnScreenSharingOff using ${stream} for useVideoStream`);
|
||||
|
||||
@@ -1707,11 +1554,7 @@ export default {
|
||||
);
|
||||
});
|
||||
} else {
|
||||
promise = promise.then(() => {
|
||||
logger.debug('_turnScreenSharingOff using null for useVideoStream');
|
||||
|
||||
return this.useVideoStream(null);
|
||||
});
|
||||
promise = this.useVideoStream(null);
|
||||
}
|
||||
|
||||
return promise.then(
|
||||
@@ -1729,56 +1572,6 @@ export default {
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Toggles between screen sharing and camera video if the toggle parameter
|
||||
* is not specified and starts the procedure for obtaining new screen
|
||||
* sharing/video track otherwise.
|
||||
*
|
||||
* NOTE: this is currently ONLY used in the non-multi-stream case.
|
||||
*
|
||||
* @param {boolean} [toggle] - If true - new screen sharing track will be
|
||||
* obtained. If false - new video track will be obtain. If not specified -
|
||||
* toggles between screen sharing and camera video.
|
||||
* @param {Object} [options] - Screen sharing options that will be passed to
|
||||
* createLocalTracks.
|
||||
* @param {boolean} [options.audioOnly] - Whether or not audioOnly is enabled.
|
||||
* @param {Array<string>} [options.desktopSharingSources] - Array with the
|
||||
* sources that have to be displayed in the desktop picker window ('screen',
|
||||
* 'window', etc.).
|
||||
* @param {Object} [options.desktopStream] - An existing desktop stream to
|
||||
* use instead of creating a new desktop stream.
|
||||
* @param {boolean} ignoreDidHaveVideo - if true ignore if video was on when sharing started.
|
||||
* @return {Promise.<T>}
|
||||
*/
|
||||
async toggleScreenSharing(toggle = !this._untoggleScreenSharing, options = {}, ignoreDidHaveVideo) {
|
||||
logger.debug(`toggleScreenSharing: ${toggle}`);
|
||||
if (this.videoSwitchInProgress) {
|
||||
return Promise.reject(`toggleScreenSharing: ${toggle} aborted - video switch in progress.`);
|
||||
}
|
||||
if (!JitsiMeetJS.isDesktopSharingEnabled()) {
|
||||
return Promise.reject('Cannot toggle screen sharing: not supported.');
|
||||
}
|
||||
|
||||
if (toggle) {
|
||||
try {
|
||||
await this._switchToScreenSharing(options);
|
||||
if (this.isAudioOnly()) {
|
||||
APP.store.dispatch(setAudioOnly(false));
|
||||
}
|
||||
|
||||
return;
|
||||
} catch (err) {
|
||||
logger.error('Failed to switch to screensharing', err);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
return this._untoggleScreenSharing
|
||||
? this._untoggleScreenSharing(ignoreDidHaveVideo)
|
||||
: Promise.resolve();
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates desktop (screensharing) {@link JitsiLocalTrack}
|
||||
*
|
||||
@@ -1851,228 +1644,6 @@ export default {
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Creates a new instance of presenter effect. A new video track is created
|
||||
* using the new set of constraints that are calculated based on
|
||||
* the height of the desktop that is being currently shared.
|
||||
*
|
||||
* @param {number} height - The height of the desktop stream that is being
|
||||
* currently shared.
|
||||
* @param {string} cameraDeviceId - The device id of the camera to be used.
|
||||
* @return {Promise<JitsiStreamPresenterEffect>} - A promise resolved with
|
||||
* {@link JitsiStreamPresenterEffect} if it succeeds.
|
||||
*/
|
||||
async _createPresenterStreamEffect(height = null, cameraDeviceId = null) {
|
||||
if (!this.localPresenterVideo) {
|
||||
const camera = cameraDeviceId ?? getUserSelectedCameraDeviceId(APP.store.getState());
|
||||
|
||||
try {
|
||||
this.localPresenterVideo = await createLocalPresenterTrack({ cameraDeviceId: camera }, height);
|
||||
} catch (err) {
|
||||
logger.error('Failed to create a camera track for presenter', err);
|
||||
|
||||
return;
|
||||
}
|
||||
APP.store.dispatch(trackAdded(this.localPresenterVideo));
|
||||
}
|
||||
try {
|
||||
const effect = await createPresenterEffect(this.localPresenterVideo.stream);
|
||||
|
||||
return effect;
|
||||
} catch (err) {
|
||||
logger.error('Failed to create the presenter effect', err);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Tries to turn the presenter video track on or off. If a presenter track
|
||||
* doesn't exist, a new video track is created.
|
||||
*
|
||||
* @param mute - true for mute and false for unmute.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
async _mutePresenterVideo(mute) {
|
||||
const maybeShowErrorDialog = error => {
|
||||
APP.store.dispatch(notifyCameraError(error));
|
||||
};
|
||||
|
||||
// Check for NO-OP
|
||||
if (mute && (!this.localPresenterVideo || this.localPresenterVideo.isMuted())) {
|
||||
|
||||
return;
|
||||
} else if (!mute && this.localPresenterVideo && !this.localPresenterVideo.isMuted()) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new presenter track and apply the presenter effect.
|
||||
if (!this.localPresenterVideo && !mute) {
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
const { height, width } = localVideo.track.getSettings() ?? localVideo.track.getConstraints();
|
||||
const isPortrait = height >= width;
|
||||
const DESKTOP_STREAM_CAP = 720;
|
||||
|
||||
const highResolutionTrack
|
||||
= (isPortrait && width > DESKTOP_STREAM_CAP) || (!isPortrait && height > DESKTOP_STREAM_CAP);
|
||||
|
||||
// Resizing the desktop track for presenter is causing blurriness of the desktop share on chrome.
|
||||
// Disable resizing by default, enable it only when config.js setting is enabled.
|
||||
const resizeDesktopStream = highResolutionTrack && config.videoQuality?.resizeDesktopForPresenter;
|
||||
|
||||
if (resizeDesktopStream) {
|
||||
let desktopResizeConstraints = {};
|
||||
|
||||
if (height && width) {
|
||||
const advancedConstraints = [ { aspectRatio: (width / height).toPrecision(4) } ];
|
||||
const constraint = isPortrait ? { width: DESKTOP_STREAM_CAP } : { height: DESKTOP_STREAM_CAP };
|
||||
|
||||
advancedConstraints.push(constraint);
|
||||
desktopResizeConstraints.advanced = advancedConstraints;
|
||||
} else {
|
||||
desktopResizeConstraints = {
|
||||
width: 1280,
|
||||
height: 720
|
||||
};
|
||||
}
|
||||
|
||||
// Apply the constraints on the desktop track.
|
||||
try {
|
||||
await localVideo.track.applyConstraints(desktopResizeConstraints);
|
||||
} catch (err) {
|
||||
logger.error('Failed to apply constraints on the desktop stream for presenter mode', err);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
const trackHeight = resizeDesktopStream
|
||||
? localVideo.track.getSettings().height ?? DESKTOP_STREAM_CAP
|
||||
: height;
|
||||
let effect;
|
||||
|
||||
try {
|
||||
effect = await this._createPresenterStreamEffect(trackHeight);
|
||||
} catch (err) {
|
||||
logger.error('Failed to unmute Presenter Video', err);
|
||||
maybeShowErrorDialog(err);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Replace the desktop track on the peerconnection.
|
||||
try {
|
||||
await localVideo.setEffect(effect);
|
||||
APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));
|
||||
this.setVideoMuteStatus();
|
||||
} catch (err) {
|
||||
logger.error('Failed to apply the Presenter effect', err);
|
||||
}
|
||||
} else {
|
||||
APP.store.dispatch(setVideoMuted(mute, MEDIA_TYPE.PRESENTER));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Tries to switch to the screensharing mode by disposing camera stream and
|
||||
* replacing it with a desktop one.
|
||||
*
|
||||
* @param {Object} [options] - Screen sharing options that will be passed to
|
||||
* createLocalTracks.
|
||||
*
|
||||
* @return {Promise} - A Promise resolved if the operation succeeds or
|
||||
* rejected with some unknown type of error in case it fails. Promise will
|
||||
* be rejected immediately if {@link videoSwitchInProgress} is true.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
_switchToScreenSharing(options = {}) {
|
||||
if (this.videoSwitchInProgress) {
|
||||
return Promise.reject('Switch in progress.');
|
||||
}
|
||||
|
||||
this.videoSwitchInProgress = true;
|
||||
|
||||
return this._createDesktopTrack(options)
|
||||
.then(async streams => {
|
||||
let desktopVideoStream = streams.find(stream => stream.getType() === MEDIA_TYPE.VIDEO);
|
||||
|
||||
this._desktopAudioStream = streams.find(stream => stream.getType() === MEDIA_TYPE.AUDIO);
|
||||
|
||||
const { audioOnly = false } = options;
|
||||
|
||||
// If we're in audio only mode dispose of the video track otherwise the screensharing state will be
|
||||
// inconsistent.
|
||||
if (audioOnly) {
|
||||
desktopVideoStream.dispose();
|
||||
desktopVideoStream = undefined;
|
||||
|
||||
if (!this._desktopAudioStream) {
|
||||
return Promise.reject(AUDIO_ONLY_SCREEN_SHARE_NO_TRACK);
|
||||
}
|
||||
}
|
||||
|
||||
if (desktopVideoStream) {
|
||||
logger.debug(`_switchToScreenSharing is using ${desktopVideoStream} for useVideoStream`);
|
||||
await this.useVideoStream(desktopVideoStream);
|
||||
}
|
||||
|
||||
if (this._desktopAudioStream) {
|
||||
// Noise suppression doesn't work with desktop audio because we can't chain
|
||||
// track effects yet, disable it first.
|
||||
// We need to to wait for the effect to clear first or it might interfere with the audio mixer.
|
||||
await APP.store.dispatch(setNoiseSuppressionEnabled(false));
|
||||
|
||||
const localAudio = getLocalJitsiAudioTrack(APP.store.getState());
|
||||
|
||||
// If there is a localAudio stream, mix in the desktop audio stream captured by the screen sharing
|
||||
// api.
|
||||
if (localAudio) {
|
||||
this._mixerEffect = new AudioMixerEffect(this._desktopAudioStream);
|
||||
logger.debug(`_switchToScreenSharing is mixing ${this._desktopAudioStream} and ${localAudio}`
|
||||
+ ' as a single audio stream');
|
||||
await 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.
|
||||
logger.debug(`_switchToScreenSharing is using ${this._desktopAudioStream} for replacing it as`
|
||||
+ ' the only audio track on the conference');
|
||||
await room.replaceTrack(null, this._desktopAudioStream);
|
||||
}
|
||||
APP.store.dispatch(setScreenAudioShareState(true));
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
this.videoSwitchInProgress = false;
|
||||
if (isScreenshotCaptureEnabled(APP.store.getState(), false, true)) {
|
||||
APP.store.dispatch(toggleScreenshotCaptureSummary(true));
|
||||
}
|
||||
sendAnalytics(createScreenSharingEvent('started'));
|
||||
logger.log('Screen sharing started');
|
||||
})
|
||||
.catch(error => {
|
||||
this.videoSwitchInProgress = false;
|
||||
|
||||
// Pawel: With this call I'm trying to preserve the original
|
||||
// behaviour although it is not clear why would we "untoggle"
|
||||
// on failure. I suppose it was to restore video in case there
|
||||
// was some problem during "this.useVideoStream(desktopStream)".
|
||||
// It's important to note that the handler will not be available
|
||||
// if we fail early on trying to get desktop media (which makes
|
||||
// sense, because the camera video is still being used, so
|
||||
// nothing to "untoggle").
|
||||
if (this._untoggleScreenSharing) {
|
||||
this._untoggleScreenSharing();
|
||||
}
|
||||
|
||||
// FIXME the code inside of _handleScreenSharingError is
|
||||
// asynchronous, but does not return a Promise and is not part
|
||||
// of the current Promise chain.
|
||||
this._handleScreenSharingError(error);
|
||||
|
||||
return Promise.reject(error);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Handles {@link JitsiTrackError} returned by the lib-jitsi-meet when
|
||||
* trying to create screensharing track. It will either do nothing if
|
||||
@@ -2277,11 +1848,6 @@ export default {
|
||||
(jitsiConference, p2p) =>
|
||||
APP.store.dispatch(p2pStatusChanged(p2p)));
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.PARTICIPANT_CONN_STATUS_CHANGED,
|
||||
(id, connectionStatus) => APP.store.dispatch(
|
||||
participantConnectionStatusChanged(id, connectionStatus)));
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.DOMINANT_SPEAKER_CHANGED,
|
||||
(dominant, previous, silence) => {
|
||||
@@ -2292,16 +1858,6 @@ export default {
|
||||
JitsiConferenceEvents.CONFERENCE_CREATED_TIMESTAMP,
|
||||
conferenceTimestamp => APP.store.dispatch(conferenceTimestampChanged(conferenceTimestamp)));
|
||||
|
||||
room.on(JitsiConferenceEvents.CONNECTION_INTERRUPTED, () => {
|
||||
APP.store.dispatch(localParticipantConnectionStatusChanged(
|
||||
JitsiParticipantConnectionStatus.INTERRUPTED));
|
||||
});
|
||||
|
||||
room.on(JitsiConferenceEvents.CONNECTION_RESTORED, () => {
|
||||
APP.store.dispatch(localParticipantConnectionStatusChanged(
|
||||
JitsiParticipantConnectionStatus.ACTIVE));
|
||||
});
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.DISPLAY_NAME_CHANGED,
|
||||
(id, displayName) => {
|
||||
@@ -2495,6 +2051,18 @@ export default {
|
||||
room.on(
|
||||
JitsiConferenceEvents.DATA_CHANNEL_OPENED, () => {
|
||||
APP.store.dispatch(dataChannelOpened());
|
||||
APP.store.dispatch(hideNotification(DATA_CHANNEL_CLOSED_NOTIFICATION_ID));
|
||||
}
|
||||
);
|
||||
|
||||
room.on(
|
||||
JitsiConferenceEvents.DATA_CHANNEL_CLOSED, ev => {
|
||||
APP.store.dispatch(dataChannelClosed(ev.code, ev.reason));
|
||||
APP.store.dispatch(showWarningNotification({
|
||||
descriptionKey: 'notify.dataChannelClosedDescription',
|
||||
titleKey: 'notify.dataChannelClosed',
|
||||
uid: DATA_CHANNEL_CLOSED_NOTIFICATION_ID
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.STICKY));
|
||||
}
|
||||
);
|
||||
|
||||
@@ -2521,77 +2089,38 @@ export default {
|
||||
APP.UI.addListener(
|
||||
UIEvents.VIDEO_DEVICE_CHANGED,
|
||||
cameraDeviceId => {
|
||||
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
|
||||
const videoWasMuted = this.isLocalVideoMuted();
|
||||
|
||||
sendAnalytics(createDeviceChangedEvent('video', 'input'));
|
||||
|
||||
// If both screenshare and video are in progress, restart the
|
||||
// presenter mode with the new camera device.
|
||||
if (this.isSharingScreen && !videoWasMuted) {
|
||||
const { height } = localVideo.track.getSettings();
|
||||
createLocalTracksF({
|
||||
devices: [ 'video' ],
|
||||
cameraDeviceId
|
||||
})
|
||||
.then(([ stream ]) => {
|
||||
// if we are in audio only mode or video was muted before
|
||||
// changing device, then mute
|
||||
if (this.isAudioOnly() || videoWasMuted) {
|
||||
return stream.mute()
|
||||
.then(() => stream);
|
||||
}
|
||||
|
||||
// dispose the existing presenter track and create a new
|
||||
// camera track.
|
||||
// FIXME JitsiLocalTrack.dispose is async and should be waited for
|
||||
this.localPresenterVideo && this.localPresenterVideo.dispose();
|
||||
this.localPresenterVideo = null;
|
||||
|
||||
return this._createPresenterStreamEffect(height, cameraDeviceId)
|
||||
.then(effect => localVideo.setEffect(effect))
|
||||
.then(() => {
|
||||
this.setVideoMuteStatus();
|
||||
logger.log('Switched local video device while screen sharing and the video is unmuted');
|
||||
this._updateVideoDeviceId();
|
||||
})
|
||||
.catch(err => APP.store.dispatch(notifyCameraError(err)));
|
||||
|
||||
// If screenshare is in progress but video is muted, update the default device
|
||||
// id for video, dispose the existing presenter track and create a new effect
|
||||
// that can be applied on un-mute.
|
||||
} else if (this.isSharingScreen && videoWasMuted) {
|
||||
logger.log('Switched local video device: while screen sharing and the video is muted');
|
||||
const { height } = localVideo.track.getSettings();
|
||||
return stream;
|
||||
})
|
||||
.then(stream => {
|
||||
logger.info(`Switching the local video device to ${cameraDeviceId}.`);
|
||||
|
||||
return this.useVideoStream(stream);
|
||||
})
|
||||
.then(() => {
|
||||
logger.info(`Switched local video device to ${cameraDeviceId}.`);
|
||||
this._updateVideoDeviceId();
|
||||
})
|
||||
.catch(error => {
|
||||
logger.error(`Failed to switch to selected camera:${cameraDeviceId}, error:${error}`);
|
||||
|
||||
// FIXME JitsiLocalTrack.dispose is async and should be waited for
|
||||
this.localPresenterVideo && this.localPresenterVideo.dispose();
|
||||
this.localPresenterVideo = null;
|
||||
this._createPresenterStreamEffect(height, cameraDeviceId);
|
||||
|
||||
// if there is only video, switch to the new camera stream.
|
||||
} else {
|
||||
createLocalTracksF({
|
||||
devices: [ 'video' ],
|
||||
cameraDeviceId,
|
||||
micDeviceId: null
|
||||
})
|
||||
.then(([ stream ]) => {
|
||||
// if we are in audio only mode or video was muted before
|
||||
// changing device, then mute
|
||||
if (this.isAudioOnly() || videoWasMuted) {
|
||||
return stream.mute()
|
||||
.then(() => stream);
|
||||
}
|
||||
|
||||
return stream;
|
||||
})
|
||||
.then(stream => {
|
||||
logger.info(`Switching the local video device to ${cameraDeviceId}.`);
|
||||
|
||||
return this.useVideoStream(stream);
|
||||
})
|
||||
.then(() => {
|
||||
logger.info(`Switched local video device to ${cameraDeviceId}.`);
|
||||
this._updateVideoDeviceId();
|
||||
})
|
||||
.catch(error => {
|
||||
logger.error(`Failed to switch to selected camera:${cameraDeviceId}, error:${error}`);
|
||||
|
||||
return APP.store.dispatch(notifyCameraError(error));
|
||||
});
|
||||
}
|
||||
return APP.store.dispatch(notifyCameraError(error));
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
@@ -2615,7 +2144,6 @@ export default {
|
||||
sendAnalytics(createDeviceChangedEvent('audio', 'input'));
|
||||
createLocalTracksF({
|
||||
devices: [ 'audio' ],
|
||||
cameraDeviceId: null,
|
||||
micDeviceId: selectedDeviceId
|
||||
})
|
||||
.then(([ stream ]) => {
|
||||
@@ -2758,13 +2286,6 @@ export default {
|
||||
cameraDeviceId: localVideo.getDeviceId()
|
||||
}));
|
||||
}
|
||||
|
||||
// If screenshare is in progress, get the device id from the presenter track.
|
||||
if (this.localPresenterVideo) {
|
||||
APP.store.dispatch(updateSettings({
|
||||
cameraDeviceId: this.localPresenterVideo.getDeviceId()
|
||||
}));
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -3213,7 +2734,7 @@ export default {
|
||||
return;
|
||||
}
|
||||
|
||||
APP.store.dispatch(toggleScreensharingA(undefined, false, false, { desktopStream }));
|
||||
APP.store.dispatch(toggleScreensharingA(undefined, false, { desktopStream }));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
56
config.js
56
config.js
@@ -65,10 +65,6 @@ var config = {
|
||||
// issues related to insertable streams.
|
||||
// disableE2EE: false,
|
||||
|
||||
// Enables/disables thumbnail reordering in the filmstrip. It is enabled by default unless explicitly
|
||||
// disabled by the below option.
|
||||
// enableThumbnailReordering: true,
|
||||
|
||||
// Enables XMPP WebSocket (as opposed to BOSH) for the given amount of users.
|
||||
// mobileXmppWsThreshold: 10, // enable XMPP WebSockets on mobile for 10% of the users
|
||||
|
||||
@@ -83,15 +79,6 @@ var config = {
|
||||
// This is useful when the client runs on a host with limited resources.
|
||||
// noAutoPlayVideo: false,
|
||||
|
||||
// Enable / disable 500 Kbps bitrate cap on desktop tracks. When enabled,
|
||||
// simulcast is turned off for the desktop share. If presenter is turned
|
||||
// on while screensharing is in progress, the max bitrate is automatically
|
||||
// adjusted to 2.5 Mbps. This takes a value between 0 and 1 which determines
|
||||
// the probability for this to be enabled. This setting has been deprecated.
|
||||
// desktopSharingFrameRate.max now determines whether simulcast will be enabled
|
||||
// or disabled for the screenshare.
|
||||
// capScreenshareBitrate: 1, // 0 to disable - deprecated.
|
||||
|
||||
// Whether to use fake constraints (height: 99999, width: 99999) when calling getDisplayMedia on
|
||||
// Chromium based browsers. This is intended as a workaround for
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=1056311
|
||||
@@ -103,20 +90,6 @@ var config = {
|
||||
// callStatsThreshold: 5, // enable callstats for 5% of the users.
|
||||
},
|
||||
|
||||
// Feature Flags.
|
||||
flags: {
|
||||
// Enables source names in the signaling.
|
||||
// sourceNameSignaling: false,
|
||||
|
||||
// Enables sending multiple video streams, i.e., camera and desktop tracks can be shared in the conference
|
||||
// separately as two different streams instead of one composite stream.
|
||||
// sendMultipleVideoStreams: false,
|
||||
|
||||
// Signal that this client supports receiving multiple video streams. Without this flag jicofo will enable
|
||||
// multi-stream backward compatibility.
|
||||
// receiveMultipleVideoStreams: true,
|
||||
},
|
||||
|
||||
// Disables moderator indicators.
|
||||
// disableModeratorIndicator: false,
|
||||
|
||||
@@ -224,9 +197,29 @@ var config = {
|
||||
// Specifies whether the raised hand will hide when someone becomes a dominant speaker or not
|
||||
// disableRemoveRaisedHandOnFocus: false,
|
||||
|
||||
// speakerStats: {
|
||||
// // Specifies whether the speaker stats is enable or not.
|
||||
// disabled: false,
|
||||
|
||||
// // Specifies whether there will be a search field in speaker stats or not.
|
||||
// disableSearch: false,
|
||||
|
||||
// // Specifies whether participants in speaker stats should be ordered or not, and with what priority.
|
||||
// // 'role', <- Moderators on top.
|
||||
// // 'name', <- Alphabetically by name.
|
||||
// // 'hasLeft', <- The ones that have left in the bottom.
|
||||
// order: [
|
||||
// 'role',
|
||||
// 'name',
|
||||
// 'hasLeft',
|
||||
// ],
|
||||
// },
|
||||
|
||||
// DEPRECATED. Please use speakerStats.disableSearch instead.
|
||||
// Specifies whether there will be a search field in speaker stats or not
|
||||
// disableSpeakerStatsSearch: false,
|
||||
|
||||
// DEPRECATED. Please use speakerStats.order .
|
||||
// Specifies whether participants in speaker stats should be ordered or not, and with what priority
|
||||
// speakerStatsOrder: [
|
||||
// 'role', <- Moderators on top
|
||||
@@ -507,9 +500,6 @@ var config = {
|
||||
// 720: 'high',
|
||||
// },
|
||||
//
|
||||
// // Provides a way to resize the desktop track to 720p (if it is greater than 720p) before creating a canvas
|
||||
// // for the presenter mode (camera picture-in-picture mode with screenshare).
|
||||
// resizeDesktopForPresenter: false,
|
||||
// },
|
||||
|
||||
// Notification timeouts
|
||||
@@ -741,6 +731,7 @@ var config = {
|
||||
// 'toggle-camera',
|
||||
// 'undock-iframe',
|
||||
// 'videoquality',
|
||||
// 'whiteboard',
|
||||
// ],
|
||||
|
||||
// Holds values related to toolbar visibility control.
|
||||
@@ -776,11 +767,13 @@ var config = {
|
||||
// 'desktop',
|
||||
// 'download',
|
||||
// 'embedmeeting',
|
||||
// 'end-meeting',
|
||||
// 'etherpad',
|
||||
// 'feedback',
|
||||
// 'filmstrip',
|
||||
// 'fullscreen',
|
||||
// 'hangup',
|
||||
// 'hangup-menu',
|
||||
// 'help',
|
||||
// {
|
||||
// key: 'invite',
|
||||
@@ -813,6 +806,7 @@ var config = {
|
||||
// key: 'add-passcode',
|
||||
// preventExecution: false
|
||||
// },
|
||||
// 'whiteboard',
|
||||
// ],
|
||||
|
||||
// List of pre meeting screens buttons to hide. The values must be one or more of the 5 allowed buttons:
|
||||
@@ -1487,6 +1481,8 @@ var config = {
|
||||
// displayMode: 'all',
|
||||
// // How long the GIF should be displayed on the tile (in milliseconds).
|
||||
// tileTime: 5000,
|
||||
// // Limit results by rating: g, pg, pg-13, r. Default value: g.
|
||||
// rating: 'pg',
|
||||
// },
|
||||
|
||||
// Logging
|
||||
|
||||
@@ -10,7 +10,7 @@ import {
|
||||
connectionEstablished,
|
||||
connectionFailed,
|
||||
constructOptions
|
||||
} from './react/features/base/connection/actions';
|
||||
} from './react/features/base/connection/actions.web';
|
||||
import { openDialog } from './react/features/base/dialog/actions';
|
||||
import { setJWT } from './react/features/base/jwt';
|
||||
import {
|
||||
|
||||
@@ -182,3 +182,8 @@ form {
|
||||
background: rgba(0, 0, 0, .5);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
/* Necessary for the new icons to work properly. */
|
||||
.jitsi-icon svg path {
|
||||
fill: inherit !important;
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
|
||||
border-radius: 3px;
|
||||
cursor: pointer;
|
||||
padding: 4px;
|
||||
padding: 1px;
|
||||
position: absolute;
|
||||
right: -4px;
|
||||
top: -3px;
|
||||
|
||||
@@ -8,7 +8,6 @@ $hangupColor:#DD3849;
|
||||
$hangupHoverColor: #F25363;
|
||||
$hangupMenuButtonColor:#0056E0;;
|
||||
$hangupMenuButtonHoverColor: #246FE5;
|
||||
$hangupFontSize: 2em;
|
||||
|
||||
/**
|
||||
* Size variables.
|
||||
@@ -45,7 +44,6 @@ $newToolbarSizeMobile: 60px;
|
||||
$newToolbarSizeWithPadding: calc(#{$newToolbarSize} + 24px);
|
||||
$toolbarTitleFontSize: 19px;
|
||||
$overflowMenuItemColor: #fff;
|
||||
$overflowMenuItemBackground: #36383C;
|
||||
|
||||
|
||||
/**
|
||||
@@ -88,7 +86,7 @@ $chatPrivateMessageBackgroundColor: rgb(153, 69, 77);
|
||||
$chatRemoteMessageBackgroundColor: #242528;
|
||||
$sidebarWidth: 315px;
|
||||
|
||||
/**
|
||||
/**
|
||||
* Misc.
|
||||
*/
|
||||
$borderRadius: 4px;
|
||||
@@ -103,8 +101,6 @@ $zindex0: 0;
|
||||
$zindex1: 1;
|
||||
$zindex2: 2;
|
||||
$zindex3: 3;
|
||||
$toolbarBackgroundZ: 4;
|
||||
$labelsZ: 5;
|
||||
$subtitlesZ: 7;
|
||||
$popoverZ: 8;
|
||||
$reloadZ: 20;
|
||||
@@ -113,10 +109,7 @@ $ringingZ: 300;
|
||||
$sideToolbarContainerZ: 300;
|
||||
$toolbarZ: 250;
|
||||
$drawerZ: 351;
|
||||
$tooltipsZ: 401;
|
||||
$dropdownMaskZ: 900;
|
||||
$dropdownZ: 901;
|
||||
$centeredVideoLabelZ: 1010;
|
||||
$overlayZ: 1016;
|
||||
// Place filmstrip videos over toolbar in order
|
||||
// to make connection info visible.
|
||||
@@ -250,7 +243,6 @@ $chromeExtensionBannerRightInMeeeting: 10px;
|
||||
/**
|
||||
* media type thresholds
|
||||
*/
|
||||
$smallScreen: 700px;
|
||||
$verySmallScreen: 500px;
|
||||
|
||||
/**
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
border-radius: 3px;
|
||||
overflow: auto;
|
||||
padding: 8px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
&-entry {
|
||||
|
||||
@@ -84,56 +84,6 @@
|
||||
}
|
||||
}
|
||||
|
||||
&.icon-container {
|
||||
display: none;
|
||||
|
||||
&.active {
|
||||
display: flex;
|
||||
width: calc(100% - 26px);
|
||||
padding: 8px 8px 8px 16px;
|
||||
|
||||
background: #2A3A4B;
|
||||
border: 1px solid #5E6D7A;
|
||||
border-top: none;
|
||||
border-radius: 0 0 3px 3px;
|
||||
|
||||
.copy-invite-icon, .provider-icon {
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
height: 40px;
|
||||
place-content: center;
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
&:hover > div:hover {
|
||||
background-color: rgba(255, 255, 255, 0.2);
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
& > :not(:last-child) {
|
||||
margin-right: 16px;
|
||||
}
|
||||
|
||||
.copy-invite-icon > div > svg > path {
|
||||
fill: #A4B8D1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.dial-in-display {
|
||||
.info-label {
|
||||
color: #A4B8D1;
|
||||
}
|
||||
|
||||
.dial-in-copy {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
&.invite-buttons {
|
||||
width: 100%;
|
||||
text-align: right;
|
||||
|
||||
@@ -6,8 +6,6 @@ $baseLight: #FFFFFF;
|
||||
/**
|
||||
* Controls
|
||||
*/
|
||||
$controlBackground: $baseLight;
|
||||
$controlColor: #333333;
|
||||
$sliderTrackBackground: #474747;
|
||||
$sliderThumbBackground: #3572b0;
|
||||
|
||||
@@ -60,42 +58,21 @@ $readOnlyInputColor: #a7a7a7;
|
||||
$defaultDarkSelectionColor: #ccc;
|
||||
$buttonFontWeight: 400;
|
||||
$labelFontWeight: 400;
|
||||
$hintFontSize: em(13, 14);
|
||||
$linkFontColor: #3572b0;
|
||||
$linkHoverFontColor: darken(#3572b0, 10%);
|
||||
$dropdownColor: #333;
|
||||
$errorColor: #c61600;
|
||||
|
||||
// Feedback colors
|
||||
$feedbackCancelFontColor: #333;
|
||||
|
||||
// Popover colors
|
||||
$popoverFontColor: #ffffff !important;
|
||||
$popupSliderColor: #0376da;
|
||||
|
||||
// Toolbar
|
||||
$secondaryToolbarBg: rgba(0, 0, 0, 0.5);
|
||||
// TOFIX: Once moved to react rename to match the side panel class name.
|
||||
$sideToolbarContainerBg: rgba(0, 0, 0, 0.75);
|
||||
$toolbarBackground: rgba(0, 0, 0, 0.5);
|
||||
$toolbarBadgeBackground: #165ECC;
|
||||
$toolbarBadgeColor: #FFFFFF;
|
||||
$toolbarButtonColor: #FFFFFF;
|
||||
$toolbarSelectBackground: rgba(0, 0, 0, .6);
|
||||
$toolbarTitleColor: #FFFFFF;
|
||||
$toolbarToggleBackground: #12499C;
|
||||
|
||||
|
||||
/**
|
||||
* Forms
|
||||
*/
|
||||
//dropdown
|
||||
$selectFontColor: $controlColor;
|
||||
$selectBg: $controlBackground;
|
||||
$selectActiveBg: darken($controlBackground, 5%);
|
||||
$selectActiveItemBg: darken($controlBackground, 20%);
|
||||
|
||||
/**
|
||||
* TODO: Replace by themed component.
|
||||
*/
|
||||
$videoQualityActive: #57A0ff;
|
||||
$selectBg: $baseLight;
|
||||
|
||||
2
debian/control
vendored
2
debian/control
vendored
@@ -20,7 +20,7 @@ Description: WebRTC JavaScript video conferences
|
||||
|
||||
Package: jitsi-meet-web-config
|
||||
Architecture: all
|
||||
Depends: openssl, nginx | nginx-full | nginx-extras | apache2, curl
|
||||
Depends: openssl, nginx | nginx-full | nginx-extras | openresty | apache2, curl
|
||||
Description: Configuration for web serving of Jitsi Meet
|
||||
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
|
||||
Videobridge to provide high quality, scalable video conferences.
|
||||
|
||||
42
debian/jitsi-meet-web-config.postinst
vendored
42
debian/jitsi-meet-web-config.postinst
vendored
@@ -57,6 +57,10 @@ case "$1" in
|
||||
|| [ "$NGINX_EXTRAS_INSTALL_CHECK" = "unpacked" ] ; then
|
||||
FORCE_NGINX="true"
|
||||
fi
|
||||
OPENRESTY_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'openresty' 2>/dev/null | awk '{print $3}' || true)"
|
||||
if [ "$OPENRESTY_INSTALL_CHECK" = "installed" ] || [ "$OPENRESTY_INSTALL_CHECK" = "unpacked" ] ; then
|
||||
FORCE_OPENRESTY="true"
|
||||
fi
|
||||
APACHE_INSTALL_CHECK="$(dpkg-query -f '${Status}' -W 'apache2' 2>/dev/null | awk '{print $3}' || true)"
|
||||
if [ "$APACHE_INSTALL_CHECK" = "installed" ] || [ "$APACHE_INSTALL_CHECK" = "unpacked" ] ; then
|
||||
FORCE_APACHE="true"
|
||||
@@ -182,21 +186,41 @@ case "$1" in
|
||||
echo "config.flags.receiveMultipleVideoStreams = true;" >> $JITSI_MEET_CONFIG
|
||||
fi
|
||||
|
||||
if [[ "$FORCE_NGINX" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
|
||||
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
|
||||
NGX_COMMON_CONF_PATH="/usr/local/openresty/nginx/conf/$JVB_HOSTNAME.conf"
|
||||
NGX_SVC_NAME=openresty
|
||||
OPENRESTY_NGX_CONF="/usr/local/openresty/nginx/conf/nginx.conf"
|
||||
else
|
||||
NGX_COMMON_CONF_PATH="/etc/nginx/sites-available/$JVB_HOSTNAME.conf"
|
||||
NGX_SVC_NAME=nginx
|
||||
fi
|
||||
|
||||
if [[ ( "$FORCE_NGINX" = "true" || "$FORCE_OPENRESTY" = "true" ) && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
|
||||
|
||||
# this is a reconfigure, lets just delete old links
|
||||
if [ "$RECONFIGURING" = "true" ] ; then
|
||||
rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME_OLD.conf
|
||||
rm -f /etc/jitsi/meet/$JVB_HOSTNAME_OLD-config.js
|
||||
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
|
||||
sed -i "/include.*$JVB_HOSTNAME_OLD/d" "$OPENRESTY_NGX_CONF"
|
||||
fi
|
||||
fi
|
||||
|
||||
# nginx conf
|
||||
if [ ! -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf ] ; then
|
||||
cp /usr/share/jitsi-meet-web-config/jitsi-meet.example /etc/nginx/sites-available/$JVB_HOSTNAME.conf
|
||||
if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ] ; then
|
||||
ln -s /etc/nginx/sites-available/$JVB_HOSTNAME.conf /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
|
||||
if [ ! -f "$NGX_COMMON_CONF_PATH" ] ; then
|
||||
cp /usr/share/jitsi-meet-web-config/jitsi-meet.example "$NGX_COMMON_CONF_PATH"
|
||||
if [ ! -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf ] && ! [[ "$FORCE_OPENRESTY" = "true" ]] ; then
|
||||
ln -s "$NGX_COMMON_CONF_PATH" /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
|
||||
fi
|
||||
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" "$NGX_COMMON_CONF_PATH"
|
||||
|
||||
if [[ "$FORCE_OPENRESTY" = "true" ]]; then
|
||||
OPENRESTY_NGX_CONF_MD5_ORIG=$(dpkg-query -s openresty | sed -n '/\/nginx\.conf /{s@.* @@;p}')
|
||||
OPENRESTY_NGX_CONF_MD5_USERS=$(md5sum "$OPENRESTY_NGX_CONF" | sed 's@ .*@@')
|
||||
if [[ "$OPENRESTY_NGX_CONF_MD5_USERS" = "$OPENRESTY_NGX_CONF_MD5_ORIG" ]]; then
|
||||
sed -i "/^http \x7b/,/^\x7d/s@^\x7d@\tinclude $NGX_COMMON_CONF_PATH;\n\x7d@" "$OPENRESTY_NGX_CONF"
|
||||
fi
|
||||
fi
|
||||
sed -i "s/jitsi-meet.example.com/$JVB_HOSTNAME/g" /etc/nginx/sites-available/$JVB_HOSTNAME.conf
|
||||
fi
|
||||
|
||||
if [ "$CERT_CHOICE" = "$UPLOADED_CERT_CHOICE" ] ; then
|
||||
@@ -204,14 +228,14 @@ case "$1" in
|
||||
CERT_KEY_ESC=$(echo $CERT_KEY | sed 's/\./\\\./g')
|
||||
CERT_KEY_ESC=$(echo $CERT_KEY_ESC | sed 's/\//\\\//g')
|
||||
sed -i "s/ssl_certificate_key\ \/etc\/jitsi\/meet\/.*key/ssl_certificate_key\ $CERT_KEY_ESC/g" \
|
||||
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
|
||||
"$NGX_COMMON_CONF_PATH"
|
||||
CERT_CRT_ESC=$(echo $CERT_CRT | sed 's/\./\\\./g')
|
||||
CERT_CRT_ESC=$(echo $CERT_CRT_ESC | sed 's/\//\\\//g')
|
||||
sed -i "s/ssl_certificate\ \/etc\/jitsi\/meet\/.*crt/ssl_certificate\ $CERT_CRT_ESC/g" \
|
||||
/etc/nginx/sites-available/$JVB_HOSTNAME.conf
|
||||
"$NGX_COMMON_CONF_PATH"
|
||||
fi
|
||||
|
||||
invoke-rc.d nginx reload || true
|
||||
invoke-rc.d $NGX_SVC_NAME reload || true
|
||||
elif [[ "$FORCE_APACHE" = "true" && ( -z "$JVB_HOSTNAME_OLD" || "$RECONFIGURING" = "true" ) ]] ; then
|
||||
|
||||
# this is a reconfigure, lets just delete old links
|
||||
|
||||
4
debian/jitsi-meet-web-config.postrm
vendored
4
debian/jitsi-meet-web-config.postrm
vendored
@@ -24,6 +24,9 @@ set -e
|
||||
|
||||
case "$1" in
|
||||
remove)
|
||||
if [ -x "/etc/init.d/openresty" ]; then
|
||||
invoke-rc.d openresty reload || true
|
||||
fi
|
||||
if [ -x "/etc/init.d/nginx" ]; then
|
||||
invoke-rc.d nginx reload || true
|
||||
fi
|
||||
@@ -38,6 +41,7 @@ case "$1" in
|
||||
rm -f /etc/jitsi/meet/$JVB_HOSTNAME-config.js
|
||||
rm -f /etc/nginx/sites-available/$JVB_HOSTNAME.conf
|
||||
rm -f /etc/nginx/sites-enabled/$JVB_HOSTNAME.conf
|
||||
rm -f /usr/local/openresty/nginx/conf/$JVB_HOSTNAME.conf
|
||||
rm -f /etc/apache2/sites-available/$JVB_HOSTNAME.conf
|
||||
rm -f /etc/apache2/sites-enabled/$JVB_HOSTNAME.conf
|
||||
rm -f /etc/jitsi/meet/$JVB_HOSTNAME.key
|
||||
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 114 KiB |
Binary file not shown.
Binary file not shown.
7
globals.d.ts
vendored
7
globals.d.ts
vendored
@@ -9,6 +9,13 @@ declare global {
|
||||
UI: any;
|
||||
API: any;
|
||||
conference: any;
|
||||
debugLogs: any;
|
||||
keyboardshortcut: {
|
||||
registerShortcut: Function;
|
||||
unregisterShortcut: Function;
|
||||
openDialog: Function;
|
||||
enable: Function;
|
||||
}
|
||||
};
|
||||
const interfaceConfig: any;
|
||||
|
||||
|
||||
45
globals.native.d.ts
vendored
Normal file
45
globals.native.d.ts
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
import { IConfig } from "./react/features/base/config/configType";
|
||||
|
||||
export {};
|
||||
|
||||
interface ILocation extends URL {
|
||||
assign(url: string);
|
||||
replace(url: string);
|
||||
reload();
|
||||
};
|
||||
|
||||
interface IWindow {
|
||||
JITSI_MEET_LITE_SDK: boolean;
|
||||
JitsiMeetJS: any;
|
||||
config: IConfig;
|
||||
document: any;
|
||||
innerHeight: number;
|
||||
innerWidth: number;
|
||||
interfaceConfig: any;
|
||||
location: ILocation;
|
||||
self: any;
|
||||
top: any;
|
||||
|
||||
onerror: (event: string, source: any, lineno: any, colno: any, e: Error) => void;
|
||||
onunhandledrejection: (event: any) => void;
|
||||
|
||||
setInterval: typeof setInterval;
|
||||
clearInterval: typeof clearInterval;
|
||||
setTimeout: typeof setTimeout;
|
||||
clearTimeout: typeof clearTimeout;
|
||||
setImmediate: typeof setImmediate;
|
||||
clearImmediate: typeof clearImmediate;
|
||||
addEventListener: Function;
|
||||
}
|
||||
|
||||
interface INavigator {
|
||||
product: string;
|
||||
}
|
||||
|
||||
declare global {
|
||||
const APP: any;
|
||||
const document: any;
|
||||
const interfaceConfig: any;
|
||||
const navigator: INavigator;
|
||||
const window: IWindow;
|
||||
}
|
||||
434
ios/Podfile.lock
434
ios/Podfile.lock
@@ -13,14 +13,14 @@ PODS:
|
||||
- CocoaLumberjack/Core (= 3.7.2)
|
||||
- CocoaLumberjack/Core (3.7.2)
|
||||
- DoubleConversion (1.1.6)
|
||||
- FBLazyVector (0.68.4)
|
||||
- FBReactNativeSpec (0.68.4):
|
||||
- FBLazyVector (0.68.5)
|
||||
- FBReactNativeSpec (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.4)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- Firebase/Analytics (8.15.0):
|
||||
- Firebase/Core
|
||||
- Firebase/Core (8.15.0):
|
||||
@@ -163,201 +163,201 @@ PODS:
|
||||
- DoubleConversion
|
||||
- fmt (~> 6.2.1)
|
||||
- glog
|
||||
- RCTRequired (0.68.4)
|
||||
- RCTTypeSafety (0.68.4):
|
||||
- FBLazyVector (= 0.68.4)
|
||||
- RCTRequired (0.68.5)
|
||||
- RCTTypeSafety (0.68.5):
|
||||
- FBLazyVector (= 0.68.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React (0.68.4):
|
||||
- React-Core (= 0.68.4)
|
||||
- React-Core/DevSupport (= 0.68.4)
|
||||
- React-Core/RCTWebSocket (= 0.68.4)
|
||||
- React-RCTActionSheet (= 0.68.4)
|
||||
- React-RCTAnimation (= 0.68.4)
|
||||
- React-RCTBlob (= 0.68.4)
|
||||
- React-RCTImage (= 0.68.4)
|
||||
- React-RCTLinking (= 0.68.4)
|
||||
- React-RCTNetwork (= 0.68.4)
|
||||
- React-RCTSettings (= 0.68.4)
|
||||
- React-RCTText (= 0.68.4)
|
||||
- React-RCTVibration (= 0.68.4)
|
||||
- React-callinvoker (0.68.4)
|
||||
- React-Codegen (0.68.4):
|
||||
- FBReactNativeSpec (= 0.68.4)
|
||||
- RCTRequired (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React (0.68.5):
|
||||
- React-Core (= 0.68.5)
|
||||
- React-Core/DevSupport (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-RCTActionSheet (= 0.68.5)
|
||||
- React-RCTAnimation (= 0.68.5)
|
||||
- React-RCTBlob (= 0.68.5)
|
||||
- React-RCTImage (= 0.68.5)
|
||||
- React-RCTLinking (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- React-RCTSettings (= 0.68.5)
|
||||
- React-RCTText (= 0.68.5)
|
||||
- React-RCTVibration (= 0.68.5)
|
||||
- React-callinvoker (0.68.5)
|
||||
- React-Codegen (0.68.5):
|
||||
- FBReactNativeSpec (= 0.68.5)
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTRequired (= 0.68.4)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-Core (0.68.4):
|
||||
- RCTRequired (= 0.68.5)
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-Core (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/CoreModulesHeaders (0.68.4):
|
||||
- React-Core/CoreModulesHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/Default (0.68.4):
|
||||
- React-Core/Default (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/DevSupport (0.68.4):
|
||||
- React-Core/DevSupport (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.4)
|
||||
- React-Core/RCTWebSocket (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-jsinspector (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-jsinspector (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTActionSheetHeaders (0.68.4):
|
||||
- React-Core/RCTActionSheetHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTAnimationHeaders (0.68.4):
|
||||
- React-Core/RCTAnimationHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTBlobHeaders (0.68.4):
|
||||
- React-Core/RCTBlobHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTImageHeaders (0.68.4):
|
||||
- React-Core/RCTImageHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTLinkingHeaders (0.68.4):
|
||||
- React-Core/RCTLinkingHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTNetworkHeaders (0.68.4):
|
||||
- React-Core/RCTNetworkHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTSettingsHeaders (0.68.4):
|
||||
- React-Core/RCTSettingsHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTTextHeaders (0.68.4):
|
||||
- React-Core/RCTTextHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTVibrationHeaders (0.68.4):
|
||||
- React-Core/RCTVibrationHeaders (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-Core/RCTWebSocket (0.68.4):
|
||||
- React-Core/RCTWebSocket (0.68.5):
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Core/Default (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsiexecutor (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-Core/Default (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsiexecutor (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- Yoga
|
||||
- React-CoreModules (0.68.4):
|
||||
- React-CoreModules (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-RCTImage (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-cxxreact (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/CoreModulesHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTImage (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-cxxreact (0.68.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-jsinspector (= 0.68.4)
|
||||
- React-logger (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-runtimeexecutor (= 0.68.4)
|
||||
- React-jsi (0.68.4):
|
||||
- React-callinvoker (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-jsinspector (= 0.68.5)
|
||||
- React-logger (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-runtimeexecutor (= 0.68.5)
|
||||
- React-jsi (0.68.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsi/Default (= 0.68.4)
|
||||
- React-jsi/Default (0.68.4):
|
||||
- React-jsi/Default (= 0.68.5)
|
||||
- React-jsi/Default (0.68.5):
|
||||
- boost (= 1.76.0)
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-jsiexecutor (0.68.4):
|
||||
- React-jsiexecutor (0.68.5):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-jsinspector (0.68.4)
|
||||
- React-logger (0.68.4):
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- React-jsinspector (0.68.5)
|
||||
- React-logger (0.68.5):
|
||||
- glog
|
||||
- react-native-background-timer (2.4.1):
|
||||
- React-Core
|
||||
@@ -390,74 +390,74 @@ PODS:
|
||||
- React-Core
|
||||
- react-native-webview (11.15.1):
|
||||
- React-Core
|
||||
- React-perflogger (0.68.4)
|
||||
- React-RCTActionSheet (0.68.4):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.4)
|
||||
- React-RCTAnimation (0.68.4):
|
||||
- React-perflogger (0.68.5)
|
||||
- React-RCTActionSheet (0.68.5):
|
||||
- React-Core/RCTActionSheetHeaders (= 0.68.5)
|
||||
- React-RCTAnimation (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTBlob (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTAnimationHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTBlob (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.4)
|
||||
- React-Core/RCTWebSocket (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-RCTNetwork (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTImage (0.68.4):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTBlobHeaders (= 0.68.5)
|
||||
- React-Core/RCTWebSocket (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTImage (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTImageHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-RCTNetwork (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTLinking (0.68.4):
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTNetwork (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTImageHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-RCTNetwork (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTLinking (0.68.5):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTLinkingHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTNetwork (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTSettings (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTNetworkHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTSettings (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- RCTTypeSafety (= 0.68.4)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-RCTText (0.68.4):
|
||||
- React-Core/RCTTextHeaders (= 0.68.4)
|
||||
- React-RCTVibration (0.68.4):
|
||||
- RCTTypeSafety (= 0.68.5)
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTSettingsHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-RCTText (0.68.5):
|
||||
- React-Core/RCTTextHeaders (= 0.68.5)
|
||||
- React-RCTVibration (0.68.5):
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-Codegen (= 0.68.4)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (= 0.68.4)
|
||||
- React-runtimeexecutor (0.68.4):
|
||||
- React-jsi (= 0.68.4)
|
||||
- ReactCommon/turbomodule/core (0.68.4):
|
||||
- React-Codegen (= 0.68.5)
|
||||
- React-Core/RCTVibrationHeaders (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (= 0.68.5)
|
||||
- React-runtimeexecutor (0.68.5):
|
||||
- React-jsi (= 0.68.5)
|
||||
- ReactCommon/turbomodule/core (0.68.5):
|
||||
- DoubleConversion
|
||||
- glog
|
||||
- RCT-Folly (= 2021.06.28.00-v2)
|
||||
- React-callinvoker (= 0.68.4)
|
||||
- React-Core (= 0.68.4)
|
||||
- React-cxxreact (= 0.68.4)
|
||||
- React-jsi (= 0.68.4)
|
||||
- React-logger (= 0.68.4)
|
||||
- React-perflogger (= 0.68.4)
|
||||
- React-callinvoker (= 0.68.5)
|
||||
- React-Core (= 0.68.5)
|
||||
- React-cxxreact (= 0.68.5)
|
||||
- React-jsi (= 0.68.5)
|
||||
- React-logger (= 0.68.5)
|
||||
- React-perflogger (= 0.68.5)
|
||||
- RNCalendarEvents (2.2.0):
|
||||
- React
|
||||
- RNCAsyncStorage (1.15.14):
|
||||
- RNCAsyncStorage (1.17.3):
|
||||
- React-Core
|
||||
- RNCClipboard (1.5.1):
|
||||
- React-Core
|
||||
@@ -706,8 +706,8 @@ SPEC CHECKSUMS:
|
||||
boost: a7c83b31436843459a1961bfd74b96033dc77234
|
||||
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
|
||||
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
|
||||
FBLazyVector: 023a2028f218d648b588348bfa9261b4914b93db
|
||||
FBReactNativeSpec: 9f4902cc009389d3704ff75de2aa513dee34d5c2
|
||||
FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736
|
||||
FBReactNativeSpec: 0e0d384ef17a33b385f13f0c7f97702c7cd17858
|
||||
Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d
|
||||
FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa
|
||||
FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1
|
||||
@@ -732,18 +732,18 @@ SPEC CHECKSUMS:
|
||||
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
|
||||
PromisesSwift: 99fddfe4a0ec88a56486644c0da106694c92a604
|
||||
RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8
|
||||
RCTRequired: e6003505912d056f21f64465063cf4b79418f2b9
|
||||
RCTTypeSafety: d7ef4745c8d9c9faa65c26b4b6230fc5cd4c4424
|
||||
React: 6692c30fb74ab29078b25c31c9841d863e08cdd9
|
||||
React-callinvoker: fe2b234fa518d8bb7600707c536ab0a3e1f5edba
|
||||
React-Codegen: 9964bb2422c7014894182ac50068caae05f68551
|
||||
React-Core: a07bcd2f15ff93cddc9ceb07eddeec3d2ff8d990
|
||||
React-CoreModules: 7fb4ee0fc35ad2b7daf775f0ef6309efdd8d3d82
|
||||
React-cxxreact: 51a8058a35a2f02ad4175334a7cd24aa5558ced4
|
||||
React-jsi: 69b974b418d2658a3f1799903be7cbcb8ac59755
|
||||
React-jsiexecutor: 4f35a29798ba9d0d892a84001d11f626688dbb8e
|
||||
React-jsinspector: 6f75220cd4b6020976d340ab21c63458dd3cad9e
|
||||
React-logger: 7013d2499df6346e6a72802d4084badaaa82543b
|
||||
RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74
|
||||
RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65
|
||||
React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03
|
||||
React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593
|
||||
React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d
|
||||
React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca
|
||||
React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942
|
||||
React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9
|
||||
React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c
|
||||
React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56
|
||||
React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9
|
||||
React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d
|
||||
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
|
||||
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
|
||||
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
|
||||
@@ -757,20 +757,20 @@ SPEC CHECKSUMS:
|
||||
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
|
||||
react-native-webrtc: 4a4c31be61f88d1d3356526eebce72f462a6760e
|
||||
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
|
||||
React-perflogger: 0b0500685176e53ea582c45179a653aa82e4ae49
|
||||
React-RCTActionSheet: 38469be9d20242f9c717e43c2983e8e3e6c640c4
|
||||
React-RCTAnimation: 93774f3e8857e7c3c1cbbd277056d02be4496be1
|
||||
React-RCTBlob: 6d0567d7a6561b62feb8c3b1cc33b3c591ba85ab
|
||||
React-RCTImage: 1006a91318a6181a0256b89d2e321b6ea0e2e6e3
|
||||
React-RCTLinking: 0b2300493c879c3bcac2d4c6b0178e8d0e5e2202
|
||||
React-RCTNetwork: b9a33a95703651abed92490e50396d54b7270a17
|
||||
React-RCTSettings: e6464123e5b5062fc23bb5adb51188a6061e9601
|
||||
React-RCTText: 188d6f0ae20cd28891f59ecad41028ee2f793757
|
||||
React-RCTVibration: a67beb7d2f3c73e9b74c4124ef61b84c601be649
|
||||
React-runtimeexecutor: 088723cf020113e64736a709f52719dbb359c73e
|
||||
ReactCommon: 1a4f19f3b4366feec03a98bdbb200b6085c5000f
|
||||
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
|
||||
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
|
||||
React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313
|
||||
React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57
|
||||
React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b
|
||||
React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4
|
||||
React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6
|
||||
React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3
|
||||
React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e
|
||||
React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1
|
||||
React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1
|
||||
ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b
|
||||
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
|
||||
RNCAsyncStorage: ea6b5c280997b2b32a587793163b1f10e580c4f7
|
||||
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
|
||||
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
|
||||
RNCMaskedView: c298b644a10c0c142055b3ae24d83879ecb13ccd
|
||||
RNDefaultPreference: 08bdb06cfa9188d5da97d4642dac745218d7fb31
|
||||
@@ -781,7 +781,7 @@ SPEC CHECKSUMS:
|
||||
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
|
||||
RNSVG: f3b60aeeaa81960e2e0536c3a9eef50b667ef3a9
|
||||
RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4
|
||||
Yoga: c926c8eec5c78a788b51e6c8a604825d00d694d7
|
||||
Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c
|
||||
|
||||
PODFILE CHECKSUM: e671cdcdb80fab67e305861c36bfae8ed5a5b0ef
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@ platform :ios do
|
||||
export_xcargs: "-allowProvisioningUpdates"
|
||||
)
|
||||
|
||||
# Upload the build to TestFlight (but don't distribute it)
|
||||
# Upload the build to TestFlight
|
||||
upload_to_testflight(
|
||||
beta_app_description: ENV["JITSI_CHANGELOG"],
|
||||
beta_app_feedback_email: ENV["JITSI_REVIEW_EMAIL"],
|
||||
@@ -102,24 +102,10 @@ platform :ios do
|
||||
uses_non_exempt_encryption: false
|
||||
)
|
||||
|
||||
upload_symbols_to_crashlytics
|
||||
|
||||
# Cleanup
|
||||
clean_build_artifacts
|
||||
reset_git_repo(skip_clean: true)
|
||||
end
|
||||
|
||||
lane :refresh_dsyms do
|
||||
# Connect to Apple Store Connect
|
||||
app_store_connect_api_key(
|
||||
key_id: ENV["ASC_KEY_ID"],
|
||||
issuer_id: ENV["ASC_ISSUER_ID"],
|
||||
key_content: ENV["ASC_KEY_CONTENT"],
|
||||
duration: 1200,
|
||||
in_house: false
|
||||
)
|
||||
|
||||
# Upload dSYMs to Crashlytics
|
||||
download_dsyms(min_version: ENV["DSYMS_MIN_VERSION"]) # Download dSYM files from iTC
|
||||
upload_symbols_to_crashlytics # Upload them to Crashlytics
|
||||
clean_build_artifacts # Delete the local dSYM files
|
||||
end
|
||||
end
|
||||
|
||||
@@ -57,8 +57,8 @@
|
||||
openURL:(NSURL *_Nonnull)url
|
||||
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *_Nonnull)options;
|
||||
|
||||
- (UIInterfaceOrientationMask)application:(UIApplication *)application
|
||||
supportedInterfaceOrientationsForWindow:(UIWindow *)window;
|
||||
- (UIInterfaceOrientationMask)application:(UIApplication *_Nonnull)application
|
||||
supportedInterfaceOrientationsForWindow:(UIWindow *_Nonnull)window;
|
||||
|
||||
#pragma mark - Utility methods
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ public class PiPViewCoordinator {
|
||||
}
|
||||
}
|
||||
|
||||
public let initialPositionInSuperView: Position = .lowerRightCorner
|
||||
public var initialPositionInSuperView: Position = .lowerRightCorner
|
||||
|
||||
// Unused. Remove on the next major release.
|
||||
@available(*, deprecated, message: "The PiP window size is now fixed to 150px.")
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"af": "",
|
||||
"bg": "Bulgaars",
|
||||
"cs": "Tsjeggies",
|
||||
"de": "Duits",
|
||||
"el": "Grieks",
|
||||
"en": "Engels",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spaans",
|
||||
"fr": "Frans",
|
||||
"hy": "Armeens",
|
||||
"it": "Italiaans",
|
||||
"ja": "Japannees",
|
||||
"ko": "Koreaans",
|
||||
"nb": "Bokmal-Noorweegs",
|
||||
"oc": "Oksitaans",
|
||||
"pl": "Pools",
|
||||
"ptBR": "Portugees (Brasilië)",
|
||||
"ru": "Russies",
|
||||
"sk": "Slowaaks",
|
||||
"sl": "Sloweens",
|
||||
"sv": "Sweeds",
|
||||
"tr": "Turks",
|
||||
"uk": "Oekraïens",
|
||||
"vi": "Viëtnamees",
|
||||
"zhCN": "Sjinees (Sjina)"
|
||||
}
|
||||
@@ -1,46 +0,0 @@
|
||||
{
|
||||
"af": "الأفريكانية",
|
||||
"ar": "العربية",
|
||||
"bg": "البلغارية",
|
||||
"ca": "الكاتالانية",
|
||||
"cs": "التشيكية",
|
||||
"da": "الدنماركية",
|
||||
"de": "الألمانية",
|
||||
"el": "اليونانية",
|
||||
"en": "الإنجليزية",
|
||||
"enGB": "الإنجليزية (المملكة المتحدة)",
|
||||
"eo": "الإسبرانتو",
|
||||
"es": "الإسبانية",
|
||||
"esUS": "الإسبانية (أمريكا اللاتينية)",
|
||||
"et": "الإستونية",
|
||||
"eu": "الباسكية",
|
||||
"fi": "الفنلندية",
|
||||
"fr": "الفرنسية",
|
||||
"frCA": "الفرنسية (الكندية)",
|
||||
"he": "العبرية",
|
||||
"hr": "الكرواتية",
|
||||
"hu": "الهنغارية",
|
||||
"hy": "الأرمنية",
|
||||
"id": "الإندونيسية",
|
||||
"it": "الإيطالية",
|
||||
"ja": "اليابانية",
|
||||
"kab": "قَبَلي",
|
||||
"ko": "الكورية",
|
||||
"lt": "الليتوانية",
|
||||
"mr": "الماراثى",
|
||||
"nl": "الهولندية",
|
||||
"oc": "القسطانية",
|
||||
"pl": "البولندية",
|
||||
"ptBR": "البرتغالية (البرازيل)",
|
||||
"ro": "الرومانية",
|
||||
"ru": "الروسية",
|
||||
"sc": "السردينية",
|
||||
"sk": "السلوفاكية",
|
||||
"sl": "السلوفينية",
|
||||
"sv": "السويدية",
|
||||
"tr": "التركية",
|
||||
"uk": "الأوكرانية",
|
||||
"vi": "الفيتنامية",
|
||||
"zhCN": "الصينية (الصين)",
|
||||
"zhTW": "الصينية (تايوان)"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"af": "Афрыкаанс",
|
||||
"bg": "Балгарская",
|
||||
"ca": "Каталанская",
|
||||
"cs": "Чэшская",
|
||||
"da": "Дацкая",
|
||||
"de": "Нямецкая",
|
||||
"el": "Грэцкая",
|
||||
"en": "Англійская",
|
||||
"enGB": "Англійская (Вялікабрытанія)",
|
||||
"eo": "Эсперанта",
|
||||
"es": "Іспанская",
|
||||
"esUS": "Іспанская (Лацінская Амерыка)",
|
||||
"et": "Эстонская",
|
||||
"fi": "Фінская",
|
||||
"fr": "Французская",
|
||||
"frCA": "Французская (канадская)",
|
||||
"hr": "Харвацкая",
|
||||
"hu": "Венгерская",
|
||||
"hy": "Армянская",
|
||||
"it": "Італьянская",
|
||||
"ja": "Японская",
|
||||
"ko": "Карэйская",
|
||||
"nl": "Галандская",
|
||||
"oc": "Аксітанская",
|
||||
"pl": "Польская",
|
||||
"ptBR": "Партугальская (Бразілія)",
|
||||
"ru": "Расійская",
|
||||
"sv": "Шведская",
|
||||
"tr": "Турэцкая",
|
||||
"uk": "Украінская",
|
||||
"vi": "В'етнамская",
|
||||
"zhCN": "Кітайская (Кітай)",
|
||||
"zhTW": "Кітайская (Тайвань)"
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"af": "Африканс",
|
||||
"bg": "Български",
|
||||
"ca": "Каталонски",
|
||||
"cs": "Чешки",
|
||||
"de": "Немски",
|
||||
"el": "Гръцки",
|
||||
"en": "Английски",
|
||||
"enGB": "Английски (Великобритания)",
|
||||
"eo": "Есперанто",
|
||||
"es": "Испански",
|
||||
"esUS": "Испански (Латинска Америка)",
|
||||
"fi": "Фински",
|
||||
"fr": "Френски",
|
||||
"frCA": "Френски (Канада)",
|
||||
"hr": "Хърватски",
|
||||
"hu": "Унгарски",
|
||||
"hy": "Арменски",
|
||||
"it": "Италиански",
|
||||
"ja": "Японски",
|
||||
"ko": "Корейски",
|
||||
"nl": "Нидерландски",
|
||||
"oc": "Окситански",
|
||||
"pl": "Полски",
|
||||
"ptBR": "Португалски (Бразилия)",
|
||||
"ru": "Руски",
|
||||
"sv": "Шведски",
|
||||
"tr": "Турски",
|
||||
"uk": "Украински",
|
||||
"vi": "Виетнамски",
|
||||
"zhCN": "Китайски (Китай)",
|
||||
"zhTW": "Тайвански"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "Àrab",
|
||||
"bg": "Búlgar",
|
||||
"ca": "Català",
|
||||
"cs": "Txec",
|
||||
"da": "Danès",
|
||||
"de": "Alemany",
|
||||
"el": "Grec",
|
||||
"en": "Anglès",
|
||||
"enGB": "Anglès (Regne Unit)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Espanyol",
|
||||
"esUS": "Espanyol (Amèrica llatina)",
|
||||
"et": "Estonià",
|
||||
"eu": "Basc",
|
||||
"fa": "Persa",
|
||||
"fi": "Finès",
|
||||
"fr": "Francès",
|
||||
"frCA": "Francès (Canadà)",
|
||||
"he": "Hebreu",
|
||||
"hi": "Hindi",
|
||||
"hr": "Croat",
|
||||
"hu": "Hongarès",
|
||||
"hy": "Armeni",
|
||||
"id": "Indonesi",
|
||||
"it": "Italià",
|
||||
"ja": "Japonès",
|
||||
"kab": "Cabilenc",
|
||||
"ko": "Coreà",
|
||||
"lt": "Lituà",
|
||||
"lv": "Letó",
|
||||
"ml": "Malaiàlam",
|
||||
"mr": "Marathi",
|
||||
"nl": "Neerlandès",
|
||||
"oc": "Occità",
|
||||
"pl": "Polonès",
|
||||
"pt": "Portuguès",
|
||||
"ptBR": "Portuguès (Brasil)",
|
||||
"ro": "Romanès",
|
||||
"ru": "Rus",
|
||||
"sc": "Sard",
|
||||
"sk": "Eslovac",
|
||||
"sl": "Eslovè",
|
||||
"sq": "Albanès",
|
||||
"sr": "Serbi",
|
||||
"sv": "Suec",
|
||||
"te": "Telugu",
|
||||
"tr": "Turc",
|
||||
"uk": "Ucraïnès",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Xinès (Xina)",
|
||||
"zhTW": "Xinès (Taiwan)"
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"af": "Afrikánština",
|
||||
"ar": "Arabština",
|
||||
"bg": "Bulharština",
|
||||
"ca": "Katalánština",
|
||||
"cs": "Čeština",
|
||||
"da": "Dánština",
|
||||
"de": "Němčina",
|
||||
"el": "Řečtina",
|
||||
"en": "Angličtina",
|
||||
"enGB": "Angličtina (Spojené království)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Španělština",
|
||||
"esUS": "Španělština (Latinská Amerika)",
|
||||
"et": "Estonština",
|
||||
"eu": "Baskičtina",
|
||||
"fi": "Finština",
|
||||
"fr": "Francouština",
|
||||
"frCA": "Francouzština (Kanada)",
|
||||
"he": "Hebrejština",
|
||||
"hr": "Chorvatština",
|
||||
"hu": "Maďarština",
|
||||
"hy": "Arménština",
|
||||
"id": "Indonéština",
|
||||
"it": "Italština",
|
||||
"ja": "Japonština",
|
||||
"kab": "Kabylština",
|
||||
"ko": "Korejština",
|
||||
"lt": "Litevština",
|
||||
"mr": "Maráthština",
|
||||
"nb": "Norština Bokmal",
|
||||
"nl": "Nizozemština",
|
||||
"oc": "Okcitánština",
|
||||
"pl": "Polština",
|
||||
"ptBR": "Portugalština (Brazílie)",
|
||||
"ro": "Rumunština",
|
||||
"ru": "Ruština",
|
||||
"sc": "Sardinština",
|
||||
"sk": "Slovenština",
|
||||
"sl": "Slovinština",
|
||||
"sr": "Srbština",
|
||||
"sv": "Švédština",
|
||||
"tr": "Turečtina",
|
||||
"uk": "Ukrajinština",
|
||||
"vi": "Vietnamština",
|
||||
"zhCN": "Čínština (Čína)",
|
||||
"zhTW": "Čínština (Taiwan)"
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"af": "Sydafrikansk",
|
||||
"bg": "Bulgarsk",
|
||||
"ca": "Katalansk",
|
||||
"cs": "Tjekkisk",
|
||||
"da": "Dansk",
|
||||
"de": "Tysk",
|
||||
"el": "Græsk",
|
||||
"en": "Engelsk",
|
||||
"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",
|
||||
"uk": "Ukrainsk",
|
||||
"vi": "Vietnamesisk",
|
||||
"zhCN": "Kinesisk (China)",
|
||||
"zhTW": "Kinesisk (Taiwan)"
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgarisch",
|
||||
"ca": "Katalanisch",
|
||||
"cs": "Tschechisch",
|
||||
"da": "Dänisch",
|
||||
"de": "Deutsch",
|
||||
"el": "Griechisch",
|
||||
"en": "Englisch",
|
||||
"enGB": "Englisch (Vereinigtes Königreich)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanisch",
|
||||
"esUS": "Spanisch (Lateinamerika)",
|
||||
"et": "Estnisch",
|
||||
"fi": "Finnisch",
|
||||
"fr": "Französisch",
|
||||
"frCA": "Französisch (Kanada)",
|
||||
"hr": "Kroatisch",
|
||||
"hsb": "Obersorbisch",
|
||||
"hu": "Ungarisch",
|
||||
"hy": "Armenisch",
|
||||
"it": "Italienisch",
|
||||
"ja": "Japanisch",
|
||||
"ko": "Koreanisch",
|
||||
"nb": "Norwegisch (Bokmal)",
|
||||
"nl": "Niederländisch",
|
||||
"oc": "Okzitanisch",
|
||||
"pl": "Polnisch",
|
||||
"ptBR": "Portugiesisch (Brasilien)",
|
||||
"ru": "Russisch",
|
||||
"sk": "Slowakisch",
|
||||
"sl": "Slowenisch",
|
||||
"sr": "Serbish",
|
||||
"sv": "Schwedisch",
|
||||
"tr": "Türkisch",
|
||||
"uk": "Ukrainisch",
|
||||
"vi": "Vietnamesisch",
|
||||
"zhCN": "Chinesisch (China)",
|
||||
"zhTW": "Chinesisch (Taiwan)"
|
||||
}
|
||||
@@ -1,41 +0,0 @@
|
||||
{
|
||||
"af": "Αφρικανικά",
|
||||
"bg": "Βουλγάρικα",
|
||||
"ca": "Καταλανικά",
|
||||
"cs": "Τσέχικα",
|
||||
"da": "Δανέζικα",
|
||||
"de": "Γερμανικά",
|
||||
"el": "Ελληνικά",
|
||||
"en": "Αγγλικά",
|
||||
"enGB": "Αγγλικά (Ηνωμένου Βασιλείου)",
|
||||
"eo": "Εσπεράντο",
|
||||
"es": "Ισπανικά",
|
||||
"esUS": "Ισπανικά (Λατινικής Αμερικής)",
|
||||
"et": "Εσθονικά",
|
||||
"eu": "Βάσκικα",
|
||||
"fi": "Φινλανδικά",
|
||||
"fr": "Γαλλικά",
|
||||
"frCA": "Γαλλικά (Καναδικά)",
|
||||
"he": "Εβραϊκά",
|
||||
"hr": "Κροατικά",
|
||||
"hu": "Ουγγρικά",
|
||||
"hy": "Αρμένικα",
|
||||
"id": "Ινδονησιακά",
|
||||
"it": "Ιταλικά",
|
||||
"ja": "Ιαπωνικά",
|
||||
"ko": "Κορεάτικα",
|
||||
"lt": "Λιθουανικά",
|
||||
"nl": "Ολλανδικά",
|
||||
"oc": "Οξιτανικά",
|
||||
"pl": "Πολωνικά",
|
||||
"ptBR": "Πορτογαλικά (Βραζιλίας)",
|
||||
"ru": "Ρωσικά",
|
||||
"sc": "Σαρδηνικά",
|
||||
"sk": "Σλοβακικά",
|
||||
"sv": "Σουηδικά",
|
||||
"tr": "Τουρκικά",
|
||||
"uk": "Ουκρανικά",
|
||||
"vi": "Βιετναμέζικα",
|
||||
"zhCN": "Κινέζικα (Κίνας)",
|
||||
"zhTW": "Κινέζικα (Ταϊβάν)"
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
"da": "Danish",
|
||||
"de": "German",
|
||||
"el": "Greek",
|
||||
"en": "English",
|
||||
"enGB": "English (United Kingdom)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanish",
|
||||
"esUS": "Spanish (Latin America)",
|
||||
"et": "Estonian",
|
||||
"fi": "Finnish",
|
||||
"fr": "French",
|
||||
"frCA": "French (Canadian)",
|
||||
"hr": "Croatian",
|
||||
"hsb": "Upper Sorbian",
|
||||
"hu": "Hungarian",
|
||||
"hy": "Armenian",
|
||||
"it": "Italian",
|
||||
"ja": "Japanese",
|
||||
"ko": "Korean",
|
||||
"nb": "",
|
||||
"nl": "Dutch",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polish",
|
||||
"ptBR": "Portuguese (Brazil)",
|
||||
"ru": "Russian",
|
||||
"sk": "",
|
||||
"sl": "Slovenian",
|
||||
"sr": "Serbian",
|
||||
"sv": "Swedish",
|
||||
"tr": "Turkish",
|
||||
"uk": "Ukrainian",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "Chinese (China)",
|
||||
"zhTW": "Chinese (Taiwan)"
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"af": "Afrikansa",
|
||||
"bg": "Bulgara",
|
||||
"cs": "Ĉeĥa",
|
||||
"de": "Germana",
|
||||
"el": "Greka",
|
||||
"en": "Angla",
|
||||
"eo": "Esperanto",
|
||||
"es": "Hispana",
|
||||
"fr": "Franca",
|
||||
"hy": "Armena",
|
||||
"it": "Itala",
|
||||
"ja": "Japana",
|
||||
"ko": "Korea",
|
||||
"nb": "Norvega (Bukmola)",
|
||||
"oc": "Okcitana",
|
||||
"pl": "Pola",
|
||||
"ptBR": "Portugala (Brazila)",
|
||||
"ru": "Rusa",
|
||||
"sk": "Slovaka",
|
||||
"sl": "Slovena",
|
||||
"sv": "Sveda",
|
||||
"tr": "Turka",
|
||||
"uk": "Ukraina",
|
||||
"vi": "Vjetnama",
|
||||
"zhCN": "Ĉina (Ĉinuja)"
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
"af": "Afrikáans",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalán",
|
||||
"cs": "Checo",
|
||||
"da": "Danés",
|
||||
"de": "Alemán",
|
||||
"el": "Griego",
|
||||
"en": "Inglés",
|
||||
"enGB": "Inglés (Reino Unido)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Español",
|
||||
"esUS": "Español (América Latina)",
|
||||
"et": "Estonio",
|
||||
"fi": "Finlandés",
|
||||
"fr": "Francés",
|
||||
"frCA": "Francés (Canadiense)",
|
||||
"he": "Hebreo",
|
||||
"hr": "Croata",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Armenio",
|
||||
"it": "Italiano",
|
||||
"ja": "Japonés",
|
||||
"ko": "Coreano",
|
||||
"nl": "Holandés",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polaco",
|
||||
"ptBR": "Portugués (Brasil)",
|
||||
"ru": "Ruso",
|
||||
"sk": "Eslovaco",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraniano",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chino (China)",
|
||||
"zhTW": "Chino (Taiwán)"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"af": "Africano",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalán",
|
||||
"cs": "Checo",
|
||||
"de": "Alemán",
|
||||
"el": "Griego",
|
||||
"en": "Inglés",
|
||||
"enGB": "Inglés",
|
||||
"eo": "Esperanto",
|
||||
"es": "Español",
|
||||
"esUS": "Español (Latinoamérica)",
|
||||
"fi": "Finlandés",
|
||||
"fr": "Francés",
|
||||
"frCA": "Francés (Canadiense)",
|
||||
"he": "Hebreo",
|
||||
"hr": "Croata",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Armenio",
|
||||
"it": "Italiano",
|
||||
"ja": "Japonés",
|
||||
"ko": "Coreano",
|
||||
"nl": "Holandés",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polaco",
|
||||
"ptBR": "Portugués (Brasil)",
|
||||
"ru": "Ruso",
|
||||
"sk": "Eslovaco",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraniano",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chino (China)",
|
||||
"zhTW": "Chino (Taiwan)"
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaani keel",
|
||||
"bg": "Bulgaaria keel",
|
||||
"ca": "Katalaani keel",
|
||||
"cs": "Tšehhi keel",
|
||||
"de": "Saksa keel",
|
||||
"el": "Kreeka keel",
|
||||
"en": "Inglise 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",
|
||||
"uk": "Ukraina keel",
|
||||
"vi": "Vietnami keel",
|
||||
"zhCN": "Hiina keel (Hiina)",
|
||||
"zhTW": "Hiina keel (Tai)"
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgariera",
|
||||
"ca": "Katalana",
|
||||
"cs": "Txekiera",
|
||||
"da": "Daniera",
|
||||
"de": "Alemana",
|
||||
"el": "Greziera",
|
||||
"en": "Ingelesa",
|
||||
"enGB": "Ingelesa (Erresuma Batua)",
|
||||
"eo": "Esperantoa",
|
||||
"es": "Gaztelania",
|
||||
"esUS": "Gaztelania (Latinamerika)",
|
||||
"et": "Estoniera",
|
||||
"fi": "Finlandiera",
|
||||
"fr": "Frantsesa",
|
||||
"frCA": "Frantsesa (Kanada)",
|
||||
"hr": "Kroaziera",
|
||||
"hu": "Hungariera",
|
||||
"hy": "Armeniera",
|
||||
"it": "Italiera",
|
||||
"ja": "Japoniera",
|
||||
"ko": "Koreera",
|
||||
"nl": "Nederlandera",
|
||||
"oc": "Okzitaniera",
|
||||
"pl": "Poloniera",
|
||||
"ptBR": "Portugesa (Brasil)",
|
||||
"ru": "Errusiera",
|
||||
"sv": "Suediera",
|
||||
"tr": "Turkiera",
|
||||
"vi": "Vietnamera",
|
||||
"zhCN": "Txinera (Txina)",
|
||||
"zhTW": "Txinera (Taiwan)"
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
{
|
||||
"af": "آفریقایی",
|
||||
"ar": "عربی",
|
||||
"bg": "بلغاری",
|
||||
"ca": "کاتالانی",
|
||||
"cs": "چک",
|
||||
"da": "دانمارکی",
|
||||
"de": "آلمانی",
|
||||
"el": "یونانی",
|
||||
"en": "انگلیسی",
|
||||
"enGB": "انگلیسی (انگلستان)",
|
||||
"eo": "اسپرانتو",
|
||||
"es": "اسپانیایی",
|
||||
"esUS": "اسپانیایی (آمریکا لاتین)",
|
||||
"et": "استونیایی",
|
||||
"eu": "باسکایی",
|
||||
"fa": "فارسی",
|
||||
"fi": "فنلاندی",
|
||||
"fr": "فرانسوی",
|
||||
"frCA": "فرانسوی (کانادا)",
|
||||
"he": "عبری",
|
||||
"hr": "کرواتی",
|
||||
"hu": "بلغاری",
|
||||
"hy": "ارمنی",
|
||||
"id": "اندونزیایی",
|
||||
"it": "ایتالیایی",
|
||||
"ja": "ژاپنی",
|
||||
"kab": "کابیلی",
|
||||
"ko": "کره ای",
|
||||
"lt": "لیتوانیایی",
|
||||
"lv": "لتونیایی",
|
||||
"ml": "مالایایی",
|
||||
"mr": "مراتی",
|
||||
"nl": "هلندی",
|
||||
"oc": "اکسیتان(قدیمی)",
|
||||
"pl": "لهستانی",
|
||||
"ptBR": "پرتغالی (برزیل)",
|
||||
"ro": "رومانیایی",
|
||||
"ru": "روسی",
|
||||
"sc": "ساردینی",
|
||||
"sk": "اسلواکیایی",
|
||||
"sl": "اسلوونیایی",
|
||||
"sr": "صربی",
|
||||
"sv": "سوئدی",
|
||||
"tr": "ترکی",
|
||||
"uk": "اوکراینی",
|
||||
"vi": "ویتنامی",
|
||||
"zhCN": "چینی",
|
||||
"zhTW": "چینی (تایوان)"
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"af": "afrikaans",
|
||||
"bg": "bulgaria",
|
||||
"ca": "katalaani",
|
||||
"cs": "tšekki",
|
||||
"da": "tanska",
|
||||
"de": "saksa",
|
||||
"el": "kreikka",
|
||||
"en": "englanti",
|
||||
"enGB": "englanti (Yhdistynyt kuningaskunta)",
|
||||
"eo": "esperanto",
|
||||
"es": "espanja",
|
||||
"esUS": "espanja (Latinalainen Amerikka)",
|
||||
"et": "viro",
|
||||
"fi": "suomi",
|
||||
"fr": "ranska",
|
||||
"frCA": "ranska (Kanada)",
|
||||
"hr": "kroaatti",
|
||||
"hu": "unkari",
|
||||
"hy": "armenia",
|
||||
"it": "italia",
|
||||
"ja": "japani",
|
||||
"ko": "korea",
|
||||
"nb": "",
|
||||
"nl": "hollanti",
|
||||
"oc": "oksitaani",
|
||||
"pl": "puola",
|
||||
"ptBR": "portugali (Brasilia)",
|
||||
"ru": "venäjä",
|
||||
"sk": "",
|
||||
"sl": "",
|
||||
"sv": "ruotsi",
|
||||
"tr": "turkki",
|
||||
"uk": "ukraina",
|
||||
"vi": "vietnam",
|
||||
"zhCN": "kiina (Kiina)",
|
||||
"zhTW": "kiina (Taiwan)"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgare",
|
||||
"ca": "Catalan",
|
||||
"cs": "Tchèque",
|
||||
"da": "Danois",
|
||||
"de": "Allemand",
|
||||
"el": "Grec",
|
||||
"en": "Anglais",
|
||||
"enGB": "Anglais (Royaume-Uni)",
|
||||
"eo": "Espéranto",
|
||||
"es": "Espagnol",
|
||||
"esUS": "Espagnol (Amérique latine)",
|
||||
"et": "Estonien",
|
||||
"fi": "Finnois",
|
||||
"fr": "Français",
|
||||
"frCA": "Français (Canada)",
|
||||
"hr": "Croate",
|
||||
"hu": "Hongrois",
|
||||
"hy": "Arménien",
|
||||
"it": "Italien",
|
||||
"ja": "Japonais",
|
||||
"ko": "Coréen",
|
||||
"nl": "Néerlandais",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polonais",
|
||||
"ptBR": "Portugais (Brésil)",
|
||||
"ru": "Russe",
|
||||
"sk": "Slovaque",
|
||||
"sv": "Suédois",
|
||||
"tr": "Turc",
|
||||
"uk": "Ukrainien",
|
||||
"vi": "Vietnamien",
|
||||
"zhCN": "Chinois (Chine)",
|
||||
"zhTW": "Chinois (Taiwan)"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"af": "Africain",
|
||||
"bg": "Bulgare",
|
||||
"ca": "Catalan",
|
||||
"cs": "Tchèque",
|
||||
"da": "Danois",
|
||||
"de": "Allemand",
|
||||
"el": "Grec",
|
||||
"en": "Anglais",
|
||||
"enGB": "Anglais (Royaume-Uni)",
|
||||
"eo": "Espéranto",
|
||||
"es": "Espagnol",
|
||||
"esUS": "Espagnol (Amérique latine)",
|
||||
"et": "Estonien",
|
||||
"fi": "Finnois",
|
||||
"fr": "Français",
|
||||
"frCA": "Français (Canadien)",
|
||||
"hr": "Croate",
|
||||
"hu": "Hongrois",
|
||||
"hy": "Arménien",
|
||||
"it": "Italien",
|
||||
"ja": "Japonais",
|
||||
"ko": "Coréen",
|
||||
"nl": "Néerlandais",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polonais",
|
||||
"ptBR": "Portugais (Brésil)",
|
||||
"ru": "Russe",
|
||||
"sk": "Slovaque",
|
||||
"sv": "Suédois",
|
||||
"tr": "Turc",
|
||||
"uk": "Ukrainien",
|
||||
"vi": "Vietnamien",
|
||||
"zhCN": "Chinois (Chine)",
|
||||
"zhTW": "Chinois (Taiwan)"
|
||||
}
|
||||
@@ -1,49 +0,0 @@
|
||||
{
|
||||
"af": "Afrikans",
|
||||
"ar": "Árabe",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalán",
|
||||
"cs": "Checo",
|
||||
"da": "Dinamarqués",
|
||||
"de": "Alemán",
|
||||
"el": "Grego",
|
||||
"en": "Inglés",
|
||||
"enGB": "Inglés (Reino Unido)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Español",
|
||||
"esUS": "Español (Hispanoamérica)",
|
||||
"et": "Estoniano",
|
||||
"eu": "Éuscaro",
|
||||
"fi": "Finlandés",
|
||||
"fr": "Francés",
|
||||
"frCA": "Francés (Canadá)",
|
||||
"he": "Hebreo",
|
||||
"hr": "Croata",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Armenio",
|
||||
"id": "Indonesio",
|
||||
"it": "Italiano",
|
||||
"ja": "Xaponés",
|
||||
"kab": "Cabila",
|
||||
"ko": "Coreano",
|
||||
"lt": "Lituano",
|
||||
"lv": "Letón",
|
||||
"ml": "Malayalam",
|
||||
"mr": "Marathi",
|
||||
"nl": "Holandés",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polaco",
|
||||
"ptBR": "Portugués (Brasil)",
|
||||
"ro": "Romanés",
|
||||
"ru": "Ruso",
|
||||
"sc": "Sardo",
|
||||
"sk": "Eslovaco",
|
||||
"sl": "Esloveno",
|
||||
"sr": "Serbio",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraíno",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chinés (China)",
|
||||
"zhTW": "Chinés (Taiwán)"
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
"af": "אפריקאית",
|
||||
"bg": "בולגרית",
|
||||
"ca": "קטלנית",
|
||||
"cs": "קזחית",
|
||||
"da": "דנית",
|
||||
"de": "גרמנית",
|
||||
"el": "יוונית",
|
||||
"en": "אנגלית",
|
||||
"enGB": "אנגלית (בריטניה)",
|
||||
"eo": "אספרנטו",
|
||||
"es": "ספרדית",
|
||||
"esUS": "ספרדית (אמריקה הלטינית)",
|
||||
"et": "אסטונית",
|
||||
"fi": "פינית",
|
||||
"fr": "צרפתית",
|
||||
"frCA": "צרפתית (קנדה)",
|
||||
"he": "עברית",
|
||||
"hr": "קראוטית",
|
||||
"hu": "הונגרית",
|
||||
"hy": "ארמנית",
|
||||
"it": "איטלקית",
|
||||
"ja": "יפנית",
|
||||
"ko": "קוראנית",
|
||||
"nl": "הולנדית",
|
||||
"oc": "אוקיאנית",
|
||||
"pl": "פולנית",
|
||||
"ptBR": "פורטוגזית (ברזיל)",
|
||||
"ru": "רוסית",
|
||||
"sc": "סרבית",
|
||||
"sk": "סלובקית",
|
||||
"sv": "שוודית",
|
||||
"tr": "טורקית",
|
||||
"vi": "ויטנאמית",
|
||||
"zhCN": "סינית (סין)",
|
||||
"zhTW": "סינית (טיוואן)"
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "Arabic",
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
"da": "Danish",
|
||||
"de": "German",
|
||||
"el": "Greek",
|
||||
"en": "अंग्रेज़ी",
|
||||
"enGB": "अंग्रेज़ी (UK)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanish",
|
||||
"esUS": "Spanish (Latin America)",
|
||||
"et": "Estonian",
|
||||
"eu": "Basque",
|
||||
"fa": "Persian",
|
||||
"fi": "Finnish",
|
||||
"fr": "French",
|
||||
"frCA": "French (Canadian)",
|
||||
"he": "Hebrew",
|
||||
"hi": "हिन्दी",
|
||||
"hr": "Croatian",
|
||||
"hu": "Hungarian",
|
||||
"hy": "Armenian",
|
||||
"id": "Indonesian",
|
||||
"it": "Italian",
|
||||
"ja": "Japanese",
|
||||
"kab": "Kabyle",
|
||||
"ko": "Korean",
|
||||
"lt": "Lithuanian",
|
||||
"lv": "Latvian",
|
||||
"ml": "मलयालम",
|
||||
"mr": "मराठी",
|
||||
"nl": "Dutch",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polish",
|
||||
"pt": "Portuguese",
|
||||
"ptBR": "Portuguese (Brazil)",
|
||||
"ro": "Romanian",
|
||||
"ru": "Russian",
|
||||
"sc": "Sardinian",
|
||||
"sk": "Slovak",
|
||||
"sl": "Slovenian",
|
||||
"sr": "Serbian",
|
||||
"sv": "Swedish",
|
||||
"tr": "Turkish",
|
||||
"uk": "Ukrainian",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "Chinese (China)",
|
||||
"zhTW": "Chinese (Taiwan)"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"af": "Afrikanski",
|
||||
"ar": "Arapski",
|
||||
"bg": "Bugarski",
|
||||
"ca": "Katalanski",
|
||||
"cs": "Češki",
|
||||
"da": "Danski",
|
||||
"de": "Njemački",
|
||||
"el": "Grčki",
|
||||
"en": "Engleski",
|
||||
"enGB": "Engleski (Ujedinjeno Kraljevstvo)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Španjolski",
|
||||
"esUS": "Španjolski (Latinska Amerika)",
|
||||
"et": "Estonski",
|
||||
"eu": "Baskijski",
|
||||
"fa": "Perzijski",
|
||||
"fi": "Finski",
|
||||
"fr": "Francuski",
|
||||
"frCA": "Francuski (Canada)",
|
||||
"he": "Hebrejski",
|
||||
"hi": "Hindski",
|
||||
"hr": "Hrvatski",
|
||||
"hsb": "Gornjolužičkosrpski",
|
||||
"hu": "Mađarski",
|
||||
"hy": "Armenski",
|
||||
"id": "Indonezijski",
|
||||
"it": "Talijanski",
|
||||
"ja": "Japanski",
|
||||
"ko": "Korejski",
|
||||
"lt": "Litvanski",
|
||||
"lv": "Latvijski",
|
||||
"ml": "Malayalam",
|
||||
"mr": "Marathi",
|
||||
"nb": "Norveški Bokmal",
|
||||
"nl": "Nizozemski",
|
||||
"oc": "Okcitanski",
|
||||
"pl": "Poljski",
|
||||
"pt": "Portugalski",
|
||||
"ptBR": "Portugalski (Brazil)",
|
||||
"ro": "Rumunjski",
|
||||
"ru": "Ruski",
|
||||
"sc": "Sardijski",
|
||||
"sk": "Slovački",
|
||||
"sl": "Slovenski",
|
||||
"sq": "Albanski",
|
||||
"sr": "Srpski",
|
||||
"sv": "Švedski",
|
||||
"te": "Teluški",
|
||||
"tr": "Turski",
|
||||
"uk": "Ukrajinski",
|
||||
"vi": "Vijetnamski",
|
||||
"zhCN": "Kineski (Kina)",
|
||||
"zhTW": "Kineski (Taiwan)"
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
{
|
||||
"ar": "arabšćina",
|
||||
"bg": "bołharšćina",
|
||||
"cs": "čěšćina",
|
||||
"da": "danšćina",
|
||||
"de": "němčina",
|
||||
"el": "grjekšćina",
|
||||
"en": "jendźelšćina",
|
||||
"enGB": "jendźelšćina (Wulka Britaniska)",
|
||||
"eo": "esperanto",
|
||||
"es": "španišćina",
|
||||
"esUS": "španišćina (Łaćonska)",
|
||||
"et": "estišćina",
|
||||
"eu": "baskišćina",
|
||||
"fa": "persišćina",
|
||||
"fi": "finšćina",
|
||||
"fr": "francošćina",
|
||||
"frCA": "francošćina (Kanada)",
|
||||
"he": "hebrejšćina",
|
||||
"hi": "hindišćina",
|
||||
"hr": "chorwatšćina",
|
||||
"hsb": "hornjoserbšćina",
|
||||
"hu": "madźaršćina",
|
||||
"hy": "armenšćina",
|
||||
"id": "indonešćina",
|
||||
"it": "italšćina",
|
||||
"ja": "japanšćina",
|
||||
"ko": "korejšćina",
|
||||
"lt": "litawšćina",
|
||||
"lv": "letišćina",
|
||||
"nl": "nižozemšćina",
|
||||
"pl": "pólšćina",
|
||||
"pt": "portugalšćina",
|
||||
"ptBR": "portugalšćina (Brazilska)",
|
||||
"ro": "rumunšćina",
|
||||
"ru": "rušćina",
|
||||
"sk": "słowakšćina",
|
||||
"sl": "słowjenšćina",
|
||||
"sq": "albanšćina",
|
||||
"sr": "serbišćina",
|
||||
"sv": "šwedšćina",
|
||||
"tr": "turkowšćina",
|
||||
"uk": "ukrainšćina",
|
||||
"vi": "vietnamšćina",
|
||||
"zhCN": "chinšćina (China)",
|
||||
"zhTW": "chinšćina (Taiwan)"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bolgár",
|
||||
"ca": "Katalán",
|
||||
"cs": "Cseh",
|
||||
"da": "Dán",
|
||||
"de": "Német",
|
||||
"el": "Görög",
|
||||
"en": "Angol",
|
||||
"enGB": "Angol (Egyesült Királyság)",
|
||||
"eo": "Eszperantó",
|
||||
"es": "Spanyol",
|
||||
"esUS": "Spanyol (Latin-Amerika)",
|
||||
"et": "Észt",
|
||||
"fi": "Finn",
|
||||
"fr": "Francia",
|
||||
"frCA": "Francia (kanadai)",
|
||||
"hr": "Horvát",
|
||||
"hu": "Magyar",
|
||||
"hy": "Örmény",
|
||||
"it": "Olasz",
|
||||
"ja": "Japán",
|
||||
"ko": "Koreai",
|
||||
"nl": "Holland",
|
||||
"oc": "Okszitán",
|
||||
"pl": "Lengyel",
|
||||
"ptBR": "Portugál (Brazil)",
|
||||
"ru": "Orosz",
|
||||
"sk": "Szlovákul",
|
||||
"sv": "Svéd",
|
||||
"tr": "Török",
|
||||
"uk": "Ukrán",
|
||||
"vi": "Vietnámi",
|
||||
"zhCN": "Kínai (Kína)",
|
||||
"zhTW": "Kínai (Tajvan)"
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"af": "",
|
||||
"bg": "Բուլղարերեն",
|
||||
"cs": "",
|
||||
"de": "Գերմաներեն ",
|
||||
"el": "",
|
||||
"en": "Անգլերեն",
|
||||
"eo": "Էսպերանտո",
|
||||
"es": "Իսպաներեն",
|
||||
"fr": "Ֆրանսերեն",
|
||||
"hy": "Հայերեն",
|
||||
"it": "Իտալերեն",
|
||||
"ja": "",
|
||||
"ko": "",
|
||||
"nb": "Նորվեգերեն",
|
||||
"oc": "Օքսիտաներեն",
|
||||
"pl": "Լեհերեն",
|
||||
"ptBR": "Պորտուգալերեն (Բրազիլիա)",
|
||||
"ru": "Ռուսերեն",
|
||||
"sk": "Սլովակերեն",
|
||||
"sl": "Սլովեներեն ",
|
||||
"sv": "Շվեդերեն ",
|
||||
"tr": "Թուրքերեն",
|
||||
"uk": "Ուկրաիներեն",
|
||||
"vi": "",
|
||||
"zhCN": "Չիներեն"
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
{
|
||||
"af": "Bahasa Afrika",
|
||||
"bg": "Bahasa Bulgaria",
|
||||
"ca": "Bahasa Katalan",
|
||||
"cs": "Bahasa Ceko",
|
||||
"da": "Bahasa Denmark",
|
||||
"de": "Bahasa Jerman",
|
||||
"el": "Bahasa Yunani",
|
||||
"en": "Bahasa Inggris - US",
|
||||
"enGB": "Bahasa Inggris - UK",
|
||||
"eo": "Esperanto",
|
||||
"es": "Bahasa Spanyol",
|
||||
"esUS": "Bahasa Spanyol - Latin",
|
||||
"et": "Bahasa Estonia",
|
||||
"fi": "Bahasa Finlandia",
|
||||
"fr": "Bahasa Prancis",
|
||||
"frCA": "Bahasa Prancis - Kanada",
|
||||
"he": "Bahasa Hebrew",
|
||||
"hr": "Bahasa Kroasia",
|
||||
"hu": "Bahasa Hongaria",
|
||||
"hy": "Bahasa Armenia",
|
||||
"id": "Bahasa Indonesia",
|
||||
"it": "Bahasa Italia",
|
||||
"ja": "Bahasa Jepang",
|
||||
"ko": "Bahasa Korea",
|
||||
"lt": "Bahasa Lituania",
|
||||
"nl": "Bahasa Belanda",
|
||||
"oc": "Bahasa Oceania",
|
||||
"pl": "Bahasa Polandia",
|
||||
"ptBR": "Bahasa Portugis - Brazil",
|
||||
"ru": "Bahasa Rusia",
|
||||
"sc": "Bahasa Sardinia",
|
||||
"sk": "Bahasa Slovakia",
|
||||
"sv": "Bahasa Swedia",
|
||||
"tr": "Bahasa Turki",
|
||||
"uk": "Bahasa Ukraina",
|
||||
"vi": "Bahasa Vietnam",
|
||||
"zhCN": "Bahasa Mandarin",
|
||||
"zhTW": "Bahasa Mandarin - Taiwan"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"af": "Afríkanska",
|
||||
"bg": "Búlgarska",
|
||||
"ca": "Katalónska",
|
||||
"cs": "Tékkneska",
|
||||
"da": "Danska",
|
||||
"de": "Þýska",
|
||||
"el": "Gríska",
|
||||
"en": "Enska",
|
||||
"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",
|
||||
"uk": "Úkraínska",
|
||||
"vi": "Víetnamska",
|
||||
"zhCN": "Kínverska (Kína)",
|
||||
"zhTW": "Kínverska (Taívan)"
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgaro",
|
||||
"ca": "Catalano",
|
||||
"cs": "Ceco",
|
||||
"da": "Danese",
|
||||
"de": "Tedesco",
|
||||
"el": "Greco",
|
||||
"en": "Inglese",
|
||||
"enGB": "Inglese (Regno Unito)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spagnolo",
|
||||
"esUS": "Spagnolo (America Latina)",
|
||||
"et": "Estone",
|
||||
"eu": "Basco",
|
||||
"fi": "Finlandese",
|
||||
"fr": "Francese",
|
||||
"frCA": "Francese (Canada)",
|
||||
"he": "Ebraico",
|
||||
"hr": "Croato",
|
||||
"hu": "Ungaro",
|
||||
"hy": "Armeno",
|
||||
"id": "Indonesiano",
|
||||
"it": "Italiano",
|
||||
"ja": "Giapponese",
|
||||
"kab": "Kabyle",
|
||||
"ko": "Coreano",
|
||||
"lt": "Lituano",
|
||||
"lv": "Lettone",
|
||||
"ml": "Malese",
|
||||
"mr": "Marathi",
|
||||
"nl": "Olandese",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polacco",
|
||||
"ptBR": "Portoghese (Brasile)",
|
||||
"ro": "Rumeno",
|
||||
"ru": "Russo",
|
||||
"sc": "Sardo",
|
||||
"sk": "Slovacco",
|
||||
"sl": "Sloveno",
|
||||
"sr": "Serbo",
|
||||
"sv": "Svedese",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraino",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Cinese (Cina)",
|
||||
"zhTW": "Cinese (Taiwan)"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"af": "アフリカーンス語",
|
||||
"ar": "アラビア語",
|
||||
"bg": "ブルガリア語",
|
||||
"ca": "カタルーニャ語",
|
||||
"cs": "チェコ語",
|
||||
"da": "デンマーク語",
|
||||
"de": "ドイツ語",
|
||||
"el": "ギリシア語",
|
||||
"en": "英語",
|
||||
"enGB": "英語 (英国)",
|
||||
"eo": "エスペラント語",
|
||||
"es": "スペイン語",
|
||||
"esUS": "スペイン語 (ラテンアメリカ)",
|
||||
"et": "エストニア語",
|
||||
"eu": "バスク語",
|
||||
"fa": "ペルシア語",
|
||||
"fi": "フィンランド語",
|
||||
"fr": "フランス語",
|
||||
"frCA": "フランス語 (カナダ)",
|
||||
"he": "ヘブライ語",
|
||||
"hi": "ヒンディー語",
|
||||
"hr": "クロアチア語",
|
||||
"hu": "ハンガリー語",
|
||||
"hy": "アルメニア語",
|
||||
"id": "インドネシア語",
|
||||
"it": "イタリア語",
|
||||
"ja": "日本語",
|
||||
"kab": "カビル語",
|
||||
"ko": "韓国語",
|
||||
"lt": "リトアニア語",
|
||||
"lv": "ラトビア語",
|
||||
"ml": "マラヤーラム語",
|
||||
"mr": "マラーティー語",
|
||||
"nl": "オランダ語",
|
||||
"oc": "オック語",
|
||||
"pl": "ポーランド語",
|
||||
"pt": "ポルトガル語",
|
||||
"ptBR": "ポルトガル語 (ブラジル)",
|
||||
"ro": "ルーマニア語",
|
||||
"ru": "ロシア語",
|
||||
"sc": "サルデーニャ語",
|
||||
"sk": "スロバキア語",
|
||||
"sl": "スロベニア語",
|
||||
"sq": "アルバニア語",
|
||||
"sr": "セルビア語",
|
||||
"sv": "スウェーデン語",
|
||||
"te": "テルグ語",
|
||||
"tr": "トルコ語",
|
||||
"uk": "ウクライナ語",
|
||||
"vi": "ベトナム語",
|
||||
"zhCN": "中国語 (中国)",
|
||||
"zhTW": "中国語 (台湾)"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"af": "Tafrikant",
|
||||
"ar": "Taɛrabt",
|
||||
"bg": "Tabulgarit",
|
||||
"ca": "Takaṭalant",
|
||||
"cs": "Taččikit",
|
||||
"da": "Tadanit",
|
||||
"de": "Talmanit",
|
||||
"el": "Tagrigit",
|
||||
"en": "Taglizit",
|
||||
"enGB": "Tagnizit (Tagldit i ddukklen)",
|
||||
"eo": "Taspiṛantit",
|
||||
"es": "Taspanit",
|
||||
"esUS": "Taspanit (Temrikt Talatinit)",
|
||||
"et": "Tastunit",
|
||||
"eu": "Tabaskit",
|
||||
"fa": "Tafarisit",
|
||||
"fi": "Tafinit",
|
||||
"fr": "Tafransist",
|
||||
"frCA": "Tafṛansist (Kanada)",
|
||||
"he": "Taɛbrit",
|
||||
"hi": "Tahindit",
|
||||
"hr": "Takrwasit",
|
||||
"hu": "Tahungrit",
|
||||
"hy": "Tarminit",
|
||||
"id": "Tandunizit",
|
||||
"it": "Taṭalyant",
|
||||
"ja": "Tajapunit",
|
||||
"kab": "Taqbaylit",
|
||||
"ko": "Takurit",
|
||||
"lt": "Taliṭwanit",
|
||||
"lv": "Talatviant",
|
||||
"ml": "Tamalayalamt",
|
||||
"mr": "Tamratit",
|
||||
"nb": "Tanurvijit Bukmal",
|
||||
"nl": "Tahulandit",
|
||||
"oc": "Tuksitant",
|
||||
"pl": "Tapulunit",
|
||||
"pt": "Taportugit",
|
||||
"ptBR": "Tapurtugit (Brazil)",
|
||||
"ro": "Tarumanit",
|
||||
"ru": "Tarusit",
|
||||
"sc": "Tasardit",
|
||||
"sk": "Tasluvakit",
|
||||
"sl": "Tasluvinit",
|
||||
"sq": "Talbanit",
|
||||
"sr": "Taserbit",
|
||||
"sv": "Taswidit",
|
||||
"te": "Tatelugut",
|
||||
"tr": "Taṭurkit",
|
||||
"uk": "Tukranit",
|
||||
"vi": "Tavyitnamit",
|
||||
"zhCN": "Tavyitnamit",
|
||||
"zhTW": "Tacinwat (Taiwan)"
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
{
|
||||
"af": "아프리칸스어",
|
||||
"ar": "아랍어",
|
||||
"bg": "불가리어",
|
||||
"ca": "카탈루냐어",
|
||||
"cs": "체코어",
|
||||
"da": "덴마크어",
|
||||
"de": "독일어",
|
||||
"el": "그리스어",
|
||||
"en": "영어",
|
||||
"enGB": "영어(영국)",
|
||||
"eo": "에스페란토어",
|
||||
"es": "스페인어",
|
||||
"esUS": "스페인어(라틴 아메리카)",
|
||||
"et": "에스토니아어",
|
||||
"eu": "바스크어",
|
||||
"fa": "페르시아어",
|
||||
"fi": "핀란드어",
|
||||
"fr": "프랑스어",
|
||||
"frCA": "프랑스어(캐나다)",
|
||||
"he": "히브리어",
|
||||
"hr": "크로아티아어",
|
||||
"hu": "헝가리어",
|
||||
"hy": "아르메니아어",
|
||||
"id": "인도네시아어",
|
||||
"it": "이탈리아어",
|
||||
"ja": "일본어",
|
||||
"kab": "커바일어",
|
||||
"ko": "한국어",
|
||||
"lt": "리투아니아어",
|
||||
"lv": "라트비아어",
|
||||
"ml": "말라얄람어",
|
||||
"mr": "마라티어",
|
||||
"nl": "네덜란드어",
|
||||
"oc": "오크어",
|
||||
"pl": "폴란드어",
|
||||
"ptBR": "포르투갈어(브라질)",
|
||||
"ro": "루마니아어",
|
||||
"ru": "러시아어",
|
||||
"sc": "사르데냐어",
|
||||
"sk": "슬로바키아어",
|
||||
"sl": "슬로베니아어",
|
||||
"sr": "세르비아어",
|
||||
"sv": "스웨덴어",
|
||||
"tr": "터키어",
|
||||
"uk": "우크라이나어",
|
||||
"vi": "베트남어",
|
||||
"zhCN": "중국어(중국)",
|
||||
"zhTW": "중국어(대만)"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"af": "Afrikanų",
|
||||
"bg": "Bulgarų",
|
||||
"ca": "Katalanų",
|
||||
"cs": "Čekų",
|
||||
"da": "Danų",
|
||||
"de": "Vokiečių",
|
||||
"el": "Graikų",
|
||||
"en": "Anglų",
|
||||
"enGB": "Anglų (Britų)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Ispanų",
|
||||
"esUS": "Ispanų (Lotynų Amerika)",
|
||||
"et": "Estų",
|
||||
"fi": "Suomių",
|
||||
"fr": "Prancūzų",
|
||||
"frCA": "Prancūzų (Kanada)",
|
||||
"hr": "Kroatų",
|
||||
"hu": "Vengrų",
|
||||
"hy": "Armėnų",
|
||||
"it": "Italų",
|
||||
"ja": "Japonų",
|
||||
"ko": "Korėjiečių",
|
||||
"lt": "Lietuvių",
|
||||
"nl": "Olandų",
|
||||
"oc": "Oksitanų",
|
||||
"pl": "Lenkų",
|
||||
"ptBR": "Portugalų (Brazilija)",
|
||||
"ru": "Rusų",
|
||||
"sv": "Švedų",
|
||||
"tr": "Turkų",
|
||||
"uk": "Ukrainiečių",
|
||||
"vi": "Vietnamiečių",
|
||||
"zhCN": "Kinų (China)",
|
||||
"zhTW": "Kinų (Taivanas)"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"af": "āfrikāņu",
|
||||
"bg": "bulgāru",
|
||||
"ca": "kataloniešu",
|
||||
"cs": "čehu",
|
||||
"de": "vācu",
|
||||
"el": "grieķu",
|
||||
"en": "angļu",
|
||||
"enGB": "angļu (Lielbritānija)",
|
||||
"eo": "esperanto",
|
||||
"es": "spāņu",
|
||||
"esUS": "spāņu (Dienvidamerika)",
|
||||
"et": "igauņu",
|
||||
"fi": "somu",
|
||||
"fr": "franču",
|
||||
"frCA": "franču (Kanāda)",
|
||||
"hr": "horvātu",
|
||||
"hu": "ungāru",
|
||||
"hy": "armēņu",
|
||||
"it": "itāļu",
|
||||
"ja": "japānu",
|
||||
"ko": "korejiešu",
|
||||
"lv": "laviešu",
|
||||
"nl": "holandiešu",
|
||||
"oc": "oksitāņu",
|
||||
"pl": "poļu",
|
||||
"ptBR": "portugāļu (Brazīlija)",
|
||||
"ru": "krievu",
|
||||
"sv": "zviedru",
|
||||
"tr": "turku",
|
||||
"uk": "ukraiņu",
|
||||
"vi": "vjetnamiešu",
|
||||
"zhCN": "ķīniešu (Ķīna)",
|
||||
"zhTW": "ķīniešu (Taivana)"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
"da": "Danish",
|
||||
"de": "German",
|
||||
"el": "Greek",
|
||||
"en": "English",
|
||||
"enGB": "English (United Kingdom)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanish",
|
||||
"esUS": "Spanish (Latin America)",
|
||||
"et": "Estonian",
|
||||
"fi": "Finnish",
|
||||
"fr": "French",
|
||||
"frCA": "French (Canadian)",
|
||||
"hr": "Croatian",
|
||||
"hu": "Hungarian",
|
||||
"hy": "Armenian",
|
||||
"it": "Italian",
|
||||
"ja": "Japanese",
|
||||
"ko": "Korean",
|
||||
"mn": "Монгол",
|
||||
"nl": "Dutch",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polish",
|
||||
"ptBR": "Portuguese (Brazil)",
|
||||
"ru": "Russian",
|
||||
"sv": "Swedish",
|
||||
"tr": "Turkish",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "Chinese (China)",
|
||||
"zhTW": "Chinese (Taiwan)"
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
"da": "Danish",
|
||||
"de": "German",
|
||||
"el": "Greek",
|
||||
"en": "English",
|
||||
"enGB": "English (United Kingdom)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanish",
|
||||
"esUS": "Spanish (Latin America)",
|
||||
"et": "Estonian",
|
||||
"fi": "Finnish",
|
||||
"fr": "French",
|
||||
"frCA": "French (Canadian)",
|
||||
"hr": "Croatian",
|
||||
"hu": "Hungarian",
|
||||
"hy": "Armenian",
|
||||
"it": "Italian",
|
||||
"ja": "Japanese",
|
||||
"ko": "Korean",
|
||||
"nb": "",
|
||||
"nl": "Dutch",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polish",
|
||||
"ptBR": "Portuguese (Brazil)",
|
||||
"ru": "Russian",
|
||||
"sk": "",
|
||||
"sl": "",
|
||||
"sv": "Swedish",
|
||||
"tr": "Turkish",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "Chinese (China)",
|
||||
"zhTW": "Chinese (Taiwan)"
|
||||
}
|
||||
@@ -1,31 +0,0 @@
|
||||
{
|
||||
"af": "",
|
||||
"bg": "",
|
||||
"cs": "Tsjekkisk",
|
||||
"da": "Dansk",
|
||||
"de": "Tysk",
|
||||
"el": "Gresk",
|
||||
"en": "Engelsk",
|
||||
"eo": "",
|
||||
"es": "Spansk",
|
||||
"fi": "Finsk",
|
||||
"fr": "Fransk",
|
||||
"hr": "Kroatisk",
|
||||
"hu": "Ungarsk",
|
||||
"hy": "",
|
||||
"it": "Italiensk",
|
||||
"ja": "Japansk",
|
||||
"ko": "Koreansk",
|
||||
"nb": "",
|
||||
"oc": "",
|
||||
"pl": "Polsk",
|
||||
"ptBR": "",
|
||||
"ru": "Russisk",
|
||||
"sk": "",
|
||||
"sl": "",
|
||||
"sv": "Svensk",
|
||||
"tr": "Tyrkisk",
|
||||
"uk": "Ukrainsk",
|
||||
"vi": "Vietnamesisk",
|
||||
"zhCN": ""
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgaars",
|
||||
"ca": "Catalaans",
|
||||
"cs": "Tsjechisch",
|
||||
"da": "Deens",
|
||||
"de": "Duits",
|
||||
"el": "Grieks",
|
||||
"en": "Engels",
|
||||
"enGB": "Engels (Verenigd Koninkrijk)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spaans",
|
||||
"esUS": "Spaans (Latijns Amerika)",
|
||||
"et": "Estlands",
|
||||
"fi": "Fins",
|
||||
"fr": "Frans",
|
||||
"frCA": "Frans (Canadees)",
|
||||
"hr": "Kroatisch",
|
||||
"hu": "Hongaars",
|
||||
"hy": "Armeens",
|
||||
"it": "Italiaans",
|
||||
"ja": "Japans",
|
||||
"ko": "Koreaans",
|
||||
"nb": "Noors (Bokmal)",
|
||||
"nl": "Nederlands",
|
||||
"oc": "Occitaans",
|
||||
"pl": "Pools",
|
||||
"ptBR": "Portugees (Brazilië)",
|
||||
"ru": "Russisch",
|
||||
"sk": "Slowaaks",
|
||||
"sl": "Sloveens",
|
||||
"sv": "Zweeds",
|
||||
"tr": "Turks",
|
||||
"uk": "Oekraïens",
|
||||
"vi": "Vietnamees",
|
||||
"zhCN": "Chinees (China)",
|
||||
"zhTW": "Chinees (Taiwan)"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "Arabi",
|
||||
"bg": "Bulgar",
|
||||
"ca": "Catalan",
|
||||
"cs": "Chèc",
|
||||
"da": "Danés",
|
||||
"de": "Aleman",
|
||||
"el": "Grèc",
|
||||
"en": "Anglés",
|
||||
"enGB": "Anglés (Reialme Unit)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Castelhan",
|
||||
"esUS": "Espanhòl (America latina)",
|
||||
"et": "Estonian",
|
||||
"eu": "Basc",
|
||||
"fa": "Persa",
|
||||
"fi": "Finés",
|
||||
"fr": "Francés",
|
||||
"frCA": "Francés (Canadian)",
|
||||
"he": "Ebrèu",
|
||||
"hi": "Indi",
|
||||
"hr": "Croat",
|
||||
"hu": "Ongrés",
|
||||
"hy": "Armenian",
|
||||
"id": "Indonesian",
|
||||
"it": "Italian",
|
||||
"ja": "Japonés",
|
||||
"kab": "Cabil",
|
||||
"ko": "Corean",
|
||||
"lt": "Lituanian",
|
||||
"lv": "Leton",
|
||||
"ml": "Malaialam",
|
||||
"mr": "Marathi",
|
||||
"nl": "Neerlandés",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polonés",
|
||||
"pt": "Portugués",
|
||||
"ptBR": "Portugués (Brasil)",
|
||||
"ro": "Romanian",
|
||||
"ru": "Rus",
|
||||
"sc": "Sarde",
|
||||
"sk": "Eslovac",
|
||||
"sl": "Eslovèn",
|
||||
"sq": "Albanés",
|
||||
"sr": "Sèrbe",
|
||||
"sv": "Suedés",
|
||||
"te": "Telugu",
|
||||
"tr": "Turc",
|
||||
"uk": "Ucraïnian",
|
||||
"vi": "Vietnamian",
|
||||
"zhCN": "Chinés (China)",
|
||||
"zhTW": "Chinés (Taiwan)"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "arabski",
|
||||
"bg": "bułgarski",
|
||||
"ca": "kataloński",
|
||||
"cs": "czeski",
|
||||
"da": "duński",
|
||||
"de": "niemiecki",
|
||||
"el": "grecki",
|
||||
"en": "angielski",
|
||||
"enGB": "Angielski (Zjednoczone Królestwo)",
|
||||
"eo": "esperanto",
|
||||
"es": "hiszpański",
|
||||
"esUS": "hiszpański (Ameryka Łacińska)",
|
||||
"et": "estoński",
|
||||
"eu": "baskijski",
|
||||
"fa": "perski",
|
||||
"fi": "fiński",
|
||||
"fr": "francuski",
|
||||
"frCA": "francuski (kanadyjski)",
|
||||
"he": "hebrajski",
|
||||
"hi": "hindi",
|
||||
"hr": "chorwacki",
|
||||
"hu": "węgierski",
|
||||
"hy": "ormiański",
|
||||
"id": "indonezyjski",
|
||||
"it": "włoski",
|
||||
"ja": "japoński",
|
||||
"kab": "Kabyle",
|
||||
"ko": "koreański",
|
||||
"lt": "litewski",
|
||||
"lv": "łotewski",
|
||||
"ml": "malajalam",
|
||||
"mr": "Marathi",
|
||||
"nl": "holenderski",
|
||||
"oc": "prowansalski",
|
||||
"pl": "polski",
|
||||
"pt": "portugalski",
|
||||
"ptBR": "portugalski (Brazylia)",
|
||||
"ro": "rumuński",
|
||||
"ru": "rosyjski",
|
||||
"sc": "sardyński",
|
||||
"sk": "słowacki",
|
||||
"sl": "słoweński",
|
||||
"sq": "albański",
|
||||
"sr": "serbski",
|
||||
"sv": "szwedzki",
|
||||
"te": "telugu",
|
||||
"tr": "turecki",
|
||||
"uk": "ukraiński",
|
||||
"vi": "wietnamski",
|
||||
"zhCN": "chiński (Chiny)",
|
||||
"zhTW": "chiński (Tajwan)"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"af": "Africânder",
|
||||
"ar": "Árabe",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalão",
|
||||
"cs": "Checo",
|
||||
"da": "Dinamarquês",
|
||||
"de": "Alemão",
|
||||
"el": "Grego",
|
||||
"en": "Inglês",
|
||||
"enGB": "Inglês (Reino Unido)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Espanhol",
|
||||
"esUS": "Espanhol (América Latina)",
|
||||
"et": "Estónio",
|
||||
"eu": "Basco",
|
||||
"fa": "Persa",
|
||||
"fi": "Finlandês",
|
||||
"fr": "Francês",
|
||||
"frCA": "Francês (Canadá)",
|
||||
"he": "Hebraico",
|
||||
"hi": "Hindu",
|
||||
"hr": "Croata",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Arménio",
|
||||
"id": "Indonésio",
|
||||
"it": "Italiano",
|
||||
"ja": "Japonês",
|
||||
"kab": "Cabila",
|
||||
"ko": "Coreano",
|
||||
"lt": "Lituano",
|
||||
"lv": "Letão",
|
||||
"ml": "Malaio",
|
||||
"mr": "Marata",
|
||||
"nl": "Holandês",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polaco",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ro": "Romeno",
|
||||
"ru": "Russo",
|
||||
"sc": "Sardo",
|
||||
"sk": "Eslovaco",
|
||||
"sl": "Esloveno",
|
||||
"sq": "Albanês",
|
||||
"sr": "Sérvio",
|
||||
"sv": "Sueco",
|
||||
"te": "Telugu",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraniano",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chinês (China)",
|
||||
"zhTW": "Chinês (Taiwan)"
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"af": "Africâner",
|
||||
"bg": "Búlgaro",
|
||||
"ca": "Catalão",
|
||||
"cs": "Checo",
|
||||
"de": "Alemão",
|
||||
"el": "Grego",
|
||||
"en": "Inglês",
|
||||
"enGB": "Inglês (Reino Unido)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Espanhol",
|
||||
"esUS": "Espanhol (América Latina)",
|
||||
"fi": "Finlandês",
|
||||
"fr": "Francês",
|
||||
"frCA": "Francês (Canadá)",
|
||||
"hr": "Croata",
|
||||
"hu": "Húngaro",
|
||||
"hy": "Armênio",
|
||||
"it": "Italiano",
|
||||
"ja": "Japonês",
|
||||
"ko": "Coreano",
|
||||
"nl": "Holandês",
|
||||
"oc": "Occitano",
|
||||
"pl": "Polonês",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ru": "Russo",
|
||||
"sv": "Sueco",
|
||||
"tr": "Turco",
|
||||
"uk": "Ucraniano",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Chinês (China)",
|
||||
"zhTW": "Chinês (Taiwan)"
|
||||
}
|
||||
@@ -1,44 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "Arabă",
|
||||
"bg": "Bulgară",
|
||||
"ca": "Catalană",
|
||||
"cs": "Cehă",
|
||||
"da": "Daneză",
|
||||
"de": "Germană",
|
||||
"el": "Greacă",
|
||||
"en": "Engleză",
|
||||
"enGB": "Engleză (Regatul Unit)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spaniolă",
|
||||
"esUS": "Spaniolă (America Latină)",
|
||||
"et": "Estonă",
|
||||
"eu": "Bască",
|
||||
"fi": "Finlandeză",
|
||||
"fr": "Franceză",
|
||||
"frCA": "Franceză (Canada)",
|
||||
"he": "Ebraică",
|
||||
"hr": "Croată",
|
||||
"hu": "Maghiară",
|
||||
"hy": "Armeană",
|
||||
"id": "Indoneziană",
|
||||
"it": "Italiană",
|
||||
"ja": "Japoneză",
|
||||
"ko": "Koreană",
|
||||
"lt": "Lituaniană",
|
||||
"nl": "Olandeză",
|
||||
"oc": "Occitană",
|
||||
"pl": "Poloneză",
|
||||
"ptBR": "Portugheză (Brazilia)",
|
||||
"ro": "Română",
|
||||
"ru": "Rusă",
|
||||
"sc": "Sardă",
|
||||
"sk": "Slovacă",
|
||||
"sl": "Slovenă",
|
||||
"sv": "Suedeză",
|
||||
"tr": "Turcă",
|
||||
"uk": "Ucraineană",
|
||||
"vi": "Vietnameză",
|
||||
"zhCN": "Chineză (China)",
|
||||
"zhTW": "Chineză (Taiwan)"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"af": "Африкаанс",
|
||||
"bg": "Болгарский",
|
||||
"ca": "Каталонский",
|
||||
"cs": "Чешский",
|
||||
"da": "Датский",
|
||||
"de": "Немецкий",
|
||||
"el": "Греческий",
|
||||
"en": "Английский",
|
||||
"enGB": "Английский (Великобритания)",
|
||||
"eo": "Эсперанто",
|
||||
"es": "Испанский",
|
||||
"esUS": "Испанский (Латинская Америка)",
|
||||
"et": "Эстонский",
|
||||
"fi": "Финский",
|
||||
"fr": "Французский",
|
||||
"frCA": "Французский (канадский)",
|
||||
"hr": "Хорватский",
|
||||
"hu": "Венгерский",
|
||||
"hy": "Армянский",
|
||||
"it": "Итальянский",
|
||||
"ja": "Японский",
|
||||
"ko": "Корейский",
|
||||
"nl": "Голландский",
|
||||
"oc": "Окситанский",
|
||||
"pl": "Польский",
|
||||
"ptBR": "Португальский (Бразилия)",
|
||||
"ru": "Русский",
|
||||
"sr": "Сербский",
|
||||
"sv": "Шведский",
|
||||
"tr": "Турецкий",
|
||||
"uk": "Украинский",
|
||||
"vi": "Вьетнамский",
|
||||
"zhCN": "Китайский (Китай)",
|
||||
"zhTW": "Китайский (Тайвань)"
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bùlgaru",
|
||||
"ca": "Catalanu",
|
||||
"cs": "Tzecu",
|
||||
"da": "Danesu",
|
||||
"de": "Tedescu",
|
||||
"el": "Gregu",
|
||||
"en": "Inglesu",
|
||||
"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",
|
||||
"uk": "Ucràinu",
|
||||
"vi": "Vietnamita",
|
||||
"zhCN": "Tzinesu (Tzina)",
|
||||
"zhTW": "Tzinesu (Taiwan)"
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
{
|
||||
"af": "",
|
||||
"bg": "Bulharština",
|
||||
"ca": "Katalánština",
|
||||
"cs": "Čeština",
|
||||
"da": "Dánština",
|
||||
"de": "Nemčina",
|
||||
"el": "Gréčtina",
|
||||
"en": "Angličtina",
|
||||
"enGB": "Angličtina (Spojené kráľovstvo)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Španielčina",
|
||||
"esUS": "Angličtina (Spojené štáty americké)",
|
||||
"et": "Estónčina",
|
||||
"fi": "Fínčina",
|
||||
"fr": "Francúžtina",
|
||||
"frCA": "Francúžtina (Kanada)",
|
||||
"hr": "Chorvátčina",
|
||||
"hu": "Maďarčina",
|
||||
"hy": "Arménčina",
|
||||
"it": "Taliančina",
|
||||
"ja": "Japončina",
|
||||
"ko": "Kórejčina",
|
||||
"nl": "Holandčina",
|
||||
"oc": "Okcitánština",
|
||||
"pl": "Polština",
|
||||
"ptBR": "Portugalčina",
|
||||
"ru": "Ruština",
|
||||
"sk": "Slovenčina",
|
||||
"sv": "Švédčina",
|
||||
"tr": "Turečtina",
|
||||
"uk": "Ukrajinčina",
|
||||
"vi": "Vietnamčina",
|
||||
"zhCN": "Čínština (Čína)",
|
||||
"zhTW": "Čínština (Taiwan)"
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
{
|
||||
"af": "Afrikanščina",
|
||||
"bg": "Bolgarščina",
|
||||
"cs": "Češčina",
|
||||
"de": "Nemščina",
|
||||
"el": "Grščina",
|
||||
"en": "Angleščina",
|
||||
"eo": "Esperanto",
|
||||
"es": "Španščina",
|
||||
"fr": "Francoščina",
|
||||
"hy": "Armenščina",
|
||||
"it": "Italjanščina",
|
||||
"ja": "Japonščina",
|
||||
"ko": "Korejščina",
|
||||
"nb": "Norveščina (Bokmål)",
|
||||
"oc": "Okcitanščina",
|
||||
"pl": "Poljščina",
|
||||
"ptBR": "Portugalščina (Brazilija)",
|
||||
"ru": "Ruščina",
|
||||
"sk": "Slovaščina",
|
||||
"sl": "Slovenščina",
|
||||
"sv": "Švedščina",
|
||||
"tr": "Turščina",
|
||||
"uk": "Ukrajinščina",
|
||||
"vi": "Vietnamščina",
|
||||
"zhCN": "kitajščina (poenostavljena)"
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "Arabisht",
|
||||
"bg": "Bullgarisht",
|
||||
"ca": "Katalanisht",
|
||||
"cs": "Çekisht",
|
||||
"da": "Danisht",
|
||||
"de": "Gjermanisht",
|
||||
"el": "Greqisht",
|
||||
"en": "Anglisht",
|
||||
"enGB": "Anglisht (Mbretëria e Bashkuar)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanjisht",
|
||||
"esUS": "Spanjisht (Amerikë Latine)",
|
||||
"et": "Estonisht",
|
||||
"eu": "Baskisht",
|
||||
"fa": "Persisht",
|
||||
"fi": "Finlandisht",
|
||||
"fr": "Frëngjisht",
|
||||
"frCA": "Frëngjisht (Kebek)",
|
||||
"he": "Hebraisht",
|
||||
"hi": "Hindi",
|
||||
"hr": "Kroatisht",
|
||||
"hu": "Hungarisht",
|
||||
"hy": "Armenisht",
|
||||
"id": "Indonezisht",
|
||||
"it": "Italisht",
|
||||
"ja": "Japonisht",
|
||||
"kab": "Kabilisht",
|
||||
"ko": "Koreançe",
|
||||
"lt": "Lituanisht",
|
||||
"lv": "Letonisht",
|
||||
"ml": "Malajalamisht",
|
||||
"mr": "Maratisht",
|
||||
"nl": "Holandisht",
|
||||
"oc": "Oçitanisht",
|
||||
"pl": "Polonisht",
|
||||
"pt": "Portugalisht",
|
||||
"ptBR": "Portugalisht (Brazil)",
|
||||
"ro": "Rumanisht",
|
||||
"ru": "Rusisht",
|
||||
"sc": "Sardenjisht",
|
||||
"sk": "Sllovakisht",
|
||||
"sl": "Sllovenisht",
|
||||
"sq": "Shqip",
|
||||
"sr": "Serbisht",
|
||||
"sv": "Suedisht",
|
||||
"te": "Telugu",
|
||||
"tr": "Turqisht",
|
||||
"uk": "Ukrainisht",
|
||||
"vi": "Vietnamisht",
|
||||
"zhCN": "Kinezçe (Kinë)",
|
||||
"zhTW": "Kinezçe (Tajvan)"
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"af": "Африкански",
|
||||
"bg": "Бугарски",
|
||||
"ca": "Каталонски",
|
||||
"cs": "Чешки",
|
||||
"da": "Дански",
|
||||
"de": "Њемачки",
|
||||
"el": "Грчки",
|
||||
"en": "Енглески",
|
||||
"enGB": "Енглески (Велика Британија)",
|
||||
"eo": "Есперанто",
|
||||
"es": "Шпански",
|
||||
"esUS": "Шпански (Латинска Америка)",
|
||||
"et": "Естонски",
|
||||
"fi": "Фински",
|
||||
"fr": "Француски",
|
||||
"frCA": "Француски (Канада)",
|
||||
"hr": "Хрватски",
|
||||
"hu": "Мађарски",
|
||||
"hy": "Јерменски",
|
||||
"it": "Италијански",
|
||||
"ja": "Јапански",
|
||||
"ko": "Корејски",
|
||||
"nb": "Норвешки Бокал",
|
||||
"nl": "Холандски",
|
||||
"oc": "Окцитански",
|
||||
"pl": "Пољски",
|
||||
"ptBR": "Португалски (Бразил)",
|
||||
"ru": "Руски",
|
||||
"sk": "Словачки",
|
||||
"sl": "Словенски",
|
||||
"sr": "Српски",
|
||||
"sv": "Шведски",
|
||||
"tr": "Турски",
|
||||
"uk": "Украјински",
|
||||
"vi": "Вијетнамски",
|
||||
"zhCN": "Кинески (Кина)",
|
||||
"zhTW": "Кинески (Тајван)"
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"bg": "Bulgariska",
|
||||
"ca": "Katalanska",
|
||||
"cs": "Tjeckiska",
|
||||
"da": "Danska",
|
||||
"de": "Tyska",
|
||||
"el": "Grekiska",
|
||||
"en": "Engelska",
|
||||
"enGB": "Engelska (Storbritannien)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanska",
|
||||
"esUS": "Spanska (Latinamerika)",
|
||||
"et": "Estniska",
|
||||
"fi": "Finska",
|
||||
"fr": "Franska",
|
||||
"frCA": "Franska (Kanada)",
|
||||
"hr": "Kroatiska",
|
||||
"hu": "Ungerska",
|
||||
"hy": "Armeniska",
|
||||
"it": "Italienska",
|
||||
"ja": "Japanska",
|
||||
"ko": "Koreanska",
|
||||
"nb": "Norska (Bokmål)",
|
||||
"nl": "Nederländska",
|
||||
"oc": "Occitanska",
|
||||
"pl": "Polska",
|
||||
"ptBR": "Portugisiska (Brasilien)",
|
||||
"ru": "Ryska",
|
||||
"sk": "Slovakiska",
|
||||
"sl": "Slovenska",
|
||||
"sv": "Svenska",
|
||||
"tr": "Turkiska",
|
||||
"uk": "Ukrainska",
|
||||
"vi": "Vietnamesiska",
|
||||
"zhCN": "Kinesiska (Kina)",
|
||||
"zhTW": "Kinesiska (Taiwan)"
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
{
|
||||
"af": "ఆఫ్రికాన్స్",
|
||||
"ar": "అరబిక్",
|
||||
"bg": "బల్గేరియన్",
|
||||
"ca": "కాటలన్",
|
||||
"cs": "చెక్",
|
||||
"da": "డేనిష్",
|
||||
"de": "జెర్మన్",
|
||||
"el": "గ్రీకు",
|
||||
"en": "ఆంగ్లం",
|
||||
"enGB": "ఆంగ్లం (యునైటెడ్ కింగ్డమ్)",
|
||||
"eo": "ఎస్పరాంతో",
|
||||
"es": "స్పానిష్",
|
||||
"esUS": "స్పానిష్ (లాటిన్ అమెరిగా)",
|
||||
"et": "ఎస్టోనియన్",
|
||||
"eu": "బాస్క్",
|
||||
"fa": "పెర్షియన్",
|
||||
"fi": "ఫిన్నిష్",
|
||||
"fr": "ఫ్రెంచ్",
|
||||
"frCA": "ఫ్రెంచ్ (కెనడియన్)",
|
||||
"he": "హీబ్రూ",
|
||||
"hi": "హిందీ",
|
||||
"hr": "క్రొయేషియన్",
|
||||
"hu": "హంగేరియన్",
|
||||
"hy": "ఆర్మేనియన్",
|
||||
"id": "ఇండొనేషియన్",
|
||||
"it": "ఇటాలియన్",
|
||||
"ja": "జపనీ",
|
||||
"kab": "కబైల్",
|
||||
"ko": "కొరియన్",
|
||||
"lt": "లిథుయేనియన్",
|
||||
"lv": "లాత్వియన్",
|
||||
"ml": "మలయాళం",
|
||||
"mr": "మరాఠీ",
|
||||
"nl": "డచ్",
|
||||
"oc": "ఆక్సిటన్",
|
||||
"pl": "పోలిష్",
|
||||
"pt": "పోర్చుగీస్",
|
||||
"ptBR": "పోర్చుగీస్ (బ్రెజిల్)",
|
||||
"ro": "రొమేనియన్",
|
||||
"ru": "రష్యన్",
|
||||
"sc": "సార్డీనియన్",
|
||||
"sk": "స్లొవాక్",
|
||||
"sl": "స్లొవేనియన్",
|
||||
"sr": "సెర్బియన్",
|
||||
"sv": "స్వీడిష్",
|
||||
"te": "తెలుగు",
|
||||
"tr": "టర్కిష్",
|
||||
"uk": "ఉక్రేనియన్",
|
||||
"vi": "వియెత్నామీ",
|
||||
"zhCN": "చైనీ (చైనా)",
|
||||
"zhTW": "చైనీ (తైవాన్)"
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"af": "Afrikanca",
|
||||
"bg": "Bulgarca",
|
||||
"ca": "Katalanca",
|
||||
"cs": "Çekçe",
|
||||
"da": "Danca",
|
||||
"de": "Almanca",
|
||||
"el": "Yunanca",
|
||||
"en": "İngilizce",
|
||||
"enGB": "İngilizce (Birleşik Krallık)",
|
||||
"eo": "Esperanto",
|
||||
"es": "İspanyolca",
|
||||
"esUS": "İspanyolca (Latin Amerika)",
|
||||
"et": "Estonca",
|
||||
"fi": "Fince",
|
||||
"fr": "Fransızca",
|
||||
"frCA": "Fransızca (Kanada)",
|
||||
"hr": "Hırvatça",
|
||||
"hu": "Macarca",
|
||||
"hy": "Ermenice",
|
||||
"it": "İtalyanca",
|
||||
"ja": "Japonca",
|
||||
"ko": "Korece",
|
||||
"nb": "Norveççe Bokmal",
|
||||
"nl": "Flemenkçe",
|
||||
"oc": "Oksitan dili",
|
||||
"pl": "Lehçe",
|
||||
"ptBR": "Portekizce (Brezilya)",
|
||||
"ru": "Rusça",
|
||||
"sk": "Slovakça",
|
||||
"sl": "Slovence",
|
||||
"sv": "Isveççe",
|
||||
"tr": "Türkçe",
|
||||
"uk": "Ukraynaca",
|
||||
"vi": "Vietnamca",
|
||||
"zhCN": "Çince (Çin)",
|
||||
"zhTW": "Çince (Tayvan)"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"af": "Африкаанс",
|
||||
"ar": "Арабська",
|
||||
"bg": "Болгарська",
|
||||
"ca": "Каталонська",
|
||||
"cs": "Чеська",
|
||||
"da": "Данська",
|
||||
"de": "Німецька",
|
||||
"el": "Грецька",
|
||||
"en": "Англійська",
|
||||
"enGB": "Англійська (Сполучене Королівство)",
|
||||
"eo": "Есперанто",
|
||||
"es": "Іспанська",
|
||||
"esUS": "Іспанська (Латинська Америка)",
|
||||
"et": "Естонська",
|
||||
"eu": "Баскська",
|
||||
"fa": "Перська",
|
||||
"fi": "Фінська",
|
||||
"fr": "Французька",
|
||||
"frCA": "Французька (Канада)",
|
||||
"he": "Іврит",
|
||||
"hi": "Гінді",
|
||||
"hr": "Хорватська",
|
||||
"hsb": "Верхньолужицька",
|
||||
"hu": "Угорська",
|
||||
"hy": "Вірменська",
|
||||
"id": "Індонезійська",
|
||||
"it": "Італійська",
|
||||
"ja": "Японська",
|
||||
"kab": "Кабільська",
|
||||
"ko": "Корейська",
|
||||
"lt": "Литовська",
|
||||
"lv": "Латвійська",
|
||||
"ml": "Малаялам",
|
||||
"mr": "Маратхі",
|
||||
"nl": "Голландська",
|
||||
"oc": "Окситанська",
|
||||
"pl": "Польська",
|
||||
"pt": "Португальська",
|
||||
"ptBR": "Португальська (Бразилія)",
|
||||
"ro": "Румунська",
|
||||
"ru": "Російська",
|
||||
"sc": "Сардинська",
|
||||
"sk": "Словацька",
|
||||
"sl": "Словенська",
|
||||
"sq": "Албанська",
|
||||
"sr": "Сербська",
|
||||
"sv": "Шведська",
|
||||
"te": "Телуґу",
|
||||
"tr": "Турецька",
|
||||
"uk": "Українська",
|
||||
"vi": "В'єтнамська",
|
||||
"zhCN": "Китайська (Китай)",
|
||||
"zhTW": "Китайська (Тайвань)"
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
{
|
||||
"af": "Tiếng Afrika",
|
||||
"bg": "Tiếng Bulgaria",
|
||||
"cs": "Tiếng Séc",
|
||||
"de": "Tiếng Đức",
|
||||
"el": "Tiếng Nhật",
|
||||
"en": "Tiếng Anh",
|
||||
"eo": "Tiếng Esperanto",
|
||||
"es": "Tiếng Tây Ban Nha",
|
||||
"fr": "Tiếng Pháp",
|
||||
"hy": "Tiếng Acmenia",
|
||||
"it": "Tiếng Ý",
|
||||
"ja": "Tiếng Nhật",
|
||||
"ko": "Tiếng Hàn",
|
||||
"nb": "Tiếng Na Uy",
|
||||
"oc": "Tiếng Occitan",
|
||||
"pl": "Tiếng Ba Lan",
|
||||
"ptBR": "Tiếng Bồ Đào Nha (Brazil)",
|
||||
"ru": "Tiếng Nga",
|
||||
"sk": "Tiếng Slovak",
|
||||
"sl": "Tiếng Slovenia",
|
||||
"sv": "Tiếng Thụy Điển",
|
||||
"tr": "Tiếng Thổ Nhĩ Kỳ",
|
||||
"vi": "Tiếng Việt",
|
||||
"zhCN": "Tiếng Hoa (Trung Quốc)"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"af": "南非荷兰语",
|
||||
"ar": "阿拉伯语",
|
||||
"bg": "保加利亚语",
|
||||
"ca": "加泰罗尼亚语",
|
||||
"cs": "捷克语",
|
||||
"da": "丹麦语",
|
||||
"de": "德语",
|
||||
"el": "希腊语",
|
||||
"en": "英语",
|
||||
"enGB": "英语(英国)",
|
||||
"eo": "世界语",
|
||||
"es": "西班牙语",
|
||||
"esUS": "西班牙语(拉丁美洲)",
|
||||
"et": "爱沙尼亚语",
|
||||
"eu": "巴斯克语",
|
||||
"fa": "波斯语",
|
||||
"fi": "芬兰语",
|
||||
"fr": "法语",
|
||||
"frCA": "法语(加拿大)",
|
||||
"he": "希伯来语",
|
||||
"hi": "印地语",
|
||||
"hr": "克罗地亚语",
|
||||
"hsb": "上索布语",
|
||||
"hu": "匈牙利语",
|
||||
"hy": "亚美尼亚语",
|
||||
"id": "印度尼西亚语",
|
||||
"it": "意大利语",
|
||||
"ja": "日语",
|
||||
"kab": "卡拜尔语",
|
||||
"ko": "韩语",
|
||||
"lt": "立陶宛语",
|
||||
"lv": "拉脱维亚语",
|
||||
"ml": "马拉雅拉姆语",
|
||||
"mr": "马拉地语",
|
||||
"nl": "荷兰语",
|
||||
"oc": "欧西坦语",
|
||||
"pl": "波兰语",
|
||||
"pt": "葡萄牙语",
|
||||
"ptBR": "葡萄牙语(巴西)",
|
||||
"ro": "罗马尼亚语",
|
||||
"ru": "俄语",
|
||||
"sc": "撒丁语",
|
||||
"sk": "斯洛伐克语",
|
||||
"sl": "斯洛文尼亚语",
|
||||
"sq": "阿尔巴尼亚语",
|
||||
"sr": "塞尔维亚语",
|
||||
"sv": "瑞典语",
|
||||
"te": "泰卢固语",
|
||||
"tr": "土耳其语",
|
||||
"uk": "乌克兰语",
|
||||
"vi": "越南语",
|
||||
"zhCN": "简体中文(中国)",
|
||||
"zhTW": "正体中文(台湾)"
|
||||
}
|
||||
@@ -1,55 +0,0 @@
|
||||
{
|
||||
"af": "南非荷蘭文",
|
||||
"ar": "阿拉伯文",
|
||||
"bg": "保加利亞文",
|
||||
"ca": "卡達隆尼亞文",
|
||||
"cs": "捷克文",
|
||||
"da": "丹麥文",
|
||||
"de": "德文",
|
||||
"el": "希臘文",
|
||||
"en": "英文",
|
||||
"enGB": "英文(英國)",
|
||||
"eo": "世界語",
|
||||
"es": "西班牙文",
|
||||
"esUS": "西班牙文(拉丁美洲)",
|
||||
"et": "愛沙尼亞文",
|
||||
"eu": "巴斯克文",
|
||||
"fa": "波斯文",
|
||||
"fi": "芬蘭文",
|
||||
"fr": "法文",
|
||||
"frCA": "法文(加拿大)",
|
||||
"he": "希伯來文",
|
||||
"hi": "印度文",
|
||||
"hr": "克羅埃西亞文",
|
||||
"hsb": "上索布文",
|
||||
"hu": "匈牙利文",
|
||||
"hy": "亞美尼亞文",
|
||||
"id": "印尼文",
|
||||
"it": "義大利文",
|
||||
"ja": "日文",
|
||||
"kab": "卡拜爾文",
|
||||
"ko": "韓文",
|
||||
"lt": "立陶宛文",
|
||||
"lv": "拉脫維亞文",
|
||||
"ml": "馬來亞拉姆文",
|
||||
"mr": "馬拉提文",
|
||||
"nl": "荷蘭文",
|
||||
"oc": "奧克西坦文",
|
||||
"pl": "波蘭文",
|
||||
"pt": "葡萄牙文",
|
||||
"ptBR": "葡萄牙文(巴西)",
|
||||
"ro": "羅馬尼亞文",
|
||||
"ru": "俄文",
|
||||
"sc": "薩丁尼亞文",
|
||||
"sk": "斯洛伐克文",
|
||||
"sl": "斯洛維尼亞文",
|
||||
"sq": "阿爾巴尼亞文",
|
||||
"sr": "塞爾維亞文",
|
||||
"sv": "瑞典文",
|
||||
"te": "特拉古文",
|
||||
"tr": "土耳其文",
|
||||
"uk": "烏克蘭文",
|
||||
"vi": "越南文",
|
||||
"zhCN": "簡體中文(中國)",
|
||||
"zhTW": "正體中文(台灣)"
|
||||
}
|
||||
@@ -1,55 +1,58 @@
|
||||
{
|
||||
"af": "Afrikaans",
|
||||
"ar": "Arabic",
|
||||
"bg": "Bulgarian",
|
||||
"ca": "Catalan",
|
||||
"cs": "Czech",
|
||||
"da": "Danish",
|
||||
"de": "German",
|
||||
"el": "Greek",
|
||||
"ar": "العربية",
|
||||
"be": "Беларуская",
|
||||
"bg": "Български",
|
||||
"ca": "Català",
|
||||
"cs": "Čeština",
|
||||
"da": "Dansk",
|
||||
"de": "Deutsch",
|
||||
"el": "Ελληνικά",
|
||||
"en": "English",
|
||||
"enGB": "English (United Kingdom)",
|
||||
"eo": "Esperanto",
|
||||
"es": "Spanish",
|
||||
"esUS": "Spanish (Latin America)",
|
||||
"et": "Estonian",
|
||||
"eu": "Basque",
|
||||
"fa": "Persian",
|
||||
"fi": "Finnish",
|
||||
"fr": "French",
|
||||
"frCA": "French (Canadian)",
|
||||
"he": "Hebrew",
|
||||
"hi": "Hindi",
|
||||
"hr": "Croatian",
|
||||
"hsb": "Upper Sorbian",
|
||||
"hu": "Hungarian",
|
||||
"hy": "Armenian",
|
||||
"id": "Indonesian",
|
||||
"it": "Italian",
|
||||
"ja": "Japanese",
|
||||
"kab": "Kabyle",
|
||||
"ko": "Korean",
|
||||
"lt": "Lithuanian",
|
||||
"lv": "Latvian",
|
||||
"ml": "Malayalam",
|
||||
"mr": "Marathi",
|
||||
"nl": "Dutch",
|
||||
"es": "Español",
|
||||
"esUS": "Español (Latinoamérica)",
|
||||
"et": "Eesti",
|
||||
"eu": "Euskara",
|
||||
"fa": "فارسی",
|
||||
"fi": "Suomi",
|
||||
"fr": "Français",
|
||||
"frCA": "Français (Canada)",
|
||||
"gl": "Galego",
|
||||
"he": "עברית",
|
||||
"hi": "हिन्दी",
|
||||
"hr": "Hrvatski",
|
||||
"hsb": "Hornjoserbšćina",
|
||||
"hu": "Magyar",
|
||||
"hy": "Հայերեն",
|
||||
"is": "Íslenska",
|
||||
"it": "Italiano",
|
||||
"ja": "日本語",
|
||||
"kab": "Taqbaylit",
|
||||
"ko": "한국어",
|
||||
"lt": "Lietuvių",
|
||||
"lv": "Latviešu",
|
||||
"ml": "മലയാളം",
|
||||
"mn": "Монгол",
|
||||
"mr": "मराठी",
|
||||
"nl": "Nederlands",
|
||||
"oc": "Occitan",
|
||||
"pl": "Polish",
|
||||
"pt": "Portuguese",
|
||||
"ptBR": "Portuguese (Brazil)",
|
||||
"ro": "Romanian",
|
||||
"ru": "Russian",
|
||||
"sc": "Sardinian",
|
||||
"sk": "Slovak",
|
||||
"sl": "Slovenian",
|
||||
"sq": "Albanian",
|
||||
"sr": "Serbian",
|
||||
"sv": "Swedish",
|
||||
"te": "Telugu",
|
||||
"tr": "Turkish",
|
||||
"uk": "Ukrainian",
|
||||
"vi": "Vietnamese",
|
||||
"zhCN": "Chinese (China)",
|
||||
"zhTW": "Chinese (Taiwan)"
|
||||
"pl": "Polski",
|
||||
"pt": "Português",
|
||||
"ptBR": "Português (Brasil)",
|
||||
"ro": "Română",
|
||||
"ru": "Русский",
|
||||
"sc": "Sardu",
|
||||
"sk": "Slovenčina",
|
||||
"sl": "Slovenščina",
|
||||
"sq": "Shqip",
|
||||
"sr": "Српски",
|
||||
"sv": "Svenska",
|
||||
"te": "తెలుగు",
|
||||
"tr": "Türkçe",
|
||||
"uk": "Українська",
|
||||
"vi": "Tiếng Việt",
|
||||
"zhCN": "中文(简体)",
|
||||
"zhTW": "中文(繁體)"
|
||||
}
|
||||
|
||||
@@ -364,6 +364,7 @@
|
||||
"signedInAs": "U is tans aangemeld as:",
|
||||
"start": "Begin ’n regstreekse stroom",
|
||||
"streamIdHelp": "Wat’s dié?",
|
||||
"title": "Regstreekse stroom",
|
||||
"unavailableTitle": "Regstreekse strome nie beskikbaar nie"
|
||||
},
|
||||
"localRecording": {
|
||||
@@ -474,6 +475,7 @@
|
||||
"serviceName": "Opneemdiens",
|
||||
"signIn": "meld aan",
|
||||
"signOut": "Meld af",
|
||||
"title": "Neem tans op",
|
||||
"unavailable": "",
|
||||
"unavailableTitle": ""
|
||||
},
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
},
|
||||
"labels": {
|
||||
"buttonLabel": "وضع السيارة",
|
||||
"title": "وضع القيادة الآمنة",
|
||||
"title": "وضع السيارة",
|
||||
"videoStopped": "تم إيقاف الفيديو الخاص بك"
|
||||
}
|
||||
},
|
||||
@@ -104,6 +104,7 @@
|
||||
},
|
||||
"noMessagesMessage": "لا يوجد أي رسالة في المُلتقى بعد. ابدأ محادثة هنا.",
|
||||
"privateNotice": "أرسل رسالة خاصة إلى {{recipient}}",
|
||||
"sendButton": "أرسل",
|
||||
"smileysPanel": "واجهة الإيموجي",
|
||||
"tabs": {
|
||||
"chat": "دردشة",
|
||||
@@ -435,7 +436,7 @@
|
||||
"search": "ابحث في GIPHY"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "مركز المساعدة"
|
||||
"title": "مركز المساعدة"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "أجب",
|
||||
@@ -551,6 +552,7 @@
|
||||
"signedInAs": "أنت مسجل حاليًا بصفة:",
|
||||
"start": "ابدأبثًّا حيًّا",
|
||||
"streamIdHelp": "ما هذا؟",
|
||||
"title": "البث المباشر الحي",
|
||||
"unavailableTitle": "خدمة البث الحي غير متوفرة",
|
||||
"youtubeTerms": "شروط خدمة يوتيوب"
|
||||
},
|
||||
@@ -593,6 +595,7 @@
|
||||
"passwordJoinButton": "انضم",
|
||||
"reject": "رفض",
|
||||
"rejectAll": "رفض الكل",
|
||||
"title": "غرفة الانتظار",
|
||||
"toggleLabel": "فعِّل غرفة الانتظار"
|
||||
},
|
||||
"localRecording": {
|
||||
@@ -735,13 +738,13 @@
|
||||
"videoModeration": "ابدأ الفيديو الخاص بهم"
|
||||
},
|
||||
"close": "غلق",
|
||||
"header": "مشاركون",
|
||||
"headings": {
|
||||
"lobby": "الردهة ({{count}})",
|
||||
"participantsList": "المشاركون في المُلتقى({{count}})",
|
||||
"waitingLobby": "منتظرون في الردهة ({{count}})"
|
||||
},
|
||||
"search": "بحث"
|
||||
"search": "بحث",
|
||||
"title": "مشاركون"
|
||||
},
|
||||
"passwordDigitsOnly": "حتى {{number}} عدد",
|
||||
"passwordSetRemotely": "ضبطها مشارك آخر",
|
||||
@@ -851,7 +854,7 @@
|
||||
"ringing": "يرن..."
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "خصوصية"
|
||||
"title": "خصوصية"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
@@ -923,6 +926,7 @@
|
||||
"signIn": "دخول",
|
||||
"signOut": "خروج",
|
||||
"surfaceError": "الرجاء تحديد علامة التبويب الحالية.",
|
||||
"title": "قيد التسجيل",
|
||||
"unavailable": "عجبًا! {{serviceName}} غير متاحة حاليًا. نعمل على حل المشكلة. حاول مرة أخرى لاحقًا.",
|
||||
"unavailableTitle": "التسجيل غير متاح",
|
||||
"uploadToCloud": "تحميل إلى السحابة"
|
||||
@@ -934,8 +938,8 @@
|
||||
"security": {
|
||||
"about": "يمكنك إضافة $t(lockRoomPassword) إلى المُلتقى. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى المُلتقى.",
|
||||
"aboutReadOnly": "المشاركون بصفة رئيس الجلسة يمكنهم إضافة $t(lockRoomPassword) إلى المُلتقى. سيتوجب على المشاركين إدخال $t(lockRoomPassword) قبل السماح لهم بالانضمام إلى المُلتقى.",
|
||||
"header": "خيارات الأمان",
|
||||
"insecureRoomNameWarning": "اسم الغرفة غير آمن، فقد ينضم عبره مشاركون غرباء إلى المُلتقى. ننصحك بتأمين المُلتقى عبر وسائل الحماية التي يوفرها زر الحماية."
|
||||
"insecureRoomNameWarning": "اسم الغرفة غير آمن، فقد ينضم عبره مشاركون غرباء إلى المُلتقى. ننصحك بتأمين المُلتقى عبر وسائل الحماية التي يوفرها زر الحماية.",
|
||||
"title": "خيارات الأمان"
|
||||
},
|
||||
"settings": {
|
||||
"buttonLabel": "إعدادات",
|
||||
@@ -1040,7 +1044,7 @@
|
||||
"title": "قُطِع اتصال الفيديو لدخول هذا الحاسوب في وضع النوم."
|
||||
},
|
||||
"termsView": {
|
||||
"header": "مصطلحات"
|
||||
"title": "مصطلحات"
|
||||
},
|
||||
"toggleTopPanelLabel": "تبديل اللوحة العلوية",
|
||||
"toolbar": {
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
},
|
||||
"noMessagesMessage": "У канферэнцыі пакуль няма ніякіх паведамленняў. Пачніце размову!",
|
||||
"privateNotice": "Асабістае паведамленне карыстальнiку {{recipient}}",
|
||||
"sendButton": "Даслаць",
|
||||
"title": "Чат",
|
||||
"titleWithPolls": "Чат",
|
||||
"you": "Вы"
|
||||
@@ -305,7 +306,7 @@
|
||||
"veryGood": "Вельмі добра"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Цэнтар дапамогi"
|
||||
"title": "Цэнтар дапамогi"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Адказ",
|
||||
@@ -404,6 +405,7 @@
|
||||
"signedInAs": "У цяперашні час вы ўвайшлі ў сістэму як:",
|
||||
"start": "Пачаць трансляцыю",
|
||||
"streamIdHelp": "Што гэта?",
|
||||
"title": "Трансляцыя",
|
||||
"unavailableTitle": "Трансляцыя недаступная",
|
||||
"youtubeTerms": "YouTube ўмовы паслуг"
|
||||
},
|
||||
@@ -522,6 +524,7 @@
|
||||
"serviceName": "Служба запісу",
|
||||
"signIn": "Уваход",
|
||||
"signOut": "Выхад",
|
||||
"title": "Запіс",
|
||||
"unavailable": "Служба {{serviceName}} зараз недаступная. Мы працуем над выпраўленнем гэтай памылкі. Калі ласка, паспрабуйце пазней.",
|
||||
"unavailableTitle": "Запіс немагчымы"
|
||||
},
|
||||
|
||||
@@ -69,6 +69,7 @@
|
||||
},
|
||||
"noMessagesMessage": "Все още няма съобщения в срещата. Започнете разговор тук!",
|
||||
"privateNotice": "Лично съобщение до {{recipient}}",
|
||||
"sendButton": "Изпрати",
|
||||
"title": "Текстови съобщения",
|
||||
"titleWithPolls": "Текстови съобщения",
|
||||
"you": "вие"
|
||||
@@ -315,7 +316,7 @@
|
||||
"veryGood": "Много добро"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Място за помощ"
|
||||
"title": "Място за помощ"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Вдигни",
|
||||
@@ -414,6 +415,7 @@
|
||||
"signedInAs": "В момента сте влезли като:",
|
||||
"start": "Започни излъчване на живо",
|
||||
"streamIdHelp": "Какво е това?",
|
||||
"title": "Излъчване на живо",
|
||||
"unavailableTitle": "Излъчването на живо е недостъпно",
|
||||
"youtubeTerms": "Условия за ползване на YouTube"
|
||||
},
|
||||
@@ -449,6 +451,7 @@
|
||||
"passwordField": "Въведи парола за срещата",
|
||||
"passwordJoinButton": "Влез",
|
||||
"reject": "Откажи",
|
||||
"title": "Лоби",
|
||||
"toggleLabel": "Включи лоби"
|
||||
},
|
||||
"localRecording": {
|
||||
@@ -566,6 +569,7 @@
|
||||
"serviceName": "Записваща услуга",
|
||||
"signIn": "Влизане",
|
||||
"signOut": "Излизане",
|
||||
"title": "Запис",
|
||||
"unavailable": "Упс! В момента {{serviceName}} е недостъпна. В момента се опитваме да решим проблема. Моля, опитайте отново малко по-късно.",
|
||||
"unavailableTitle": "Записът е невъзможен"
|
||||
},
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
},
|
||||
"labels": {
|
||||
"buttonLabel": "Mode cotxe",
|
||||
"title": "Mode conducció segura",
|
||||
"title": "Mode cotxe",
|
||||
"videoStopped": "El vídeo està aturat"
|
||||
}
|
||||
},
|
||||
@@ -104,6 +104,7 @@
|
||||
},
|
||||
"noMessagesMessage": "Encara no hi ha cap missatge en aquesta reunió. Comenceu una conversa aquí!",
|
||||
"privateNotice": "Missatge privat per a {{recipient}}",
|
||||
"sendButton": "Envia",
|
||||
"smileysPanel": "Tauler d'emojis",
|
||||
"tabs": {
|
||||
"chat": "Xat",
|
||||
@@ -433,7 +434,7 @@
|
||||
"search": "Cerca a GIPHY"
|
||||
},
|
||||
"helpView": {
|
||||
"header": "Centre d'ajuda"
|
||||
"title": "Centre d'ajuda"
|
||||
},
|
||||
"incomingCall": {
|
||||
"answer": "Resposta",
|
||||
@@ -545,6 +546,7 @@
|
||||
"signedInAs": "Teniu sessió iniciada com a:",
|
||||
"start": "Inicia la transmissió en directe",
|
||||
"streamIdHelp": "Què és això?",
|
||||
"title": "Transmissió en directe",
|
||||
"unavailableTitle": "La transmissió en directe no és disponible",
|
||||
"youtubeTerms": "Condicions de servei de YouTube"
|
||||
},
|
||||
@@ -570,7 +572,7 @@
|
||||
"joinTitle": "Entra a la reunió",
|
||||
"joinWithPasswordMessage": "S'està intentant unir-s'hi amb contrasenya, espereu...",
|
||||
"joiningMessage": "Us unireu a la reunió de seguida que algú accepti la sol·licitud",
|
||||
"joiningTitle": "S'està demanat per a entrar a la reunió...",
|
||||
"joiningTitle": "S'ha demanat per a entrar a la reunió...",
|
||||
"joiningWithPasswordTitle": "Afegeix-m'hi amb contrasenya...",
|
||||
"knockButton": "Demana d'unir-se",
|
||||
"knockTitle": "Algú vol unir-se a la reunió",
|
||||
@@ -587,6 +589,7 @@
|
||||
"passwordJoinButton": "Entra",
|
||||
"reject": "Rebuja",
|
||||
"rejectAll": "Rebutja-ho tot",
|
||||
"title": "Sala d'espera",
|
||||
"toggleLabel": "Activa la sala d'espera"
|
||||
},
|
||||
"localRecording": {
|
||||
@@ -723,13 +726,13 @@
|
||||
"videoModeration": "Activa'n el vídeo"
|
||||
},
|
||||
"close": "Tanca",
|
||||
"header": "Participants",
|
||||
"headings": {
|
||||
"lobby": "Sala d'espera ({{count}})",
|
||||
"participantsList": "Participants de la reunió: ({{count}})",
|
||||
"waitingLobby": "A la sala d'espera ({{count}})"
|
||||
},
|
||||
"search": "Cerca participants"
|
||||
"search": "Cerca participants",
|
||||
"title": "Participants"
|
||||
},
|
||||
"passwordDigitsOnly": "Fins a {{number}} dígits",
|
||||
"passwordSetRemotely": "Establerta per un altre participant",
|
||||
@@ -838,7 +841,7 @@
|
||||
"ringing": "Està sonat..."
|
||||
},
|
||||
"privacyView": {
|
||||
"header": "Privadesa"
|
||||
"title": "Privadesa"
|
||||
},
|
||||
"profile": {
|
||||
"avatar": "avatar",
|
||||
@@ -899,6 +902,7 @@
|
||||
"sessionAlreadyActive": "Aquesta sessió ja s'està enregistrant o emetent en directe.",
|
||||
"signIn": "Inicia la sessió",
|
||||
"signOut": "Tanca la sessió",
|
||||
"title": "Enregistrament",
|
||||
"unavailable": "Vaja! El servei {{serviceName}} ara mateix no és disponible. Treballem per a resoldre el problema. Torneu-ho a intentar més tard.",
|
||||
"unavailableTitle": "L'enregistrament no és disponible",
|
||||
"uploadToCloud": "Puja al núvol"
|
||||
@@ -910,8 +914,8 @@
|
||||
"security": {
|
||||
"about": "Podeu afegir un $t(lockRoomPassword) a la reunió. Els participants hauran de proporcionar la $t(lockRoomPassword) abans de poder unir-s'hi.",
|
||||
"aboutReadOnly": "Els moderadors poden afegir una $t(lockRoomPassword) a la reunió. Caldrà que els participants proporcionin la $t(lockRoomPassword) abans per a ser autoritzats a entrar en la reunió.",
|
||||
"header": "Opcions de seguretat",
|
||||
"insecureRoomNameWarning": "El nom de la sala no és segur. Podrien unir-s'hi participants no desitjats. Considereu d'augmentar la seguretat de la reunió usant el botó dev seguretat."
|
||||
"insecureRoomNameWarning": "El nom de la sala no és segur. Podrien unir-s'hi participants no desitjats. Considereu d'augmentar la seguretat de la reunió usant el botó dev seguretat.",
|
||||
"title": "Opcions de seguretat"
|
||||
},
|
||||
"settings": {
|
||||
"calendar": {
|
||||
@@ -1007,7 +1011,7 @@
|
||||
"title": "La videotrucada s'ha interromput perquè l'ordinador ha entrat en mode repòs."
|
||||
},
|
||||
"termsView": {
|
||||
"header": "Condicions"
|
||||
"title": "Condicions"
|
||||
},
|
||||
"toolbar": {
|
||||
"Settings": "Configuració",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user