mirror of
https://gitcode.com/GitHub_Trending/ji/jitsi-meet.git
synced 2026-03-26 13:30:21 +00:00
Compare commits
269 Commits
8910
...
dependabot
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcc01ead4d | ||
|
|
7699cfdac5 | ||
|
|
16fcf27fb7 | ||
|
|
94243c797c | ||
|
|
6564ba52a2 | ||
|
|
a77ac20db9 | ||
|
|
6907db1127 | ||
|
|
78931d4f0d | ||
|
|
b19d76fbdf | ||
|
|
0676ca5e62 | ||
|
|
f387ae2113 | ||
|
|
f4a6036c1b | ||
|
|
86fbf159ec | ||
|
|
15ebf0d078 | ||
|
|
1674a05ad0 | ||
|
|
0097e08d60 | ||
|
|
b567791092 | ||
|
|
5be7328c08 | ||
|
|
55fb2a2b98 | ||
|
|
9612467813 | ||
|
|
6aba231783 | ||
|
|
052024e3b7 | ||
|
|
eeb80fddf7 | ||
|
|
5c1c00615f | ||
|
|
c3e442f160 | ||
|
|
6f8414e67f | ||
|
|
0f33b88774 | ||
|
|
9e3b54ffdf | ||
|
|
103d1f84ac | ||
|
|
74158c25a1 | ||
|
|
8bcca2dd35 | ||
|
|
86e641c2a1 | ||
|
|
31eef95e3d | ||
|
|
029072256b | ||
|
|
5199068bd2 | ||
|
|
274ef35a5b | ||
|
|
781f972a4d | ||
|
|
1fe5be2ea4 | ||
|
|
33679ac163 | ||
|
|
2f3a4478b9 | ||
|
|
5da150d8ef | ||
|
|
c4472ec0cd | ||
|
|
7d17db63b5 | ||
|
|
f1339644b0 | ||
|
|
3883811439 | ||
|
|
1f1dbb2517 | ||
|
|
db1beda219 | ||
|
|
0208a9f10f | ||
|
|
1017823715 | ||
|
|
719d5c23d2 | ||
|
|
7db7c65fad | ||
|
|
d2a739c69c | ||
|
|
17cb867078 | ||
|
|
b2ad0995ae | ||
|
|
b61b72087b | ||
|
|
157be6b660 | ||
|
|
be6aba9aec | ||
|
|
d4bbaaba83 | ||
|
|
e4f22df5f2 | ||
|
|
b6d89b0939 | ||
|
|
a6d3000d45 | ||
|
|
c616d98667 | ||
|
|
900a2da909 | ||
|
|
cb7cde2c9a | ||
|
|
32b29b963e | ||
|
|
ad7658d58b | ||
|
|
6a24b10fa9 | ||
|
|
38504d51cd | ||
|
|
ba38970e0b | ||
|
|
ac48d1def2 | ||
|
|
d0ab6557c1 | ||
|
|
808f4cad7a | ||
|
|
737448c19b | ||
|
|
cff9b3b157 | ||
|
|
c3079cc156 | ||
|
|
2d809dd995 | ||
|
|
8f81a458fd | ||
|
|
dbf756eaad | ||
|
|
a6422882dd | ||
|
|
e9848f6438 | ||
|
|
5c7f7d5d1e | ||
|
|
9d6c38590c | ||
|
|
42c2398345 | ||
|
|
124c2137e9 | ||
|
|
bcc1a3ec72 | ||
|
|
3b1f9ce659 | ||
|
|
d478db1b99 | ||
|
|
c3c42b477b | ||
|
|
35539c0772 | ||
|
|
4c4ea3d93d | ||
|
|
e1296fd82f | ||
|
|
5c92faccf6 | ||
|
|
c00b1c8145 | ||
|
|
dfd75ddc08 | ||
|
|
0aad7f7b36 | ||
|
|
d602fe48e5 | ||
|
|
c5c7983675 | ||
|
|
a461e867d5 | ||
|
|
96d02e8484 | ||
|
|
c48834a116 | ||
|
|
244b5f9dd3 | ||
|
|
18504d4ad8 | ||
|
|
fcf8a4bbe0 | ||
|
|
f66fe9fbbd | ||
|
|
caee687cc3 | ||
|
|
8530c1f2fc | ||
|
|
3b2e3526c4 | ||
|
|
aee5cb9200 | ||
|
|
df0e55eda3 | ||
|
|
f7d64341f8 | ||
|
|
156dd24b14 | ||
|
|
91481aa245 | ||
|
|
e94153df16 | ||
|
|
3c85aa2350 | ||
|
|
c9a220e1c3 | ||
|
|
5f11e2e9f4 | ||
|
|
45ee515b6b | ||
|
|
56f7792604 | ||
|
|
230559c493 | ||
|
|
900bece988 | ||
|
|
a06a338de5 | ||
|
|
eb1e4f01e7 | ||
|
|
641a401b4b | ||
|
|
6e3c256905 | ||
|
|
36a755776e | ||
|
|
7bd38be8a4 | ||
|
|
c88bfa1b9a | ||
|
|
6a443b0f8f | ||
|
|
b4cc466608 | ||
|
|
bde8dca825 | ||
|
|
2ab86cffb8 | ||
|
|
9ea9f4c899 | ||
|
|
28c72bfa7f | ||
|
|
24c78cf8ff | ||
|
|
147e64106d | ||
|
|
3d53f2e4c5 | ||
|
|
e60bfc573a | ||
|
|
796a7efa7f | ||
|
|
fb075c376d | ||
|
|
c457ed0d3c | ||
|
|
1efc5e40e1 | ||
|
|
dc84826d9c | ||
|
|
b4a64ebc44 | ||
|
|
dbb3ccc274 | ||
|
|
9a6ed65cb1 | ||
|
|
21ea67b29c | ||
|
|
ab4be2366f | ||
|
|
417c38ab9e | ||
|
|
33a4245a1f | ||
|
|
2eb07cb79f | ||
|
|
63e4c41d92 | ||
|
|
2c6ccd7d6b | ||
|
|
4ce27eeb1a | ||
|
|
11453dcc79 | ||
|
|
3375ee49bd | ||
|
|
e45df58cfb | ||
|
|
7d628960d7 | ||
|
|
cf13b8f0ba | ||
|
|
e106109090 | ||
|
|
fc170891cb | ||
|
|
775cc52f66 | ||
|
|
3baede6ff1 | ||
|
|
9462a9ce36 | ||
|
|
4713062200 | ||
|
|
65eb2a2899 | ||
|
|
f0452d05b9 | ||
|
|
1102f4205a | ||
|
|
447def54c8 | ||
|
|
481b9a6e58 | ||
|
|
fb3bc3c367 | ||
|
|
9fa5489154 | ||
|
|
9499bf29ed | ||
|
|
f605b5c487 | ||
|
|
88fba5acab | ||
|
|
7bc79bc144 | ||
|
|
3e469019b5 | ||
|
|
d324935501 | ||
|
|
cd11cf6f65 | ||
|
|
5db3d529f4 | ||
|
|
c7d2c9c204 | ||
|
|
9832c7a226 | ||
|
|
12ee929499 | ||
|
|
b9ed42613b | ||
|
|
0d572b3bfb | ||
|
|
609eab5f83 | ||
|
|
7bd0f479b9 | ||
|
|
a634b6b2bc | ||
|
|
0e53bd87ce | ||
|
|
9e89c33796 | ||
|
|
eaffd8b8f7 | ||
|
|
b8444d56ff | ||
|
|
42b2dd41c1 | ||
|
|
229d1823fb | ||
|
|
cd6e905b95 | ||
|
|
ddaf7a3180 | ||
|
|
47aa51a58c | ||
|
|
66f7b9de53 | ||
|
|
bab87be9c9 | ||
|
|
6549d47233 | ||
|
|
2063e66b8e | ||
|
|
4dd241712d | ||
|
|
a574d5ec79 | ||
|
|
4b2b85bd12 | ||
|
|
77ab1ea8ed | ||
|
|
05e47ade7c | ||
|
|
6c78ec9099 | ||
|
|
4c5afc0b5e | ||
|
|
2e31ab9dca | ||
|
|
02787b1394 | ||
|
|
2476a06237 | ||
|
|
2d8909911e | ||
|
|
d06b847319 | ||
|
|
b517f614b3 | ||
|
|
10f77f1fbc | ||
|
|
77b89ece4a | ||
|
|
129264c3c9 | ||
|
|
96c5a9abd1 | ||
|
|
93ef2337ae | ||
|
|
854a077684 | ||
|
|
f903a7ae6e | ||
|
|
9013881f76 | ||
|
|
b6e7e0a19e | ||
|
|
ae42e42534 | ||
|
|
21e2504cf9 | ||
|
|
7a9ba79783 | ||
|
|
1f5a3b5b0f | ||
|
|
fe2aff4f3c | ||
|
|
d847f6f96b | ||
|
|
45ce467dcd | ||
|
|
2b81fa6bd3 | ||
|
|
6f6100ceb2 | ||
|
|
62cd1c29d7 | ||
|
|
64869e8970 | ||
|
|
29464e6886 | ||
|
|
5ed92f2bc5 | ||
|
|
048d12de24 | ||
|
|
40c240c7ca | ||
|
|
289c1907e7 | ||
|
|
35adea48ae | ||
|
|
d72114d5bc | ||
|
|
2f6b6ca837 | ||
|
|
615bbdc39b | ||
|
|
ef97778158 | ||
|
|
2885f39355 | ||
|
|
ae256b23b8 | ||
|
|
412aa83268 | ||
|
|
f4c61e4760 | ||
|
|
f313fb81d0 | ||
|
|
975af80e27 | ||
|
|
0a30a51bab | ||
|
|
54e28e223c | ||
|
|
a4def96763 | ||
|
|
dad4fb9e06 | ||
|
|
3772b9a5ae | ||
|
|
89b9c75242 | ||
|
|
b24b60b735 | ||
|
|
486a1f6511 | ||
|
|
80b3f1d7d4 | ||
|
|
421b21edeb | ||
|
|
a58b0d9a85 | ||
|
|
1aca8ab985 | ||
|
|
f9daba728f | ||
|
|
fbb6456317 | ||
|
|
52ead26bed | ||
|
|
8d1da83e3c | ||
|
|
5453b615f5 | ||
|
|
81a7301a3e | ||
|
|
1138b7779b | ||
|
|
2fd653d928 |
12
.github/dependabot.yml
vendored
Normal file
12
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
version: 2
|
||||
updates:
|
||||
# Monitor GitHub Actions versions
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "weekly"
|
||||
labels:
|
||||
- "dependencies"
|
||||
- "github-actions"
|
||||
commit-message:
|
||||
prefix: "chore(ci)"
|
||||
2
.github/workflows/ci-lua.yml
vendored
2
.github/workflows/ci-lua.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
||||
name: Luacheck
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
|
||||
- name: Install luarocks
|
||||
run: sudo apt-get --install-recommends -y install luarocks
|
||||
|
||||
68
.github/workflows/ci.yml
vendored
68
.github/workflows/ci.yml
vendored
@@ -7,8 +7,8 @@ jobs:
|
||||
name: Lint
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
@@ -42,8 +42,8 @@ jobs:
|
||||
matrix:
|
||||
os: [macos-latest, ubuntu-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
@@ -59,8 +59,8 @@ jobs:
|
||||
name: Build mobile bundle (Android)
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
@@ -74,8 +74,8 @@ jobs:
|
||||
name: Build mobile bundle (iOS)
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
@@ -96,17 +96,37 @@ jobs:
|
||||
ruby-version: '3.4'
|
||||
bundler-cache: true
|
||||
- run: npx react-native info
|
||||
- name: Cache CocoaPods
|
||||
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7
|
||||
with:
|
||||
path: |
|
||||
ios/Pods
|
||||
~/Library/Caches/CocoaPods
|
||||
key: ${{ runner.os }}-cocoapods-${{ hashFiles('ios/Podfile.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-cocoapods-
|
||||
- name: Install Pods
|
||||
working-directory: ./ios
|
||||
run: bundle exec pod install --repo-update --deployment
|
||||
run: bundle exec pod install --deployment
|
||||
- run: npx react-native bundle --entry-file react/index.native.js --platform ios --bundle-output /tmp/ios.bundle --reset-cache
|
||||
android-sdk-build:
|
||||
name: Build mobile SDK (Android)
|
||||
runs-on: ubuntu-latest
|
||||
container: reactnativecommunity/react-native-android:v18.0
|
||||
container:
|
||||
image: reactnativecommunity/react-native-android:v15.0
|
||||
volumes:
|
||||
- /usr:/host/usr
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- name: Make space in image by removing preinstalled, but unused SDKs
|
||||
run: |
|
||||
df -h /
|
||||
rm -rf /host/usr/local/lib/android
|
||||
rm -rf /host/usr/local/.ghcup
|
||||
rm -rf /host/usr/share/dotnet
|
||||
rm -rf /host/usr/share/swift
|
||||
df -h /
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
@@ -119,12 +139,15 @@ jobs:
|
||||
cd android
|
||||
./gradlew :sdk:clean
|
||||
./gradlew :sdk:assembleRelease
|
||||
- run: |
|
||||
git config --global --add safe.directory /__w/jitsi-meet/jitsi-meet
|
||||
git clean -dfx
|
||||
ios-sdk-build:
|
||||
name: Build mobile SDK (iOS)
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
@@ -146,14 +169,23 @@ jobs:
|
||||
-workspace ios/jitsi-meet.xcworkspace \
|
||||
-scheme JitsiMeetSDK
|
||||
- name: setup-cocoapods
|
||||
uses: ruby/setup-ruby@v1
|
||||
uses: ruby/setup-ruby@4fc31e1c823882afd7ef55985266a526c589de90 #v1.282.0
|
||||
with:
|
||||
ruby-version: '3.4'
|
||||
bundler-cache: true
|
||||
- name: Cache CocoaPods
|
||||
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 #v5.0.4
|
||||
with:
|
||||
path: |
|
||||
ios/Pods
|
||||
~/Library/Caches/CocoaPods
|
||||
key: ${{ runner.os }}-pods-${{ hashFiles('ios/Podfile.lock', 'Gemfile.lock') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-pods-
|
||||
- run: npx react-native info
|
||||
- name: Install Pods
|
||||
working-directory: ./ios
|
||||
run: bundle exec pod install --repo-update --deployment
|
||||
run: bundle exec pod install --deployment
|
||||
- run: |
|
||||
xcodebuild -downloadPlatform iOS -buildVersion 18.2
|
||||
xcodebuild archive \
|
||||
@@ -173,8 +205,8 @@ jobs:
|
||||
name: Test Debian packages build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd #v6.0.2
|
||||
- uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f #v6.3.0
|
||||
with:
|
||||
node-version-file: '.nvmrc'
|
||||
cache: 'npm'
|
||||
|
||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v8
|
||||
- uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f #v10.2.0
|
||||
with:
|
||||
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
|
||||
stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
|
||||
|
||||
@@ -264,4 +264,4 @@ react/features/sample/
|
||||
- [Jitsi Handbook](https://jitsi.github.io/handbook/) - Comprehensive documentation
|
||||
- [Community Forum](https://community.jitsi.org/) - Ask questions and get support
|
||||
- [Architecture Guide](https://jitsi.github.io/handbook/docs/architecture) - System overview
|
||||
- [Contributing Guidelines](https://jitsi.github.io/handbook/docs/dev-guide/contributing) - Detailed contribution process
|
||||
- [Contributing Guidelines](https://jitsi.github.io/handbook/docs/dev-guide/dev-guide-contributing/) - Detailed contribution process
|
||||
|
||||
26
Gemfile.lock
26
Gemfile.lock
@@ -25,25 +25,27 @@ GEM
|
||||
json (>= 1.5.1)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.1)
|
||||
aws-partitions (1.1050.0)
|
||||
aws-sdk-core (3.218.1)
|
||||
aws-eventstream (1.4.0)
|
||||
aws-partitions (1.1220.0)
|
||||
aws-sdk-core (3.242.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
bigdecimal
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.98.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
logger
|
||||
aws-sdk-kms (1.122.0)
|
||||
aws-sdk-core (~> 3, >= 3.241.4)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.181.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-s3 (1.208.0)
|
||||
aws-sdk-core (~> 3, >= 3.234.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-sigv4 (1.12.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
base64 (0.3.0)
|
||||
benchmark (0.4.0)
|
||||
bigdecimal (3.1.9)
|
||||
claide (1.1.0)
|
||||
@@ -102,7 +104,7 @@ GEM
|
||||
ethon (0.16.0)
|
||||
ffi (>= 1.15.0)
|
||||
excon (0.112.0)
|
||||
faraday (1.10.4)
|
||||
faraday (1.10.5)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
@@ -118,10 +120,10 @@ GEM
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-em_synchrony (1.0.1)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.1.0)
|
||||
faraday-multipart (1.2.0)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<intent-filter android:autoVerify="true">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
@@ -96,23 +96,53 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
public static void addTopBottomInsets(@NonNull Window w, @NonNull View v) {
|
||||
|
||||
// Enable edge-to-edge mode
|
||||
androidx.core.view.WindowCompat.setDecorFitsSystemWindows(w, false);
|
||||
|
||||
// Make system bars transparent so content is visible underneath
|
||||
w.setStatusBarColor(android.graphics.Color.TRANSPARENT);
|
||||
w.setNavigationBarColor(android.graphics.Color.TRANSPARENT);
|
||||
|
||||
View decorView = w.getDecorView();
|
||||
|
||||
decorView.post(() -> {
|
||||
WindowInsetsCompat insets = ViewCompat.getRootWindowInsets(decorView);
|
||||
if (insets != null) {
|
||||
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
|
||||
params.topMargin = insets.getInsets(WindowInsetsCompat.Type.systemBars()).top;
|
||||
params.bottomMargin = insets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom;
|
||||
// Get display metrics for calculating density-independent caps
|
||||
final android.util.DisplayMetrics metrics = v.getContext().getResources().getDisplayMetrics();
|
||||
final int screenHeight = metrics.heightPixels;
|
||||
final float density = metrics.density;
|
||||
|
||||
// Listen for window inset changes
|
||||
// when system bars visibility is toggled or when the device rotates
|
||||
ViewCompat.setOnApplyWindowInsetsListener(decorView, (view, windowInsets) -> {
|
||||
|
||||
// Get the actual inset values reported by the system
|
||||
int statusBarInset = windowInsets.getInsets(WindowInsetsCompat.Type.statusBars()).top;
|
||||
int navBarInset = windowInsets.getInsets(WindowInsetsCompat.Type.navigationBars()).bottom;
|
||||
|
||||
// Calculate maximum allowed inset values to prevent device-specific bugs
|
||||
final int maxTopInset = Math.min((int)(60 * density), (int)(screenHeight * 0.10));
|
||||
final int maxBottomInset = Math.min((int)(120 * density), (int)(screenHeight * 0.10));
|
||||
|
||||
int topInset = Math.min(statusBarInset, maxTopInset);
|
||||
int bottomInset = Math.min(navBarInset, maxBottomInset);
|
||||
|
||||
// Apply calculated insets
|
||||
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
|
||||
|
||||
// Update margins only if they've changed
|
||||
if (params.topMargin != topInset || params.bottomMargin != bottomInset) {
|
||||
params.topMargin = topInset;
|
||||
params.bottomMargin = bottomInset;
|
||||
v.setLayoutParams(params);
|
||||
|
||||
decorView.setOnApplyWindowInsetsListener((view, windowInsets) -> {
|
||||
view.setBackgroundColor(JitsiMeetView.BACKGROUND_COLOR);
|
||||
|
||||
return windowInsets;
|
||||
});
|
||||
}
|
||||
|
||||
view.setBackgroundColor(JitsiMeetView.BACKGROUND_COLOR);
|
||||
|
||||
// Return CONSUMED to prevent double-application of margins
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
|
||||
// Manually trigger the inset listener to apply margins immediately
|
||||
ViewCompat.requestApplyInsets(decorView);
|
||||
}
|
||||
|
||||
// Overrides
|
||||
@@ -136,10 +166,11 @@ public class JitsiMeetActivity extends AppCompatActivity
|
||||
|
||||
setContentView(R.layout.activity_jitsi_meet);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
|
||||
&& getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
||||
addTopBottomInsets(getWindow(), findViewById(android.R.id.content));
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM
|
||||
&& getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
||||
addTopBottomInsets(getWindow(), findViewById(android.R.id.content));
|
||||
}
|
||||
|
||||
this.jitsiView = findViewById(R.id.jitsiView);
|
||||
|
||||
|
||||
@@ -30,6 +30,9 @@ import com.facebook.react.ReactRootView;
|
||||
|
||||
import org.jitsi.meet.sdk.log.JitsiMeetLogger;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
|
||||
|
||||
public class JitsiMeetView extends FrameLayout {
|
||||
|
||||
@@ -84,6 +87,10 @@ public class JitsiMeetView extends FrameLayout {
|
||||
result.putInt(key, (int)bValue);
|
||||
} else if (valueType.contentEquals("Bundle")) {
|
||||
result.putBundle(key, mergeProps((Bundle)aValue, (Bundle)bValue));
|
||||
} else if (valueType.contentEquals("String[]")) {
|
||||
// Convert String[] to ArrayList<String> for React Native bridge compatibility
|
||||
String[] stringArray = (String[]) bValue;
|
||||
result.putStringArrayList(key, new ArrayList<>(Arrays.asList(stringArray)));
|
||||
} else {
|
||||
throw new RuntimeException("Unsupported type: " + valueType);
|
||||
}
|
||||
|
||||
@@ -1641,12 +1641,6 @@ export default {
|
||||
JitsiE2ePingEvents.E2E_RTT_CHANGED,
|
||||
(...args) => APP.store.dispatch(e2eRttChanged(...args)));
|
||||
|
||||
room.addCommandListener(this.commands.defaults.ETHERPAD,
|
||||
({ value }) => {
|
||||
APP.UI.initEtherpad(value);
|
||||
}
|
||||
);
|
||||
|
||||
room.addCommandListener(this.commands.defaults.EMAIL, (data, from) => {
|
||||
APP.store.dispatch(participantUpdated({
|
||||
conference: room,
|
||||
@@ -1720,15 +1714,7 @@ export default {
|
||||
}
|
||||
);
|
||||
|
||||
room.on(JitsiConferenceEvents.PERMISSIONS_RECEIVED, p => {
|
||||
const localParticipant = getLocalParticipant(APP.store.getState());
|
||||
|
||||
APP.store.dispatch(participantUpdated({
|
||||
id: localParticipant.id,
|
||||
local: true,
|
||||
features: p
|
||||
}));
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
45
config.js
45
config.js
@@ -151,6 +151,9 @@ var config = {
|
||||
// Disables self-view settings in UI
|
||||
// disableSelfViewSettings: false,
|
||||
|
||||
// Shows/hides the moderator setting for chat permissions.
|
||||
// showChatPermissionsModeratorSetting: false,
|
||||
|
||||
// screenshotCapture : {
|
||||
// Enables the screensharing capture feature.
|
||||
// enabled: false,
|
||||
@@ -508,6 +511,15 @@ var config = {
|
||||
// // ./src/react/features/transcribing/transcriber-langs.json.
|
||||
// preferredLanguage: 'en-US',
|
||||
|
||||
// Allows extending the list of supported transcription languages.
|
||||
// Useful for custom transcription backends (e.g. Vosk).
|
||||
//
|
||||
// Example:
|
||||
// customLanguages: {
|
||||
// 'hsb-DE': 'Upper Sorbian (Germany)',
|
||||
// 'dsb-DE': 'Lower Sorbian (Germany)'
|
||||
// },
|
||||
|
||||
// // Enables automatic turning on transcribing when recording is started
|
||||
// autoTranscribeOnRecord: false,
|
||||
|
||||
@@ -520,9 +532,6 @@ var config = {
|
||||
// // Note: Starting transcriptions from the recording dialog will still work.
|
||||
// disableClosedCaptions: false,
|
||||
|
||||
// // Whether to invite jigasi when backend transcriptions are enabled (asyncTranscription is true in metadata).
|
||||
// // By default, we invite it.
|
||||
// inviteJigasiOnBackendTranscribing: true,
|
||||
// },
|
||||
|
||||
// Misc
|
||||
@@ -637,21 +646,6 @@ var config = {
|
||||
// sticky: 0,
|
||||
// },
|
||||
|
||||
// // Options for the recording limit notification.
|
||||
// recordingLimit: {
|
||||
//
|
||||
// // The recording limit in minutes. Note: This number appears in the notification text
|
||||
// // but doesn't enforce the actual recording time limit. This should be configured in
|
||||
// // jibri!
|
||||
// limit: 60,
|
||||
//
|
||||
// // The name of the app with unlimited recordings.
|
||||
// appName: 'Unlimited recordings APP',
|
||||
//
|
||||
// // The URL of the app with unlimited recordings.
|
||||
// appURL: 'https://unlimited.recordings.app.com/',
|
||||
// },
|
||||
|
||||
// Disables or enables RTX (RFC 4588) (defaults to false).
|
||||
// disableRtx: false,
|
||||
|
||||
@@ -907,6 +901,8 @@ var config = {
|
||||
// alwaysVisible: false,
|
||||
// // Indicates whether the toolbar should still autohide when chat is open
|
||||
// autoHideWhileChatIsOpen: false,
|
||||
// // Default background color for the main toolbar. Accepts any valid CSS color.
|
||||
// // backgroundColor: '#ffffff',
|
||||
// },
|
||||
|
||||
// Overrides the buttons displayed in the main toolbar. Depending on the screen size the number of displayed
|
||||
@@ -925,6 +921,14 @@ var config = {
|
||||
// [ 'microphone', 'camera' ]
|
||||
// ],
|
||||
|
||||
// Enable reduced UI on web.
|
||||
// reducedUIEnabled: true,
|
||||
|
||||
// Overrides the buttons displayed in the main toolbar for reduced UI.
|
||||
// When there isn't an override for a certain configuration the default jitsi-meet configuration will be used.
|
||||
// The order of the buttons in the array is preserved.
|
||||
// reducedUImainToolbarButtons: [ 'microphone', 'camera' ],
|
||||
|
||||
// Toolbar buttons which have their click/tap event exposed through the API on
|
||||
// `toolbarButtonClicked`. Passing a string for the button key will
|
||||
// prevent execution of the click/tap routine; passing an object with `key` and
|
||||
@@ -1582,14 +1586,13 @@ var config = {
|
||||
// - electron=true (when web is loaded in electron app)
|
||||
// If there is a logout service you can specify its URL with:
|
||||
// tokenLogoutUrl: 'https://myservice.com/logout'
|
||||
// You can enable tokenAuthUrlAutoRedirect which will detect that you have logged in successfully before
|
||||
// and will automatically redirect to the token service to get the token for the meeting.
|
||||
// tokenAuthUrlAutoRedirect: false
|
||||
// An option to respect the context.tenant jwt field compared to the current tenant from the url
|
||||
// tokenRespectTenant: false,
|
||||
// An option to get for user info (name, picture, email) in the token outside the user context.
|
||||
// Can be used with Firebase tokens.
|
||||
// tokenGetUserInfoOutOfContext: false,
|
||||
// An option to pass the token in the iframe API directly instead of using the redirect flow.
|
||||
// tokenAuthInline: false,
|
||||
|
||||
// You can put an array of values to target different entity types in the invite dialog.
|
||||
// Valid values are "phone", "room", "sip", "user", "videosipgw" and "email"
|
||||
|
||||
@@ -45,7 +45,7 @@ body {
|
||||
|
||||
.jitsi-icon {
|
||||
&-default svg {
|
||||
fill: white;
|
||||
fill: var(--icon-svg-fill, white);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
.always-on-top-toolbox {
|
||||
background-color: $newToolbarBackgroundColor;
|
||||
background-color: var(--toolbox-background-color, $newToolbarBackgroundColor);
|
||||
border-radius: 3px;
|
||||
display: flex;
|
||||
z-index: $toolbarZ;
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
.reactions-menu {
|
||||
width: 330px;
|
||||
background: #242528;
|
||||
box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);
|
||||
background: var(--reactions-menu-background, #242528);
|
||||
box-shadow: 0px 3px 16px var(--reactions-menu-box-shadow-1, rgba(0, 0, 0, 0.6)), 0px 0px 4px 1px var(--reactions-menu-box-shadow-2, rgba(0, 0, 0, 0.25));
|
||||
border-radius: 6px;
|
||||
padding: 16px;
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
top: 3px;
|
||||
|
||||
& .toolbox-icon.toggled {
|
||||
background-color: #000000;
|
||||
background-color: var(--reactions-menu-button-toggled, #000000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,4 +196,14 @@
|
||||
color:#FFD740;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.youtube-go-live-warning {
|
||||
margin-bottom: 16px;
|
||||
padding: 8px 12px;
|
||||
background-color: rgba(248, 174, 26, 0.1);
|
||||
border-left: 3px solid #FFD740;
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.25rem;
|
||||
color: #FFD740;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Round badge.
|
||||
*/
|
||||
.badge-round {
|
||||
background-color: #165ECC;
|
||||
background-color: var(--toolbar-badge-background, #165ECC);
|
||||
border-radius: 50%;
|
||||
box-sizing: border-box;
|
||||
color: #FFFFFF;
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
.toolbox-content-wrapper::after {
|
||||
content: '';
|
||||
background: $newToolbarBackgroundColor;
|
||||
background: var(--toolbox-background-color, $newToolbarBackgroundColor);
|
||||
padding-bottom: env(safe-area-inset-bottom, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
}
|
||||
|
||||
#notification-participant-list {
|
||||
background-color: $newToolbarBackgroundColor;
|
||||
background-color: var(--toolbox-background-color, $newToolbarBackgroundColor);
|
||||
border: 1px solid rgba(255, 255, 255, .4);
|
||||
border-radius: 8px;
|
||||
left: 0;
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
}
|
||||
|
||||
#preview {
|
||||
background: #040404;
|
||||
background: var(--prejoin-preview-background, #040404);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
5
custom.d.ts
vendored
5
custom.d.ts
vendored
@@ -2,3 +2,8 @@ declare module '*.svg' {
|
||||
const content: any;
|
||||
export default content;
|
||||
}
|
||||
|
||||
declare module '*.svg?raw' {
|
||||
const content: string;
|
||||
export default content;
|
||||
}
|
||||
|
||||
2
debian/control
vendored
2
debian/control
vendored
@@ -34,7 +34,7 @@ Description: Configuration for web serving of Jitsi Meet
|
||||
|
||||
Package: jitsi-meet-prosody
|
||||
Architecture: all
|
||||
Depends: openssl, prosody (>= 0.12.0) | prosody-trunk | prosody-0.12 | prosody-13.0, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect
|
||||
Depends: openssl, prosody (>= 0.12.0) | prosody-trunk | prosody-0.12 | prosody-13.0, ca-certificates-java, lua-sec, lua-basexx, lua-luaossl, lua-cjson, lua-inspect
|
||||
Replaces: jitsi-meet-tokens
|
||||
Description: Prosody configuration for Jitsi Meet
|
||||
Jitsi Meet is a WebRTC JavaScript application that uses Jitsi
|
||||
|
||||
19
debian/jitsi-meet-prosody.postinst
vendored
19
debian/jitsi-meet-prosody.postinst
vendored
@@ -124,10 +124,17 @@ case "$1" in
|
||||
ln -s $PROSODY_HOST_CONFIG /etc/prosody/conf.d/$JVB_HOSTNAME.cfg.lua
|
||||
fi
|
||||
PROSODY_CREATE_JICOFO_USER="true"
|
||||
fi
|
||||
|
||||
if ! grep -q "VirtualHost \"$JVB_HOSTNAME\"" $PROSODY_CONFIG_OLD; then
|
||||
# on some distributions main prosody config doesn't include configs
|
||||
# from conf.d folder enable it as this where we put our config by default
|
||||
# also when upgrading to new prosody version from prosody repo we need to add it again
|
||||
if ! grep -q "Include \"conf\.d\/\*\.cfg.lua\"" $PROSODY_CONFIG_OLD; then
|
||||
echo -e "\nInclude \"conf.d/*.cfg.lua\"" >> $PROSODY_CONFIG_OLD
|
||||
|
||||
# trigger a restart
|
||||
PROSODY_CONFIG_PRESENT="false"
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -277,13 +284,17 @@ case "$1" in
|
||||
# and drop the wait and the prosody restart
|
||||
sleep 1
|
||||
invoke-rc.d prosody restart || true
|
||||
|
||||
# In case we had updated the certificates and restarted prosody, let's restart and the bridge and jicofo if possible
|
||||
if [ -d /run/systemd/system ] && [ "$CERT_ADDED_TO_TRUST" = "true" ]; then
|
||||
fi
|
||||
;;
|
||||
triggered)
|
||||
for trigger in $2; do
|
||||
if [ "$trigger" = "update-ca-certificates-java" ]; then
|
||||
echo "Java certificates updated, restarting Jitsi components..."
|
||||
systemctl restart jitsi-videobridge2.service >/dev/null || true
|
||||
systemctl restart jicofo.service >/dev/null || true
|
||||
fi
|
||||
fi
|
||||
done
|
||||
exit 0
|
||||
;;
|
||||
|
||||
abort-upgrade|abort-remove|abort-deconfigure)
|
||||
|
||||
1
debian/jitsi-meet-prosody.triggers
vendored
Normal file
1
debian/jitsi-meet-prosody.triggers
vendored
Normal file
@@ -0,0 +1 @@
|
||||
interest-noawait update-ca-certificates-java
|
||||
@@ -10,6 +10,7 @@ no-cli
|
||||
no-loopback-peers
|
||||
no-tcp-relay
|
||||
no-tcp
|
||||
no-dtls
|
||||
listening-port=3478
|
||||
tls-listening-port=5349
|
||||
no-tlsv1
|
||||
|
||||
@@ -26,6 +26,22 @@ map $arg_vnode $prosody_node {
|
||||
v7 v7;
|
||||
v8 v8;
|
||||
}
|
||||
# Matches any URI or Referer with some matches and redacts the whole
|
||||
# query string. log_format and map must be at the http context level.
|
||||
map $request_uri $loggable_uri {
|
||||
~^(?P<path>[^?]*)\?.*(?:jwt|token)= "${path}?[params_redacted]";
|
||||
default $request_uri;
|
||||
}
|
||||
|
||||
map $http_referer $loggable_referer {
|
||||
~^(?P<url>[^?]*)\?.*(?:jwt|token)= "${url}?[params_redacted]";
|
||||
default $http_referer;
|
||||
}
|
||||
|
||||
log_format jitsi_log '$remote_addr - $remote_user [$time_local] '
|
||||
'"$request_method $loggable_uri $server_protocol" '
|
||||
'$status $body_bytes_sent "$loggable_referer" "$http_user_agent"';
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
@@ -66,6 +82,8 @@ server {
|
||||
|
||||
root /usr/share/jitsi-meet;
|
||||
|
||||
access_log /var/log/nginx/access.log jitsi_log;
|
||||
|
||||
# ssi on with javascript for multidomain variables in config.js
|
||||
ssi on;
|
||||
ssi_types application/x-javascript application/javascript;
|
||||
|
||||
@@ -1407,7 +1407,7 @@ PODS:
|
||||
- Yoga
|
||||
- react-native-performance (5.1.2):
|
||||
- React-Core
|
||||
- react-native-safe-area-context (5.5.2):
|
||||
- react-native-safe-area-context (5.6.1):
|
||||
- React-Core
|
||||
- react-native-slider (4.5.6):
|
||||
- DoubleConversion
|
||||
@@ -2271,7 +2271,7 @@ SPEC CHECKSUMS:
|
||||
react-native-orientation-locker: dbd3f6ddbe9e62389cb0807dc2af63f6c36dec36
|
||||
react-native-pager-view: 11662c698c8f11d39e05891316d2a144fa00adc4
|
||||
react-native-performance: 125a96c145e29918b55b45ce25cbba54f1e24dcd
|
||||
react-native-safe-area-context: 0f7bf11598f9a61b7ceac8dc3f59ef98697e99e1
|
||||
react-native-safe-area-context: 2243039f43d10cb1ea30ec5ac57fc6d1448413f4
|
||||
react-native-slider: 1205801a8d29b28cacc14eef08cb120015cdafcb
|
||||
react-native-video: eb861d67a71dfef1bbf6086a811af5f338b13781
|
||||
react-native-webrtc: e8f0ce746353adc2744a2b933645e1aeb41eaa74
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
"it": "Italiano",
|
||||
"ja": "日本語",
|
||||
"kab": "Taqbaylit",
|
||||
"kk": "Қазақша",
|
||||
"ko": "한국어",
|
||||
"lt": "Lietuvių",
|
||||
"lv": "Latviešu",
|
||||
|
||||
@@ -537,8 +537,6 @@
|
||||
"googlePrivacyPolicy": "سياسية خصوصية غوغل",
|
||||
"inProgress": "البث المباشر غير ممكّن على {{email}}. يرجى تمكين البث المباشر أو تسجيل الدخول إلى حساب مع تمكين البث المباشر.",
|
||||
"invalidStreamKey": "يحتمل كون مفتاح البث الحي غير صحيح.",
|
||||
"limitNotificationDescriptionNative": "سيقيَّد البث إلى {{limit}} د، ولكن إن أردت إجراء عملية بث غير محدودة، جرِّب {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "نظرًا للضغط الكبير، سيقيَّد البث إلى {{limit}} د، ولكن إن أردت إجراء عملية بث غير محدودة، جرِّب <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "أُوقِف البث الحي",
|
||||
"offBy": "أوقف {{name}} البث الحي",
|
||||
"on": "بث حي",
|
||||
@@ -898,8 +896,6 @@
|
||||
"highlightMomentSuccess": "تم تمييز اللحظة",
|
||||
"highlightMomentSucessDescription": "ستتم إضافة اللحظة المميزة إلى ملخص المُلتقى.",
|
||||
"inProgress": "التسجيل أو البث المباشر قيد التقدم",
|
||||
"limitNotificationDescriptionNative": "نظرًا للضغط الكبير، سيقيَّد التسجيل إلى {{limit}} د، ولكن إن أردت التسجيل لمدة مفتوحة، جرِّب <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "نظرًا للضغط الكبير، سيقيَّد التسجيل إلى {{limit}} د، ولكن إن أردت التسجيل لمدة مفتوحة، جرِّب <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "لقد أنشأنا رابطًا لتسجيلك.",
|
||||
"live": "مباشر",
|
||||
"localRecordingNoNotificationWarning": "لن يتم الإعلان عن التسجيل للمشاركين الآخرين. ستحتاج إلى إخبارهم بأنه تم تسجيل الاجتماع.",
|
||||
|
||||
@@ -359,7 +359,7 @@
|
||||
"kickParticipantTitle": "Изгонване на този участник?",
|
||||
"kickSystemTitle": "Ауч! Бяхте изгонени от срещата",
|
||||
"kickTitle": "Ауч! {{participantDisplayName}} Ви изгони от тази среща",
|
||||
"learnMore": "научи повече",
|
||||
"learnMore": "Научи повече",
|
||||
"linkMeeting": "Свързване на среща",
|
||||
"linkMeetingTitle": "Свързване на среща със Salesforce",
|
||||
"liveStreaming": "Излъчване на живо",
|
||||
@@ -429,9 +429,7 @@
|
||||
"recentlyUsedObjects": "Вашите наскоро използвани обекти",
|
||||
"recording": "Запис",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Невъзможно докато е активно излъчване на живо",
|
||||
"recordingInProgressDescription": "Тази среща се записва и анализира от AI{{learnMore}}. Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Тази среща се записва и анализира от AI",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.",
|
||||
"recordingInProgressDescription": "Тази среща се записва и анализира от AI. Звукът и видеото ви са изключени. Ако решите да ги включите, давате съгласие да бъдете записани.",
|
||||
"recordingInProgressTitle": "В момента се записва",
|
||||
"rejoinNow": "Повторно присъединяване сега",
|
||||
"remoteControlAllowedMessage": "{{user}} прие заявката Ви за отдалечено управление!",
|
||||
@@ -692,8 +690,6 @@
|
||||
"googlePrivacyPolicy": "Политика за поверителност на Google",
|
||||
"inProgress": "В ход е запис или излъчване на живо",
|
||||
"invalidStreamKey": "Ключът за предаване на живо е грешен.",
|
||||
"limitNotificationDescriptionNative": "Излъчването ви ще бъде ограничено до {{limit}} мин. За неограничено излъчване опитайте {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Поради голямото търсене, излъчването ви ще бъде ограничено до {{limit}} мин. За неограничено излъчване опитайте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Край на излъчването на живо",
|
||||
"offBy": "{{name}} спря излъчването на живо",
|
||||
"on": "Излъчване на живо",
|
||||
@@ -1111,8 +1107,6 @@
|
||||
"highlightMomentSuccess": "Моментът е отбелязан",
|
||||
"highlightMomentSucessDescription": "Отбелязаният момент ще бъде добавен към резюмето на срещата.",
|
||||
"inProgress": "В ход е запис или излъчване на живо",
|
||||
"limitNotificationDescriptionNative": "Поради голямото търсене записът ви ще бъде ограничен до {{limit}} мин. За неограничени записи опитайте <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Поради голямото търсене записът ви ще бъде ограничен до {{limit}} мин. За неограничени записи опитайте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Генерирахме линк към вашия запис.",
|
||||
"localRecordingNoNotificationWarning": "Записът няма да бъде обявен на другите участници. Ще трябва да ги уведомите, че срещата се записва.",
|
||||
"localRecordingNoVideo": "Видеото не се записва",
|
||||
|
||||
@@ -541,8 +541,6 @@
|
||||
"googlePrivacyPolicy": "Polítiques de privadesa de Google",
|
||||
"inProgress": "L'enregistrament o la transmissió en directe és en progrés",
|
||||
"invalidStreamKey": "La clau de transmissió en directe pot ser incorrecta.",
|
||||
"limitNotificationDescriptionNative": "L'emissió es limitarà a {{limit}} min. Per a emissions sense límit proveu {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Atesa l'alta demanda, la vostra emissió es limitarà a {{limit}} minuts. Per a emissions il·limitades, proveu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>",
|
||||
"off": "S'ha aturat la transmissió en directe",
|
||||
"offBy": "{{name}} ha aturat la transmissió en directe",
|
||||
"on": "Ha començat la transmissió en directe",
|
||||
@@ -905,8 +903,6 @@
|
||||
"highlightMomentSuccess": "Moment destacat",
|
||||
"highlightMomentSucessDescription": "S'ha afegit el moment destacat al resum de la reunió.",
|
||||
"inProgress": "L'enregistrament o la transmissió en directe és en progrés",
|
||||
"limitNotificationDescriptionNative": "A causa de la gran demanda, el vostre enregistrament es limitarà a {{limit}} min. Per a enregistraments il·limitats, proveu <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "A causa de la gran demanda, l'enregistrament es limitarà a {{limit}} min. Per a enregistraments il·limitats, proveu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "S'ha generat un enllaç a l'enregistrament.",
|
||||
"live": "EN DIRECTE",
|
||||
"localRecordingNoNotificationWarning": "L'enregistrament no s'anunciarà als altres participants. Els haureu d'informar que la reunió s'està enregistrant.",
|
||||
|
||||
@@ -635,8 +635,6 @@
|
||||
"googlePrivacyPolicy": "Zásady soukromí Google",
|
||||
"inProgress": "Probíhá nahrávání nebo živé visílání",
|
||||
"invalidStreamKey": "Klíč k živému přenosu může být chybný.",
|
||||
"limitNotificationDescriptionNative": "Váš živý přenos může trvat nejvýše {{limit}} min. Pro neomezený přenos vyzkoušejte {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Kvůli vysokému zájmu může váš přenos trvat nejvýše {{limit}} min. Pro neomezený přenos vyzkoušejte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Živý přenos skončil",
|
||||
"offBy": "{{name}} zastavil/a živý přenos",
|
||||
"on": "Živý přenos",
|
||||
@@ -1037,8 +1035,6 @@
|
||||
"highlightMomentSuccess": "Zvýrazněný okamžik",
|
||||
"highlightMomentSucessDescription": "Váš zvýrazněný okamžik bude přidán do shrnutí setkání.",
|
||||
"inProgress": "Probíhá nahrávání nebo živé vysílání",
|
||||
"limitNotificationDescriptionNative": "Kvůli vysokému zájmu bude vaše nahrávka omezena na nejvýše {{limit}} min. Pro neomezené nahrávání zkuste <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Kvůli vysokému zájmu bude vaše nahrávka omezena na nejvýše {{limit}} min. Pro neomezené nahrávání zkuste <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Vygenerovali jsme odkaz na vaši nahrávku.",
|
||||
"localRecordingNoNotificationWarning": "Nahrávka nebude oznámena ostatním účastníkům. Budete jim muset dát vědět, že schůzka je nahrána.",
|
||||
"localRecordingNoVideo": "Video se nenahrává",
|
||||
|
||||
1889
lang/main-da.json
1889
lang/main-da.json
File diff suppressed because it is too large
Load Diff
@@ -109,9 +109,15 @@
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"disabled": "Chat-Nachrichten sind deaktiviert.",
|
||||
"enter": "Chat-Raum betreten",
|
||||
"error": "Fehler: Ihre Nachricht wurde nicht versendet. Grund: {{error}}",
|
||||
"everyone": "Alle",
|
||||
"fieldPlaceHolder": "Geben Sie Ihre Nachricht hier ein",
|
||||
"fileAccessibleTitle": "{{user}} hat eine Datei hochgeladen",
|
||||
"fileAccessibleTitleMe": "Ich habe eine Datei hochgeladen",
|
||||
"fileDeleted": "Eine Datei wurde gelöscht",
|
||||
"guestsChatIndicator": "(Gast)",
|
||||
"lobbyChatMessageTo": "Lobby-Nachricht an {{recipient}}",
|
||||
"message": "Nachricht",
|
||||
"messageAccessibleTitle": "{{user}} sagt:",
|
||||
@@ -120,11 +126,20 @@
|
||||
"messagebox": "Nachricht eingeben",
|
||||
"newMessages": "Neue Nachrichten",
|
||||
"nickname": {
|
||||
"featureChat": "Chat",
|
||||
"featureClosedCaptions": "Untertitel",
|
||||
"featureFileSharing": "Dateien",
|
||||
"featurePolls": "Umfragen",
|
||||
"popover": "Wähle einen Alias",
|
||||
"title": "Geben Sie einen Alias zum Chatten ein",
|
||||
"titleWith1Features": "Geben Sie einen Alias ein, um {{feature1}} zu nutzen",
|
||||
"titleWith2Features": "Geben Sie einen Alias ein, um {{feature1}} und {{feature2}} zu nutzen",
|
||||
"titleWith3Features": "Geben Sie einen Alias ein, um {{feature1}}, {{feature2}} und {{feature3}} zu nutzen",
|
||||
"titleWith4Features": "Geben Sie einen Alias ein, um {{feature1}}, {{feature2}}, {{feature3}} und {{feature4}} zu nutzen",
|
||||
"titleWithCC": "Geben Sie einen Alias zum Chatten und für Untertitel ein",
|
||||
"titleWithPolls": "Geben Sie einen Alias zum Chatten und für Umfragen ein",
|
||||
"titleWithPollsAndCC": "Geben Sie einen Alias zum Chatten, für Umfragen und Untertitel ein"
|
||||
"titleWithPollsAndCC": "Geben Sie einen Alias zum Chatten, für Umfragen und Untertitel ein",
|
||||
"titleWithPollsAndCCAndFileSharing": "Geben Sie einen Alias zum Chatten, für Umfragen, Untertitel und Dateien ein"
|
||||
},
|
||||
"noMessagesMessage": "Es gibt noch keine Nachricht in dieser Konferenz. Starten Sie hier eine Unterhaltung!",
|
||||
"privateNotice": "Private Nachricht an {{recipient}}",
|
||||
@@ -132,14 +147,16 @@
|
||||
"smileysPanel": "Emoji-Auswahl",
|
||||
"systemDisplayName": "System",
|
||||
"tabs": {
|
||||
"chat": "Chatten",
|
||||
"chat": "Chat",
|
||||
"closedCaptions": "Untertitel",
|
||||
"fileSharing": "Dateien",
|
||||
"polls": "Umfragen"
|
||||
},
|
||||
"title": "Chatten",
|
||||
"titleWithCC": "Chatten und Untertitel",
|
||||
"titleWithPolls": "Chatten und Umfragen",
|
||||
"titleWithPollsAndCC": "Chatten, Umfragen und Untertitel",
|
||||
"title": "Chat",
|
||||
"titleWithCC": "Untertitel",
|
||||
"titleWithFeatures": "Chat und",
|
||||
"titleWithFileSharing": "Dateien",
|
||||
"titleWithPolls": "Umfragen",
|
||||
"you": "Sie"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
@@ -210,6 +227,9 @@
|
||||
"video_ssrc": "Video-SSRC:",
|
||||
"yes": "Ja"
|
||||
},
|
||||
"customPanel": {
|
||||
"close": "Schließen"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "Früher",
|
||||
"today": "Heute",
|
||||
@@ -274,7 +294,6 @@
|
||||
"Submit": "OK",
|
||||
"Understand": "Verstanden, Stummschaltung beibehalten",
|
||||
"UnderstandAndUnmute": "Verstanden, bitte Stummschaltung aufheben",
|
||||
"WaitForHostMsg": "Die Konferenz wurde noch nicht gestartet. Falls Sie die Konferenz leiten, authentifizieren Sie sich bitte. Warten Sie andernfalls, bis die Konferenz gestartet wird.",
|
||||
"WaitForHostNoAuthMsg": "Die Konferenz wurde noch nicht gestartet. Bitte warten Sie, bis die Konferenz gestartet wird.",
|
||||
"WaitingForHostButton": "Auf Moderation warten",
|
||||
"WaitingForHostTitle": "Warten auf den Beginn der Konferenz …",
|
||||
@@ -296,6 +315,12 @@
|
||||
"alreadySharedVideoTitle": "Nur ein geteiltes Video gleichzeitig",
|
||||
"applicationWindow": "Anwendungsfenster",
|
||||
"authenticationRequired": "Authentifizierung benötigt",
|
||||
"cameraCaptureDialog": {
|
||||
"description": "Ein Bild mit Ihrer Kamera aufnehmen und senden",
|
||||
"ok": "Kamera starten",
|
||||
"reject": "Jetzt nicht",
|
||||
"title": "Ein Bild aufnehmen"
|
||||
},
|
||||
"cameraConstraintFailedError": "Ihre Kamera erfüllt die notwendigen Anforderungen nicht.",
|
||||
"cameraNotFoundError": "Kamera nicht gefunden.",
|
||||
"cameraNotSendingData": "Die Kamera ist nicht verfügbar. Bitte prüfen, ob eine andere Applikation die Kamera verwendet, eine andere Kamera vom Einstellungs-Menü auswählen oder die Applikation neu laden.",
|
||||
@@ -358,6 +383,8 @@
|
||||
"lockRoom": "Konferenz$t(lockRoomPassword) hinzufügen",
|
||||
"lockTitle": "Sperren fehlgeschlagen",
|
||||
"login": "Anmelden",
|
||||
"loginFailed": "Anmeldung fehlgeschlagen.",
|
||||
"loginOnResume": "Ihre Anmeldung ist abgelaufen. Sie müssen sich neu anmelden um weiter an der Konferenz teilzunehmen.",
|
||||
"loginQuestion": "Sind Sie sicher, dass sie sich anmelden und die Konferenz verlassen möchten?",
|
||||
"logoutQuestion": "Sind Sie sicher, dass Sie sich abmelden und die Konferenz verlassen möchten?",
|
||||
"logoutTitle": "Abmelden",
|
||||
@@ -371,22 +398,34 @@
|
||||
"micTimeoutError": "Audioquelle konnte nicht gestartet werden. Zeitüberschreitung",
|
||||
"micUnknownError": "Das Mikrofon kann aus einem unbekannten Grund nicht verwendet werden.",
|
||||
"moderationAudioLabel": "Erlaube Anwesenden die Stummschaltung für sich aufzuheben",
|
||||
"moderationDesktopLabel": "Erlaube Anwesenden ihren Bildschirm freizugeben",
|
||||
"moderationVideoLabel": "Erlaube Anwesenden ihre Kamera einzuschalten",
|
||||
"muteEveryoneDialog": "Wollen Sie wirklich alle stummschalten? Sie können deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneDialogModerationOn": "Die Anwesenden können eine Anfrage zum Sprechen jederzeit senden.",
|
||||
"muteEveryoneElseDialog": "Einmal stummgeschaltet, können Sie deren Stummschaltung nicht mehr beenden, aber sie können ihre Stummschaltung jederzeit selbst beenden.",
|
||||
"muteEveryoneElseTitle": "Alle außer {{whom}} stummschalten?",
|
||||
"muteEveryoneElsesDesktopDialog": "Sobald die Bildschirmfreigaben beendet sind, können Sie diese nicht mehr starten, aber die anderen können sie jederzeit wieder starten.",
|
||||
"muteEveryoneElsesDesktopTitle": "Alle Bildschirmfreigaben außer {{whom}} beenden?",
|
||||
"muteEveryoneElsesVideoDialog": "Sobald die Kamera für alle anderen Personen deaktiviert ist, können Sie diese nicht wieder für alle einschalten, die anderen Personen können ihre Kamera aber jederzeit wieder einschalten.",
|
||||
"muteEveryoneElsesVideoTitle": "Die Kamera von allen außer {{whom}} ausschalten?",
|
||||
"muteEveryoneSelf": "sich selbst",
|
||||
"muteEveryoneStartMuted": "Alle beginnen von jetzt an stummgeschaltet",
|
||||
"muteEveryoneTitle": "Alle stummschalten?",
|
||||
"muteEveryonesDesktopDialog": "Die Anwesenden können ihren Bildschirm jederzeit freigeben.",
|
||||
"muteEveryonesDesktopDialogModerationOn": "Die Anwesenden können jederzeit eine Anfrage zur Bildschirmfreigabe senden.",
|
||||
"muteEveryonesDesktopTitle": "Alle Bildschirmfreigaben beenden?",
|
||||
"muteEveryonesVideoDialog": "Sind Sie sicher, dass Sie die Kamera von allen Personen deaktivieren möchten? Sie können dies nicht wieder rückgängig machen, jede Personen kann ihre Kamera aber jederzeit wieder einschalten.",
|
||||
"muteEveryonesVideoDialogModerationOn": "Die Anwesenden können jederzeit eine Anfrage senden, um ihre Kamera einzuschalten.",
|
||||
"muteEveryonesVideoDialogOk": "deaktivieren",
|
||||
"muteEveryonesVideoTitle": "Die Kamera von allen anderen ausschalten?",
|
||||
"muteParticipantBody": "Sie können die Stummschaltung anderer Personen nicht aufheben, aber eine Person kann ihre eigene Stummschaltung jederzeit beenden.",
|
||||
"muteParticipantButton": "Stummschalten",
|
||||
"muteParticipantsDesktopBody": "Sie können Bildschirmfreigaben von anderen nicht starten, sie können dies aber jederzeit.",
|
||||
"muteParticipantsDesktopBodyModerationOn": "Weder Sie noch andere Anwesende können Bildschirmfreigaben starten.",
|
||||
"muteParticipantsDesktopButton": "Bildschirmfreigabe beenden",
|
||||
"muteParticipantsDesktopDialog": "Sind Sie sicher, dass Sie die Bildschirmfreigabe von dieser Person beenden möchten? Sie können diese nicht mehr starten, die Person aber jederzeit.",
|
||||
"muteParticipantsDesktopDialogModerationOn": "Sind Sie sicher, dass Sie die Bildschirmfreigabe von dieser Person beenden möchten? Weder Sie noch die Person kann die Bildschirmfreigabe wieder starten.",
|
||||
"muteParticipantsDesktopTitle": "Bildschirmfreigabe von dieser Person beenden?",
|
||||
"muteParticipantsVideoBody": "Sie können die Kamera nicht wieder einschalten, die Person kann ihre Kamera aber jederzeit wieder einschalten.",
|
||||
"muteParticipantsVideoBodyModerationOn": "Sie können die Kamera nicht wieder aktivieren und die Person selbst auch nicht.",
|
||||
"muteParticipantsVideoButton": "Kamera ausschalten",
|
||||
@@ -406,9 +445,7 @@
|
||||
"recentlyUsedObjects": "Ihre zuletzt verwendeten Objekte",
|
||||
"recording": "Aufnahme",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Während eines Livestreams nicht möglich",
|
||||
"recordingInProgressDescription": "Diese Konferenz wird aufgezeichnet und von KI analysiert {{learnMore}}. Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Diese Konferenz wird aufgezeichnet und von KI analysiert",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.",
|
||||
"recordingInProgressDescription": "Diese Konferenz wird aufgezeichnet und von KI analysiert. Ihr Ton und Video ist deaktiviert, wenn Sie es aktivieren, stimmen Sie der Aufzeichnung zu.",
|
||||
"recordingInProgressTitle": "Aufnahme läuft",
|
||||
"rejoinNow": "Jetzt erneut beitreten",
|
||||
"remoteControlAllowedMessage": "{{user}} hat die Anfrage zur Fernsteuerung angenommen!",
|
||||
@@ -499,6 +536,7 @@
|
||||
"tokenAuthFailedWithReasons": "Teilnahme an der Konferenz fehlgeschlagen. Möglicher Grund: {{reason}}",
|
||||
"tokenAuthUnsupported": "Token-Authentifizierung wird nicht unterstützt.",
|
||||
"transcribing": "Wird transkribiert",
|
||||
"unauthenticatedAccessDisabled": "Zur Teilnahme an dieser Konferenz müssen Sie sich anmelden.",
|
||||
"unlockRoom": "Konferenz$t(lockRoomPassword) entfernen",
|
||||
"user": "Anmeldename",
|
||||
"userIdentifier": "Benutzername",
|
||||
@@ -539,6 +577,26 @@
|
||||
"veryBad": "Sehr schlecht",
|
||||
"veryGood": "Sehr gut"
|
||||
},
|
||||
"fileSharing": {
|
||||
"downloadFailedDescription": "Bitte nochmals versuchen.",
|
||||
"downloadFailedTitle": "Download fehlgeschlagen",
|
||||
"downloadFile": "Download",
|
||||
"downloadStarted": "Download gestartet",
|
||||
"dragAndDrop": "Dateien hier oder irgendwo auf dem Bildschirm loslassen",
|
||||
"fileAlreadyUploaded": "Datei wurde schon zur Konferenz hochgeladen.",
|
||||
"fileRemovedByOther": "Ihre Datei '{{ fileName }}' wurde entfernt",
|
||||
"fileTooLargeDescription": "Bitte stellen Sie sicher, dass Ihre Datei nicht die Maximalgröße von {{ maxFileSize }} überschreitet.",
|
||||
"fileTooLargeTitle": "Die ausgewählte Datei ist zu groß",
|
||||
"fileUploadProgress": "Datei wird hochgeladen",
|
||||
"fileUploadedSuccessfully": "Datei erfolgreich hochgeladen",
|
||||
"newFileNotification": "{{ participantName }} hat Datei '{{ fileName }}' hochgeladen",
|
||||
"removeFile": "Entfernen",
|
||||
"removeFileSuccess": "Datei erfolgreich entfernt",
|
||||
"uploadDisabled": "Keine Berechtigung, Dateien hochzuladen. Bitte bei der Moderation anfragen.",
|
||||
"uploadFailedDescription": "Bitte versuchen Sie es erneut.",
|
||||
"uploadFailedTitle": "Dateiupload fehlgeschlagen",
|
||||
"uploadFile": "Datei hochladen"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Videominiaturen"
|
||||
@@ -652,8 +710,6 @@
|
||||
"googlePrivacyPolicy": "Google-Datenschutzerklärung",
|
||||
"inProgress": "Livestreaming gestartet",
|
||||
"invalidStreamKey": "Der Livestream-Schlüssel ist u. U. falsch.",
|
||||
"limitNotificationDescriptionNative": "Ihr Stream ist begrenzt auf {{limit}} Min. Für unlimitiertes Streaming, nutzen Sie bitte {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihr Stream auf {{limit}} Min. begrenzt. Für unlimitiertes Streaming nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Livestream gestoppt",
|
||||
"offBy": "{{name}} stoppte den Livestream",
|
||||
"on": "Livestream",
|
||||
@@ -707,7 +763,8 @@
|
||||
"notificationTitle": "Lobby",
|
||||
"passwordJoinButton": "Beitreten",
|
||||
"title": "Lobby",
|
||||
"toggleLabel": "Lobby aktivieren"
|
||||
"toggleLabel": "Lobby aktivieren",
|
||||
"waitForModerator": "Die Konferenz wurde noch nicht gestartet, da noch keine Moderation anwesend ist. Wenn Sie zur Moderation gehören, melden Sie sich bitte an, ansonsten warten Sie bitte."
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -750,8 +807,9 @@
|
||||
"me": "ich",
|
||||
"notify": {
|
||||
"OldElectronAPPTitle": "Sicherheitslücke!",
|
||||
"allowAll": "Alles einschalten",
|
||||
"allowAudio": "Mikrofon einschalten",
|
||||
"allowBoth": "Beides",
|
||||
"allowDesktop": "Bildschirmfreigabe einschalten",
|
||||
"allowVideo": "Kamera einschalten",
|
||||
"allowedUnmute": "Sie können die Stummschaltung aufheben, Ihre Kamera einschalten oder Ihren Bildschirm teilen.",
|
||||
"audioUnmuteBlockedDescription": "Díe Stummschaltung kann aus Überlastungsschutzgründen temporär nicht aufgehoben werden.",
|
||||
@@ -765,6 +823,7 @@
|
||||
"dataChannelClosedDescription": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher ist die Videoqulität auf die schlechteste Stufe limitiert.",
|
||||
"dataChannelClosedDescriptionWithAudio": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher können Video- und Tonprobleme auftreten.",
|
||||
"dataChannelClosedWithAudio": "Ton- und Videoqualität können beeinträchtigt sein",
|
||||
"desktopMutedRemotelyTitle": "Ihre Bildschirmfreigabe wurde von {{participantDisplayName}} gestoppt",
|
||||
"disabledIframe": "Die Einbettung ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet.",
|
||||
"disabledIframeSecondaryNative": "Die Einbettung von {{domain}} ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet.",
|
||||
"disabledIframeSecondaryWeb": "Die Einbettung von {{domain}} ist nur für Demo-Zwecke vorgesehen. Diese Konferenz wird in {{timeout}} Minuten beendet. Bitte nutzen Sie <a href='{{jaasDomain}}' rel='noopener noreferrer' target='_blank'>Jitsi as a Service</a> für produktive Zwecke!",
|
||||
@@ -822,6 +881,7 @@
|
||||
"oldElectronClientDescription1": "Sie scheinen eine alte Version des Jitsi-Meet-Clients zu nutzen. Diese hat bekannte Schwachstellen. Bitte aktualisieren Sie auf unsere ",
|
||||
"oldElectronClientDescription2": "aktuelle Version",
|
||||
"oldElectronClientDescription3": "!",
|
||||
"openChat": "Chat öffnen",
|
||||
"participantWantsToJoin": "Möchte an der Konferenz teilnehmen",
|
||||
"participantsWantToJoin": "Möchten an der Konferenz teilnehmen",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) von einer anderen Person entfernt",
|
||||
@@ -845,6 +905,7 @@
|
||||
"suggestRecordingDescription": "Möchten Sie eine Aufzeichnung starten?",
|
||||
"suggestRecordingTitle": "Konferenz aufzeichnen",
|
||||
"unmute": "Stummschaltung aufheben",
|
||||
"unmuteScreen": "Bildschirmfreigabe starten",
|
||||
"unmuteVideo": "Kamera einschalten",
|
||||
"videoMutedRemotelyDescription": "Sie können sie jederzeit wieder einschalten.",
|
||||
"videoMutedRemotelyTitle": "Ihre Kamera wurde von {{participantDisplayName}} ausgeschaltet!",
|
||||
@@ -864,11 +925,14 @@
|
||||
"admit": "Zulassen",
|
||||
"admitAll": "Alle zulassen",
|
||||
"allow": "Anwesenden erlauben:",
|
||||
"allowDesktop": "Bildschirm freizugeben",
|
||||
"allowVideo": "Kamera einschalten",
|
||||
"askDesktop": "Anfragen, Bildschirm freizugeben",
|
||||
"askUnmute": "Anfragen, Stummschaltung aufzuheben",
|
||||
"audioModeration": "Für sich selbst die Stummschaltung aufzuheben",
|
||||
"blockEveryoneMicCamera": "Kamera und Mikrofon von allen sperren",
|
||||
"breakoutRooms": "Breakout-Räume",
|
||||
"desktopModeration": "Bildschirmfreigabe",
|
||||
"goLive": "Live gehen",
|
||||
"invite": "Person einladen",
|
||||
"lowerAllHands": "Alle Hände senken",
|
||||
@@ -880,6 +944,8 @@
|
||||
"muteAll": "Alle stummschalten",
|
||||
"muteEveryoneElse": "Alle anderen stummschalten",
|
||||
"reject": "Ablehnen",
|
||||
"stopDesktop": "Bildschirmfreigabe beenden",
|
||||
"stopEveryonesDesktop": "Alle Bildschirmfreigaben beenden",
|
||||
"stopEveryonesVideo": "Alle Kameras ausschalten",
|
||||
"stopVideo": "Kamera ausschalten",
|
||||
"unblockEveryoneMicCamera": "Kamera und Mikrofon von allen entsperren",
|
||||
@@ -889,9 +955,11 @@
|
||||
"headings": {
|
||||
"lobby": "Lobby ({{count}})",
|
||||
"participantsList": "Anwesende ({{count}})",
|
||||
"viewerRequests": "Zuschaueranfragen {{count}}",
|
||||
"visitorInQueue": " (Wartende Gäste {{count}})",
|
||||
"visitorRequests": " (Anfragen {{count}})",
|
||||
"visitors": "Gäste ({{count}})",
|
||||
"visitorsList": "Zuschauer ({{count}})",
|
||||
"waitingLobby": "In der Lobby ({{count}})"
|
||||
},
|
||||
"search": "Suche Anwesende",
|
||||
@@ -912,6 +980,9 @@
|
||||
"by": "Von {{ name }}",
|
||||
"closeButton": "Umfrage schließen",
|
||||
"create": {
|
||||
"accessibilityLabel": {
|
||||
"send": "Umfrage erstellen"
|
||||
},
|
||||
"addOption": "Antwort hinzufügen",
|
||||
"answerPlaceholder": "Antwort {{index}}",
|
||||
"cancel": "Abbrechen",
|
||||
@@ -920,8 +991,7 @@
|
||||
"pollQuestion": "Frage",
|
||||
"questionPlaceholder": "Eine Frage stellen",
|
||||
"removeOption": "Antwort entfernen",
|
||||
"save": "Erstellen",
|
||||
"send": "Senden"
|
||||
"save": "Erstellen"
|
||||
},
|
||||
"errors": {
|
||||
"notUniqueOption": "Optionen müssen einzigartig sein"
|
||||
@@ -1059,8 +1129,6 @@
|
||||
"highlightMomentSuccess": "Highlight festgehalten",
|
||||
"highlightMomentSucessDescription": "Ihr festgehaltener Moment wird zur Zusammenfassung der Konferenz hinzugefügt.",
|
||||
"inProgress": "Aufzeichnung gestartet",
|
||||
"limitNotificationDescriptionNative": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Wegen hoher Nachfrage ist Ihre Aufnahme auf {{limit}} Min. begrenzt. Für unlimitierte Aufnahmen nutzen Sie bitte <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Link zur Aufzeichnung wurde generiert.",
|
||||
"localRecordingNoNotificationWarning": "Die Aufzeichnung wird anderen Anwesenden nicht mitgeteilt. Sie müssen diese selbst darauf hinweisen, dass die Konferenz aufgezeichnet wird.",
|
||||
"localRecordingNoVideo": "Videos werden nicht aufgenommen",
|
||||
@@ -1122,7 +1190,7 @@
|
||||
"signedIn": "Momentan wird auf Kalendertermine von {{email}} zugegriffen. Klicken Sie auf die folgende Schaltfläche „Trennen“, um den Zugriff auf die Kalendertermine zu stoppen.",
|
||||
"title": "Kalender"
|
||||
},
|
||||
"chatWithPermissions": "Chat mit Freigaben",
|
||||
"chatWithPermissions": "Chat nur für Moderation erlauben",
|
||||
"desktopShareFramerate": "Framerate für Bildschirmfreigabe",
|
||||
"desktopShareHighFpsWarning": "Eine höhere Framerate könnte sich auf Ihre Datenrate auswirken. Sie müssen die Bildschirmfreigabe neustarten, damit die Einstellung übernommen wird.",
|
||||
"desktopShareWarning": "Sie müssen die Bildschirmfreigabe neustarten, damit die Einstellung übernommen wird.",
|
||||
@@ -1247,6 +1315,7 @@
|
||||
"chat": "Chatfenster öffnen / schließen",
|
||||
"clap": "Klatschen",
|
||||
"closeChat": "Chat schließen",
|
||||
"closeCustomPanel": "Schließen",
|
||||
"closeMoreActions": "„Weitere Einstellungen“ schließen",
|
||||
"closeParticipantsPane": "Anwesendenliste schließen",
|
||||
"closedCaptions": "Untertitel",
|
||||
@@ -1328,6 +1397,20 @@
|
||||
"videounmute": "Kamera einschalten"
|
||||
},
|
||||
"addPeople": "Personen zur Konferenz hinzufügen",
|
||||
"advancedAudioSettings": {
|
||||
"aec": {
|
||||
"label": "Echounterdrückung"
|
||||
},
|
||||
"agc": {
|
||||
"label": "Automatische Mikrofonlautstärke"
|
||||
},
|
||||
"ns": {
|
||||
"label": "Rauschunterdrückung"
|
||||
},
|
||||
"stereo": {
|
||||
"label": "Stereo"
|
||||
}
|
||||
},
|
||||
"audioOnlyOff": "Modus „Nur Audio“ deaktivieren",
|
||||
"audioOnlyOn": "Modus „Nur Audio“ aktivieren",
|
||||
"audioRoute": "Audiogerät auswählen",
|
||||
@@ -1338,9 +1421,11 @@
|
||||
"chat": "Chat öffnen / schließen",
|
||||
"clap": "Klatschen",
|
||||
"closeChat": "Chat schließen",
|
||||
"closeCustomPanel": "Schließen",
|
||||
"closeParticipantsPane": "Anwesenheitsliste schließen",
|
||||
"closeReactionsMenu": "Interaktionsmenü schließen",
|
||||
"closedCaptions": "Untertitel",
|
||||
"copilot": "Copilot",
|
||||
"disableNoiseSuppression": "Rauschunterdrückung deaktivieren",
|
||||
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
|
||||
"documentClose": "Geteiltes Dokument schließen",
|
||||
@@ -1355,6 +1440,7 @@
|
||||
"exitFullScreen": "Vollbildmodus verlassen",
|
||||
"exitTileView": "Kachelansicht ausschalten",
|
||||
"feedback": "Feedback hinterlassen",
|
||||
"fileSharing": "Dateien",
|
||||
"giphy": "GIPHY ein-/ausschalten",
|
||||
"hangup": "Konferenz verlassen",
|
||||
"help": "Hilfe",
|
||||
@@ -1390,6 +1476,7 @@
|
||||
"openReactionsMenu": "Interaktionsmenü öffnen",
|
||||
"participants": "Anwesende",
|
||||
"pip": "Bild-in-Bild-Modus einschalten",
|
||||
"polls": "Umfragen",
|
||||
"privateMessage": "Private Nachricht senden",
|
||||
"profile": "Profil bearbeiten",
|
||||
"raiseHand": "Hand heben",
|
||||
@@ -1399,6 +1486,7 @@
|
||||
"reactionHeart": "Herz senden",
|
||||
"reactionLaugh": "Lachen senden",
|
||||
"reactionLike": "Daumen hoch senden",
|
||||
"reactionLove": "Liebe senden",
|
||||
"reactionSilence": "Stille senden",
|
||||
"reactionSurprised": "Überrascht senden",
|
||||
"reactions": "Interaktionen",
|
||||
@@ -1484,6 +1572,8 @@
|
||||
"connectionInfo": "Verbindungsinformationen",
|
||||
"demote": "Zu Gästen verschieben",
|
||||
"domute": "Stummschalten",
|
||||
"domuteDesktop": "Bildschirmfreigabe beenden",
|
||||
"domuteDesktopOfOthers": "Bildschirmfreigabe für alle beenden",
|
||||
"domuteOthers": "Alle anderen stummschalten",
|
||||
"domuteVideo": "Kamera ausschalten",
|
||||
"domuteVideoOfOthers": "Alle anderen Kameras auschalten",
|
||||
@@ -1548,6 +1638,8 @@
|
||||
"noMainParticipantsTitle": "Diese Konferenz wurde noch nicht gestartet.",
|
||||
"noVisitorLobby": "Sie können nicht teilnehmen, solange die Lobby für diese Konferenz aktiviert ist.",
|
||||
"notAllowedPromotion": "Eine Person muss Ihre Anfrage erst erlauben.",
|
||||
"requestToJoin": "Hand gehoben",
|
||||
"requestToJoinDescription": "Ihre Anfrage wurde an die Moderation gesendet, bitte warten Sie.",
|
||||
"title": "Sie sind Gast in der Konferenz"
|
||||
},
|
||||
"waitingMessage": "Sie werden der Konferenz beitreten, sobald sie gestartet ist!"
|
||||
|
||||
@@ -543,8 +543,6 @@
|
||||
"googlePrivacyPolicy": "regule k woplěwanju datow pla Google",
|
||||
"inProgress": "Livestreaming jo se zachopił",
|
||||
"invalidStreamKey": "Kluc za livestream jo ewentuelnje wopacny.",
|
||||
"limitNotificationDescriptionNative": "Waš stream jo na {{limit}} minutow wobgranicowany. Za njelimitěrowany streaming, wužywajśo aplikaciju {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Dla intensiwnego wužywanja jo Waš stream na {{limit}} minutow wobgranicowany. Za njelimitěrowany streaming wužywajśo aplikaciju <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Livestream jo zastajony",
|
||||
"offBy": "{{name}} jo livestream zastajił",
|
||||
"on": "livestream",
|
||||
@@ -905,8 +903,6 @@
|
||||
"highlightMomentSuccess": "highlight jo se markěrował",
|
||||
"highlightMomentSucessDescription": "Waš markěrowany moment pśidajo se k wopowěsći wót zmakanja.",
|
||||
"inProgress": "Nagrawanje abo livestream jo we źěle",
|
||||
"limitNotificationDescriptionNative": "Dla intensiwnego wužywanja jo Wašo nagrawanje na {{limit}} minutow wobgranicowane. Za njelimitěrowane nagrawanje wužyj aplikaciju <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Dla intensiwnego wužywanja jo Wašo nagrawanje na {{limit}} minutow wobgranicowane. Za njelimitěrowane nagrawanje wužyjśo aplikaciju <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Link k nagrawanju jo se generěrował.",
|
||||
"live": "LIVE",
|
||||
"localRecordingNoNotificationWarning": "Druge wobźělniki njedostanu powěsći wót nagrawanja. Wy musyśo jich sami informěrowaś, až konferenca se nagrawa.",
|
||||
|
||||
@@ -560,8 +560,6 @@
|
||||
"googlePrivacyPolicy": "Πολιτική Απορρήτου της Google",
|
||||
"inProgress": "Εγγραφή ή ζωντανή ροή σε εξέλιξη",
|
||||
"invalidStreamKey": "Το κλειδί ζωντανής ροής μπορεί να είναι εσφαλμένο.",
|
||||
"limitNotificationDescriptionNative": "Η ροή σας θα περιοριστεί σε {{limit}} λεπτά. Για ροή χωρίς όρια δοκιμάστε το {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Λόγω υψηλής ζήτησης η ροή θα περιοριστεί σε {{limit}} λεπτά. Για απεριόριστες ροές δοκιμάστε το <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Η Ζωντανή Ροή σταμάτησε",
|
||||
"offBy": "{{name}} σταμάτησε τη ζωντανή ροή",
|
||||
"on": "Η Ζωντανή Ροή ξεκίνησε",
|
||||
@@ -919,8 +917,6 @@
|
||||
"highlightMomentSuccess": "Η στιγμή επισημάνθηκε",
|
||||
"highlightMomentSucessDescription": "Οι επισημασμένη στιγμή θα προστεθεί στη περίληψη της σύσκεψης.",
|
||||
"inProgress": "Σε εξέλιξη καταγραφή ή ζωντανή ροή",
|
||||
"limitNotificationDescriptionNative": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιοριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε το <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Λόγω υψηλής ζήτησης η εγγραφή σας θα περιοριστεί σε {{limit}} λεπτά. Για απεριόριστες εγγραφές, δοκιμάστε το <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Δημιουργήσαμε ένα σύνδεσμο για τη καταγραφή σας.",
|
||||
"live": "ΖΩΝΤΑΝΑ",
|
||||
"localRecordingNoNotificationWarning": "Η καταγραφή δεν θα κοινοποιηθεί στους άλλους συμμετέχοντες. Θα πρέπει εσείς να τους ενημερώσετε ότι η σύσκεψη καταγράφεται.",
|
||||
|
||||
@@ -621,8 +621,6 @@
|
||||
"googlePrivacyPolicy": "Privatecpolitiko de Google",
|
||||
"inProgress": "Registrado aŭ vivelsendo farata",
|
||||
"invalidStreamKey": "La ŝlosilo de tuja elsendfluo povas esti malĝusta.",
|
||||
"limitNotificationDescriptionNative": "Via vivelsendo estos limigita al {{limit}} minutoj. Por senlima vivelsendo provu {{ app}}.",
|
||||
"limitNotificationDescriptionWeb": "Pro alta postulo, via vivelsendo estos limigita al {{limit}} minutoj. Por senlima vivelsendo provu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Tuja elsendfluo finiĝis",
|
||||
"offBy": "{{name}} ĉesigis la tujan elsendfluon",
|
||||
"on": "Tuja elsendfluo",
|
||||
@@ -996,8 +994,6 @@
|
||||
"highlightMomentSuccess": "Momento emfazita",
|
||||
"highlightMomentSucessDescription": "Via emfazita momento estos aldonita al la kunveno priskribo",
|
||||
"inProgress": "Registrado aŭ vivelsendo farata",
|
||||
"limitNotificationDescriptionNative": "Pro alta postulo via registrado estos limigita al {{ limo }} minutoj. Pro senlima registrado, provu <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Pro alta postulo via registrado estos limigita al {{ limo }} minutoj. Pro senlima registrado, provu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Ni generis ligilon al via registrado.",
|
||||
"live": "LIVE",
|
||||
"localRecordingNoNotificationWarning": "La registrado ne estos anoncita al aliaj partoprenantoj. Vi devos sciigi al ili, ke la renkontiĝo estas registrita.",
|
||||
|
||||
@@ -502,8 +502,6 @@
|
||||
"getStreamKeyManually": "No pudimos encontrar tu clave de transmisión. Por favor, obtenla de la página de YouTube y pégala.",
|
||||
"googlePrivacyPolicy": "Política de Privacidad de Google",
|
||||
"invalidStreamKey": "Es posible que la clave de transmisión sea incorrecta, o no es de YouTube.",
|
||||
"limitNotificationDescriptionNative": "Su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Se detuvo la transmisión",
|
||||
"offBy": "{{name}} detuvo la transmisión",
|
||||
"on": "Transmitiendo en vivo",
|
||||
@@ -800,8 +798,6 @@
|
||||
"expandedPending": "La grabación se está iniciando…",
|
||||
"failedToStart": "No se pudo iniciar la grabación",
|
||||
"fileSharingdescription": "Compartir la grabación con los participantes de la reunión",
|
||||
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Hemos generado un enlace a su grabación.",
|
||||
"live": "EN VIVO",
|
||||
"loggedIn": "Sesión iniciada como {{userName}}",
|
||||
|
||||
@@ -578,8 +578,6 @@
|
||||
"googlePrivacyPolicy": "Política de Privacidad de Google",
|
||||
"inProgress": "Grabación o transmisión en vivo en curso",
|
||||
"invalidStreamKey": "Es posible que la clave de transmisión sea incorrecta, o no es de YouTube.",
|
||||
"limitNotificationDescriptionNative": "Su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su transmisión estará limitada a {{limit}} minutos. Puede obtener transmisiones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Se detuvo la transmisión",
|
||||
"offBy": "{{name}} detuvo la transmisión",
|
||||
"on": "Transmitiendo en vivo",
|
||||
@@ -947,8 +945,6 @@
|
||||
"highlightMomentSuccess": "Momento destacado",
|
||||
"highlightMomentSucessDescription": "Su momento destacado será agregado al resumen de la reunión.",
|
||||
"inProgress": "Grabación o transmisión en vivo en curso",
|
||||
"limitNotificationDescriptionNative": "Su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Debido a la alta demanda su grabación estará limitada a {{limit}} minutos. Puede obtener grabaciones ilimitadas en <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Hemos generado un enlace a su grabación.",
|
||||
"live": "EN VIVO",
|
||||
"localRecordingNoNotificationWarning": "La grabación no será anunciada al resto de participantes. Necesitarás hacerles saber que la reunión está siendo grabada.",
|
||||
|
||||
@@ -444,8 +444,6 @@
|
||||
"getStreamKeyManually": "Ezin izan dugu zure transmisio-gakoa bilatu. Lortu ezazu YouTuberen webgunetik.",
|
||||
"googlePrivacyPolicy": "Google-en pribatutasun-politika",
|
||||
"invalidStreamKey": "Zuzeneko transmisioaren gakoa okerra izan daiteke.",
|
||||
"limitNotificationDescriptionNative": "Zure emanaldia {{limit}} minutura mugatuta dago. Mugarik gabekoa nahi baduzu probatu {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Zuzeneko emanaldien arrakasta dela eta {{limit}} minutura mugatuta daude. Mugarik gabekoa nahi baduzu probatu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Zuzeneko transmisioa gelditu da",
|
||||
"offBy": "{{name}} erabiltzaileak zuzeneko emanaldia gelditu du",
|
||||
"on": "Zuzeneko transmisioa",
|
||||
@@ -685,8 +683,6 @@
|
||||
"expandedPending": "Grabaketa abian da…",
|
||||
"failedToStart": "Grabazioa hasteak huts egin du",
|
||||
"fileSharingdescription": "Partekatu grabazioa bileraren parte-hartzaileekin",
|
||||
"limitNotificationDescriptionNative": "Zure grabazioa {{limit}} minutura mugatuta dago. Mugarik gabeko grabazioak izateko probatu <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Zure grabazioa {{limit}} minutura mugatuta dago. Mugarik gabeko grabazioak izateko probatu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"live": "ZUZENEAN",
|
||||
"loggedIn": "{{userName}} gisa saioa hasita",
|
||||
"off": "Grabazioa gelditu da",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
1203
lang/main-fi.json
1203
lang/main-fi.json
File diff suppressed because it is too large
Load Diff
@@ -359,7 +359,7 @@
|
||||
"kickParticipantTitle": "Expulser ce membre?",
|
||||
"kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion",
|
||||
"kickTitle": "Expulsé de la réunion",
|
||||
"learnMore": "en savoir plus",
|
||||
"learnMore": "En savoir plus",
|
||||
"linkMeeting": "Relier la réunion",
|
||||
"linkMeetingTitle": "Relier la réunion à Salesforce",
|
||||
"liveStreaming": "Diffusion en direct",
|
||||
@@ -429,9 +429,7 @@
|
||||
"recentlyUsedObjects": "Vos objets récemment utilisés",
|
||||
"recording": "Enregistrement",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct",
|
||||
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA{{learnMore}}. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Cette réunion est en cours d'enregistrement et d'analyse par IA",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
|
||||
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
|
||||
"recordingInProgressTitle": "Enregistrement en cours",
|
||||
"rejoinNow": "Rejoindre maintenant",
|
||||
"remoteControlAllowedMessage": "{{user}} a accepté votre demande de contrôle à distance!",
|
||||
@@ -692,8 +690,6 @@
|
||||
"googlePrivacyPolicy": "Politique de confidentialité de Google",
|
||||
"inProgress": "Enregisrtement ou diffusion en cours",
|
||||
"invalidStreamKey": "La clé de diffusion en direct peut être erronée.",
|
||||
"limitNotificationDescriptionNative": "Votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
|
||||
"off": "La diffusion en direct s'est arrêtée",
|
||||
"offBy": "{{name}} a arrêté la diffusion en continu",
|
||||
"on": "Diffusion en direct",
|
||||
@@ -1111,8 +1107,6 @@
|
||||
"highlightMomentSuccess": "Moment souligné",
|
||||
"highlightMomentSucessDescription": "Votre moment souligné sera ajouté au résumé de la réunion.",
|
||||
"inProgress": "Enregistrement ou diffusion en cours",
|
||||
"limitNotificationDescriptionNative": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <3> {{app}} </3>.",
|
||||
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
|
||||
"linkGenerated": "Nous avons généré un lien à votre enregistrement.",
|
||||
"localRecordingNoNotificationWarning": "Le démarrage de l’enregistrement ne sera pas annoncé aux autres participants. Vous devrez les informer par vous-même que la réunion sera enregistrée.",
|
||||
"localRecordingNoVideo": "La vidéo n'est pas en cours d’enregistrement",
|
||||
|
||||
@@ -114,6 +114,9 @@
|
||||
"error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}",
|
||||
"everyone": "Tout le monde",
|
||||
"fieldPlaceHolder": "Tapez votre message ici",
|
||||
"fileAccessibleTitle": "{{user}} a téléversé un fichier",
|
||||
"fileAccessibleTitleMe": "j’ai téléversé un fichier",
|
||||
"fileDeleted": "Un fichier a été supprimé",
|
||||
"guestsChatIndicator": "(invité)",
|
||||
"lobbyChatMessageTo": "Message de salle d'attente à {{recipient}}",
|
||||
"message": "Message",
|
||||
@@ -123,8 +126,16 @@
|
||||
"messagebox": "Envoyer un message",
|
||||
"newMessages": "Nouveaux messages",
|
||||
"nickname": {
|
||||
"featureChat": "chat",
|
||||
"featureClosedCaptions": "sous-titres",
|
||||
"featureFileSharing": "partage de fichiers",
|
||||
"featurePolls": "sondages",
|
||||
"popover": "Choisissez un pseudonyme",
|
||||
"title": "Entrez un pseudonyme pour utiliser le chat",
|
||||
"titleWith1Features": "Entrez un pseudonyme pour utiliser {{feature1}}",
|
||||
"titleWith2Features": "Entrez un pseudonyme pour utiliser {{feature1}} et {{feature2}}",
|
||||
"titleWith3Features": "Entrez un pseudonyme pour utiliser {{feature1}}, {{feature2}} et {{feature3}}",
|
||||
"titleWith4Features": "Entrez un pseudonyme pour utiliser {{feature1}}, {{feature2}}, {{feature3}} et {{feature4}}",
|
||||
"titleWithCC": "Entrez un pseudonyme pour utiliser le chat et les sous-titres",
|
||||
"titleWithPolls": "Entrez un pseudonyme pour utiliser le chat et les sondages",
|
||||
"titleWithPollsAndCC": "Entrez un pseudonyme pour utiliser le chat, les sondages et les sous-titres",
|
||||
@@ -216,6 +227,9 @@
|
||||
"video_ssrc": "Video SSRC :",
|
||||
"yes": "oui"
|
||||
},
|
||||
"customPanel": {
|
||||
"close": "Fermer"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "Plus tôt",
|
||||
"today": "Aujourd'hui",
|
||||
@@ -359,7 +373,7 @@
|
||||
"kickParticipantTitle": "Expulser ce participant ?",
|
||||
"kickSystemTitle": "Oups ! Vous avez été expulsé de la réunion",
|
||||
"kickTitle": "Oups ! vous avez été expulsé(e) par {{participantDisplayName}}",
|
||||
"learnMore": "en savoir plus",
|
||||
"learnMore": "En savoir plus",
|
||||
"linkMeeting": "Relier la conférence",
|
||||
"linkMeetingTitle": "Relier la conférence à Salesforce",
|
||||
"liveStreaming": "Direct",
|
||||
@@ -429,9 +443,7 @@
|
||||
"recentlyUsedObjects": "Vos objets récemment utilisés",
|
||||
"recording": "Enregistrement",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct",
|
||||
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA{{learnMore}}. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Cette réunion est en cours d'enregistrement et d'analyse par IA",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
|
||||
"recordingInProgressDescription": "Cette réunion est en cours d'enregistrement et d'analyse par IA. Votre audio et vidéo ont été coupés. Si vous choisissez de vous réactiver, vous consentez à être enregistré.",
|
||||
"recordingInProgressTitle": "Enregistrement en cours",
|
||||
"rejoinNow": "Rejoindre maintenant",
|
||||
"remoteControlAllowedMessage": "{{user}} a accepté votre demande de prise en main à distance !",
|
||||
@@ -522,6 +534,7 @@
|
||||
"tokenAuthFailedWithReasons": "Désolé, vous n’êtes pas autorisé à rejoindre l’appel. La raison possible : {{reason}}.",
|
||||
"tokenAuthUnsupported": "Token URL n'est pas supporté.",
|
||||
"transcribing": "Transcription",
|
||||
"unauthenticatedAccessDisabled": "Cet appel nécessite une authentification. Veuillez vous connecter pour continuer.",
|
||||
"unlockRoom": "Supprimer le $t(lockRoomPassword) de la réunion",
|
||||
"user": "Utilisateur",
|
||||
"userIdentifier": "Identifiant utilisateur",
|
||||
@@ -569,10 +582,12 @@
|
||||
"downloadStarted": "Téléchargement de fichier démarré",
|
||||
"dragAndDrop": "Glissez et déposez des fichiers ici ou n'importe où sur l'écran",
|
||||
"fileAlreadyUploaded": "Le fichier a déjà été téléchargé vers cette réunion.",
|
||||
"fileRemovedByOther": "Votre fichier « {{ fileName }} » a été supprimé",
|
||||
"fileTooLargeDescription": "Veuillez vous assurer que le fichier ne dépasse pas {{ maxFileSize }}.",
|
||||
"fileTooLargeTitle": "Le fichier sélectionné est trop volumineux",
|
||||
"fileUploadProgress": "Progression du téléchargement de fichier",
|
||||
"fileUploadedSuccessfully": "Fichier téléchargé avec succès",
|
||||
"newFileNotification": "{{ participantName }} a partagé « {{ fileName }} »",
|
||||
"removeFile": "Supprimer",
|
||||
"removeFileSuccess": "Fichier supprimé avec succès",
|
||||
"uploadFailedDescription": "Veuillez réessayer.",
|
||||
@@ -692,8 +707,6 @@
|
||||
"googlePrivacyPolicy": "Politique de confidentialité de Google",
|
||||
"inProgress": "Enregisrtement ou diffusion en cours",
|
||||
"invalidStreamKey": "La clé de diffusion en direct n'est peut-être pas correcte.",
|
||||
"limitNotificationDescriptionNative": "Votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre diffusion sera limitée à {{limit}} min. Pour une diffusion illimitée, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
|
||||
"off": "La diffusion en direct (streaming) a été arrêté",
|
||||
"offBy": "{{name}} a arrêté la diffusion en direct",
|
||||
"on": "En direct",
|
||||
@@ -964,6 +977,9 @@
|
||||
"by": "Par {{ name }}",
|
||||
"closeButton": "Fermer le sondage",
|
||||
"create": {
|
||||
"accessibilityLabel": {
|
||||
"send": "Envoyer le sondage"
|
||||
},
|
||||
"addOption": "Ajouter une option",
|
||||
"answerPlaceholder": "Option {{index}}",
|
||||
"cancel": "Annuler",
|
||||
@@ -972,8 +988,7 @@
|
||||
"pollQuestion": "Question du sondage",
|
||||
"questionPlaceholder": "Poser une question",
|
||||
"removeOption": "Supprimer l'option",
|
||||
"save": "Enregistrer",
|
||||
"send": "Envoyer"
|
||||
"save": "Enregistrer"
|
||||
},
|
||||
"errors": {
|
||||
"notUniqueOption": "Les options doivent être uniques"
|
||||
@@ -1111,8 +1126,6 @@
|
||||
"highlightMomentSuccess": "Moment souligné",
|
||||
"highlightMomentSucessDescription": "Votre moment souligné sera ajouté au résumé de la réunion.",
|
||||
"inProgress": "Enregistrement ou diffusion en cours",
|
||||
"limitNotificationDescriptionNative": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <3> {{app}} </3>.",
|
||||
"limitNotificationDescriptionWeb": "En raison d'une forte demande, votre enregistrement sera limité à {{limit}} min. Pour des enregistrements illimités, essayez <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
|
||||
"linkGenerated": "Nous avons généré un lien à votre enregistrement.",
|
||||
"localRecordingNoNotificationWarning": "Le démarrage de l’enregistrement ne sera pas annoncé aux autres participants. Vous devrez les informer par vous-même que la réunion sera enregistrée.",
|
||||
"localRecordingNoVideo": "La vidéo n'est pas en cours d’enregistrement",
|
||||
@@ -1299,6 +1312,7 @@
|
||||
"chat": "Afficher / Masquer la discussion instantanée",
|
||||
"clap": "Applaudir",
|
||||
"closeChat": "Fermer la discussion instantanée",
|
||||
"closeCustomPanel": "Fermer",
|
||||
"closeMoreActions": "Fermer le menu plus d'actions",
|
||||
"closeParticipantsPane": "Fermer le panneau des participants",
|
||||
"closedCaptions": "Sous-titres",
|
||||
@@ -1404,9 +1418,11 @@
|
||||
"chat": "Ouvrir / Fermer le chat",
|
||||
"clap": "Applaudir",
|
||||
"closeChat": "Fermer le chat",
|
||||
"closeCustomPanel": "Fermer",
|
||||
"closeParticipantsPane": "Fermer le panneau des participants",
|
||||
"closeReactionsMenu": "Fermer le menu réactions",
|
||||
"closedCaptions": "Sous-titres",
|
||||
"copilot": "Copilot",
|
||||
"disableNoiseSuppression": "Arrêter la suppression du bruit",
|
||||
"disableReactionSounds": "Vous pouvez interdire les réactions sonores à cette réunion",
|
||||
"documentClose": "Fermer le document partagé",
|
||||
@@ -1421,6 +1437,7 @@
|
||||
"exitFullScreen": "Quitter le mode plein écran",
|
||||
"exitTileView": "Quitter le mode mosaïque",
|
||||
"feedback": "Laisser des commentaires",
|
||||
"fileSharing": "Partage de fichiers",
|
||||
"giphy": "Activer/désactiver le menu GIPHY",
|
||||
"hangup": "Quitter",
|
||||
"help": "Aide",
|
||||
@@ -1456,6 +1473,7 @@
|
||||
"openReactionsMenu": "Ouvrir le menu Réactions",
|
||||
"participants": "Participants",
|
||||
"pip": "Entrer en mode Picture-in-Picture",
|
||||
"polls": "Sondages",
|
||||
"privateMessage": "Envoyer un message privé",
|
||||
"profile": "Éditer votre profil",
|
||||
"raiseHand": "Lever / Baisser la main",
|
||||
|
||||
1022
lang/main-hi.json
1022
lang/main-hi.json
File diff suppressed because it is too large
Load Diff
@@ -541,8 +541,6 @@
|
||||
"googlePrivacyPolicy": "Google politika privatnosti",
|
||||
"inProgress": "U tijeku je snimanje ili prijenos uživo",
|
||||
"invalidStreamKey": "Ključ prijenosa uživo možda nije ispravan.",
|
||||
"limitNotificationDescriptionNative": "Tvoj prijenos će biti ograničen na {{limit}} min. Za neograničeni prijenos isprobaj {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Zbog velike potražnje će tvoj prijenos biti ograničen na {{limit}} min. Za neograničeni prijenos isprobaj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Prijenos uživo prekinut",
|
||||
"offBy": "{{name}} je prekinuo/la prijenos uživo",
|
||||
"on": "Prijenos uživo pokrenut",
|
||||
@@ -903,8 +901,6 @@
|
||||
"highlightMomentSuccess": "Trenutak istaknut",
|
||||
"highlightMomentSucessDescription": "Tvoj istaknuti trenutak će se dodati u sažetak sastanka.",
|
||||
"inProgress": "Snimanje ili prijenos uživo u tijeku",
|
||||
"limitNotificationDescriptionNative": "Zbog velike potražnje, tvoje će snimanje biti ograničeno na {{limit}} min. Za neograničeno snimanje isprobaj <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Zbog velike potražnje, tvoje će snimanje biti ograničeno na {{limit}} min. Za neograničeno snimanje isprobaj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Generirali smo poveznicu za tvoje snimanje.",
|
||||
"live": "UŽIVO",
|
||||
"localRecordingNoNotificationWarning": "Snimanje se neće najaviti ostalim sudionicima. Morat ćeš ih obavijestiti da se sastanak snima.",
|
||||
|
||||
@@ -531,8 +531,6 @@
|
||||
"googlePrivacyPolicy": "regule za datowy škit pola Google",
|
||||
"inProgress": "live-stream startowany",
|
||||
"invalidStreamKey": "Kluč za live-stream njeje najskerje prawy.",
|
||||
"limitNotificationDescriptionNative": "Waš stream je na {{limit}} mjeń. wobmjezowany. Za njewobmjezowany streaming wužiwajće prošu {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Wysokeje potrjeby dla je Waš stream na {{limit}} mjeń. wobmjezowany. Za njewobmjezowany streaming dźiće prošu na <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "live-stream stopowany",
|
||||
"offBy": "{{name}} zadźerža live-stream",
|
||||
"on": "live-stream",
|
||||
@@ -887,8 +885,6 @@
|
||||
"highlightMomentSuccess": "markěrowane",
|
||||
"highlightMomentSucessDescription": "Waš markěrowany wokomik so k zjeću konferency přida.",
|
||||
"inProgress": "nahrawanje startowane",
|
||||
"limitNotificationDescriptionNative": " Wulkeje potrjeby dla je Waše nahraće na {{limit}} mjeń. wobmjezowane. Za njewobmjezowane nahraće wužiwajće prošu <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Wulkeje potrjeby dla je Waše nahrawanje na {{limit}} mjeń. wobmjezowane. Za njewobmjezowane nahrawanje wužiwajće prošu <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "link na nahrawanje bu kreěrowany",
|
||||
"live": "LIVE",
|
||||
"localRecordingWarning": "Kedźbujće na to, aktualny tab za prawe widejo a awdijo wužiwać.",
|
||||
|
||||
@@ -631,8 +631,6 @@
|
||||
"googlePrivacyPolicy": "Kebijakan Privasi Google",
|
||||
"inProgress": "Perekaman atau siaran langsung sedang berlangsung",
|
||||
"invalidStreamKey": "Kunci siaran langsung mungkin salah.",
|
||||
"limitNotificationDescriptionNative": "Pemutaran streaming Anda akan dibatasi menjadi {{limit}} menit. Untuk streaming tanpa batas, coba {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Karena permintaan yang tinggi, streaming Anda akan dibatasi menjadi {{limit}} menit. Untuk streaming tanpa batas, coba <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Siaran Langsung berhenti",
|
||||
"offBy": "{{name}} menghentikan siaran langsung",
|
||||
"on": "Siaran Langsung dimulai",
|
||||
@@ -1016,8 +1014,6 @@
|
||||
"highlightMomentSuccess": "Momen disorot",
|
||||
"highlightMomentSucessDescription": "Momen yang Anda sorot akan ditambahkan ke ringkasan pertemuan.",
|
||||
"inProgress": "Rekaman atau siaran langsung sedang berlangsung",
|
||||
"limitNotificationDescriptionNative": "Karena permintaan tinggi, rekaman Anda akan dibatasi menjadi {{limit}} menit. Untuk rekaman tanpa batas, coba <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Karena permintaan tinggi, rekaman Anda akan dibatasi menjadi {{limit}} menit. Untuk rekaman tanpa batas, coba <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Kami telah menghasilkan tautan untuk rekaman Anda.",
|
||||
"localRecordingNoNotificationWarning": "Rekaman tidak akan diumumkan kepada peserta lain. Anda perlu memberi tahu mereka bahwa pertemuan direkam.",
|
||||
"localRecordingNoVideo": "Video tidak direkam",
|
||||
|
||||
@@ -622,8 +622,6 @@
|
||||
"googlePrivacyPolicy": "Meðferð persónuupplýsinga hjá Google",
|
||||
"inProgress": "Upptaka eða beint streymi í gangi",
|
||||
"invalidStreamKey": "Lykill fyrir beint streymi gæti verið rangur.",
|
||||
"limitNotificationDescriptionNative": "Streymið þitt verður takmarkað við {{limit}} mínútur. Fyrir ótakmarkað streymi ættirðu að prófa {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Vegna mikils álags verður streymið þitt takmarkað við {{limit}} mínútur. Fyrir ótakmarkað streymi ættirðu að prófa <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Beint streymi stöðvað",
|
||||
"offBy": "{{name}} stöðvaði beina streymið",
|
||||
"on": "Beint streymi er hafið",
|
||||
@@ -997,8 +995,6 @@
|
||||
"highlightMomentSuccess": "Áherslulitað augnablik",
|
||||
"highlightMomentSucessDescription": "Áherslulituðum augnablikum mun verða bætt við yfirlit fundarins.",
|
||||
"inProgress": "Upptaka eða beint streymi í gangi",
|
||||
"limitNotificationDescriptionNative": "Vegna mikils álags verður upptakan þín takmörkuð við {{limit}} mínútur. Fyrir ótakmarkaðar upptökur ættirðu að prófa <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Vegna mikils álags verður upptakan þín takmörkuð við {{limit}} mínútur. Fyrir ótakmarkaðar upptökur ættirðu að prófa <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Við höfum útbúið tengil á upptökuna þína.",
|
||||
"localRecordingNoNotificationWarning": "Upptakan verður ekki tilkynnt öðrum þátttakendum. Þú þarft að láta aðra vita að fundurinn sé tekinn upp.",
|
||||
"localRecordingNoVideo": "Ekki er verið að taka upp myndmerki",
|
||||
|
||||
@@ -126,8 +126,16 @@
|
||||
"messagebox": "Digita un messaggio",
|
||||
"newMessages": "Nuovi messaggi",
|
||||
"nickname": {
|
||||
"featureChat": "la chat",
|
||||
"featureClosedCaptions": "i sottotitoli",
|
||||
"featureFileSharing": "la condivisione file",
|
||||
"featurePolls": "i sondaggi",
|
||||
"popover": "Scegli un nickname",
|
||||
"title": "Inserisci un nickname per usare la chat",
|
||||
"titleWith1Features": "Inserisci un nickname per usare {{feature1}}",
|
||||
"titleWith2Features": "Inserisci un nickname per usare {{feature1}} e {{feature2}}",
|
||||
"titleWith3Features": "Inserisci un nickname per usare {{feature1}}, {{feature2}} e {{feature3}}",
|
||||
"titleWith4Features": "Inserisci un nickname per usare {{feature1}}, {{feature2}}, {{feature3}} e {{feature4}}",
|
||||
"titleWithCC": "Inserisci un nickname per usare la chat e i sottotitoli",
|
||||
"titleWithPolls": "Inserisci un nickname per usare la chat e i sondaggi",
|
||||
"titleWithPollsAndCC": "Inserisci un nickname per usare la chat, i sondaggi e i sottotitoli",
|
||||
@@ -159,7 +167,7 @@
|
||||
"installExtensionText": "Installa un'estensione per integrare Google Calendar e Office 365"
|
||||
},
|
||||
"closedCaptionsTab": {
|
||||
"emptyState": "Il contenuto dei sottotitoli sarà disponibile una volta che l'organizzatore lo attiverà",
|
||||
"emptyState": "Il contenuto dei sottotitoli sarà disponibile una volta che un moderatore lo attiverà",
|
||||
"startClosedCaptionsButton": "Attiva sottotitoli"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
@@ -283,9 +291,9 @@
|
||||
"Submit": "Invia",
|
||||
"Understand": "Accetto, mantieni microfono e videocamera disattivati per ora",
|
||||
"UnderstandAndUnmute": "Accetto, riattiva microfono e videocamera",
|
||||
"WaitForHostNoAuthMsg": "La riunione non è ancora iniziata perché nessun organizzatore si è ancora collegato. Si prega di attendere.",
|
||||
"WaitingForHostButton": "Attendi l'organizzatore",
|
||||
"WaitingForHostTitle": "In attesa dell'organizzatore…",
|
||||
"WaitForHostNoAuthMsg": "La riunione non è ancora iniziata perché nessun moderatore si è ancora collegato. Si prega di attendere.",
|
||||
"WaitingForHostButton": "Attendi un moderatore",
|
||||
"WaitingForHostTitle": "In attesa di un moderatore…",
|
||||
"Yes": "Sì",
|
||||
"accessibilityLabel": {
|
||||
"Cancel": "Annulla (chiudi dialogo)",
|
||||
@@ -348,8 +356,8 @@
|
||||
"error": "Errore",
|
||||
"errorRoomCreationRestriction": "Hai provato ad accedere alla riunione troppo presto, torna tra un po'.",
|
||||
"gracefulShutdown": "Il nostro servizio è al momento inattivo per manutenzione. Si prega di riprovare più tardi.",
|
||||
"grantModeratorDialog": "Vuoi rendere relatore questo partecipante?",
|
||||
"grantModeratorTitle": "Fai diventare relatore",
|
||||
"grantModeratorDialog": "Desideri di concedere i permessi da moderatore a {{participantName}}?",
|
||||
"grantModeratorTitle": "Concedi permessi da moderatore",
|
||||
"hide": "Nascondi",
|
||||
"hideShareAudioHelper": "Non mostrare più questa finestra",
|
||||
"incorrectPassword": "Nome utente o password errati",
|
||||
@@ -362,7 +370,7 @@
|
||||
"kickParticipantTitle": "Espellere questo partecipante?",
|
||||
"kickSystemTitle": "Oh! Sei stato espulso dalla riunione",
|
||||
"kickTitle": "Oh! {{participantDisplayName}} ti ha espulso dalla riunione.",
|
||||
"learnMore": "ulteriori informazioni",
|
||||
"learnMore": "Ulteriori informazioni",
|
||||
"linkMeeting": "Collega la riunione",
|
||||
"linkMeetingTitle": "Collega la riunione a Salesforce",
|
||||
"liveStreaming": "Diretta",
|
||||
@@ -433,8 +441,6 @@
|
||||
"recording": "Registrazione",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossibile durante una diretta.",
|
||||
"recordingInProgressDescription": "Questa riunione sta venendo registrata e analizzata dall'IA. I tuoi audio e video sono stati disattivati. Riattivandoli, acconsenti ad essere registrato.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Questa riunione sta venendo registrata e analizzata dall'IA",
|
||||
"recordingInProgressDescriptionSecondHalf": ". I tuoi audio e video sono stati disattivati. Riattivandoli, acconsenti ad essere registrato.",
|
||||
"recordingInProgressTitle": "Registrazione in corso",
|
||||
"rejoinNow": "Ricollegati ora",
|
||||
"remoteControlAllowedMessage": "{{user}} ha accettato la tua richiesta di controllo remoto!",
|
||||
@@ -698,8 +704,6 @@
|
||||
"googlePrivacyPolicy": "Politiche sulla privacy di Google",
|
||||
"inProgress": "Registrazione o diretta in corso",
|
||||
"invalidStreamKey": "La chiave della diretta potrebbe non essere corretta.",
|
||||
"limitNotificationDescriptionNative": "La tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate prova {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Data la grossa domanda la tua diretta sarà limitata a {{limit}} minuti. Per dirette illimitate, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "La diretta si è interrotta",
|
||||
"offBy": "{{name}} ha fermato la diretta",
|
||||
"on": "Diretta avviata",
|
||||
@@ -727,12 +731,12 @@
|
||||
"emailField": "Inserisci il tuo indirizzo email",
|
||||
"enableDialogPasswordField": "Imposta password (opzionale)",
|
||||
"enableDialogSubmit": "Attiva",
|
||||
"enableDialogText": "La sala d'attesa ti permette di proteggere la riunione concedendo l'accesso solo alle persone autorizzate da un organizzatore.",
|
||||
"enableDialogText": "La sala d'attesa ti permette di proteggere la riunione concedendo l'accesso solo alle persone autorizzate da un moderatore.",
|
||||
"enterPasswordButton": "Inserisci password riunione",
|
||||
"enterPasswordTitle": "Inserisci la password per entrare nella riunione",
|
||||
"errorMissingPassword": "Inserisci la password della riunione",
|
||||
"invalidPassword": "Password errata",
|
||||
"joinRejectedMessage": "La tua richiesta d'accesso è stata respinta da un organizzatore.",
|
||||
"joinRejectedMessage": "La tua richiesta d'accesso è stata respinta da un moderatore.",
|
||||
"joinRejectedTitle": "Richiesta d'accesso respinta.",
|
||||
"joinTitle": "Entra nella riunione",
|
||||
"joinWithPasswordMessage": "Tentativo di accesso con password in corso, si prega di attendere…",
|
||||
@@ -754,7 +758,7 @@
|
||||
"passwordJoinButton": "Entra",
|
||||
"title": "Sala d'attesa",
|
||||
"toggleLabel": "Attiva sala d'attesa",
|
||||
"waitForModerator": "La riunione non è ancora iniziata, perché non è arrivato alcun organizzatore. Se vuoi diventarlo autenticati, altrimenti attendi."
|
||||
"waitForModerator": "La riunione non è ancora iniziata, perché non è arrivato alcun moderatore. Se vuoi diventarlo autenticati, altrimenti si prega di attendere."
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -772,11 +776,11 @@
|
||||
"me": "Io",
|
||||
"messages": {
|
||||
"engaged": "Registrazione avviata.",
|
||||
"finished": "La registrazione della sessione {{token}} è terminata. Invia il file della registrazione all'organizzatore.",
|
||||
"finishedModerator": "La registrazione della sessione {{token}} è terminata. La registrazione della traccia è stata salvata. Chiedi ai partecipanti di inviare le loro registrazioni.",
|
||||
"notModerator": "Non sei un relatore. Non puoi avviare o interrompere la registrazione."
|
||||
"finished": "La registrazione della sessione {{token}} è terminata. Invia il file della registrazione al moderatore.",
|
||||
"finishedModerator": "La registrazione della sessione {{token}} è terminata. La registrazione della traccia locale è stata salvata. Si prega di chiedere ai partecipanti di inviare le loro registrazioni.",
|
||||
"notModerator": "Non sei un moderatore. Non puoi avviare o interrompere la registrazione."
|
||||
},
|
||||
"moderator": "Relatore",
|
||||
"moderator": "Moderatore",
|
||||
"no": "No",
|
||||
"participant": "Partecipante",
|
||||
"participantStats": "Statistiche partecipante",
|
||||
@@ -824,7 +828,7 @@
|
||||
"focusFail": "{{component}} non disponibile - nuovo tentativo tra {{ms}} sec",
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "Notifiche",
|
||||
"hostAskedUnmute": "Il relatore ti chiede di intervenire.",
|
||||
"hostAskedUnmute": "Il moderatore ti chiede di intervenire.",
|
||||
"invalidTenant": "Nome non valido",
|
||||
"invalidTenantHyphenDescription": "Il nome che hai scelto non è valido (inizia o finisce con '-').",
|
||||
"invalidTenantLengthDescription": "Il nome che hai scelto è troppo lungo.",
|
||||
@@ -846,17 +850,17 @@
|
||||
"localRecordingStopped": "{{name}} ha smesso di registrare.",
|
||||
"me": "Io",
|
||||
"moderationInEffectCSDescription": "Alza la mano, se vuoi condividere lo schermo.",
|
||||
"moderationInEffectCSTitle": "La condivisione schermo è stata bloccata dal relatore",
|
||||
"moderationInEffectCSTitle": "La condivisione schermo è stata bloccata dal moderatore",
|
||||
"moderationInEffectDescription": "Alza la mano, se vuoi prendere la parola.",
|
||||
"moderationInEffectTitle": "Il tuo microfono è stato spento dal relatore",
|
||||
"moderationInEffectTitle": "Il tuo microfono è stato spento dal moderatore",
|
||||
"moderationInEffectVideoDescription": "Alza la mano, se vuoi avviare la tua videocamera.",
|
||||
"moderationInEffectVideoTitle": "La tua videocamera è stata spenta dal relatore",
|
||||
"moderationRequestFromModerator": "Il relatore vorrebbe che tu accendessi il microfono",
|
||||
"moderationInEffectVideoTitle": "La tua videocamera è stata spenta dal moderatore",
|
||||
"moderationRequestFromModerator": "L'organizzatore ti chiede di accendere il microfono",
|
||||
"moderationRequestFromParticipant": "Vuole parlare",
|
||||
"moderationStartedTitle": "Moderazione in corso",
|
||||
"moderationStoppedTitle": "Moderazione interrotta",
|
||||
"moderationToggleDescription": "da {{participantDisplayName}}",
|
||||
"moderator": "Ora sei un relatore!",
|
||||
"moderator": "Ora sei un moderatore!",
|
||||
"muted": "Hai iniziato la conversazione con il microfono disattivato.",
|
||||
"mutedRemotelyDescription": "Puoi sempre attivare il microfono quando vuoi parlare. Spegni il microfono quando hai finito, per evitare rumori di fondo nella riunione.",
|
||||
"mutedRemotelyTitle": "{{participantDisplayName}} ti ha spento il microfono",
|
||||
@@ -1119,8 +1123,6 @@
|
||||
"highlightMomentSuccess": "Momento evidenziato",
|
||||
"highlightMomentSucessDescription": "Il tuo momento evidenziato sarà aggiunto al riepilogo della riunione.",
|
||||
"inProgress": "Registrazione o diretta in corso",
|
||||
"limitNotificationDescriptionNative": "La tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Per la grossa domanda la tua registrazione sarà limitata a {{limit}} minuti. Per registrazioni illimitate, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "È stato generato un collegamento alla tua registrazione.",
|
||||
"localRecordingNoNotificationWarning": "La registrazione non verrà annunciata ai partecipanti. Dovrai dir loro che la riunione viene registrata.",
|
||||
"localRecordingNoVideo": "Il video non sta venendo registrato",
|
||||
@@ -1162,7 +1164,7 @@
|
||||
},
|
||||
"security": {
|
||||
"about": "Puoi aggiungere una $t(lockRoomPassword) alla riunione. I partecipanti dovranno inserire la $t(lockRoomPassword) per accedere alla riunione.",
|
||||
"aboutReadOnly": "Gli organizzatori possono aggiungere una $t(lockRoomPassword) alla riunione. I partecipanti dovranno inserire la $t(lockRoomPassword) per accedere alla riunione.",
|
||||
"aboutReadOnly": "I moderatori possono aggiungere una $t(lockRoomPassword) alla riunione. I partecipanti dovranno inserire la $t(lockRoomPassword) per accedere alla riunione.",
|
||||
"insecureRoomNameWarningNative": "Il nome della riunione è troppo semplice. Partecipanti non desiderati potrebbero entrare nella riunione. {{recommendAction}} Per saperne di più sulla sicurezza della tua riunione ",
|
||||
"insecureRoomNameWarningWeb": "Il nome della riunione è troppo semplice. Partecipanti non desiderati potrebbero entrare nella riunione. {{recommendAction}} Per saperne di più sulla sicurezza della tua riunione <a href=\"{{securityUrl}}\" rel=\"security\" target=\"_blank\">clicca qui</a>.",
|
||||
"title": "Impostazioni di sicurezza",
|
||||
@@ -1182,7 +1184,7 @@
|
||||
"signedIn": "Accesso agli eventi del calendario per {{email}} in corso. Clicca sul pulsante Disconnetti per interrompere l’accesso agli eventi sul calendario.",
|
||||
"title": "Calendario"
|
||||
},
|
||||
"chatWithPermissions": "La chat richiede il permesso",
|
||||
"chatWithPermissions": "Disattiva la chat per i partecipanti",
|
||||
"desktopShareFramerate": "Frequenza di aggiornamento condivisone schermo",
|
||||
"desktopShareHighFpsWarning": "Una frequenza di aggiornamento della condivisione dello schermo più alta può influire sulla tua connessione. Devi riavviare la condivisione schermo, per applicare le modifiche.",
|
||||
"desktopShareWarning": "Devi riavviare la condivisione schermo, per applicare le modifiche.",
|
||||
@@ -1195,8 +1197,8 @@
|
||||
"loggedIn": "Connesso come {{name}}",
|
||||
"maxStageParticipants": "Numero massimo di partecipanti che possono essere messi in evidenza nella schermata principale",
|
||||
"microphones": "Microfoni",
|
||||
"moderator": "Relatore",
|
||||
"moderatorOptions": "Opzioni relatore",
|
||||
"moderator": "Moderatore",
|
||||
"moderatorOptions": "Opzioni moderatore",
|
||||
"more": "Generali",
|
||||
"name": "Nome",
|
||||
"noDevice": "Nessuno",
|
||||
@@ -1325,7 +1327,7 @@
|
||||
"feedback": "Lascia un feedback",
|
||||
"fullScreen": "Attiva modalità a schermo intero",
|
||||
"giphy": "Mostra menu GIPHY",
|
||||
"grantModerator": "Concedi permessi da relatore",
|
||||
"grantModerator": "Concedi permessi da moderatore",
|
||||
"hangup": "Lascia la riunione",
|
||||
"heading": "Barra degli strumenti",
|
||||
"help": "Aiuto",
|
||||
@@ -1350,7 +1352,7 @@
|
||||
"muteEveryoneElsesVideoStream": "Spegni la videocamera a tutti gli altri",
|
||||
"muteEveryonesVideoStream": "Spegni la videocamera a tutti",
|
||||
"muteGUMPending": "Connessione del microfono in corso",
|
||||
"noiseSuppression": "Cancellazione del rumore (BETA)",
|
||||
"noiseSuppression": "Cancellazione del rumore",
|
||||
"openChat": "Apri chat",
|
||||
"participants": "Apri pannello partecipanti. {{participantsCount}} partecipanti",
|
||||
"pip": "Attiva modalità Picture-in-Picture",
|
||||
@@ -1415,20 +1417,21 @@
|
||||
"closeParticipantsPane": "Chiudi pannello partecipanti",
|
||||
"closeReactionsMenu": "Chiudi menu reazioni",
|
||||
"closedCaptions": "Sottotitoli",
|
||||
"disableNoiseSuppression": "Disattiva cancellazione del rumore (BETA)",
|
||||
"disableNoiseSuppression": "Disattiva cancellazione del rumore",
|
||||
"disableReactionSounds": "Puoi disattivare i suoni delle reazioni in questa riunione",
|
||||
"documentClose": "Chiudi documento condiviso",
|
||||
"documentOpen": "Apri documento condiviso",
|
||||
"download": "Scarica le nostre app",
|
||||
"e2ee": "Crittografia End-to-End",
|
||||
"embedMeeting": "Incorpora riunione",
|
||||
"enableNoiseSuppression": "Attiva cancellazione del rumore (BETA)",
|
||||
"enableNoiseSuppression": "Attiva cancellazione del rumore",
|
||||
"endConference": "Termina la riunione per tutti",
|
||||
"enterFullScreen": "Mostra a schermo intero",
|
||||
"enterTileView": "Mostra vista a mosaico",
|
||||
"exitFullScreen": "Esci dalla modalità a schermo intero",
|
||||
"exitTileView": "Esci dalla vista a mosaico",
|
||||
"feedback": "Lascia un feedback",
|
||||
"fileSharing": "Condivisione file",
|
||||
"giphy": "Menu GIPHY",
|
||||
"hangup": "Lascia la riunione",
|
||||
"help": "Aiuto",
|
||||
@@ -1457,13 +1460,14 @@
|
||||
"noAudioSignalDialInDesc": "Puoi anche chiamare usando:",
|
||||
"noAudioSignalDialInLinkDesc": "Numeri di telefono",
|
||||
"noAudioSignalTitle": "Nessun suono rilevato dal tuo microfono!",
|
||||
"noiseSuppression": "Cancellazione del rumore (BETA)",
|
||||
"noiseSuppression": "Cancellazione del rumore",
|
||||
"noisyAudioInputDesc": "Sembra che il tuo microfono faccia rumore, si prega di spegnerlo o cambiarlo.",
|
||||
"noisyAudioInputTitle": "Il tuo microfono sembra fare rumore!",
|
||||
"openChat": "Apri chat",
|
||||
"openReactionsMenu": "Apri il menu reazioni",
|
||||
"participants": "Partecipanti",
|
||||
"pip": "Abilita modalità Picture-in-Picture",
|
||||
"polls": "Sondaggi",
|
||||
"privateMessage": "Invia un messaggio privato",
|
||||
"profile": "Modifica profilo",
|
||||
"raiseHand": "Alza la mano",
|
||||
@@ -1565,11 +1569,11 @@
|
||||
"domuteVideo": "Disattiva videocamera",
|
||||
"domuteVideoOfOthers": "Disattiva videocamera a tutti gli altri",
|
||||
"flip": "Specchia",
|
||||
"grantModerator": "Concedi permessi da relatore",
|
||||
"grantModerator": "Concedi permessi da moderatore",
|
||||
"hideSelfView": "Nascondi la tua immagine",
|
||||
"kick": "Espelli",
|
||||
"mirrorVideo": "Specchia il tuo video",
|
||||
"moderator": "Relatore",
|
||||
"moderator": "Moderatore",
|
||||
"mute": "Il partecipante ha il microfono spento",
|
||||
"muted": "Microfono spento",
|
||||
"pinToStage": "Metti in primo piano",
|
||||
@@ -1616,7 +1620,7 @@
|
||||
"description": "Adesso sei uno spettatore in questa riunione.",
|
||||
"raiseHand": "Alza la mano",
|
||||
"title": "Ingresso nella riunione in corso",
|
||||
"wishToSpeak": "Se vuoi parlare, si prega di alzare la mano sotto e aspettare l'autorizzazione del relatore."
|
||||
"wishToSpeak": "Per parlare si prega di alzare la mano sotto e aspettare l'autorizzazione del moderatore."
|
||||
},
|
||||
"labelTooltip": "Numero di spettatori: {{count}}",
|
||||
"notification": {
|
||||
@@ -1626,7 +1630,7 @@
|
||||
"noVisitorLobby": "Non puoi partecipare se la sala d'attesa è attiva per la riunione.",
|
||||
"notAllowedPromotion": "Un partecipante deve autorizzare la tua richiesta prima.",
|
||||
"requestToJoin": "Mano alzata",
|
||||
"requestToJoinDescription": "La tua richiesta è stata inviata ai relatori. Tieni duro!",
|
||||
"requestToJoinDescription": "La tua richiesta è stata inviata ai moderatori. Tieni duro!",
|
||||
"title": "Sei uno spettatore nella riunione"
|
||||
},
|
||||
"waitingMessage": "Ti unirai alla riunione quando inizierà!"
|
||||
@@ -1667,7 +1671,7 @@
|
||||
"mobileDownLoadLinkAndroid": "Scarica applicazione per Android",
|
||||
"mobileDownLoadLinkFDroid": "Scarica applicazione da F-Droid",
|
||||
"mobileDownLoadLinkIos": "Scarica applicazione per iOS",
|
||||
"moderatedMessage": "O <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">prepara un URL di riunione</a> in anticipo, quando sei l'unico organizzatore.",
|
||||
"moderatedMessage": "O <a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">prepara un URL di riunione</a> in anticipo, quando sei l'unico moderatore.",
|
||||
"privacy": "Privacy",
|
||||
"recentList": "Recenti",
|
||||
"recentListDelete": "Cancella",
|
||||
|
||||
@@ -505,8 +505,6 @@
|
||||
"googlePrivacyPolicy": "Google プライバシーポリシー",
|
||||
"inProgress": "録画またはライブ配信中です",
|
||||
"invalidStreamKey": "ストリームキーが正しくないようです。",
|
||||
"limitNotificationDescriptionNative": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。無制限に録画するには<3>{{app}}</3>をお試しください。",
|
||||
"limitNotificationDescriptionWeb": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。 無制限に録画するには<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>をお試しください。",
|
||||
"off": "ライブ配信を停止しました",
|
||||
"offBy": "{{name}} がライブ配信を停止しました",
|
||||
"on": "ライブ配信を開始しました",
|
||||
@@ -835,8 +833,6 @@
|
||||
"highlightMomentSuccess": "ハイライトされました",
|
||||
"highlightMomentSucessDescription": "ハイライトされた瞬間は議事録に追加されます。",
|
||||
"inProgress": "録画またはライブ配信中です",
|
||||
"limitNotificationDescriptionNative": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。無制限に録画するには<3>{{app}}</3>をお試しください。",
|
||||
"limitNotificationDescriptionWeb": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。 無制限に録画するには<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>をお試しください。",
|
||||
"linkGenerated": "あなたの録画へのリンクを生成しました。",
|
||||
"live": "LIVE",
|
||||
"localRecordingNoNotificationWarning": "この録画は他の参加者に通知されません。このミーティングが録画されていることを他の参加者に伝えてください。",
|
||||
|
||||
@@ -480,8 +480,6 @@
|
||||
"getStreamKeyManually": "Ur nessaweḍ ara ad d-nerr ula d yiwen n usuddem usrid. Ɛreḍ ad d-tawiḍ tasarut-ik·im n usuddem usrid seg Youtube.",
|
||||
"googlePrivacyPolicy": "Tasertit tabaḍnit n Google",
|
||||
"invalidStreamKey": "Tasarut n usuddem usrid yezmer mačči d tameɣtut.",
|
||||
"limitNotificationDescriptionNative": "Asuddem-inek·inem ad yesɛu kan {{limit}} tesdidin. I usuddem war talast ɛreḍ {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Seg wakken yegget usuter, asuddem-inek·inem ad yesɛu talast n {{limit}} tesdidin. I usuddem n war tilas, ɛreḍ <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Asuddem usrid yettuḥbes",
|
||||
"offBy": "{{name}} iseḥbes asuddem usrid",
|
||||
"on": "Yebda usuddem usrid",
|
||||
@@ -777,8 +775,6 @@
|
||||
"expandedPending": "Asekles ha-t-an yebda….",
|
||||
"failedToStart": "Beddu n usekles ur yeddi ara",
|
||||
"fileSharingdescription": "Bḍu asekles d yimttekkiyen n temlilit",
|
||||
"limitNotificationDescriptionNative": "Seg tuget n usuter, asekles-inek·inem ad yesɛu kan {{limit}} tesdidin. I yiseklas war tilas, ɛreḍ <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Seg tuget n usuter, asekles-inek·inem ad yesɛu kan {{limit}} tesdidin. I yiseklas war tilas, ɛreḍ <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Nsirew-d aseɣwen i usekles-inek·inem.",
|
||||
"live": "SRID",
|
||||
"loggedIn": "Yekcem s {{userName}}",
|
||||
|
||||
1697
lang/main-kk.json
Normal file
1697
lang/main-kk.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -634,8 +634,6 @@
|
||||
"googlePrivacyPolicy": "Google 개인 정보 보호 정책",
|
||||
"inProgress": "녹화 또는 실시간 스트리밍 진행 중",
|
||||
"invalidStreamKey": "라이브 스트림 키가 잘못되었을 수 있습니다.",
|
||||
"limitNotificationDescriptionNative": "스트리밍이 {{limit}}분으로 제한됩니다. 무제한 스트리밍을 사용하려면 {{app}}을 시도해 보세요.",
|
||||
"limitNotificationDescriptionWeb": "수요가 많아 스트리밍이 {{limit}}분으로 제한됩니다. 무제한 스트리밍을 사용하려면 <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>을 시도해 보세요.",
|
||||
"off": "실시간 스트리밍이 중지됨",
|
||||
"offBy": "{{name}}님이 실시간 스트리밍을 중지했습니다",
|
||||
"on": "실시간 스트리밍",
|
||||
@@ -1036,8 +1034,6 @@
|
||||
"highlightMomentSuccess": "순간 강조 표시됨",
|
||||
"highlightMomentSucessDescription": "강조 표시된 순간이 회의 요약에 추가됩니다.",
|
||||
"inProgress": "녹화 또는 실시간 스트리밍 진행 중",
|
||||
"limitNotificationDescriptionNative": "수요가 많아 녹화가 {{limit}}분으로 제한됩니다. 무제한 녹화를 사용하려면 {{app}}을 시도해 보세요.",
|
||||
"limitNotificationDescriptionWeb": "수요가 많아 녹화가 {{limit}}분으로 제한됩니다. 무제한 녹화를 사용하려면 <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>을 시도해 보세요.",
|
||||
"linkGenerated": "녹화에 대한 링크를 생성했습니다.",
|
||||
"localRecordingNoNotificationWarning": "녹화가 다른 참가자에게 알리지 않습니다. 회의가 녹화되고 있음을 알려야 합니다.",
|
||||
"localRecordingNoVideo": "비디오는 녹화되지 않습니다",
|
||||
|
||||
@@ -114,6 +114,9 @@
|
||||
"error": "Kļūda: Jūsu ziņa netika nosūtīta. Cēlonis: {{error}}",
|
||||
"everyone": "Visi",
|
||||
"fieldPlaceHolder": "Rakstiet ziņu šeit",
|
||||
"fileAccessibleTitle": "{{user}} augšuplādēja failu",
|
||||
"fileAccessibleTitleMe": "es augšuplādēju failu",
|
||||
"fileDeleted": "Fails tika dzēsts",
|
||||
"guestsChatIndicator": "(viesis)",
|
||||
"lobbyChatMessageTo": "Vestibila tērzēšanas ziņa adresātam {{recipient}}",
|
||||
"message": "Ziņa",
|
||||
@@ -123,12 +126,20 @@
|
||||
"messagebox": "Rakstiet ziņu",
|
||||
"newMessages": "Jaunas ziņas",
|
||||
"nickname": {
|
||||
"popover": "Izvēlieties vārdu",
|
||||
"title": "Ierakstiet vārdu, lai izmantotu tērzēšanā",
|
||||
"titleWithCC": "Ievadiet segvārdu, lai izmantotu tērzēšanā un slēptos subtitros",
|
||||
"titleWithPolls": "Ierakstiet segvārdu, lai izmantotu tērzēšanā un aptaujās",
|
||||
"titleWithPollsAndCC": "Ievadiet segvārdu, lai izmantotu tērzēšanā, aptaujās un slēptos subtitros",
|
||||
"titleWithPollsAndCCAndFileSharing": "Ievadiet segvārdu, lai izmantotu tērzēšanā, aptaujās, slēptos subtitros un failos"
|
||||
"featureChat": "tērzētava",
|
||||
"featureClosedCaptions": "slēgtie subtitri",
|
||||
"featureFileSharing": "failu kopīgošana",
|
||||
"featurePolls": "aptaujas",
|
||||
"popover": "Izvēlieties segvārdu",
|
||||
"title": "Ierakstiet segvārdu, lai izmantotu tērzēšanu",
|
||||
"titleWith1Features": "Ievadiet segvārdu, lai izmantotu {{feature1}}",
|
||||
"titleWith2Features": "Ievadiet segvārdu, lai izmantotu {{feature1}} un {{feature2}}",
|
||||
"titleWith3Features": "Ievadiet segvārdu, lai izmantotu {{feature1}}, {{feature2}} un {{feature3}}",
|
||||
"titleWith4Features": "Ievadiet segvārdu, lai izmantotu {{feature1}}, {{feature2}}, {{feature3}} un {{feature4}}",
|
||||
"titleWithCC": "Ievadiet segvārdu, lai izmantotu tērzēšanu un slēgtos subtitrus",
|
||||
"titleWithPolls": "Ierakstiet segvārdu, lai izmantotu tērzēšanu un aptaujas",
|
||||
"titleWithPollsAndCC": "Ievadiet segvārdu, lai izmantotu tērzēšanu, aptaujas un slēgtos subtitrus",
|
||||
"titleWithPollsAndCCAndFileSharing": "Ievadiet segvārdu, lai izmantotu tērzēšanu, aptaujas, slēgtos subtitrus un failus"
|
||||
},
|
||||
"noMessagesMessage": "Sapulcē pagaidām nav nevienas ziņas. Uzsāciet saraksti!",
|
||||
"privateNotice": "Privāta ziņa adresātam {{recipient}}",
|
||||
@@ -137,12 +148,12 @@
|
||||
"systemDisplayName": "Sistēma",
|
||||
"tabs": {
|
||||
"chat": "Tērzēšana",
|
||||
"closedCaptions": "Slēptie subtitri",
|
||||
"closedCaptions": "Slēgtie subtitri",
|
||||
"fileSharing": "Faili",
|
||||
"polls": "Aptaujas"
|
||||
},
|
||||
"title": "Tērzēšana",
|
||||
"titleWithCC": "Tērzēšana un Slēptie subtitri",
|
||||
"titleWithCC": "Tērzēšana un Slēgtie subtitri",
|
||||
"titleWithFeatures": "Tērzēšana un",
|
||||
"titleWithFileSharing": "Faili",
|
||||
"titleWithPolls": "Tērzēšana un Aptaujas",
|
||||
@@ -156,8 +167,8 @@
|
||||
"installExtensionText": "Uzstādīt spraudni Google kalendāra un Office 365 integrācijai"
|
||||
},
|
||||
"closedCaptionsTab": {
|
||||
"emptyState": "Slēpto subtitru saturs būs pieejams, tiklīdz moderators uzsāks to.",
|
||||
"startClosedCaptionsButton": "Uzsākt slēptos subtitrus"
|
||||
"emptyState": "Slēgto subtitru saturs būs pieejams, tiklīdz moderators uzsāks to.",
|
||||
"startClosedCaptionsButton": "Uzsākt slēgtos subtitrus"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Notiek pieslēgšanās jūsu sapulcei…"
|
||||
@@ -280,7 +291,6 @@
|
||||
"Submit": "Iesniegt",
|
||||
"Understand": "Saprotu",
|
||||
"UnderstandAndUnmute": "Es saprotu, lūdzu, ieslēdziet skaņu.",
|
||||
"WaitForHostMsg": "Sapulce vēl nav sākusies, jo vēl nav ieradies neviens moderators. Lūdzu, autorizējieties, lai kļūtu par moderatoru. Pretējā gadījumā, lūdzu, uzgaidiet.",
|
||||
"WaitForHostNoAuthMsg": "Sapulce vēl nav sākusies, jo vēl nav ieradies neviens moderators. Lūdzu, uzgaidiet.",
|
||||
"WaitingForHostButton": "Gaidīt rīkotāju",
|
||||
"WaitingForHostTitle": "Gaida rīkotāju…",
|
||||
@@ -360,7 +370,7 @@
|
||||
"kickParticipantTitle": "Izraidīt šo dalībnieku?",
|
||||
"kickSystemTitle": "Ak! Jūs izraidīja no sapulces",
|
||||
"kickTitle": "Ak! {{participantDisplayName}} izraidīja jūs no sapulces",
|
||||
"learnMore": "uzzināt vairāk",
|
||||
"learnMore": "Uzzināt vairāk",
|
||||
"linkMeeting": "Sasaistīt sapulci",
|
||||
"linkMeetingTitle": "Sasaistīt sapulci ar Salesforce",
|
||||
"liveStreaming": "Tiešraides straumēšana",
|
||||
@@ -417,7 +427,7 @@
|
||||
"muteParticipantsVideoDialog": "Vai tiešām vēlaties izslēgt šī dalībnieka kameru? Jūs nevarēsiet to ieslēgt atpakaļ, taču dalībnieks pats to varēs izdarīt jebkurā laikā.",
|
||||
"muteParticipantsVideoDialogModerationOn": "Vai tiešām vēlaties izslēgt šī dalībnieka kameru? Ne Jūs, ne dalībnieks nevarēsiet to ieslēgt atpakaļ.",
|
||||
"muteParticipantsVideoTitle": "Vai izslēgt šī dalībnieka video?",
|
||||
"noDropboxToken": "Nav derīga Dropbox tokena",
|
||||
"noDropboxToken": "Nav derīgas Dropbox pilnvaras",
|
||||
"password": "Parole",
|
||||
"passwordLabel": "Dalībnieks ir aizslēdzis sapulci. Lūdzu, ievadiet $t(lockRoomPassword), lai pievienotos.",
|
||||
"passwordNotSupported": "Sapulces slēgšana ar $t(lockRoomPassword) netiek atbalstīta.",
|
||||
@@ -431,8 +441,6 @@
|
||||
"recording": "Ieraksts",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Nav iespējams, kamēr ir aktīva tiešraides straume",
|
||||
"recordingInProgressDescription": "Šī sapulce tiek ierakstīta. Jūsu audio un video ir izslēgti. Ja izvēlaties ieslēgt skaņu vai video, jūs piekrītat ierakstīšanai.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Šo sanāksmi ieraksta un analizē mākslīgais intelekts",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Jūsu audio un video skaņa ir izslēgta. Ja izvēlaties ieslēgt skaņu, jūs piekrītat ierakstīšanai.",
|
||||
"recordingInProgressTitle": "Notiek ierakstīšana",
|
||||
"rejoinNow": "Pieslēgties no jauna",
|
||||
"remoteControlAllowedMessage": "{{user}} apstiprināja jūsu attālās pārvaldības pieprasījumu!",
|
||||
@@ -501,7 +509,7 @@
|
||||
"stopStreamingWarning": "Tiešām vēlaties beigt tiešraidi?",
|
||||
"streamKey": "Tiešraides atslēga",
|
||||
"thankYou": "Paldies, ka izmantojāt {{appName}}!",
|
||||
"token": "tokens",
|
||||
"token": "pilnvara",
|
||||
"tokenAuthFailed": "Atvainojiet, jums nav atļauts pievienoties šim zvanam.",
|
||||
"tokenAuthFailedReason": {
|
||||
"audInvalid": "Nederīga `aud` vērtība. Tai vajadzētu būt `jitsi`.",
|
||||
@@ -517,12 +525,13 @@
|
||||
"nbfFuture": "`nbf` vērtība ir nākotnē.",
|
||||
"nbfInvalid": "Nederīga `nbf` vērtība.",
|
||||
"payloadNotFound": "Trūkst satura.",
|
||||
"tokenExpired": "Token ir beidzies."
|
||||
"tokenExpired": "Pilnvara ir beigusies."
|
||||
},
|
||||
"tokenAuthFailedTitle": "Autentifikācijas kļūda",
|
||||
"tokenAuthFailedWithReasons": "Atvainojiet, jums nav atļauts pievienoties šim zvanam. Iespējamie iemesli: {{reason}}",
|
||||
"tokenAuthUnsupported": "Token URL netiek atbalstīts.",
|
||||
"tokenAuthUnsupported": "Pilnvaras URL nav atbalstīts.",
|
||||
"transcribing": "Notiek atšifrējuma izveide",
|
||||
"unauthenticatedAccessDisabled": "Šim zvanam nepieciešama autentifikācija. Lūdzu, piesakieties, lai turpinātu.",
|
||||
"unlockRoom": "Noņemt $t(lockRoomPassword)",
|
||||
"user": "Lietotājs",
|
||||
"userIdentifier": "Lietotājvārds",
|
||||
@@ -570,10 +579,12 @@
|
||||
"downloadStarted": "Sākta faila lejuplāde",
|
||||
"dragAndDrop": "Velciet un palaidiet failus šeit, vai jebkurā ekrāna vietā",
|
||||
"fileAlreadyUploaded": "Fails jau ir augšuplādēts šajā sanāksmē.",
|
||||
"fileRemovedByOther": "Jūsu fails '{{ fileName }}' tika noņemts",
|
||||
"fileTooLargeDescription": "Lūdzu, pārliecinieties, vai faila lielums nepārsniedz {{ maxFileSize }}.",
|
||||
"fileTooLargeTitle": "Izvēlētais fails ir pārāk liels",
|
||||
"fileUploadProgress": "Faila augšuplādes gaita",
|
||||
"fileUploadedSuccessfully": "Fails veiksmīgi augšuplādēts",
|
||||
"newFileNotification": "{{ participantName }} kopīgoja '{{ fileName }}'",
|
||||
"removeFile": "Noņemt",
|
||||
"removeFileSuccess": "Fails veiksmīgi noņemts",
|
||||
"uploadFailedDescription": "Lūdzu, mēģiniet vēlreiz.",
|
||||
@@ -693,8 +704,6 @@
|
||||
"googlePrivacyPolicy": "Google konfidencialitātes politika",
|
||||
"inProgress": "Notiek ierakstīšana vai tiešraides straumēšana",
|
||||
"invalidStreamKey": "Izskatās, ka tiešraides atslēga nav pareiza.",
|
||||
"limitNotificationDescriptionNative": "ūsu straumēšana būs ierobežota līdz {{limit}} min. Lai iegūtu neierobežotu straumēšanu, izmēģiniet {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Lielā pieprasījuma dēļ jūsu straumēšana tiks ierobežota līdz {{limit}} min. Lai iegūtu neierobežotu straumēšanu, izmēģiniet <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Tiešraide izslēgta",
|
||||
"offBy": "{{name}} izslēdza tiešraidi",
|
||||
"on": "Tiešraide ieslēgta",
|
||||
@@ -748,7 +757,8 @@
|
||||
"notificationTitle": "Vestibils",
|
||||
"passwordJoinButton": "Pievienoties",
|
||||
"title": "Vestibils",
|
||||
"toggleLabel": "Iespējot vestibilu"
|
||||
"toggleLabel": "Iespējot vestibilu",
|
||||
"waitForModerator": "Konference vēl nav sākusies, jo vēl nav ieradušies moderatori. Ja vēlaties kļūt par moderatoru, lūdzu, piesakieties. Pretējā gadījumā, lūdzu, uzgaidiet."
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -775,7 +785,7 @@
|
||||
"participant": "Dalībnieks",
|
||||
"participantStats": "Dalībnieku statistika",
|
||||
"selectTabTitle": "🎥 Lūdzu, atveriet šo cilni ierakstīšanai",
|
||||
"sessionToken": "Sessijas tokens",
|
||||
"sessionToken": "Sesijas Pilnvara",
|
||||
"start": "Sākt ierakstu",
|
||||
"stop": "Beigt ierakstu",
|
||||
"stopping": "Ierakstīšanas pārtraukšana",
|
||||
@@ -865,6 +875,7 @@
|
||||
"oldElectronClientDescription1": "Izskatās, ka jūs izmantojat vecu Jitsi Meet klienta versiju, kurai ir zināmas drošības ievainojamības. Lūdzu, atjauniniet uz ",
|
||||
"oldElectronClientDescription2": "jaunākā versija",
|
||||
"oldElectronClientDescription3": "tagad!",
|
||||
"openChat": "Atvērt tērzētavu",
|
||||
"participantWantsToJoin": "Vēlas pievienoties sapulcei",
|
||||
"participantsWantToJoin": "Vēlas pievienoties sapulcei",
|
||||
"passwordRemovedRemotely": "Kāds dalībnieks noņēma $t(lockRoomPasswordUppercase).",
|
||||
@@ -963,6 +974,9 @@
|
||||
"by": "Pēc {{ name }} iniciatīvas",
|
||||
"closeButton": "Slēgt aptauju",
|
||||
"create": {
|
||||
"accessibilityLabel": {
|
||||
"send": "Nosūtīt aptauju"
|
||||
},
|
||||
"addOption": "Pievienot opciju",
|
||||
"answerPlaceholder": "Opcija {{index}}",
|
||||
"cancel": "Atcelt",
|
||||
@@ -971,8 +985,7 @@
|
||||
"pollQuestion": "Aptaujas Jautājums",
|
||||
"questionPlaceholder": "Uzdod jautājumu",
|
||||
"removeOption": "Noņemt opciju",
|
||||
"save": "Saglabāt",
|
||||
"send": "Nosūtīt"
|
||||
"save": "Saglabāt"
|
||||
},
|
||||
"errors": {
|
||||
"notUniqueOption": "Iespējām jābūt unikālām"
|
||||
@@ -1091,7 +1104,7 @@
|
||||
}
|
||||
},
|
||||
"recording": {
|
||||
"authDropboxText": "Augšupielādēt uz Dropbox",
|
||||
"authDropboxText": "Augšuplādēt uz Dropbox",
|
||||
"availableSpace": "Pieejama vieta: {{spaceLeft}} MB (apmēram {{duration}} ieraksta minūtes)",
|
||||
"beta": "BETA",
|
||||
"busy": "Cenšamies nodrošināt ierakstam vairāk resursu. Lūdzu, pēc dažām minūtēm pamēģiniet vēlreiz.",
|
||||
@@ -1110,8 +1123,6 @@
|
||||
"highlightMomentSuccess": "Brīdis izcelts",
|
||||
"highlightMomentSucessDescription": "Jūsu izceltais brīdis tiks pievienots sapulces kopsavilkumam.",
|
||||
"inProgress": "Notiek ierakstīšana vai tiešraides straumēšana",
|
||||
"limitNotificationDescriptionNative": "Lielā pieprasījuma dēļ jūsu ieraksts tiks ierobežots līdz {{limit}} min. Lai iegūtu neierobežotu ierakstu skaitu, izmēģiniet <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Lielā pieprasījuma dēļ jūsu ieraksts tiks ierobežots līdz {{limit}} min. Lai iegūtu neierobežotu ierakstu skaitu, izmēģiniet <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Mēs esam izveidojuši saiti uz jūsu ierakstu.",
|
||||
"localRecordingNoNotificationWarning": "Ieraksts netiks izziņots citiem dalībniekiem. Jums būs jāpaziņo viņiem, ka sapulce tiek ierakstīta.",
|
||||
"localRecordingNoVideo": "Video netiek ierakstīts",
|
||||
@@ -1145,7 +1156,7 @@
|
||||
"title": "Ieraksts",
|
||||
"unavailable": "Hmm! {{serviceName}} pašlaik nav pieejams. Mēs strādājam pie problēmas risināšanas. Lūdzu, pamēģiniet vēlreiz vēlāk.",
|
||||
"unavailableTitle": "Ieraksts nav iespējams",
|
||||
"uploadToCloud": "Augšupielādēt mākonī"
|
||||
"uploadToCloud": "Augšuplādēt mākonī"
|
||||
},
|
||||
"screenshareDisplayName": "{{name}} ekrāns",
|
||||
"sectionList": {
|
||||
@@ -1300,7 +1311,7 @@
|
||||
"closeChat": "Aizvērt tērzēšanu",
|
||||
"closeMoreActions": "Aizvērt vairāk darbību izvēlni",
|
||||
"closeParticipantsPane": "Aizvērt dalībnieku paneli",
|
||||
"closedCaptions": "Slēptie subtitri",
|
||||
"closedCaptions": "Slēgtie subtitri",
|
||||
"collapse": "Sakļaut",
|
||||
"document": "Kopīgotais dokuments (iesl./izsl.)",
|
||||
"documentClose": "Aizvērt kopīgoto dokumentu",
|
||||
@@ -1378,7 +1389,21 @@
|
||||
"videomuteGUMPending": "Kameras pievienošana",
|
||||
"videounmute": "Ieslēgt kameru"
|
||||
},
|
||||
"addPeople": "Pievienot cilvēkus savai sesijai/zvanam",
|
||||
"addPeople": "Pievienot cilvēkus savam zvanam",
|
||||
"advancedAudioSettings": {
|
||||
"aec": {
|
||||
"label": "Akustiskās atbalss slāpēšana"
|
||||
},
|
||||
"agc": {
|
||||
"label": "Automātiska pastiprinājuma kontrole"
|
||||
},
|
||||
"ns": {
|
||||
"label": "Trokšņu slāpēšana"
|
||||
},
|
||||
"stereo": {
|
||||
"label": "Stereo"
|
||||
}
|
||||
},
|
||||
"audioOnlyOff": "Atspējot kanāla/trafika taupības režīmu",
|
||||
"audioOnlyOn": "Iespējot kanāla/trafika taupības režīmu",
|
||||
"audioRoute": "Izvēlēties audioierīci",
|
||||
@@ -1391,7 +1416,7 @@
|
||||
"closeChat": "Aizvērt tērzētavu",
|
||||
"closeParticipantsPane": "Aizvērt dalībnieku paneli",
|
||||
"closeReactionsMenu": "Aizvērt reakciju izvēlni",
|
||||
"closedCaptions": "Slēptie subtitri",
|
||||
"closedCaptions": "Slēgtie subtitri",
|
||||
"disableNoiseSuppression": "Atspējot trokšņu slāpēšanu",
|
||||
"disableReactionSounds": "Šai sapulcei varat atspējot reakcijas skaņas",
|
||||
"documentClose": "Aizvērt kopīgoto dokumentu",
|
||||
@@ -1406,6 +1431,7 @@
|
||||
"exitFullScreen": "Pilnekrāna režīms",
|
||||
"exitTileView": "Tuvplāna režīms",
|
||||
"feedback": "Atstāts atsauksmi",
|
||||
"fileSharing": "Failu kopīgošana",
|
||||
"giphy": "GIPHY izvēlne (rādīt/nerādīt)",
|
||||
"hangup": "Iziet no sapulces",
|
||||
"help": "Palīdzība",
|
||||
@@ -1441,17 +1467,19 @@
|
||||
"openReactionsMenu": "Atvērt reakciju izvēlni",
|
||||
"participants": "Dalībnieki",
|
||||
"pip": "Iesl. attēls attēlā (PIP) režīmu",
|
||||
"polls": "Aptaujas",
|
||||
"privateMessage": "Nosūtīt privātu ziņu",
|
||||
"profile": "Rediģēt profilu",
|
||||
"raiseHand": "Pacelt roku",
|
||||
"raiseYourHand": "Pacelt roku",
|
||||
"reactionBoo": "Nosūtīt būū reakciju",
|
||||
"reactionClap": "Nosūtīt aplausu reakciju",
|
||||
"reactionHeart": "Nosūtīt sirds reakciju",
|
||||
"reactionLaugh": "Nosūtīt smieklu reakciju",
|
||||
"reactionLike": "Nosūtīt īkšķi augšup reakciju",
|
||||
"reactionSilence": "Nosūtīt klusuma reakciju",
|
||||
"reactionSurprised": "Nosūtīt pārsteigts reakciju",
|
||||
"reactionBoo": "Sūtīt būū reakciju",
|
||||
"reactionClap": "Sūtīt aplausu reakciju",
|
||||
"reactionHeart": "Sūtīt sirds reakciju",
|
||||
"reactionLaugh": "Sūtīt smieklu reakciju",
|
||||
"reactionLike": "Sūtīt īkšķis augšup reakciju",
|
||||
"reactionLove": "Sūtīt mīlestības reakciju",
|
||||
"reactionSilence": "Sūtīt klusuma reakciju",
|
||||
"reactionSurprised": "Sūtīt pārsteiguma reakciju",
|
||||
"reactions": "Reakcijas",
|
||||
"security": "Drošības iespējas",
|
||||
"selectBackground": "Izvēlēties fonu",
|
||||
@@ -1484,7 +1512,7 @@
|
||||
"failed": "Atšifrējuma izveide neizdevās",
|
||||
"labelTooltip": "Šajā sapulcē notiek atšifrējuma izveide.",
|
||||
"labelTooltipExtra": "Turklāt vēlāk būs pieejams atšifrējums.",
|
||||
"openClosedCaptions": "Atvērt slēptos subtitrus",
|
||||
"openClosedCaptions": "Atvērt slēgtos subtitrus",
|
||||
"original": "Oriģināls",
|
||||
"sourceLanguageDesc": "Pašlaik sapulces valoda ir iestatīta uz <b>{{sourceLanguage}}</b>. <br/> Varat to mainīt no ",
|
||||
"sourceLanguageHere": "šeit",
|
||||
@@ -1582,7 +1610,7 @@
|
||||
"removeBackground": "Noņemt fonu",
|
||||
"slightBlur": "Viegli izplūdis",
|
||||
"title": "Virtuālie foni",
|
||||
"uploadedImage": "Augšupielādēts attēls {{index}}",
|
||||
"uploadedImage": "Augšuplādēts attēls {{index}}",
|
||||
"webAssemblyWarning": "WebAssembly netiek atbalstīts",
|
||||
"webAssemblyWarningDescription": "WebAssemb ir atspējots vai šī pārlūkprogramma to neatbalsta"
|
||||
},
|
||||
@@ -1601,6 +1629,8 @@
|
||||
"noMainParticipantsTitle": "Šī sapulce vēl nav sākusies.",
|
||||
"noVisitorLobby": "Jūs nevarat pievienoties, kamēr sapulcei ir iespējots vestibils.",
|
||||
"notAllowedPromotion": "Dalībniekam vispirms ir jāatļauj jūsu pieprasījums.",
|
||||
"requestToJoin": "Roka Pacelta",
|
||||
"requestToJoinDescription": "Jūsu pieprasījums tika nosūtīts moderatoriem. Uzgaidiet!",
|
||||
"title": "Jūs esat sapulces apmeklētājs"
|
||||
},
|
||||
"waitingMessage": "Jūs pievienosities sapulcei, tiklīdz tā sāksies!"
|
||||
|
||||
@@ -416,8 +416,6 @@
|
||||
"getStreamKeyManually": "ഞങ്ങൾക്ക് തത്സമയ സ്ട്രീമുകളൊന്നും നേടാനായില്ല. യൂട്യൂബിൽ നിന്ന് നിങ്ങളുടെ തത്സമയ സ്ട്രീം കീ നേടാൻ ശ്രമിക്കുക.",
|
||||
"googlePrivacyPolicy": "ഗൂഗിൾ സ്വകാര്യതാ നയം",
|
||||
"invalidStreamKey": "തത്സമയ സ്ട്രീം കീ തെറ്റായിരിക്കാം.",
|
||||
"limitNotificationDescriptionNative": "നിങ്ങളുടെ സ്ട്രീമിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും.പരിധിയില്ലാത്ത സ്ട്രീമിംഗിനായി ശ്രമിക്കുക {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ സ്ട്രീമിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത സ്ട്രീമിംഗിനായി ശ്രമിക്കുക <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "തത്സമയ സ്ട്രീമിംഗ് അവസാനിച്ചു",
|
||||
"offBy": "{{name}} തത്സമയ സ്ട്രീമിംഗ് നിർത്തി",
|
||||
"on": "തത്സമയ സംപ്രേക്ഷണം",
|
||||
@@ -640,8 +638,6 @@
|
||||
"expandedPending": "റെക്കോർഡിംഗ് ആരംഭിച്ചു…",
|
||||
"failedToStart": "റെക്കോർഡിംഗ് ആരംഭിക്കുന്നതിൽ പരാജയപ്പെട്ടു",
|
||||
"fileSharingdescription": "മീറ്റിംഗ് പങ്കാളികളുമായി റെക്കോർഡിംഗ് പങ്കിടുക",
|
||||
"limitNotificationDescriptionNative": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ റെക്കോർഡിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത റെക്കോർഡിംഗുകൾക്കായി <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "ഉയർന്ന ഡിമാൻഡ് കാരണം നിങ്ങളുടെ റെക്കോർഡിംഗ് {{limit}} മിനിറ്റായി പരിമിതപ്പെടുത്തും. പരിധിയില്ലാത്ത റെക്കോർഡിംഗുകൾക്കായി <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"live": "തത്സമയം",
|
||||
"loggedIn": "{{userName}} എന്നയാളായി ലോഗിൻ ചെയ്തു",
|
||||
"off": "െക്കോർഡിംഗ് അവസാനിച്ചു",
|
||||
|
||||
@@ -566,8 +566,6 @@
|
||||
"googlePrivacyPolicy": "Google хувийн мэдээлэл хамгаалах дүрэм",
|
||||
"inProgress": "Шууд дамжуулалтыг бичиж байна",
|
||||
"invalidStreamKey": "Шууд дамжуулалтын түлхүүрээ шалгана уу.",
|
||||
"limitNotificationDescriptionNative": "Таны шууд дамжуулалтын хугацаа {{limit}}-аар минутын хязгаарлагдана. Хязгааргүй болгохын тулд {{app}} аппыг ажиллуулж үзнэ үү.",
|
||||
"limitNotificationDescriptionWeb": "Таны шууд дамжуулалт чанараас хамааран хугацаа Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Шууд дамжуулалт зогссон",
|
||||
"offBy": "{{name}} шууд дамжуулалтыг зогсоосон",
|
||||
"on": "Шууд дамжуулалт",
|
||||
@@ -932,8 +930,6 @@
|
||||
"highlightMomentSuccess": "Энэ мөчийг онцолсон",
|
||||
"highlightMomentSucessDescription": "Таны онцолсон мөч уулзалтын хураангуй хэсэгт нэмэгдэнэ.",
|
||||
"inProgress": "Бичлэг хийх эсвэл шууд дамжуулалт идэвхитэй",
|
||||
"limitNotificationDescriptionNative": "Бичлэгийн чанараас хамааран таны минут {{limit}}-р хязгаарлагдаж байна. Хязгаарлалтгүй бичлэг хийхийн тулд <3>{{app}}</3> үзээрэй.",
|
||||
"limitNotificationDescriptionWeb": "Бичлэгийн чанараас хамааран таны минут {{limit}}-р хязгаарлагдаж байна. Хязгаарлалтгүй бичлэг хийхийн тулд <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> ашиглана уу.",
|
||||
"linkGenerated": "Таны бичлэгийн холбоосыг үүсгэсэн.",
|
||||
"live": "ШУУД",
|
||||
"localRecordingNoNotificationWarning": "Бусад оролцогчид бичлэгийн хийх талаар мэдэгдэнэ. Та энэ бичлэгийн талаарх мэдэгдлийг зөвшөөрөх шаардлагатай.",
|
||||
|
||||
@@ -635,8 +635,6 @@
|
||||
"googlePrivacyPolicy": "Googles personvernpolicy",
|
||||
"inProgress": "Opptak eller direktesending pågår",
|
||||
"invalidStreamKey": "Strømmenøkkelen kan være feil.",
|
||||
"limitNotificationDescriptionNative": "Direktesendingen din vil være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil direktesendingen din være begrenset til {{limit}} min. For ubegrenset strømming, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Direktesending stoppet",
|
||||
"offBy": "{{name}} stoppet direktesendingen",
|
||||
"on": "Direktesending startet",
|
||||
@@ -1037,8 +1035,6 @@
|
||||
"highlightMomentSuccess": "Øyeblikk markert",
|
||||
"highlightMomentSucessDescription": "Det markerte øyeblikket vil bli lagt til møtereferatet.",
|
||||
"inProgress": "Opptak eller direktesending pågår",
|
||||
"limitNotificationDescriptionNative": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Vi har generert en lenke til opptaket ditt.",
|
||||
"localRecordingNoNotificationWarning": "Opptaket vil ikke bli annonsert til de andre deltakerne. Du må informere dem om at møtet blir tatt opp.",
|
||||
"localRecordingNoVideo": "Video blir ikke tatt opp",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -635,8 +635,6 @@
|
||||
"googlePrivacyPolicy": "Googles personvernpolicy",
|
||||
"inProgress": "Opptak eller direktesending pågår",
|
||||
"invalidStreamKey": "Strømmenøkkelen kan være feil.",
|
||||
"limitNotificationDescriptionNative": "Direktesendingen din vil være begrenset til {{limit}} min. For ubegrenset strømming, prøv {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil direktesendingen din være begrenset til {{limit}} min. For ubegrenset strømming, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Direktesending stoppet",
|
||||
"offBy": "{{name}} stoppet direktesendingen",
|
||||
"on": "Direktesending startet",
|
||||
@@ -1037,8 +1035,6 @@
|
||||
"highlightMomentSuccess": "Øyeblikk markert",
|
||||
"highlightMomentSucessDescription": "Det markerte øyeblikket vil bli lagt til møtereferatet.",
|
||||
"inProgress": "Opptak eller direktesending pågår",
|
||||
"limitNotificationDescriptionNative": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "På grunn av høy etterspørsel vil opptaket være begrenset til {{limit}} min. For ubegrensede opptak, prøv <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Vi har generert en lenke til opptaket ditt.",
|
||||
"localRecordingNoNotificationWarning": "Opptaket vil ikke bli annonsert til de andre deltakerne. Du må informere dem om at møtet blir tatt opp.",
|
||||
"localRecordingNoVideo": "Video blir ikke tatt opp",
|
||||
|
||||
@@ -635,8 +635,6 @@
|
||||
"googlePrivacyPolicy": "Politica de confidencialitat de Google",
|
||||
"inProgress": "Enregistrament o difusion en dirècte en cors",
|
||||
"invalidStreamKey": "La clau de difusion en dirècte es benlèu pas corrècta.",
|
||||
"limitNotificationDescriptionNative": "Vòstra difusion serà limitada a {{limit}} min. Per de difusions illimitada ensajatz {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "A causa d'una brava demanda vòstra difusion serà limitada a {{limit}} min. Per de difusion illimitada ensajatz <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "La difusion en dirècte es estada arrestada",
|
||||
"offBy": "{{name}} a arrestat la difusion en dirècte",
|
||||
"on": "Difusion en dirècte",
|
||||
@@ -1037,8 +1035,6 @@
|
||||
"highlightMomentSuccess": "Moments destacats",
|
||||
"highlightMomentSucessDescription": "Vòstre moment suslinhat serà apondut al resumit de la reünion.",
|
||||
"inProgress": "Enregistrament o difusion en dirècte en cors",
|
||||
"limitNotificationDescriptionNative": "A causa d’una demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per d’enregistraments sens limit ensajatz <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "A causa d’una demanda fòrta vòstre enregistrament serà limitat a {{limit}} min. Per d’enregistraments sens limit ensajatz <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Avèm generat un ligam pel vòstre enregistrament.",
|
||||
"localRecordingNoNotificationWarning": "L'enregistrament s'anonciarà pas als autres participants. Los deuretz informar que la reünion serà enregistrada.",
|
||||
"localRecordingNoVideo": "La vidèo es pas enregistrada actualament",
|
||||
|
||||
@@ -566,8 +566,6 @@
|
||||
"googlePrivacyPolicy": "Polityka prywatności Google",
|
||||
"inProgress": "Trwa nagrywanie lub transmisja na żywo",
|
||||
"invalidStreamKey": "Klucz transmisji na żywo może być nieprawidłowy.",
|
||||
"limitNotificationDescriptionNative": "Twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje strumieniowanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Transmitowanie na żywo zostało zatrzymane",
|
||||
"offBy": "{{name}} zatrzymał transmisję na żywo",
|
||||
"on": "Strumień live",
|
||||
@@ -935,8 +933,6 @@
|
||||
"highlightMomentSuccess": "Zaznaczony moment",
|
||||
"highlightMomentSucessDescription": "Zaznaczony moment zostanie dodany do podsumowania spotkania.",
|
||||
"inProgress": "Trwa nagrywanie lub transmisja na żywo",
|
||||
"limitNotificationDescriptionNative": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Ze względu na duże zapotrzebowanie twoje nagrywanie będzie ograniczone do {{limit}} minut. Aby strumieniować bez ograniczeń wybróbuj <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Wygenerowano link do nagrania.",
|
||||
"live": "NA ŻYWO",
|
||||
"localRecordingNoNotificationWarning": "Nagranie nie zostanie ogłoszone innym uczestnikom. Musisz poinformować ich, że spotkanie jest nagrywane.",
|
||||
|
||||
@@ -622,8 +622,6 @@
|
||||
"googlePrivacyPolicy": "Política de Privacidade do Google",
|
||||
"inProgress": "Gravação ou live streaming em andamento",
|
||||
"invalidStreamKey": "A senha para transmissão ao vivo pode estar incorreta.",
|
||||
"limitNotificationDescriptionNative": "Sua transmissão será limitada a {{limit}} minutos. Para transmissão ilimitada tente {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Devido a alta demanda sua transmissão será limitada a {{limit}} minutos. Para transmissão ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Transmissão ao vivo encerrada",
|
||||
"offBy": "{{name}} parou a transmissão ao vivo",
|
||||
"on": "Transmissão ao Vivo",
|
||||
@@ -996,8 +994,6 @@
|
||||
"highlightMomentSuccess": "Momento destacado",
|
||||
"highlightMomentSucessDescription": "Seu momento destacado será adicionado ao sumário da reunião.",
|
||||
"inProgress": "Gravação ou live streaming em andamento",
|
||||
"limitNotificationDescriptionNative": "Devido a demanda, sua gravação ficará limitada a {{limit}} minutos. Para gravação ilimitada tente <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Devido a demanda, sua gravação ficará limitada a {{limit}} minutos. Para gravação ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Geramos um link para sua gravação.",
|
||||
"live": "AO VIVO",
|
||||
"localRecordingNoNotificationWarning": "A gravação não será anunciada aos outros participantes. Você precisará avisá-los que a reunião está sendo gravada.",
|
||||
|
||||
@@ -114,6 +114,10 @@
|
||||
"error": "Erro: a sua mensagem não foi enviada. Motivo: {{error}}",
|
||||
"everyone": "Todos",
|
||||
"fieldPlaceHolder": "Aa",
|
||||
"fileAccessibleTitle": "{{user}} carregou um ficheiro",
|
||||
"fileAccessibleTitleMe": "carreguei um arquivo",
|
||||
"fileDeleted": "Um ficheiro foi eliminado",
|
||||
"guestsChatIndicator": "(convidado)",
|
||||
"lobbyChatMessageTo": "Mensagem de chat na sala de espera para {{recipient}}",
|
||||
"message": "Mensagem",
|
||||
"messageAccessibleTitle": "{{user}} disse:",
|
||||
@@ -122,8 +126,16 @@
|
||||
"messagebox": "Escreva uma mensagem",
|
||||
"newMessages": "Novas mensagens",
|
||||
"nickname": {
|
||||
"featureChat": "chat",
|
||||
"featureClosedCaptions": "legendas ocultas",
|
||||
"featureFileSharing": "partilha de ficheiros",
|
||||
"featurePolls": "sondagens",
|
||||
"popover": "Escolha um apelido",
|
||||
"title": "Introduza um apelido para usar o chat",
|
||||
"titleWith1Features": "Insira um apelido para usar {{feature1}}",
|
||||
"titleWith2Features": "Insira um apelido para usar {{feature1}} e {{feature2}}",
|
||||
"titleWith3Features": "Insira um apelido para usar {{feature1}}, {{feature2}} e {{feature3}}",
|
||||
"titleWith4Features": "Insira um apelido para usar {{feature1}}, {{feature2}}, {{feature3}} e {{feature4}}",
|
||||
"titleWithCC": "Insira um apelido para usar o chat e as legendas ocultas",
|
||||
"titleWithPolls": "Digite um apelido para usar o chat e as sondagens",
|
||||
"titleWithPollsAndCC": "Insira um apelido para utilizar o chat, as sondagens e as legendas ocultas",
|
||||
@@ -279,7 +291,6 @@
|
||||
"Submit": "Submeter",
|
||||
"Understand": "Entendo, mantenha-me em silêncio por enquanto.",
|
||||
"UnderstandAndUnmute": "Entendo, por favor, desative o silêncio.",
|
||||
"WaitForHostMsg": "A conferência ainda não começou porque ainda não chegaram moderadores. Se quiser ser um moderador, inicie a sessão. Caso contrário, aguarde.",
|
||||
"WaitForHostNoAuthMsg": "A conferência ainda não começou porque ainda não chegaram os moderadores. Por favor, aguarde.",
|
||||
"WaitingForHostButton": "Esperar pelo moderador",
|
||||
"WaitingForHostTitle": "À espera de um moderador…",
|
||||
@@ -359,7 +370,7 @@
|
||||
"kickParticipantTitle": "Expulsar este participante?",
|
||||
"kickSystemTitle": "Ai! Foste expulso da reunião.",
|
||||
"kickTitle": "Ai! {{participantDisplayName}} expulsou-o da reunião",
|
||||
"learnMore": "saiba mais",
|
||||
"learnMore": "Saiba mais",
|
||||
"linkMeeting": "Link da reunião",
|
||||
"linkMeetingTitle": "Link da reunião à Força de Vendas",
|
||||
"liveStreaming": "Transmissão em direto",
|
||||
@@ -429,9 +440,7 @@
|
||||
"recentlyUsedObjects": "Os seus objetos recentemente utilizados",
|
||||
"recording": "A gravar",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Não possível enquanto a transmissão em direto estiver activa",
|
||||
"recordingInProgressDescription": "Esta reunião está a ser gravada e analisada pela IA{{learnMore}}. O seu áudio e vídeo foram silenciados. Se optar por ativar o som, concorda em ser gravado.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Esta reunião está a ser gravada e analisada por IA.",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
|
||||
"recordingInProgressDescription": "Esta reunião está a ser gravada e analisada pela IA. O seu áudio e vídeo foram silenciados. Se optar por ativar o som, concorda em ser gravado.",
|
||||
"recordingInProgressTitle": "Gravação em andamento",
|
||||
"rejoinNow": "Reingressar agora",
|
||||
"remoteControlAllowedMessage": "{{user}} aceitou o seu pedido de controlo remoto!",
|
||||
@@ -522,6 +531,7 @@
|
||||
"tokenAuthFailedWithReasons": "Lamentamos, mas não está autorizado a participar nesta chamada. Razões possíveis: {{reason}}",
|
||||
"tokenAuthUnsupported": "O URL de token não é suportado.",
|
||||
"transcribing": "Transcrição",
|
||||
"unauthenticatedAccessDisabled": "Esta chamada requer autenticação. Por favor, inicie sessão para prosseguir.",
|
||||
"unlockRoom": "Retirar reunião $t(lockRoomPassword)",
|
||||
"user": "Utilizador",
|
||||
"userIdentifier": "Identificador do utilizador",
|
||||
@@ -566,13 +576,17 @@
|
||||
"downloadFailedDescription": "Por favor, tente novamente.",
|
||||
"downloadFailedTitle": "Falha no descarregar",
|
||||
"downloadFile": "Descarregar",
|
||||
"downloadStarted": "O download do ficheiro foi iniciado",
|
||||
"dragAndDrop": "Arraste e solte os ficheiros aqui ou em qualquer lugar do ecrã",
|
||||
"fileAlreadyUploaded": "O ficheiro já foi carregado para esta reunião.",
|
||||
"fileRemovedByOther": "O seu ficheiro '{{ fileName }}' foi removido",
|
||||
"fileTooLargeDescription": "Certifique-se de que o ficheiro não exceda {{ maxFileSize }}.",
|
||||
"fileTooLargeTitle": "O ficheiro selecionado é muito grande",
|
||||
"fileUploadProgress": "Progresso do envio do ficheiro",
|
||||
"fileUploadedSuccessfully": "Ficheiro carregado com sucesso",
|
||||
"newFileNotification": "{{ participantName }} partilhou '{{ fileName }}'",
|
||||
"removeFile": "Remover",
|
||||
"removeFileSuccess": "Ficheiro removido com sucesso",
|
||||
"uploadFailedDescription": "Por favor, tente novamente.",
|
||||
"uploadFailedTitle": "Falha ao carregar",
|
||||
"uploadFile": "Partilhar ficheiro"
|
||||
@@ -690,8 +704,6 @@
|
||||
"googlePrivacyPolicy": "Política de Privacidade do Google",
|
||||
"inProgress": "Gravação ou transmissão em direto em curso",
|
||||
"invalidStreamKey": "A senha para transmissão em direto pode estar incorreta.",
|
||||
"limitNotificationDescriptionNative": "A sua transmissão será limitada a {{limit}} min. Para uma tentativa de streaming ilimitada tente {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Devido à grande procura, a sua transmissão será limitada a {{limit}} min. Para uma tentativa de streaming ilimitada tente <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Transmissão em direto encerrada",
|
||||
"offBy": "{{name}} parou a transmissão em direto",
|
||||
"on": "Iniciada a transmissão em direto",
|
||||
@@ -745,7 +757,8 @@
|
||||
"notificationTitle": "Sala de espera",
|
||||
"passwordJoinButton": "Solicitar",
|
||||
"title": "Sala de espera",
|
||||
"toggleLabel": "Ativar sala de espera"
|
||||
"toggleLabel": "Ativar sala de espera",
|
||||
"waitForModerator": "A conferência ainda não começou porque não chegou nenhum moderador. Se deseja tornar-se um moderador, faça login. Caso contrário, aguarde."
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -862,6 +875,7 @@
|
||||
"oldElectronClientDescription1": "Parece estar a utilizar uma versão antiga do cliente Jitsi Meet que tem vulnerabilidades de segurança conhecidas. Por favor, certifique-se de que actualiza a nossa ",
|
||||
"oldElectronClientDescription2": "compilação mais recente",
|
||||
"oldElectronClientDescription3": " agora!",
|
||||
"openChat": "Abrir chat",
|
||||
"participantWantsToJoin": "Deseja juntar-se à reunião",
|
||||
"participantsWantToJoin": "Desejam juntar-se à reunião",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) removido por outro participante",
|
||||
@@ -960,6 +974,9 @@
|
||||
"by": "Por {{ name }}",
|
||||
"closeButton": "Fechar sondagem",
|
||||
"create": {
|
||||
"accessibilityLabel": {
|
||||
"send": "Enviar sondagem"
|
||||
},
|
||||
"addOption": "Adicionar opção",
|
||||
"answerPlaceholder": "Opção {{index}}",
|
||||
"cancel": "Cancelar",
|
||||
@@ -968,8 +985,7 @@
|
||||
"pollQuestion": "Pergunta de Sondagem",
|
||||
"questionPlaceholder": "Faça uma pergunta",
|
||||
"removeOption": "Remover opção",
|
||||
"save": "Guardar",
|
||||
"send": "Enviar"
|
||||
"save": "Guardar"
|
||||
},
|
||||
"errors": {
|
||||
"notUniqueOption": "As opções devem ser únicas"
|
||||
@@ -1107,8 +1123,6 @@
|
||||
"highlightMomentSuccess": "Momento destacado",
|
||||
"highlightMomentSucessDescription": "O seu momento destacado será acrescentado ao resumo da reunião.",
|
||||
"inProgress": "Gravação ou transmissão em direto em curso",
|
||||
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. Para gravações ilimitadas tente <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Devido à grande procura, a sua gravação será limitada a {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Gerámos um link para a sua gravação.",
|
||||
"localRecordingNoNotificationWarning": "A gravação não será anunciada aos outros participantes. Será necessário avisá-los de que a reunião está gravada.",
|
||||
"localRecordingNoVideo": "O vídeo não está a ser gravado",
|
||||
@@ -1338,7 +1352,7 @@
|
||||
"muteEveryoneElsesVideo": "Parar o vídeo de todos os outros",
|
||||
"muteEveryonesVideo": "Parar o vídeo de todos",
|
||||
"muteGUMPending": "A ligar o seu microfone",
|
||||
"noiseSuppression": "Supressão extra de ruído (BETA)",
|
||||
"noiseSuppression": "Supressão extra de ruído",
|
||||
"openChat": "Abrir chat",
|
||||
"participants": "Abrir painel de participantes. {{participantsCount}} participantes",
|
||||
"pip": "Mudar para o modo Picture-in-Picture",
|
||||
@@ -1376,6 +1390,20 @@
|
||||
"videounmute": "Iniciar câmara"
|
||||
},
|
||||
"addPeople": "Adicione pessoas à sua chamada",
|
||||
"advancedAudioSettings": {
|
||||
"aec": {
|
||||
"label": "Cancelamento de eco acústico"
|
||||
},
|
||||
"agc": {
|
||||
"label": "Controlo automático de ganho"
|
||||
},
|
||||
"ns": {
|
||||
"label": "Supressão de ruído"
|
||||
},
|
||||
"stereo": {
|
||||
"label": "Estéreo"
|
||||
}
|
||||
},
|
||||
"audioOnlyOff": "Desativar modo de largura de banda baixa",
|
||||
"audioOnlyOn": "Ativar modo de largura de banda baixa",
|
||||
"audioRoute": "Selecionar o dispositivo de som",
|
||||
@@ -1389,20 +1417,21 @@
|
||||
"closeParticipantsPane": "Fechar painel de participantes",
|
||||
"closeReactionsMenu": "Fechar menu de reações",
|
||||
"closedCaptions": "Legendas ocultas",
|
||||
"disableNoiseSuppression": "Desativar supressão de ruído extra (BETA)",
|
||||
"disableNoiseSuppression": "Desativar supressão de ruído extra",
|
||||
"disableReactionSounds": "Pode desactivar os sons de reacção para esta reunião",
|
||||
"documentClose": "Fechar documento partilhado",
|
||||
"documentOpen": "Abrir documento partilhado",
|
||||
"download": "Descarregar as nossas aplicações",
|
||||
"e2ee": "Criptografia ponta a ponta",
|
||||
"embedMeeting": "Incorporar reunião",
|
||||
"enableNoiseSuppression": "Ativar supressão extra de ruído (BETA)",
|
||||
"enableNoiseSuppression": "Ativar supressão extra de ruído",
|
||||
"endConference": "Terminar reunião para todos",
|
||||
"enterFullScreen": "Ver em ecrã completo",
|
||||
"enterTileView": "Ver em quadrícula",
|
||||
"exitFullScreen": "Sair de ecrã completo",
|
||||
"exitTileView": "Sair de quadrícula",
|
||||
"feedback": "Deixar comentários",
|
||||
"fileSharing": "Partilha de ficheiros",
|
||||
"giphy": "Ativar/Desativar o menu GIPHY",
|
||||
"hangup": "Sair da reunião",
|
||||
"help": "Ajuda",
|
||||
@@ -1431,13 +1460,14 @@
|
||||
"noAudioSignalDialInDesc": "Também pode marcar usando:",
|
||||
"noAudioSignalDialInLinkDesc": "Números de marcação",
|
||||
"noAudioSignalTitle": "Não há nenhuma entrada vinda do seu microfone!",
|
||||
"noiseSuppression": "Supressão extra de ruído (BETA)",
|
||||
"noiseSuppression": "Supressão extra de ruído",
|
||||
"noisyAudioInputDesc": "Parece que o seu microfone está a fazer barulho, por favor considere silenciar ou mudar de dispositivo.",
|
||||
"noisyAudioInputTitle": "Seu microfone parece estar barulhento!",
|
||||
"openChat": "Abrir chat",
|
||||
"openReactionsMenu": "Abrir menu de reações",
|
||||
"participants": "Participantes",
|
||||
"pip": "Entrar no modo Picture-in-Picture",
|
||||
"polls": "Sondagens",
|
||||
"privateMessage": "Enviar mensagem privada",
|
||||
"profile": "Editar o seu perfil",
|
||||
"raiseHand": "Levantar a mão",
|
||||
@@ -1447,6 +1477,7 @@
|
||||
"reactionHeart": "Enviar reação com coração",
|
||||
"reactionLaugh": "Enviar reação de risos",
|
||||
"reactionLike": "Enviar reação de aprovado",
|
||||
"reactionLove": "Enviar reação de amor",
|
||||
"reactionSilence": "Enviar reação de silêncio",
|
||||
"reactionSurprised": "Enviar reação de surpreendido",
|
||||
"reactions": "Reações",
|
||||
@@ -1598,6 +1629,8 @@
|
||||
"noMainParticipantsTitle": "Esta reunião ainda não começou.",
|
||||
"noVisitorLobby": "Não é possível aderir enquanto houver uma sala de espera activada para a reunião.",
|
||||
"notAllowedPromotion": "É necessário que um participante autorize primeiro o seu pedido.",
|
||||
"requestToJoin": "Mão levantada",
|
||||
"requestToJoinDescription": "A sua solicitação foi enviada aos moderadores. Aguarde um momento!",
|
||||
"title": "É um espectador na reunião"
|
||||
},
|
||||
"waitingMessage": "Participará na reunião assim que esta estiver em direto!"
|
||||
|
||||
@@ -628,8 +628,6 @@
|
||||
"googlePrivacyPolicy": "Политика конфиденциальности Google",
|
||||
"inProgress": "Идет запись или прямая трансляция",
|
||||
"invalidStreamKey": "Похоже ключ прямой трансляции неверен.",
|
||||
"limitNotificationDescriptionNative": "Ваша трансляция будет ограничена {{limit}} мин. Для неограниченного просмотра попробуйте {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Из-за высокой нагрузки ваша потоковая передача будет ограничена {{limit}} мин. Для неограниченной потоковой передачи попробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'> {{app}} </a>.",
|
||||
"off": "Трансляция остановлена",
|
||||
"offBy": "{{name}} остановил прямую трансляцию",
|
||||
"on": "Трансляция",
|
||||
@@ -1011,8 +1009,6 @@
|
||||
"highlightMomentSuccess": "Моменты выделены",
|
||||
"highlightMomentSucessDescription": "Ваши выделенные моменты будут добавлены в итоги встречи.",
|
||||
"inProgress": "Идет запись или прямая трансляция",
|
||||
"limitNotificationDescriptionNative": "Из-за высокой нагрузки ваша запись будет ограничена {{limit}} мин. Для неограниченного количества записей попробуйте <3> {{app}} </3>.",
|
||||
"limitNotificationDescriptionWeb": "Из-за высокой нагрузки ваша запись будет ограничена {{limit}} мин. Для неограниченного количества записей попробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Мы создали ссылку на вашу запись.",
|
||||
"localRecordingNoNotificationWarning": "Запись не будет объявлена другим участникам. Вам необходимо самостоятельно уведомить их о том, что встреча записывается.",
|
||||
"localRecordingNoVideo": "Видео не записывается",
|
||||
|
||||
@@ -360,7 +360,7 @@
|
||||
"kickParticipantTitle": "Cheres bogare custa persone?",
|
||||
"kickSystemTitle": "Ohia, t'ant bogadu dae s'addòbiu",
|
||||
"kickTitle": "Ohi! {{participantDisplayName}} t'at bogadu de sa riunione",
|
||||
"learnMore": "àteras informatziones",
|
||||
"learnMore": "Àteras informatziones",
|
||||
"linkMeeting": "Acàpia sa riunione",
|
||||
"linkMeetingTitle": "Acàpia sa riunione a Salesforce",
|
||||
"liveStreaming": "Trasmissione in direta",
|
||||
@@ -430,9 +430,7 @@
|
||||
"recentlyUsedObjects": "Ogetos impreados de reghente",
|
||||
"recording": "Registrende",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossìbile in su mentras chi sa trasmissione in direta est ativa",
|
||||
"recordingInProgressDescription": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA{{learnMore}}. S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA",
|
||||
"recordingInProgressDescriptionSecondHalf": ". S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.",
|
||||
"recordingInProgressDescription": "Est in cursu sa registratzione e s'anàlisi de custu addòbiu cun IA. S'àudio e su vìdeu tuos sunt disativados. Si ddos ativas, atzetas chi siant registrados.",
|
||||
"recordingInProgressTitle": "Registratzione in cursu",
|
||||
"rejoinNow": "Torra a intrare",
|
||||
"remoteControlAllowedMessage": "{{user}} at atzetadu sa rechesta tua de controllu remotu.",
|
||||
@@ -693,8 +691,6 @@
|
||||
"googlePrivacyPolicy": "Polìtica de riservadesa de Google",
|
||||
"inProgress": "Registratzione o trasmissione in direta in cursu",
|
||||
"invalidStreamKey": "Sa crae pro is trasmissiones in direta podet èssere iscurreta.",
|
||||
"limitNotificationDescriptionNative": "Sa trasmissione in direta tua at a èssere limitada a {{limit}} minutos. Pro una trasmissione sena lìmites, imprea {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "A càusa de s'arta dimanda, sa trasmissione in direta tua at a èssere limitada a {{limit}} minutos. Pro una trasmissione sena lìmites, imprea <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Trasmissione in direta firmada",
|
||||
"offBy": "{{name}} at firmadu sa trasmissione in direta",
|
||||
"on": "Trasmissione in direta aviada",
|
||||
@@ -1111,8 +1107,6 @@
|
||||
"highlightMomentSuccess": "Momentu in evidèntzia",
|
||||
"highlightMomentSucessDescription": "Su momentu chi as postu in evidèntzia at a èssere agiuntu a su resumu de sa riunione.",
|
||||
"inProgress": "Registratzione o trasmissione in direta in cursu",
|
||||
"limitNotificationDescriptionNative": "A càusa de s'arta dimanda, sa registratzione tua at a èssere limitada a {{limit}} minutos. Pro una registratzione sena lìmites, imprea <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "A càusa de s'arta dimanda, sa registratzione tua at a èssere limitada a {{limit}} minutos. Pro registrare sena lìmites, imprea <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Amus generadu unu ligòngiu a sa registratzione tua.",
|
||||
"localRecordingNoNotificationWarning": "Sa registratzione no at a èssere annuntziada a is partetzipantes. Si dd'as a dèpere fàghere iscire tue.",
|
||||
"localRecordingNoVideo": "Su vìdeu no s'est registrende.",
|
||||
|
||||
@@ -418,8 +418,6 @@
|
||||
"getStreamKeyManually": "Nepodarilo sa získať žiadne živé vysielania. Skúste získať kľúč pre živé vysielanie z YouTube.",
|
||||
"googlePrivacyPolicy": "Pravidlá ochrany súkromia Google",
|
||||
"invalidStreamKey": "Kľúč pre živé vysielanie je nesprávny.",
|
||||
"limitNotificationDescriptionNative": "Živé vysielanie je obmedzené na {{limit}} minút. Pre neobmedzené vysielanie skúste {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Živé vysielanie je obmedzené na {{limit}} minút. Pre neobmedzené vysielanie skúste <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Živé vysielanie ukončené",
|
||||
"offBy": "{{name}} ukončil živé vysielanie",
|
||||
"on": "Živé vysielanie",
|
||||
@@ -620,8 +618,6 @@
|
||||
"expandedPending": "Začína sa nahrávanie…",
|
||||
"failedToStart": "Nepodarilo sa začať nahrávanie",
|
||||
"fileSharingdescription": "Nahrávku zdielať s účastníkmi stretnutia",
|
||||
"limitNotificationDescriptionNative": "Nahrávanie je obmedzené na {{limit}} minút. Pre neobmedzené nahrávanie skúste <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Nahrávanie je obmedzené na {{limit}} minút. Pre neobmedzené nahrávanie skúste <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"live": "LIVE",
|
||||
"loggedIn": "Prihlásený ako {{userName}}",
|
||||
"off": "Nahrávanie zastavené",
|
||||
|
||||
@@ -480,8 +480,6 @@
|
||||
"getStreamKeyManually": "Ni bilo mogoče najti prenosov v živo. Poskusite pridobiti ključ za prenos v živo iz YouTuba.",
|
||||
"googlePrivacyPolicy": "Politika zasebnosti Google",
|
||||
"invalidStreamKey": "Ključ prenosa v živo je morda napačen.",
|
||||
"limitNotificationDescriptionNative": "Vaš prenos v živo bo omejen na {{limit}} min. Za neomejen prenos preizkusite {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Zaradi velikega povpraševanja bo vaš prenos omejen na {{limit}} min. Za neomejen prenos preizkusite <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Prenos v živo zaustavljen",
|
||||
"offBy": "Uporabnik {{name}} je prekinil prenos v živo",
|
||||
"on": "Prenos v živo",
|
||||
@@ -778,8 +776,6 @@
|
||||
"expandedPending": "Snemanje se začenja…",
|
||||
"failedToStart": "Snemanja ni bilo mogoče začeti",
|
||||
"fileSharingdescription": "Delite snemanje z udeleženci srečanja",
|
||||
"limitNotificationDescriptionNative": "Zaradi velikega povpraševanja bo snemanje omejeno na {{limit}} min. Za neomejeno snemanje preizkusite <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Zaradi velikega povpraševanja bo snemanje omejeno na {limit}} min. Za neomejeno snemanje preizkusite <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Ustvarili smo povezava do posnetka.",
|
||||
"live": "V ŽIVO",
|
||||
"loggedIn": "Vpisan kot {{userName}}",
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
"hideParticipantList": "Fshihe listën e pjesëmarrësve",
|
||||
"mainRoom": "Dhoma kryesore",
|
||||
"notifications": {
|
||||
"joined": "Po hyhet te dhomë aneks konsultimesh \"{{name}}\"",
|
||||
"joined": "Po hyhet te dhomë aneks konsultimesh “{{name}}”",
|
||||
"joinedMainRoom": "Po hyhet te dhoma kryesore",
|
||||
"joinedTitle": "Dhoma Aneks Konsultimesh"
|
||||
},
|
||||
@@ -109,9 +109,15 @@
|
||||
}
|
||||
},
|
||||
"chat": {
|
||||
"enter": "Hyni në fjalosje",
|
||||
"disabled": "Dërgimi i mesazheve të fjalosjes është çaktivizuar.",
|
||||
"enter": "Hyni në dhomë",
|
||||
"error": "Gabim: mesazhi juaj s’u dërgua. Arsye: {{error}}",
|
||||
"fieldPlaceHolder": "Shtypni këtu mesazhin tuaj",
|
||||
"everyone": "Gjithkush",
|
||||
"fieldPlaceHolder": "Aa",
|
||||
"fileAccessibleTitle": "{{user}} ngarkoi një kartelë",
|
||||
"fileAccessibleTitleMe": "me ngarkoi një kartelë",
|
||||
"fileDeleted": "U fshi një kartelë",
|
||||
"guestsChatIndicator": "(guest)",
|
||||
"lobbyChatMessageTo": "Mesazh fjalosjeje në holl për {{recipient}}",
|
||||
"message": "Mesazh",
|
||||
"messageAccessibleTitle": "{{user}} thotë:",
|
||||
@@ -120,9 +126,20 @@
|
||||
"messagebox": "Shtypni një mesazh",
|
||||
"newMessages": "Mesazhe të rinj",
|
||||
"nickname": {
|
||||
"featureChat": "fjalosje",
|
||||
"featureClosedCaptions": "titra të mbyllur",
|
||||
"featureFileSharing": "dhënie kartelash",
|
||||
"featurePolls": "pyetësorë",
|
||||
"popover": "Zgjidhni një nofkë",
|
||||
"title": "Që të përdorni fjalosjen, jepni një nofkë",
|
||||
"titleWithPolls": "Që të përdorni fjalosjen dhe pyetësorë, jepni një nofkë"
|
||||
"titleWith1Features": "Që të përdorni {{feature1}}, jepni një nofkë",
|
||||
"titleWith2Features": "Që të përdorni {{feature1}} dhe {{feature2}}, jepni një nofkë",
|
||||
"titleWith3Features": "Që të përdorni {{feature1}}, {{feature2}} dhe {{feature3}}, jepni një nofkë",
|
||||
"titleWith4Features": "Që të përdorni {{feature1}}, {{feature2}}, {{feature3}} dhe {{feature4}}, jepni një nofkë",
|
||||
"titleWithCC": "Që të përdorni fjalosje dhe titra të mbyllur, jepni një nofkë",
|
||||
"titleWithPolls": "Që të përdorni fjalosjen dhe pyetësorë, jepni një nofkë",
|
||||
"titleWithPollsAndCC": "Që të përdorni fjalosje, pyetësorë dhe titra të mbyllur, jepni një nofkë",
|
||||
"titleWithPollsAndCCAndFileSharing": "Që të përdorni fjalosje, pyetësorë, titra të mbyllur dhe kartela, jepni një nofkë"
|
||||
},
|
||||
"noMessagesMessage": "Te takimi s’ka ende mesazhe. Nisni një bisedë këtu!",
|
||||
"privateNotice": "Mesazh privat për {{recipient}}",
|
||||
@@ -131,18 +148,27 @@
|
||||
"systemDisplayName": "Sistem",
|
||||
"tabs": {
|
||||
"chat": "Fjalosje",
|
||||
"closedCaptions": "CC",
|
||||
"fileSharing": "Kartela",
|
||||
"polls": "Pyetësorë"
|
||||
},
|
||||
"title": "Fjalosje",
|
||||
"titleWithPolls": "Fjalosje dhe Pyetësorë",
|
||||
"titleWithCC": "CC",
|
||||
"titleWithFeatures": "Bisedoni dhe",
|
||||
"titleWithFileSharing": "Kartela",
|
||||
"titleWithPolls": "Pyetësorë",
|
||||
"you": "ju"
|
||||
},
|
||||
"chromeExtensionBanner": {
|
||||
"buttonText": "Instaloni Zgjerimin për Chrome",
|
||||
"buttonTextEdge": "Instaloni Zgjerimin Edge",
|
||||
"buttonTextEdge": "Instaloni Zgjerimin për Edge",
|
||||
"close": "Mbylle",
|
||||
"dontShowAgain": "Mos ma shfaq sërish këtë",
|
||||
"installExtensionText": "Instaloni zgjerimin për integrim të Google Calendar-it dhe Office 365-s"
|
||||
"installExtensionText": "Instaloni zgjerimin për integrim me Google Calendar dhe Office 365"
|
||||
},
|
||||
"closedCaptionsTab": {
|
||||
"emptyState": "Lënda e titrave të mbyllur do të jetë e përdorshme sapo një moderator t’i fillojë ato",
|
||||
"startClosedCaptionsButton": "Nis titra të mbyllur"
|
||||
},
|
||||
"connectingOverlay": {
|
||||
"joiningRoom": "Po ju lidhim me takimin tuaj…"
|
||||
@@ -201,6 +227,9 @@
|
||||
"video_ssrc": "Video SSRC:",
|
||||
"yes": "po"
|
||||
},
|
||||
"customPanel": {
|
||||
"close": "Mbylle"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "Më herët",
|
||||
"today": "Sot",
|
||||
@@ -223,7 +252,7 @@
|
||||
"noDesktopApp": "S’e keni aplikacionin?",
|
||||
"noMobileApp": "S’e keni aplikacionin?",
|
||||
"or": "OR",
|
||||
"termsAndConditions": "Duke vazhduar, pajtoheni me <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a> tona",
|
||||
"termsAndConditions": "Duke vazhduar, pajtoheni me <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terma & kushte.</a>",
|
||||
"title": "Po niset takimi juaj në {{app}}…",
|
||||
"titleNew": "Po niset takimi juaj…",
|
||||
"tryAgainButton": "Riprovoni në desktop",
|
||||
@@ -263,7 +292,8 @@
|
||||
"Remove": "Hiqe",
|
||||
"Share": "Ndaje",
|
||||
"Submit": "Parashtroje",
|
||||
"WaitForHostMsg": "Konferenca s’ka nisur, ngaqë s’ka mbërritur ende ndonjë moderator. Nëse dëshironi të bëheni një moderator, ju lutemi, bëni hyrjen. Përndryshe, ju lutemi, pritni.",
|
||||
"Understand": "E kuptoj, mbamëni të heshtuar për tani",
|
||||
"UnderstandAndUnmute": "E kuptoj, ju lutem, hiqmani heshtimin",
|
||||
"WaitForHostNoAuthMsg": "Konferenca s’ka nisur, ngaqë s’ka mbërritur ende ndonjë moderator. Përndryshe, ju lutemi, pritni.",
|
||||
"WaitingForHostButton": "Prit për moderator",
|
||||
"WaitingForHostTitle": "Po pritet për një moderator…",
|
||||
@@ -285,6 +315,12 @@
|
||||
"alreadySharedVideoTitle": "Lejohet vetëm një ndarje videoje me të tjerët në herë",
|
||||
"applicationWindow": "Dritare aplikacioni",
|
||||
"authenticationRequired": "Lypset mirëfilltësim",
|
||||
"cameraCaptureDialog": {
|
||||
"description": "Bëni dhe dërgoni një foto duke përdorur kamerën e celularit tuaj",
|
||||
"ok": "Hape kamerën",
|
||||
"reject": "Jo tani",
|
||||
"title": "Bëni një foto"
|
||||
},
|
||||
"cameraConstraintFailedError": "Kamera juaj s’plotëson disa nga kufizimet e domosdoshme.",
|
||||
"cameraNotFoundError": "S’u gjet kamera.",
|
||||
"cameraNotSendingData": "S’qemë në gjendje të përdornim kamerën tuaj. Ju lutemi, kontrolloni se mos pajisjen po e përdor një tjetër aplikacion, përzgjidhni pajisje tjetër që nga menuja e rregullimeve, ose provoni të ringarkoni aplikacionin.",
|
||||
@@ -299,6 +335,7 @@
|
||||
"conferenceReloadMsg": "Po provojmë ta ndreqim këtë gjë. Rilidhje pas {{seconds}} sekondash…",
|
||||
"conferenceReloadTitle": "Mjerisht, diç shkoi ters.",
|
||||
"confirm": "Ripohojeni",
|
||||
"confirmBack": "Mbrapsht",
|
||||
"confirmNo": "Jo",
|
||||
"confirmYes": "Po",
|
||||
"connectError": "Hëm! Diç shkoi ters dhe s’mundëm të lidhemi dot me konferencën.",
|
||||
@@ -308,7 +345,7 @@
|
||||
"copied": "U kopjua",
|
||||
"copy": "Kopjoje",
|
||||
"demoteParticipantDialog": "Jeni i sigurt se doni ta kaloni këtë pjesëmarrës si vizitor?",
|
||||
"demoteParticipantTitle": "Kaloje si vizitor",
|
||||
"demoteParticipantTitle": "Kaloje si parës",
|
||||
"dismiss": "Hidhe tej",
|
||||
"displayNameRequired": "Njatjeta! Cili është emri juaj?",
|
||||
"done": "U bë",
|
||||
@@ -334,16 +371,20 @@
|
||||
"kickParticipantButton": "Përzëre",
|
||||
"kickParticipantDialog": "Jeni i sigurt se doni të përzihet ky pjesëmarrës?",
|
||||
"kickParticipantTitle": "Të përzihet ky pjesëmarrës?",
|
||||
"kickSystemTitle": "Ooh! U përzutë nga takimi",
|
||||
"kickTitle": "Ooh! {{participantDisplayName}} ju përzuri nga takimi",
|
||||
"learnMore": "Mësoni më tepër",
|
||||
"linkMeeting": "Lidheni takimin",
|
||||
"linkMeetingTitle": "Lidheni takimin me Salesforce",
|
||||
"liveStreaming": "Transmetim i Drejtpërdrejtë",
|
||||
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Jo e mundshme, kur është aktiv regjistrimi",
|
||||
"localUserControls": "Kontrolle vendore përdoruesi",
|
||||
"lockMessage": "S’u arrit të kyçej konferenca.",
|
||||
"lockRoom": "Shtoni takim $t(lockRoomPasswordUppercase)",
|
||||
"lockRoom": "Shtoni takim $t(lockRoomPassword)",
|
||||
"lockTitle": "Kyçja dështoi",
|
||||
"login": "Hyrje",
|
||||
"loginFailed": "Hyrja dështoi.",
|
||||
"loginOnResume": "Sesioni juaj me mirëfilltësim ka skaduar. Lypset të bëni sërish hyrjen, që të vazhdoni takimin.",
|
||||
"loginQuestion": "Jeni i sigurt se doni të hyhet dhe të braktiset konferenca?",
|
||||
"logoutQuestion": "Jeni i sigurt se doni të dilet dhe të braktiset konferenca?",
|
||||
"logoutTitle": "Dalje",
|
||||
@@ -356,23 +397,35 @@
|
||||
"micPermissionDeniedError": "S’keni akorduar leje për t’u përdorur mikrofoni juaj. Mundeni prapëseprapë të merrni pjesë te konferenca, por të tjerët s’do t’ju dëgjojnë. Përdorni butonin e kamerës, te shtylla e adresave, për ta ndrequr këtë gjë.",
|
||||
"micTimeoutError": "S’u nis dot burim audio. Ndodhi mbarim kohe!",
|
||||
"micUnknownError": "S’përdoret dot mikrofoni, për një arsye të panjohur.",
|
||||
"moderationAudioLabel": "Lejoji pjesëmarrësit të heqin heshtimin e vetes",
|
||||
"moderationVideoLabel": "Lejoji pjesëmarrësit të nisin videon e tyre",
|
||||
"moderationAudioLabel": "Lejoji jo-moderatorët të heqin heshtimin e vetes",
|
||||
"moderationDesktopLabel": "Lejoji jo-moderatorët të ndajnë me të tjerët ekranin e tyre",
|
||||
"moderationVideoLabel": "Lejoji jo-moderatorët të nisin videon e tyre",
|
||||
"muteEveryoneDialog": "Pjesëmarrësit mund të heqin kurdo heshtimin e veten.",
|
||||
"muteEveryoneDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo kërkesë për të folur.",
|
||||
"muteEveryoneElseDialog": "Po i heshtuat, s’do të jeni në gjendje t’u hiqni heshtimin, por ata munden të heqin kurdo heshtimin për veten.",
|
||||
"muteEveryoneElseTitle": "Të heshtohet gjithkush, hiq {{whom}}?",
|
||||
"muteEveryoneElsesDesktopDialog": "Pasi ndarja me të tjerë të jetë ndalur, s’do të jeni në gjendje ta rinisni, por ata mund ta bëjnë në çfarëdo kohe.",
|
||||
"muteEveryoneElsesDesktopTitle": "Të ndalet për gjithkënd ndarja e ekranit, hiq {{whom}}?",
|
||||
"muteEveryoneElsesVideoDialog": "Pasi të jetë çaktivizuar kamera, s’do të jeni në gjendje ta riaktivizoni, por ata munden ta riaktivizojnë kurdo.",
|
||||
"muteEveryoneElsesVideoTitle": "Të ndalet videoja e gjithkujt, hiq {{whom}}?",
|
||||
"muteEveryoneSelf": "ju",
|
||||
"muteEveryoneStartMuted": "Tani e tutje, gjithkush fillon i heshtuar",
|
||||
"muteEveryoneTitle": "Të heshtohet gjithkush?",
|
||||
"muteEveryonesDesktopDialog": "Pjesëmarrësit mund të ndajnë me të tjerët ekranin e tyre kurdo.",
|
||||
"muteEveryonesDesktopDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo një kërkesë për ndarjen e ekranit të tyre.",
|
||||
"muteEveryonesDesktopTitle": "Të ndalet ndarja e ekranit për gjithkënd?",
|
||||
"muteEveryonesVideoDialog": "Pjesëmarrësit mund të aktivizojnë videon e tyre kurdo.",
|
||||
"muteEveryonesVideoDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo kërkesë për aktivizimin e videos së tyre.",
|
||||
"muteEveryonesVideoDialogModerationOn": "Pjesëmarrësit mund të dërgojnë kurdo një kërkesë për të aktivizuar videon e tyre.",
|
||||
"muteEveryonesVideoDialogOk": "Çaktivizoje",
|
||||
"muteEveryonesVideoTitle": "Të ndalet videoja e gjithkujt?",
|
||||
"muteParticipantBody": "S’do jeni në gjendje të hiqni heshtimin për ta, por ata munden kurdo ta heqin për veten.",
|
||||
"muteParticipantButton": "Heshtoje",
|
||||
"muteParticipantsDesktopBody": "S’do të jeni në gjendje të nisni ndarjen e ekranit të tyre me të tjerë, por ata munden kurdo t ta bëjnë.",
|
||||
"muteParticipantsDesktopBodyModerationOn": "S’do të jeni në gjendje të nisni tregimin e ekrani t të tyre dhe as ata s’do të jenë në gjendje.",
|
||||
"muteParticipantsDesktopButton": "Ndale tregimin e ekranit",
|
||||
"muteParticipantsDesktopDialog": "Jeni i sigurt se doni të çaktivizoni tregimin e ekranit të këtij pjesëmarrësi? S’do të jeni në gjendje ta rinisni, por ai mund të bëjë kurdo.",
|
||||
"muteParticipantsDesktopDialogModerationOn": "Jeni i sigurt se doni të çaktivizoni tregimin e ekranit të këtij pjesëmarrësi? S’do të jeni në gjendje ta rinisni dhe as ata s’do të jenë në gjendje.",
|
||||
"muteParticipantsDesktopTitle": "Të çaktivizohet tregim ekrani i këtij pjesëmarrësit?",
|
||||
"muteParticipantsVideoBody": "S’do të jeni në gjendje të riaktivizoni kamerën e tyre, por ata munden kurdo ta riaktivizojnë për veten.",
|
||||
"muteParticipantsVideoBodyModerationOn": "S’do të jeni në gjendje të riaktivizoni kamerën e tyre dhe as ata s’do të munden.",
|
||||
"muteParticipantsVideoButton": "Ndale videon",
|
||||
@@ -391,7 +444,9 @@
|
||||
"readMore": "më tepër",
|
||||
"recentlyUsedObjects": "Së fundi përdorët objekte",
|
||||
"recording": "Regjistrim",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Jo i mundshëm kur ka aktiv një transmetim të drejtpërdrejtë",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Jo i mundshëm, kur ka aktiv një transmetim të drejtpërdrejtë",
|
||||
"recordingInProgressDescription": "Ky takim po regjistrohet dhe analizohet nga IA. Audioja dhe videoja juaj janë heshtuar. Nëse zgjidhni të hiqet heshtimi, pranimi juaj po regjistrohet.",
|
||||
"recordingInProgressTitle": "Regjistrim në kryerje e sipër",
|
||||
"rejoinNow": "Rihyni tani",
|
||||
"remoteControlAllowedMessage": "{{user}} pranoi kërkesën tuaj për kontroll së largëti!",
|
||||
"remoteControlDeniedMessage": "{{user}} hodhi poshtë kërkesën tuaj për kontroll së largëti!",
|
||||
@@ -428,7 +483,7 @@
|
||||
"sessTerminatedReason": "Takimi u përfundua",
|
||||
"sessionRestarted": "Thirrja rinisi për shkak të një problemi lidhjeje.",
|
||||
"shareAudio": "Vazhdoni",
|
||||
"shareAudioAltText": "që të ndani me të tjerë lëndën e dëshiruar, kaloni te \"Skedë Shfletuesi\", përzgjidhni lëndën, aktivizoni shenjën për \"ndani audio me të tjerë\" dhe mandej klikoni butonin \"ndaje me të tjerë\"",
|
||||
"shareAudioAltText": "që të ndani me të tjerë lëndën e dëshiruar, kaloni te “Skedë Shfletuesi”, përzgjidhni lëndën, aktivizoni shenjën për “ndani audio me të tjerë” dhe mandej klikoni butonin “ndaje me të tjerë”",
|
||||
"shareAudioTitle": "Si të ndahet audio me të tjerë",
|
||||
"shareAudioWarningD1": "lypset të ndalni tregim ekrani, para se të ndani audion tuaj me të tjerë.",
|
||||
"shareAudioWarningD2": "lypset të rinisni tregimin e ekranit tuaj dhe t’i vini shenjë mundësisë “ndani audio me të tjerë”.",
|
||||
@@ -481,6 +536,7 @@
|
||||
"tokenAuthFailedWithReasons": "Na ndjeni, nuk keni leje të merrni pjesë në këtë thirrje. Arsye e mundshme: {{reason}}",
|
||||
"tokenAuthUnsupported": "Nuk mbulohet URL token-i.",
|
||||
"transcribing": "Transkriptim",
|
||||
"unauthenticatedAccessDisabled": "Kjo thirrje lyp mirëfilltësim. Ju lutemi, bëni hyrjen, që të mund të vazhdoni.",
|
||||
"unlockRoom": "Hiq $t(lockRoomPassword) takimi",
|
||||
"user": "Përdorues",
|
||||
"userIdentifier": "Identifikues përdoruesi",
|
||||
@@ -493,10 +549,10 @@
|
||||
"viewUpgradeOptions": "Shihni mundësi përmirësimi",
|
||||
"viewUpgradeOptionsContent": "Që të përfitoni përdorim të pakufizuar veçorish me pagesë, të tilla si regjistrimi, transkriptime, RTMP Streaming & etj, duhet të përmirësoni planin tuaj.",
|
||||
"viewUpgradeOptionsTitle": "Zbuluat një veçori me pagesë!",
|
||||
"whiteboardLimitContent": "Na ndjeni, është mbërritur te kufiri i tabelave të njëkohshme.",
|
||||
"whiteboardLimitContent": "Na ndjeni, është mbërritur në kufi përdorues të njëkohshëm tabele.",
|
||||
"whiteboardLimitReference": "Për më tepër hollësi, ju lutemi, vizitoni",
|
||||
"whiteboardLimitReferenceUrl": "sajtin tonë",
|
||||
"whiteboardLimitTitle": "Kufizim përdorimi tabele",
|
||||
"whiteboardLimitTitle": "Përdorim tabele i kufizuar",
|
||||
"yourEntireScreen": "Krejt ekranin tuaj"
|
||||
},
|
||||
"documentSharing": {
|
||||
@@ -521,6 +577,26 @@
|
||||
"veryBad": "Shumë i Dobët",
|
||||
"veryGood": "Shumë i Mirë"
|
||||
},
|
||||
"fileSharing": {
|
||||
"downloadFailedDescription": "Ju lutemi, riprovoni.",
|
||||
"downloadFailedTitle": "Shkarkimi dështoi",
|
||||
"downloadFile": "Shkarkoje",
|
||||
"downloadStarted": "Filloi shkarkimi i kartelës",
|
||||
"dragAndDrop": "Tërhiqni dhe lini kartela këtu, ose kudo në ekran",
|
||||
"fileAlreadyUploaded": "Kartela është ngarkuar tashmë te ky takim.",
|
||||
"fileRemovedByOther": "Kartela juaj '{{ fileName }}' u hoq",
|
||||
"fileTooLargeDescription": "Ju lutemi, siguroni që kartela të mos tejkalojë {{ maxFileSize }}.",
|
||||
"fileTooLargeTitle": "Kartela e përzgjedhur është shumë e madhe",
|
||||
"fileUploadProgress": "Ecuri ngarkimi kartele",
|
||||
"fileUploadedSuccessfully": "Kartela u ngarkua me sukses",
|
||||
"newFileNotification": "{{ participantName }} ndau '{{ fileName }}' me të tjerë",
|
||||
"removeFile": "Hiqe",
|
||||
"removeFileSuccess": "Kartela u hoq me sukses",
|
||||
"uploadDisabled": "S’lejoheni të ngarkoni kartela. Kërkojini një moderatori të drejta lejimi të këtij veprimi.",
|
||||
"uploadFailedDescription": "Ju lutemi, riprovoni.",
|
||||
"uploadFailedTitle": "Ngarkimi dështoi",
|
||||
"uploadFile": "Ndani kartelë"
|
||||
},
|
||||
"filmstrip": {
|
||||
"accessibilityLabel": {
|
||||
"heading": "Miniatura videosh"
|
||||
@@ -627,15 +703,13 @@
|
||||
"errorAPI": "Ndodhi një gabim teksa hyhej te transmetimet tuaja YouTube. Ju lutemi, provoni të ribëni hyrjen.",
|
||||
"errorLiveStreamNotEnabled": "Transmetimi i Drejtpërdrejtë s’është i aktivizuar për {{email}}. Ju lutemi, aktivizoni transmetim të drejtpërdrejtë, ose hyni në një llogari me transmetim të drejtpërdrejtë të aktivizuar.",
|
||||
"expandedOff": "Transmetimi i drejtpërdrejtë u ndal",
|
||||
"expandedOn": "Takimi po transmetohet aktualisht në YouTube.",
|
||||
"expandedOn": "Takimi aktualisht po transmetohet drejtpërdrejt",
|
||||
"expandedPending": "Po fillohet transmetim i drejtpërdrejtë…",
|
||||
"failedToStart": "S’u arrit të fillohej Transmetim i Drejtpërdrejtë",
|
||||
"getStreamKeyManually": "S’qemë në gjendje të sillnim ndonjë transmetim të drejtpërdrejtë. Provoni të merrni kyçin tuaj për transmetim të drejtpërdrejtë nga YouTube-i.",
|
||||
"googlePrivacyPolicy": "Rregulla Privatësie Google",
|
||||
"inProgress": "Regjistrim ose transmetim i drejtpërdrejtë në punë e sipër",
|
||||
"invalidStreamKey": "Kyçi për transmetim të drejtpërdrejtë mund të jetë i pasaktë.",
|
||||
"limitNotificationDescriptionNative": "Transmetimi juaj do të kufizohet në {{limit}} min. Për transmetim të pakufizuar, provoni {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Për shkak kërkesash të shumta, transmetimi juaj do të kufizohet në {{limit}} min. Për transmetim të pakufizuar, provoni <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Transmetimi i Drejtpërdrejtë u ndal",
|
||||
"offBy": "{{name}} ndali transmetimin e drejtpërdrejtë",
|
||||
"on": "Filloi Transmetimi i Drejtpërdrejtë",
|
||||
@@ -689,7 +763,8 @@
|
||||
"notificationTitle": "Holl",
|
||||
"passwordJoinButton": "Hyni",
|
||||
"title": "Holl",
|
||||
"toggleLabel": "Aktivizoni hollin"
|
||||
"toggleLabel": "Aktivizoni hollin",
|
||||
"waitForModerator": "Konferenca s’ka nisur ende, ngaqë s’ka mbërritur ndonjë moderator. Nëse do të donit të bëheni një moderator, ju lutemi, bëni hyrjen në llogari. Përndryshe, ju lutemi, prisni."
|
||||
},
|
||||
"localRecording": {
|
||||
"clientState": {
|
||||
@@ -732,21 +807,26 @@
|
||||
"me": "unë",
|
||||
"notify": {
|
||||
"OldElectronAPPTitle": "Cenueshmëri sigurie!",
|
||||
"allowAction": "Lejoje",
|
||||
"allowAll": "Lejo Gjithçka",
|
||||
"allowAudio": "Lejo Audio",
|
||||
"allowDesktop": "Lejo tregim ekrani",
|
||||
"allowVideo": "Lejo Video",
|
||||
"allowedUnmute": "Mund të hiqni heshtimin e mikrofonit tuaj, të nisni kamerën tuaj ose të tregoni ekranin tuaj.",
|
||||
"audioUnmuteBlockedDescription": "Veprimi i heqjes së heshtimit të mikrofonit është bllokuar përkohësisht për shkak kufizimesh të sistemit.",
|
||||
"audioUnmuteBlockedTitle": "Heqje heshtimi mikrofoni e bllokuar!",
|
||||
"chatMessages": "Mesazhe fjalosjeje",
|
||||
"connectedOneMember": "{{name}} nisi takimin",
|
||||
"connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë tjerë hynë në takim",
|
||||
"connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë hynë në takim",
|
||||
"connectedTwoMembers": "{{first}} dhe {{second}} tjetër hynë në takim",
|
||||
"connectionFailed": "Lidhja dështoi. Ju lutemi, riprovoni më vonë!",
|
||||
"dataChannelClosed": "Cilësia e videos mund të jetë dëmtuar",
|
||||
"dataChannelClosedDescription": "Kanali urë u shkëput, kështu që cilësia e videos është kufizuar te vlera më e ulët.",
|
||||
"dataChannelClosedDescriptionWithAudio": "Kanali urë është jashtë funksionimi, prandaj mund të ndodhin shkëputje te audioja dhe videoja.",
|
||||
"dataChannelClosedWithAudio": "Cilësia e audios dhe videos mund të jetë dëmtuar",
|
||||
"desktopMutedRemotelyTitle": "Tregimi i ekranit tuaj është ndalur nga {{participantDisplayName}}",
|
||||
"disabledIframe": "Trupëzimi është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash.",
|
||||
"disabledIframeSecondary": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash. Ju lutemi, për trupëzime të njëmendta përdorni <a href='{{jaasDomain}}' rel='noopener noreferrer' target='_blank'>Jitsi as a Service</a>!",
|
||||
"disabledIframeSecondaryNative": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash.",
|
||||
"disabledIframeSecondaryWeb": "Trupëzimi i {{domain}} është menduar vetëm për qëllime demonstrimi, ndaj kjo thirrje do të ndërpritet pas {{timeout}} minutash. Ju lutemi, për trupëzime të njëmendta përdorni <a href='{{jaasDomain}}' rel='noopener noreferrer' target='_blank'>Jitsi si një Shërbim</a>!",
|
||||
"disconnected": "u shkëput",
|
||||
"displayNotifications": "Shfaq njoftime për",
|
||||
"dontRemindMe": "Mos ma kujto",
|
||||
@@ -754,7 +834,7 @@
|
||||
"focusFail": "{{component}} jo i passhëm - riprovoni pas {{ms}} sekondash",
|
||||
"gifsMenu": "GIPHY",
|
||||
"groupTitle": "Njoftime",
|
||||
"hostAskedUnmute": "Moderatori do të donte të flisnit",
|
||||
"hostAskedUnmute": "Moderatori do të donte të merrnit pjesë.",
|
||||
"invalidTenant": "Qiramarrës i pavlefshëm",
|
||||
"invalidTenantHyphenDescription": "Qiramarrësi që po përdorni është i pavlefshëm (fillon, ose përfundon me '-').",
|
||||
"invalidTenantLengthDescription": "Qiramarrësi që po përdorni është shumë i gjatë.",
|
||||
@@ -789,30 +869,31 @@
|
||||
"moderator": "Tani jeni moderator",
|
||||
"muted": "E keni filluar bisedën të heshtur.",
|
||||
"mutedRemotelyDescription": "Mundeni përherë të hiqni heshtimin, kur të jeni gati për të folur. Ribëni heshtimin, kur të mbaroni, për të mbajtur zhurmat jashtë takimit.",
|
||||
"mutedRemotelyTitle": "Jeni heshtuar nga {{moderator}}",
|
||||
"mutedRemotelyTitle": "Jeni heshtuar nga {{participantDisplayName}}",
|
||||
"mutedTitle": "U heshtuat!",
|
||||
"newDeviceAction": "Përdore",
|
||||
"newDeviceAudioTitle": "U pikas pajisje audio e re",
|
||||
"newDeviceCameraTitle": "U pikas kamerë e re",
|
||||
"nextToSpeak": "Jeni pasuesi në radhë për folje",
|
||||
"noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave s’mund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.",
|
||||
"noiseSuppressionFailedTitle": "S’u arrit të nisej mbytja e zhurmave",
|
||||
"noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash audioje stereo.",
|
||||
"noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave ekstra s’mund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.",
|
||||
"noiseSuppressionFailedTitle": "S’u arrit të nisej mbytja e zhurmave ekstra",
|
||||
"noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash ekstra me audio stereo.",
|
||||
"oldElectronClientDescription1": "Duket se përdorni një version të vjetër të klientit Jitsi Meet, i cili ka cenueshmëri të ditura sigurie. Ju lutemi, siguroni përditësimin me ",
|
||||
"oldElectronClientDescription2": "montimin tonë më të ri",
|
||||
"oldElectronClientDescription3": " që tani!",
|
||||
"openChat": "Hapni fjalosjen",
|
||||
"participantWantsToJoin": "Dëshiron të hyjë në takim",
|
||||
"participantsWantToJoin": "Dëshirojnë të hyjnë në takim",
|
||||
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase) u hoq nga një tjetër pjesëmarrës",
|
||||
"passwordSetRemotely": "$t(lockRoomPasswordUppercase) u caktua nga një tjetër pjesëmarrës",
|
||||
"raiseHandAction": "Ngrini dorën",
|
||||
"raisedHand": "Do të donte të fliste.",
|
||||
"raisedHand": "Do të donte të merrte pjesë.",
|
||||
"raisedHands": "{{participantName}} dhe {{raisedHands}} persona të tjerë",
|
||||
"reactionSounds": "Çaktivizo tingujt",
|
||||
"reactionSoundsForAll": "Çaktivizoji tingujt për të tërë",
|
||||
"screenShareNoAudio": "Kutizës për ndarje audioje me të tjerë s’i është vënë shenjë te skena e përzgjedhjes së dritares.",
|
||||
"screenShareNoAudioTitle": "S’u nda dot me të tjerë audioja e sistemit!",
|
||||
"screenSharingAudioOnlyDescription": "Ju lutemi, kini parasysh se duke dhënë ekranin tuaj, ndikoni te mënyra “Punimi më i mirë” dhe do të përdorni më tepër gjerësi bande",
|
||||
"screenSharingAudioOnlyDescription": "Ju lutemi, kini parasysh se duke dhënë ekranin tuaj, ndikoni te mënyra “Punimi më i mirë” dhe do të përdorni më tepër gjerësi bande.",
|
||||
"screenSharingAudioOnlyTitle": "Mënyra “”Punimi më i mirë",
|
||||
"selfViewTitle": "Mundeni përherë të hiqni fshehjen e pamjes së vetes, që nga rregullimet",
|
||||
"somebody": "Dikush",
|
||||
@@ -823,16 +904,18 @@
|
||||
"suggestRecordingAction": "Niseni",
|
||||
"suggestRecordingDescription": "Do të donit të nisej një regjistrim?",
|
||||
"suggestRecordingTitle": "Regjistroje këtë takim",
|
||||
"unmute": "Çheshtoje",
|
||||
"unmute": "Çheshtoje Audion",
|
||||
"unmuteScreen": "Fillo tregim ekrani",
|
||||
"unmuteVideo": "Hiqe Heshtimin e Videos",
|
||||
"videoMutedRemotelyDescription": "Mundeni përherë ta rihapni.",
|
||||
"videoMutedRemotelyTitle": "Videoja juaj u mbyll nga {{moderator}}",
|
||||
"videoMutedRemotelyTitle": "Videoja juaj u mbyll nga {{participantDisplayName}}",
|
||||
"videoUnmuteBlockedDescription": "Heqja e heshtimit të kamerës dhe veprimi i tregimit të desktopit janë bllokuar përkohësisht për shkak kufizimesh të sistemit.",
|
||||
"videoUnmuteBlockedTitle": "Heqja e heshtimit të kamerës dhe tregimi i desktopit janë bllokuar!",
|
||||
"viewLobby": "Shihni hollin",
|
||||
"viewParticipants": "Shihni pjesëmarrësit",
|
||||
"viewVisitors": "Shihni vizitorët",
|
||||
"waitingParticipants": "{{waitingParticipants}} vetë",
|
||||
"waitingVisitors": "Vizitorë që presin në radhë: {{waitingVisitors}}",
|
||||
"waitingVisitors": "Parës që presin në radhë: {{waitingVisitors}}",
|
||||
"waitingVisitorsTitle": "Takimi s’ka filluar endeThe meeting is not live yet!",
|
||||
"whiteboardLimitDescription": "Ju lutemi, ruani ç’keni bërë, ngaqë së shpejti do të mbërrihet në kufi përdoruesi dhe tabela do të mbyllet.",
|
||||
"whiteboardLimitTitle": "Përdorim tabele"
|
||||
@@ -840,39 +923,47 @@
|
||||
"participantsPane": {
|
||||
"actions": {
|
||||
"admit": "Pranoje",
|
||||
"admitAll": "Pranoji të tërë",
|
||||
"allow": "Lejoju pjesëmarrësve të:",
|
||||
"allowVideo": "Çaktivizoni videon",
|
||||
"askUnmute": "Kërkoni heqje heshtimi",
|
||||
"audioModeration": "Heqin heshtim të vetes",
|
||||
"blockEveryoneMicCamera": "Bllokoni mikrofonin dhe kamerën e gjithkujt",
|
||||
"admitAll": "Admit all",
|
||||
"allow": "Lejoju jo-moderatorëve:",
|
||||
"allowDesktop": "Të lejojnë tregim ekranesh",
|
||||
"allowVideo": "Të lejojnë video",
|
||||
"askDesktop": "Të lejojnë tregim ekrani",
|
||||
"askUnmute": "Të kërkojnë çheshtim",
|
||||
"audioModeration": "Të heqin heshtim të vetes",
|
||||
"blockEveryoneMicCamera": "Të bllokojnë mikrofonin dhe kamerën e kujtdo",
|
||||
"breakoutRooms": "Dhoma anekse konsultimesh",
|
||||
"desktopModeration": "Të nisin tregim ekrani",
|
||||
"goLive": "Go live",
|
||||
"invite": "Ftoni Dikë",
|
||||
"lowerAllHands": "Uli krejt duart",
|
||||
"lowerHand": "Uleni dorën",
|
||||
"invite": "Të ftojnë dikë",
|
||||
"lowerAllHands": "Të ulin krejt duart",
|
||||
"lowerHand": "Të ulin dorën",
|
||||
"moreModerationActions": "Më tepër mundësi moderimi",
|
||||
"moreModerationControls": "Më tepër kontrolle moderimi",
|
||||
"moreParticipantOptions": "Më tepër mundësi pjesëmarrësi",
|
||||
"mute": "Heshtoje",
|
||||
"muteAll": "Heshtoji të tërë",
|
||||
"muteEveryoneElse": "Heshto gjithkënd tjetër",
|
||||
"reject": "Hidhe poshtë",
|
||||
"stopEveryonesVideo": "Ndal videon e gjithkujt",
|
||||
"stopVideo": "Ndale videon",
|
||||
"unblockEveryoneMicCamera": "Zhblloko mikrofonin dhe kamerën e gjithkujt",
|
||||
"videoModeration": "Nisin videon e vetes"
|
||||
"mute": "Të heshtojnë",
|
||||
"muteAll": "Të heshtojnë të tërë",
|
||||
"muteEveryoneElse": "Të heshtojnë gjithkënd tjetër",
|
||||
"reject": "Të hedhin poshtë",
|
||||
"stopDesktop": "Të ndalin tregim ekrani",
|
||||
"stopEveryonesDesktop": "Të ndalin tregim ekrani të kujtdo",
|
||||
"stopEveryonesVideo": "Të ndalin videon e gjithkujt",
|
||||
"stopVideo": "Të ndalin video",
|
||||
"unblockEveryoneMicCamera": "Të zhbllokojnë mikrofonin dhe kamerën e gjithkujt",
|
||||
"videoModeration": "Të nisin videon e tyre"
|
||||
},
|
||||
"close": "Mbylle",
|
||||
"headings": {
|
||||
"lobby": "Holli ({{count}})",
|
||||
"participantsList": "Pjesëmarrës në takim ({{count}})",
|
||||
"visitorInQueue": " (në pritje {{count}})",
|
||||
"visitorRequests": " (requests {{count}})",
|
||||
"visitors": "Vizitorë {{count}}",
|
||||
"lobby": "Holl ({{count}})",
|
||||
"participantsList": "Pjesëmarrës takimi ({{count}})",
|
||||
"viewerRequests": "Kërkesa parësish {{count}}",
|
||||
"visitorInQueue": " (në radhë {{count}})",
|
||||
"visitorRequests": " (kërkesa {{count}})",
|
||||
"visitors": "Parës {{count}}",
|
||||
"visitorsList": "Parës ({{count}})",
|
||||
"waitingLobby": "Duke pritur në holl ({{count}})"
|
||||
},
|
||||
"search": "Kërkoni te pjesëmarrësit",
|
||||
"searchDescription": "Që të filtrohen pjesëmarrës, filloni të shtypni në tastierë",
|
||||
"title": "Pjesëmarrës"
|
||||
},
|
||||
"passwordDigitsOnly": "Deri në {{number}} shifra",
|
||||
@@ -889,6 +980,9 @@
|
||||
"by": "Nga {{ name }}",
|
||||
"closeButton": "Mbylle pyetësorin",
|
||||
"create": {
|
||||
"accessibilityLabel": {
|
||||
"send": "Dërgo pyetësor"
|
||||
},
|
||||
"addOption": "Shtoni mundësi",
|
||||
"answerPlaceholder": "Mundësia {{index}}",
|
||||
"cancel": "Anuloje",
|
||||
@@ -897,11 +991,10 @@
|
||||
"pollQuestion": "Pyetje Pyetësori",
|
||||
"questionPlaceholder": "Bëni një pyetje",
|
||||
"removeOption": "Hiqe mundësinë",
|
||||
"save": "Ruaje",
|
||||
"send": "Dërgoje"
|
||||
"save": "Ruaje"
|
||||
},
|
||||
"errors": {
|
||||
"notUniqueOption": "Opsionet duhet të jenë unike"
|
||||
"notUniqueOption": "Mundësitë duhet të jenë unike"
|
||||
},
|
||||
"notification": {
|
||||
"description": "Që të votoni, hapni skedën e pyetësorëve",
|
||||
@@ -909,7 +1002,7 @@
|
||||
},
|
||||
"results": {
|
||||
"changeVote": "Ndryshoni votën",
|
||||
"empty": "Te takimi s’ka ende pyetësorë. Nisni një pyetësor këtu!",
|
||||
"empty": "Te takimi s’ka ende pyetësorë.",
|
||||
"hideDetailedResults": "Fshihi hollësitë",
|
||||
"showDetailedResults": "Shfaqi hollësitë",
|
||||
"vote": "Votoni"
|
||||
@@ -938,11 +1031,11 @@
|
||||
"audioHighQuality": "Presim që audioja juaj të jetë në cilësi të shkëlqyer.",
|
||||
"audioLowNoVideo": "Presim që audioja juaj të jetë në cilësi të ulët dhe s’do të ketë video.",
|
||||
"goodQuality": "Shkëlqyeshëm! Cilësia e medias tuaj do të jetë shumë e mirë.",
|
||||
"noMediaConnectivity": "S’gjetëm dot rrugë për të vendosur lidhje media për këtë provë. Zakonisht kjo shkaktohet nga një firewall ose NAT.",
|
||||
"noMediaConnectivity": "S’gjetëm dot rrugë për të vendosur lidhje media për këtë provë. Zakonisht kjo shkaktohet nga një “firewall”, ose NAT.",
|
||||
"noVideo": "Presim që cilësia e videos për ju të jetë për të vënë kujën.",
|
||||
"testFailed": "Prova e lidhjes hasi në probleme të papritura, por kjo mund të mos prekë funksionimin për ju.",
|
||||
"undetectable": "Nëse s’bëni dot ende thirrje në shfletues, rekomandojmë të siguroheni se altoparlantët, mikrofoni dhe kamera juaj janë ujdisur si duhet, se i keni akorduar shfletuesit tuaja të drejta të përdorë mikrofonin dhe kamerën tuaj, dhe se versioni i shfletuesit tuaj është i përditësuar. Nëse keni ende probleme me thirrje, duhet të lidheni me zhvilluesin e aplikacionit web.",
|
||||
"veryPoorConnection": "Presim që cilësia e thirrjes te ju të jetë për të vënë kujën",
|
||||
"veryPoorConnection": "Presim që cilësia e thirrjes te ju të jetë për të vënë kujën.",
|
||||
"videoFreezing": "Presim që videoja te ju të ngrijë, të bëhet e zezë dhe të shfaqet tërë piksela.",
|
||||
"videoHighQuality": "Presim që videoja te ju të ketë cilësi të mirë.",
|
||||
"videoLowQuality": "Presim që videoja te ju të ketë cilësi të ulët, për sa i takon shpejtësisë së kuadrove dhe qartësisë.",
|
||||
@@ -969,7 +1062,7 @@
|
||||
"joinWithoutAudio": "Merrni pjesë pa audio",
|
||||
"keyboardShortcuts": "Aktivizo shkurtore tastiere",
|
||||
"linkCopied": "Lidhja u kopjua në të papastër",
|
||||
"lookGood": "Gjithçka po punon si duhet",
|
||||
"lookGood": "Pajisjet tuaja po punojnë si duhet",
|
||||
"or": "ose",
|
||||
"premeeting": "Para takimit",
|
||||
"proceedAnyway": "Vazhdo, sido qoftë",
|
||||
@@ -1011,7 +1104,7 @@
|
||||
"type": {
|
||||
"account": "Llogari",
|
||||
"contact": "Kontakt",
|
||||
"lead": "Lead",
|
||||
"lead": "",
|
||||
"opportunity": "Mundësi",
|
||||
"owner": "Zotërues"
|
||||
}
|
||||
@@ -1026,7 +1119,7 @@
|
||||
"error": "Regjistrimi dështoi. Ju lutemi, riprovoni.",
|
||||
"errorFetchingLink": "Gabim në sjellje lidhje regjistrimi.",
|
||||
"expandedOff": "Regjistrimi u ndal",
|
||||
"expandedOn": "Takimi është aktualisht duke u regjistruar.",
|
||||
"expandedOn": "Takimi është aktualisht duke u regjistruar",
|
||||
"expandedPending": "Po niset regjistrimi…",
|
||||
"failedToStart": "S’u arrit të niset regjistrimi",
|
||||
"fileSharingdescription": "Ndajeni regjistrimin me pjesëmarrësit në takim",
|
||||
@@ -1036,8 +1129,6 @@
|
||||
"highlightMomentSuccess": "Çasti u nxor në pah",
|
||||
"highlightMomentSucessDescription": "Çasti i nxjerrë në pah nga ju do të shtohet te përmbledhja e takimit.",
|
||||
"inProgress": "Regjistrim ose transmetim drejtpërsëdrejti në ecuri e sipër",
|
||||
"limitNotificationDescriptionNative": "Për shkak kërkesash të shumta, regjistrimi juaj do të kufizohet në {{limit}} min. Për regjistrime të pakufizuara provoni <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Për shkak kërkesash të shumta, regjistrimi juaj do të kufizohet në {{limit}} min. Për regjistrime të pakufizuara provoni <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Kemi prodhuar një lidhje për te regjistrimi juaj.",
|
||||
"localRecordingNoNotificationWarning": "Regjistrimi s’do t’u njoftohet pjesëmarrësve të tjerë. Do t’ju duhet t’i vini në dijeni se takimi po regjistrohet.",
|
||||
"localRecordingNoVideo": "Videoja s’po regjistrohet",
|
||||
@@ -1099,6 +1190,7 @@
|
||||
"signedIn": "Aktualisht po shihen veprimtari kalendari për {{email}}. Klikoni mbi butonin Shkëputu më poshtë që të ndalni parjen e veprimtarive të kalendarit.",
|
||||
"title": "Kalendar"
|
||||
},
|
||||
"chatWithPermissions": "Çaktivizo fjalosje për jo-moderatorë",
|
||||
"desktopShareFramerate": "Shpejtësi kuadrosh për tregim desktopi",
|
||||
"desktopShareHighFpsWarning": "Një shpejtësi më e madhe për tregimin e ekranit mund të ketë ndikim në konsumin e gjerësisë së bandës. Që të hyjnë në fuqi rregullimet e reja, lypset të rinisni tregimin e ekranit.",
|
||||
"desktopShareWarning": "Që të hyjnë në fuqi rregullimet e reja, duhet të rinisni tregimin e ekranit.",
|
||||
@@ -1113,7 +1205,7 @@
|
||||
"microphones": "Mikrofona",
|
||||
"moderator": "Moderator",
|
||||
"moderatorOptions": "Mundësi moderatori",
|
||||
"more": "Të përgjitshme",
|
||||
"more": "Të përgjithshme",
|
||||
"name": "Emër",
|
||||
"noDevice": "Asnjë",
|
||||
"notifications": "Njoftime",
|
||||
@@ -1128,6 +1220,7 @@
|
||||
"selectMic": "Mikrofon",
|
||||
"selfView": "Parje e vetes",
|
||||
"shortcuts": "Shkurtore",
|
||||
"showSubtitlesOnStage": "Shfaq titra në skenë",
|
||||
"speakers": "Altoparlantë",
|
||||
"startAudioMuted": "Gjithkush fillon i heshtuar",
|
||||
"startReactionsMuted": "Heshto tinguj reagimesh për këdo",
|
||||
@@ -1181,11 +1274,13 @@
|
||||
"fearful": "I frikësuar",
|
||||
"happy": "I gëzuar",
|
||||
"hours": "{{count}}h",
|
||||
"labelTooltip": "Numër pjesëmarrësish: {{count}}",
|
||||
"minutes": "{{count}}m",
|
||||
"name": "Emër",
|
||||
"neutral": "Asnjanës",
|
||||
"sad": "I trishtuar",
|
||||
"search": "Kërko",
|
||||
"searchDescription": "Që të filtrohen pjesëmarrësh, filloni të shtypni",
|
||||
"searchHint": "Kërkoni për pjesëmarrës",
|
||||
"seconds": "{{count}}s",
|
||||
"speakerStats": "Statistika Folësi",
|
||||
@@ -1220,23 +1315,25 @@
|
||||
"chat": "Hapni / Mbyllni fjalosje",
|
||||
"clap": "Duartrokitje",
|
||||
"closeChat": "Mbylle fjalosjen",
|
||||
"closeCustomPanel": "Mbylle",
|
||||
"closeMoreActions": "Mbyll menunë Më Tepër Veprime",
|
||||
"closeParticipantsPane": "Mbyll kuadratin pjesëmarrës",
|
||||
"closedCaptions": "Titra të mbyllur",
|
||||
"collapse": "Tkurre",
|
||||
"document": "Shfaq/Fshih dokument të ndarë",
|
||||
"documentClose": "Mbyll dokument të ndarë",
|
||||
"documentClose": "Mbylle dokumentin e ndarë",
|
||||
"documentOpen": "Hap dokument të ndarë",
|
||||
"download": "Shkarkoni aplikacionet tona",
|
||||
"embedMeeting": "Trupëzoni takimin",
|
||||
"endConference": "Përfundoje takimin për të tërë",
|
||||
"endConference": "Përfundoje takimin për gjithkënd",
|
||||
"enterFullScreen": "Shiheni sa krejt ekrani",
|
||||
"enterTileView": "Kaloni nën mënyrën me kuadrate",
|
||||
"exitFullScreen": "Dil nga mënyra “Sa krejt ekrani”",
|
||||
"exitTileView": "Dil nga mënyra me kuadrate",
|
||||
"enterTileView": "Kaloni në pamje me kuadrate",
|
||||
"exitFullScreen": "Dilni nga mënyra “Sa krejt ekrani”",
|
||||
"exitTileView": "Dilni nga pamje me kuadrate",
|
||||
"expand": "Zgjeroje",
|
||||
"feedback": "Lini përshtypje",
|
||||
"fullScreen": "Kalo nën/Dil nga mënyra “Sa krejt ekrani”",
|
||||
"giphy": "Shfaq/fshih menunë GIPHY",
|
||||
"fullScreen": "Kaloni në/Dilni nga mënyra “Sa krejt ekrani”",
|
||||
"giphy": "Shfaqni/Fshihni menunë GIPHY",
|
||||
"grantModerator": "Akordoji të Drejta Moderatori",
|
||||
"hangup": "Braktiseni takimin",
|
||||
"heading": "Panel",
|
||||
@@ -1246,7 +1343,7 @@
|
||||
"kick": "Përzëre pjesëmarrësin",
|
||||
"laugh": "E qeshur",
|
||||
"leaveConference": "Dilni nga takimi",
|
||||
"like": "Thumbs Up",
|
||||
"like": "",
|
||||
"linkToSalesforce": "Lidhje për te Salesforce",
|
||||
"lobbyButton": "Aktivizo/Çaktivizoni mënyrën holl",
|
||||
"localRecording": "Shfaq/Fshih kontrolle regjistrimi vendor",
|
||||
@@ -1262,9 +1359,9 @@
|
||||
"muteEveryoneElsesVideoStream": "Ndal videon e gjithkujt tjetër",
|
||||
"muteEveryonesVideoStream": "Ndal videon e gjithkujt",
|
||||
"muteGUMPending": "Po lidhet mikrofoni juaj",
|
||||
"noiseSuppression": "Mbytje zhurmash",
|
||||
"noiseSuppression": "Mbytje zhurmash ekstra",
|
||||
"openChat": "Hapni fjalosje",
|
||||
"participants": "Hapni kuadrat pjesëmarrësish",
|
||||
"participants": "Hapni kuadrat pjesëmarrësish. {{participantsCount}} pjesëmarrës",
|
||||
"pip": "Aktivizo/Çaktivizo mënyrën “Picture-in-Picture”",
|
||||
"privateMessage": "Dërgoni mesazh privat",
|
||||
"profile": "Përpunoni profilin tuaj",
|
||||
@@ -1300,68 +1397,87 @@
|
||||
"videounmute": "Nis kamerën"
|
||||
},
|
||||
"addPeople": "Shtoni persona te thirrja juaj",
|
||||
"audioOnlyOff": "Çaktivizo mënyrën “Sasi e ulët të dhënash trafiku”",
|
||||
"audioOnlyOn": "Aktivizo mënyrën “Sasi e ulët të dhënash trafiku”",
|
||||
"advancedAudioSettings": {
|
||||
"aec": {
|
||||
"label": "Asgjësim jehone akustike"
|
||||
},
|
||||
"agc": {
|
||||
"label": "Kontroll i automatizuar gain-i"
|
||||
},
|
||||
"ns": {
|
||||
"label": "Mbytje zhurmash"
|
||||
},
|
||||
"stereo": {
|
||||
"label": "Stereo"
|
||||
}
|
||||
},
|
||||
"audioOnlyOff": "Aktivizo mënyrën gjerësi e ulët bande",
|
||||
"audioOnlyOn": "Çaktivizo mënyrën gjerësi e ulët bande",
|
||||
"audioRoute": "Përzgjidhni pajisje zëri",
|
||||
"audioSettings": "Rregullime për audion",
|
||||
"authenticate": "Bëni mirëfilltësimin",
|
||||
"boo": "Ya",
|
||||
"callQuality": "Administroni cilësi video",
|
||||
"chat": "Hap / Mbyll fjalosje",
|
||||
"clap": "Duartrokitje",
|
||||
"closeChat": "Mbyll fjalosjen",
|
||||
"closeParticipantsPane": "Mbylle kuadratin e pjesëmarrësve",
|
||||
"closeReactionsMenu": "Mbyll menu reagimesh",
|
||||
"disableNoiseSuppression": "Çaktivizo mbytje zhurmash",
|
||||
"audioSettings": "Rregullime audio",
|
||||
"authenticate": "Bëni mirëfilltësimiin",
|
||||
"boo": "Buuu",
|
||||
"callQuality": "Administroni cilësi videosh",
|
||||
"chat": "Hapni / Mbyllni fjalosjen",
|
||||
"clap": "Duartrokitni",
|
||||
"closeChat": "Mbylleni fjalosjen",
|
||||
"closeCustomPanel": "Mbylle",
|
||||
"closeParticipantsPane": "Mbyllni kuadrat pjesëmarrësish",
|
||||
"closeReactionsMenu": "Mbyllni menu reagimesh",
|
||||
"closedCaptions": "Titra të mbyllur",
|
||||
"copilot": "Copilot",
|
||||
"disableNoiseSuppression": "Çaktivizoni asgjësim ekstra zhurmash",
|
||||
"disableReactionSounds": "Mund të çaktivizoni tinguj reagimesh për këtë takim",
|
||||
"documentClose": "Mbylle dokumentin e ndarë",
|
||||
"documentOpen": "Hape dokumentin e ndarë",
|
||||
"download": "Shkarkoni aplikacione tonat",
|
||||
"e2ee": "Fshehtëzim Skaj-Më-Skaj",
|
||||
"documentClose": "Mbyll dokument të ndarë",
|
||||
"documentOpen": "Hap dokument të ndarë",
|
||||
"download": "Shkarkoni aplikacionet tona",
|
||||
"e2ee": "Fshehtëzim Skaj-më-Skaj",
|
||||
"embedMeeting": "Trupëzoni takim",
|
||||
"enableNoiseSuppression": "Aktivizoni mbytje zhurmash",
|
||||
"enableNoiseSuppression": "Aktivizoni asgjësim ekstra zhurmash",
|
||||
"endConference": "Përfundoje takimin për të tërë",
|
||||
"enterFullScreen": "Shiheni sa krejt ekrani",
|
||||
"enterTileView": "Kalo te pamja me kuadrate",
|
||||
"exitFullScreen": "Dil nga mënyra sa krejt ekrani",
|
||||
"exitTileView": "Dil nga pamja me kuadrate",
|
||||
"enterTileView": "Kaloni nën mënyrën me kuadrate",
|
||||
"exitFullScreen": "Dil nga mënyra “Sa krejt ekrani”",
|
||||
"exitTileView": "Dil nga mënyra me kuadrate",
|
||||
"feedback": "Lini përshtypje",
|
||||
"giphy": "Shfaq/Fshih menunë GIPHY",
|
||||
"hangup": "Braktisni takimin",
|
||||
"fileSharing": "Dhënie kartelash",
|
||||
"giphy": "Shfaq/fshih menunë GIPHY",
|
||||
"hangup": "Braktiseni takimin",
|
||||
"help": "Ndihmë",
|
||||
"hideWhiteboard": "Fshihe tabelën",
|
||||
"invite": "Ftoni persona",
|
||||
"invite": "Ftoni njerëz",
|
||||
"joinBreakoutRoom": "Hyni në dhomë aneks konsultimesh",
|
||||
"laugh": "Qeshje",
|
||||
"laugh": "E qeshur",
|
||||
"leaveBreakoutRoom": "Dilni nga dhomë aneks konsultimesh",
|
||||
"leaveConference": "Dilni nga takimi",
|
||||
"like": "Thumbs Up",
|
||||
"linkToSalesforce": "Lidhje për te Salesforce",
|
||||
"lobbyButtonDisable": "Çaktivizo mënyrën holl",
|
||||
"lobbyButtonEnable": "Aktivizo mënyrën holl",
|
||||
"login": "Hyrje",
|
||||
"logout": "Dalje",
|
||||
"like": "",
|
||||
"linkToSalesforce": "Lidhje për te",
|
||||
"lobbyButtonDisable": "Çaktivizoni mënyrën holl",
|
||||
"lobbyButtonEnable": "Aktivizoni mënyrën holl",
|
||||
"login": "Hyni",
|
||||
"logout": "Dilni",
|
||||
"love": "Zemër",
|
||||
"lowerYourHand": "Ulni dorën",
|
||||
"moreActions": "Më tepër veprime",
|
||||
"moreOptions": "Më tepër veprime",
|
||||
"mute": "Heshto mikrofonin",
|
||||
"muteEveryone": "Heshto gjithkënd",
|
||||
"muteEveryonesVideo": "Çaktivizo videon e gjithkujt",
|
||||
"muteEveryonesVideo": "Çaktivizo kamerën e gjithkujt",
|
||||
"muteGUMPending": "Po lidhet mikrofoni juaj",
|
||||
"noAudioSignalDesc": "Nëse s’e keni heshtuar që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e ndërrimit të pajisjes.",
|
||||
"noAudioSignalDescSuggestion": "Nëse s’e keni heshtuar që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e kalimit te pajisja e sugjeruar.",
|
||||
"noAudioSignalDesc": "Nëse s’e keni heshtuar qëllimisht që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e ndërrimit të pajisjes.",
|
||||
"noAudioSignalDescSuggestion": "Nëse s’e keni heshtuar qëllimisht që nga rregullimet e sistemit, ose nga hardware-i, shihni mundësinë e kalimit te pajisja e sugjeruar.",
|
||||
"noAudioSignalDialInDesc": "Mund t’i bini numrit edhe duke përdorur:",
|
||||
"noAudioSignalDialInLinkDesc": "Numra thirrjeje",
|
||||
"noAudioSignalTitle": "S’ka sinjal që vjen nga mikrofoni juaj!",
|
||||
"noiseSuppression": "Mbytje zhurmash",
|
||||
"noiseSuppression": "Mbytje zhurmash ekstra",
|
||||
"noisyAudioInputDesc": "Dëgjohet sikur mikrofoni juaj prodhon zhurmë, ju lutemi, shihni mundësinë e heshtimit të tij, ose të ndërrimit të pajisjes.",
|
||||
"noisyAudioInputTitle": "Mikrofoni juaj duket të jetë i zhurmshëm!",
|
||||
"openChat": "Hapni fjalosje",
|
||||
"openReactionsMenu": "Hap menu reagimesh",
|
||||
"participants": "Pjesëmarrës",
|
||||
"pip": "Kalo nën mënyrën “Picture-in-Picture”",
|
||||
"privateMessage": "Dërgo mesazh privat",
|
||||
"polls": "Pyetësorë",
|
||||
"privateMessage": "Dërgoni mesazh privat",
|
||||
"profile": "Përpunoni profilin tuaj",
|
||||
"raiseHand": "Ngrini dorën",
|
||||
"raiseYourHand": "Ngrini dorën",
|
||||
@@ -1370,6 +1486,7 @@
|
||||
"reactionHeart": "Dërgoni reagim me zemër",
|
||||
"reactionLaugh": "Dërgoni reagim me qeshje",
|
||||
"reactionLike": "Dërgoni reagim me “thumbs up”",
|
||||
"reactionLove": "Dërgoni reagim me dashuri",
|
||||
"reactionSilence": "Dërgoni reagim me heshtje",
|
||||
"reactionSurprised": "Dërgoni reagim të befasuari",
|
||||
"reactions": "Reagime",
|
||||
@@ -1381,9 +1498,9 @@
|
||||
"shortcuts": "Shihni shkurtore",
|
||||
"showWhiteboard": "Shfaq tabelë",
|
||||
"silence": "Heshtje",
|
||||
"speakerStats": "Statistika folësi",
|
||||
"speakerStats": "Statistika pjesëmarrësish",
|
||||
"startScreenSharing": "Nise tregimin e ekranit",
|
||||
"startSubtitles": "Nis titra",
|
||||
"startSubtitles": "Titra • {{language}}",
|
||||
"stopAudioSharing": "Ndal ndarje audioje me të tjerë",
|
||||
"stopScreenSharing": "Ndale tregimin e ekranit",
|
||||
"stopSharedVideo": "Ndale videon",
|
||||
@@ -1401,15 +1518,19 @@
|
||||
"transcribing": {
|
||||
"ccButtonTooltip": "Ndali / Nisi titrat",
|
||||
"expandedLabel": "Transkriptimi aktualisht është aktiv",
|
||||
"failedToStart": "S’u arrit të nisej transkriptim",
|
||||
"labelToolTip": "Takimit po i bëhet transkriptim",
|
||||
"sourceLanguageDesc": "Aktualisht si gjuhë takimi është caktuar <b>{{sourceLanguage}}</b>. <br/> Mund ta ndryshoni që nga ",
|
||||
"failed": "Transkriptimi dështoi",
|
||||
"labelTooltip": "Ky takim po transkriptohet.",
|
||||
"labelTooltipExtra": "Përveç kësaj, më vonë do të ketë një transkriptim të gatshëm.",
|
||||
"openClosedCaptions": "Hap titra të mbyllur",
|
||||
"original": "Origjinali",
|
||||
"sourceLanguageDesc": "Aktualisht si gjuhë e mbledhjes është vënë <b>{{sourceLanguage}}</b>. <br/> Mundeni ta ndryshoni që nga ",
|
||||
"sourceLanguageHere": "këtu",
|
||||
"start": "Fillo shfaqje titrash",
|
||||
"stop": "Ndal shfaqje titrash",
|
||||
"subtitles": "Titra",
|
||||
"subtitlesOff": "Off",
|
||||
"tr": "TR"
|
||||
"tr": "TR",
|
||||
"translateTo": "Përktheje në"
|
||||
},
|
||||
"unpinParticipant": "{{participantName}} - Hiqja fiksimin",
|
||||
"userMedia": {
|
||||
@@ -1441,7 +1562,7 @@
|
||||
"ldTooltip": "Po shihet video në cilësi të ulët",
|
||||
"lowDefinition": "Cilësi e ulët",
|
||||
"performanceSettings": "Rregullime funksionimi",
|
||||
"recording": "Regjistrim në kryerje e sipër",
|
||||
"recording": "Ky takim po regjistrohet.",
|
||||
"sd": "CS",
|
||||
"sdTooltip": "Po shihet video në cilësi standarde",
|
||||
"standardDefinition": "Cilësi standarde",
|
||||
@@ -1451,6 +1572,8 @@
|
||||
"connectionInfo": "Hollësi Lidhjeje",
|
||||
"demote": "Kaloje te vizitorët",
|
||||
"domute": "Heshtoje",
|
||||
"domuteDesktop": "Ndaleni tregimin e ekranit",
|
||||
"domuteDesktopOfOthers": "Ndaleni tregimin e ekranit për këdo tjetër",
|
||||
"domuteOthers": "Heshto gjithkënd tjetër",
|
||||
"domuteVideo": "Çaktivizoje kamerën",
|
||||
"domuteVideoOfOthers": "Çaktivizo kamerën e gjithkujt tjetër",
|
||||
@@ -1501,21 +1624,23 @@
|
||||
"webAssemblyWarningDescription": "WebAssembly e çaktivizuar ose e pambuluar nga ky shfletues"
|
||||
},
|
||||
"visitors": {
|
||||
"chatIndicator": "(vizitor)",
|
||||
"chatIndicator": "(parës)",
|
||||
"joinMeeting": {
|
||||
"description": "Aktualisht jeni vëzhgues në këtë konferencë.",
|
||||
"raiseHand": "Ngrini dorën",
|
||||
"title": "Hyrje në takim",
|
||||
"wishToSpeak": "Nëse dëshironi të flisni, ju lutemi, ngrini dorën më poshtë dhe prisni miratimin e moderatorit."
|
||||
},
|
||||
"labelTooltip": "Numër vizitorësh: {{count}}",
|
||||
"labelTooltip": "Numër parësish: {{count}}",
|
||||
"notification": {
|
||||
"demoteDescription": "Dërguar këtu nga {{actor}}, që të merrni pjesë, ngrini dorën",
|
||||
"noMainParticipantsDescription": "Duhet që një pjesëmarrëstë nisë takimin. Ju lutemi, riprovoni pas pak.",
|
||||
"noMainParticipantsDescription": "Duhet që një pjesëmarrës të nisë takimin. Ju lutemi, riprovoni pas pak.",
|
||||
"noMainParticipantsTitle": "Ky takim s’ka filluar ende.",
|
||||
"noVisitorLobby": "S’mund të hyni, teksa ka një holll të hapur për takimin.",
|
||||
"noVisitorLobby": "S’mund të hyni, teksa ka një holl të hapur për takimin.",
|
||||
"notAllowedPromotion": "Lypset që së pari një pjesëmarrës të lejojë kërkesën tuaj.",
|
||||
"title": "Jeni vizitor në takim"
|
||||
"requestToJoin": "U ngrit Dorë",
|
||||
"requestToJoinDescription": "Kërkesa juaj iu dërgua moderatorëve. Mos u largoni!",
|
||||
"title": "Jeni një parës te takimi"
|
||||
},
|
||||
"waitingMessage": "Do të merrni pjesë në këta takim sapo të fillojë!"
|
||||
},
|
||||
|
||||
@@ -429,9 +429,7 @@
|
||||
"recentlyUsedObjects": "Dina senaste använda objekt",
|
||||
"recording": "Inspelning",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Ej möjligt medan livestreaming pågår.",
|
||||
"recordingInProgressDescription": "Mötet spelas in och analyseras av AI{{learnMore}}. Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.",
|
||||
"recordingInProgressDescriptionFirstHalf": "Mötet spelas in och analyseras av AI",
|
||||
"recordingInProgressDescriptionSecondHalf": "Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.",
|
||||
"recordingInProgressDescription": "Mötet spelas in och analyseras av AI. Ditt ljud och din bild har stängts av, om du väljer att starta kamera eller mikrofon så accepterar du att bli inspelad.",
|
||||
"recordingInProgressTitle": "Inspelning pågår",
|
||||
"rejoinNow": "Återanslut nu",
|
||||
"remoteControlAllowedMessage": "{{user}} godkände din begäran om fjärrstyrning.",
|
||||
@@ -695,8 +693,6 @@
|
||||
"googlePrivacyPolicy": "Googles sekretesspolicy",
|
||||
"inProgress": "Inspelning eller livestreaming pågår",
|
||||
"invalidStreamKey": "Livesändningslösenordet kan vara felaktigt.",
|
||||
"limitNotificationDescriptionNative": "Din strömning är begränsad till {{limit}} min. För obegränsad strömning, prova {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "På grund av stor efterfrågan kommer din strömning att begränsas till {{limit}} min. För obegränsad strömning, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Strömning avslutad",
|
||||
"offBy": "{{name}} stoppade direktströmningen",
|
||||
"on": "Strömma",
|
||||
@@ -1116,8 +1112,6 @@
|
||||
"highlightMomentSuccess": "Moment framhävt",
|
||||
"highlightMomentSucessDescription": "Ditt framhävda ögonblick läggs till i mötessammanfattningen.",
|
||||
"inProgress": "Inspelning eller livestreaming pågår",
|
||||
"limitNotificationDescriptionNative": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, försök <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "På grund av stor efterfrågan är din inspelning begränsad till {{limit}} min. För obegränsade inspelningar, prova <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Vi har genererat en länk till din inspelning.",
|
||||
"localRecordingNoNotificationWarning": "Inspelningen kommer inte att meddelas till andra deltagare. Du måste meddela dem att mötet inspelas.",
|
||||
"localRecordingNoVideo": "Video spelas inte in",
|
||||
|
||||
@@ -436,8 +436,6 @@
|
||||
"getStreamKeyManually": "We weren’t able to fetch any live streams. Try getting your live stream key from YouTube.",
|
||||
"googlePrivacyPolicy": "గూగుల్ గోప్యతా విధానం",
|
||||
"invalidStreamKey": "Live stream key may be incorrect.",
|
||||
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Live Streaming stopped",
|
||||
"offBy": "{{name}} stopped the live streaming",
|
||||
"on": "Live Streaming started",
|
||||
@@ -672,8 +670,6 @@
|
||||
"expandedPending": "రికార్డింగు మొదలవుతూన్నది…",
|
||||
"failedToStart": "రికార్డింగు మొదలవడం విఫలమైంది",
|
||||
"fileSharingdescription": "రికార్డింగును సదస్యులతో పంచుకోండి",
|
||||
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"live": "LIVE",
|
||||
"loggedIn": "{{userName}}గా ప్రవేశించారు",
|
||||
"off": "రికార్డింగు ఆగిపోయింది",
|
||||
|
||||
@@ -634,8 +634,6 @@
|
||||
"googlePrivacyPolicy": "Google Gizlilik Politikası",
|
||||
"inProgress": "Kaydetme veya canlı akış işlemde",
|
||||
"invalidStreamKey": "Canlı akış anahtarı yanlış olabilir.",
|
||||
"limitNotificationDescriptionNative": "Akışınız {{limit}} dk ile sınırlı olacak. Sınırsız akış için {{app}} deneyin.",
|
||||
"limitNotificationDescriptionWeb": "Yüksek talep nedeniyle akışınız {{limit}} dk ile sınırlı olacaktır. Sınırsız akış için <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a> deneyin.",
|
||||
"off": "Canlı Akış durduruldu",
|
||||
"offBy": "{{name}} canlı akışı durdurdu",
|
||||
"on": "Canlı Akış başlatıldı",
|
||||
@@ -1031,8 +1029,6 @@
|
||||
"highlightMomentSuccess": "An vurgulandı",
|
||||
"highlightMomentSucessDescription": "Vurgulanan anınız toplantı özetine eklenecektir.",
|
||||
"inProgress": "Kayıt veya canlı akış devam ediyor",
|
||||
"limitNotificationDescriptionNative": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Yüksek talep nedeniyle kaydınız {{limit}} dakika ile sınırlı olacaktır. Sınırsız kayıt için deneyin <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Kaydınızla ilgili link oluşturduk.",
|
||||
"localRecordingNoNotificationWarning": "Kayıt diğer katılımcılara duyurulmayacaktır. Onlara toplantının kaydedildiğini bildirmeniz gerekecek.",
|
||||
"localRecordingNoVideo": "Video kaydedilmiyor",
|
||||
|
||||
@@ -564,8 +564,6 @@
|
||||
"googlePrivacyPolicy": "Політика конфіденційності Google",
|
||||
"inProgress": "Триває запис або трансляція наживо",
|
||||
"invalidStreamKey": "Ключ до трансляції наживо неправильний.",
|
||||
"limitNotificationDescriptionNative": "Ваша трансляція наживо буде обмежена {{limit}} хв. Для необмеженої трансляції, спробуйте {{app}}",
|
||||
"limitNotificationDescriptionWeb": "Через високе навантаження, трансляція наживо буде обмежена {{limit}} хв. Для необмеженої трансляції, спробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Трансляцію наживо зупинено",
|
||||
"offBy": "{{name}} зупинив трансляцію наживо",
|
||||
"on": "Трансляція наживо",
|
||||
@@ -930,8 +928,6 @@
|
||||
"highlightMomentSuccess": "Подію виділено",
|
||||
"highlightMomentSucessDescription": "Виділену подію буде додано до підсумку зустрічі.",
|
||||
"inProgress": "Триває запис або трансляція наживо",
|
||||
"limitNotificationDescriptionNative": "Через велике навантаження сервера ваш запис буде обмежено {{limit}}хв. Для можливості безлімітних записів, спробуйте <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Через велике навантаження сервера ваш запис буде обмежено {{limit}} хв. Для можливості безлімітних записів, спробуйте <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Готово посилання на ваш запис.",
|
||||
"live": "НАЖИВО",
|
||||
"localRecordingNoNotificationWarning": "Наявність посилання на запис зустрічі не анонсується іншим учасникам. Повідомте їм про це окремо.",
|
||||
|
||||
@@ -629,8 +629,6 @@
|
||||
"googlePrivacyPolicy": "Chính sách bảo mật của Google",
|
||||
"inProgress": "Đang ghi hoặc phát trực tiếp",
|
||||
"invalidStreamKey": "Mã phát trực tuyến có thể sai.",
|
||||
"limitNotificationDescriptionNative": "Việc phát trực tuyến của bạn sẽ bị giới hạn ở {{limit}} phút. Để phát trực tuyến không giới hạn, hãy thử {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Do nhu cầu cao, việc phát trực tuyến của bạn sẽ bị giới hạn ở {{limit}} phút. Để phát trực tuyến không giới hạn, hãy thử <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}</a>.",
|
||||
"off": "Phát trực tuyến đã dừng",
|
||||
"offBy": "{{name}} đã dừng ghi",
|
||||
"on": "Phát trực tuyến",
|
||||
@@ -1009,8 +1007,6 @@
|
||||
"highlightMomentSuccess": "Khoảnh khắc được đánh dấu",
|
||||
"highlightMomentSucessDescription": "Khoảnh khắc bạn đã đánh dấu sẽ được thêm vào tóm tắt cuộc họp.",
|
||||
"inProgress": "Đang ghi âm hoặc phát trực tiếp",
|
||||
"limitNotificationDescriptionNative": "Do nhu cầu cao, ghi âm của bạn sẽ bị giới hạn trong {{limit}} phút. Để có ghi âm không giới hạn, hãy thử <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Do nhu cầu cao, ghi âm của bạn sẽ bị giới hạn trong {{limit}} phút. Để có ghi âm không giới hạn, hãy thử <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "Chúng tôi đã tạo một liên kết đến ghi âm của bạn.",
|
||||
"localRecordingNoNotificationWarning": "Cuộc họp sẽ không được thông báo cho các thành viên khác. Bạn sẽ cần thông báo cho họ biết cuộc họp đang được ghi âm.",
|
||||
"localRecordingNoVideo": "Video không được ghi lại",
|
||||
|
||||
@@ -433,9 +433,7 @@
|
||||
"recentlyUsedObjects": "你最近使用的对象",
|
||||
"recording": "录制中",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "直播时无法使用",
|
||||
"recordingInProgressDescription": "本会议正由AI录制并分析{{learnMore}},你已被静音。如需发言,视为同意录制。",
|
||||
"recordingInProgressDescriptionFirstHalf": "本会议正由AI录制并分析",
|
||||
"recordingInProgressDescriptionSecondHalf": ",你已被静音。如需发言,视为同意录制。",
|
||||
"recordingInProgressDescription": "本会议正由AI录制并分析,你已被静音。如需发言,视为同意录制。",
|
||||
"recordingInProgressTitle": "录制中",
|
||||
"rejoinNow": "马上重新加入",
|
||||
"remoteControlAllowedMessage": "{{user}}接受了你的远程控制请求!",
|
||||
@@ -699,8 +697,6 @@
|
||||
"googlePrivacyPolicy": "Google 隐私权政策",
|
||||
"inProgress": "录制或直播正在进行中",
|
||||
"invalidStreamKey": "直播码可能不正确。",
|
||||
"limitNotificationDescriptionNative": "你的直播将被限制在{{limit}}分钟之内,如需不受限的直播,请使用{{app}}。",
|
||||
"limitNotificationDescriptionWeb": "由于需求量大,你的直播将被限制在{{limit}}分钟之内。如需不受限的直播,请使用<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
|
||||
"off": "直播已停止",
|
||||
"offBy": "{{name}}已停止直播",
|
||||
"on": "直播已开始",
|
||||
@@ -1122,8 +1118,6 @@
|
||||
"highlightMomentSuccess": "时刻已突出显示",
|
||||
"highlightMomentSucessDescription": "你突出显示的时刻将会添加到会议摘要中。",
|
||||
"inProgress": "正在进行录制或直播流",
|
||||
"limitNotificationDescriptionNative": "由于高需求,您的录制将限制在{{limit}}分钟内。若要无限制录制,请尝试<3>{{app}}</3>。",
|
||||
"limitNotificationDescriptionWeb": "由于高需求,您的录制将限制在{{limit}}分钟内。若要无限制录制,请尝试<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
|
||||
"linkGenerated": "我们已生成录制链接。",
|
||||
"localRecordingNoNotificationWarning": "系统不会主动通知参会者录制已开启,主持人需另行提醒。",
|
||||
"localRecordingNoVideo": "视频未被录制",
|
||||
|
||||
@@ -433,9 +433,7 @@
|
||||
"recentlyUsedObjects": "您最近使用過的物件",
|
||||
"recording": "錄製中",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "正在直播時無法使用",
|
||||
"recordingInProgressDescription": "本會議正在錄製並由 AI 分析{{learnMore}},您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。",
|
||||
"recordingInProgressDescriptionFirstHalf": "本會議正在錄製並由 AI 分析",
|
||||
"recordingInProgressDescriptionSecondHalf": ",您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。",
|
||||
"recordingInProgressDescription": "本會議正在錄製並由 AI 分析,您的音訊與影像已靜音。如果您選擇取消靜音,即表示您同意被錄製。",
|
||||
"recordingInProgressTitle": "正在錄製",
|
||||
"rejoinNow": "立即重新加入",
|
||||
"remoteControlAllowedMessage": "{{user}} 接受您進行遠端控制的請求!",
|
||||
@@ -699,8 +697,6 @@
|
||||
"googlePrivacyPolicy": "Google 隱私權政策",
|
||||
"inProgress": "正在錄製或直播",
|
||||
"invalidStreamKey": "直播串流金鑰可能不正確。",
|
||||
"limitNotificationDescriptionNative": "您的最大直播長度將被限制在 {{limit}} 分鐘,若要不受限的直播,請使用 {{app}}。",
|
||||
"limitNotificationDescriptionWeb": "由於目前流量過大,您的最大直播長度將被限制在 {{limit}} 分鐘。若要不受限的直播,請使用 <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
|
||||
"off": "直播串流已停用",
|
||||
"offBy": "{{name}} 停用了直播串流",
|
||||
"on": "直播串流已啟動",
|
||||
@@ -1122,8 +1118,6 @@
|
||||
"highlightMomentSuccess": "已精選的時刻",
|
||||
"highlightMomentSucessDescription": "您的精選時刻將新增至會議摘要。",
|
||||
"inProgress": "正在錄製或直播",
|
||||
"limitNotificationDescriptionNative": "由於目前流量過大,您的錄製時間被限制在 {{limit}} 分鐘。若要無限制的錄製,請試試 <3>{{app}}</3>。",
|
||||
"limitNotificationDescriptionWeb": "由於目前流量過大,您的錄製時間被限制在 {{limit}} 分鐘。若要無限制的錄製,請試試 <a href={{url}}rel='noopener noreferrer' target='_blank'>{{app}}</a>。",
|
||||
"linkGenerated": "我們建立了您的錄製檔案的連結。",
|
||||
"localRecordingNoNotificationWarning": "系統不會主動知會與會者錄製已開啟,主持人需另行通知。",
|
||||
"localRecordingNoVideo": "沒有錄製的視訊",
|
||||
|
||||
@@ -227,6 +227,9 @@
|
||||
"video_ssrc": "Video SSRC:",
|
||||
"yes": "yes"
|
||||
},
|
||||
"customPanel": {
|
||||
"close": "Close"
|
||||
},
|
||||
"dateUtils": {
|
||||
"earlier": "Earlier",
|
||||
"today": "Today",
|
||||
@@ -370,7 +373,7 @@
|
||||
"kickParticipantTitle": "Kick this participant?",
|
||||
"kickSystemTitle": "Ouch! You were kicked out of the meeting",
|
||||
"kickTitle": "Ouch! {{participantDisplayName}} kicked you out of the meeting",
|
||||
"learnMore": "learn more",
|
||||
"learnMore": "Learn more",
|
||||
"linkMeeting": "Link meeting",
|
||||
"linkMeetingTitle": "Link meeting to Salesforce",
|
||||
"liveStreaming": "Live Streaming",
|
||||
@@ -380,6 +383,9 @@
|
||||
"lockRoom": "Add meeting $t(lockRoomPassword)",
|
||||
"lockTitle": "Lock failed",
|
||||
"login": "Login",
|
||||
"loginFailed": "Login failed.",
|
||||
"loginOnResume": "Your authentication session has expired. You need to login again to continue the meeting.",
|
||||
"loginPopupBlocked": "Login popup was blocked by your browser.",
|
||||
"loginQuestion": "Are you sure you want to login and leave the conference?",
|
||||
"logoutQuestion": "Are you sure you want to logout and leave the conference?",
|
||||
"logoutTitle": "Logout",
|
||||
@@ -440,9 +446,7 @@
|
||||
"recentlyUsedObjects": "Your recently used objects",
|
||||
"recording": "Recording",
|
||||
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Not possible while a live stream is active",
|
||||
"recordingInProgressDescription": "This meeting is being recorded and analyzed by AI{{learnMore}}. Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
|
||||
"recordingInProgressDescriptionFirstHalf": "This meeting is being recorded and analyzed by AI",
|
||||
"recordingInProgressDescriptionSecondHalf": ". Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
|
||||
"recordingInProgressDescription": "This meeting is being recorded and analyzed by AI. Your audio and video have been muted. If you choose to unmute, you consent to being recorded.",
|
||||
"recordingInProgressTitle": "Recording in progress",
|
||||
"rejoinNow": "Rejoin now",
|
||||
"remoteControlAllowedMessage": "{{user}} accepted your remote control request!",
|
||||
@@ -465,6 +469,8 @@
|
||||
"screenSharingFailed": "Oops! Something went wrong, we weren't able to start screen sharing!",
|
||||
"screenSharingFailedTitle": "Screen sharing failed!",
|
||||
"screenSharingPermissionDeniedError": "Oops! Something went wrong with your screen sharing permissions. Please reload and try again.",
|
||||
"screenshareStoppedDiskSpace": "This happens if you used the macOS's floating toolbar to stop screen sharing. It may also be due to low disk space.",
|
||||
"screenshareStoppedTitle": "Screen sharing stopped via system",
|
||||
"searchInSalesforce": "Search in Salesforce",
|
||||
"searchResults": "Search results({{count}})",
|
||||
"searchResultsDetailsError": "Something went wrong while retrieving owner data.",
|
||||
@@ -589,6 +595,7 @@
|
||||
"newFileNotification": "{{ participantName }} shared '{{ fileName }}'",
|
||||
"removeFile": "Remove",
|
||||
"removeFileSuccess": "File removed successfully",
|
||||
"uploadDisabled": "Not allowed to upload files. Ask a moderator for permission rights for that operation.",
|
||||
"uploadFailedDescription": "Please try again.",
|
||||
"uploadFailedTitle": "Upload failed",
|
||||
"uploadFile": "Share file"
|
||||
@@ -706,8 +713,6 @@
|
||||
"googlePrivacyPolicy": "Google Privacy Policy",
|
||||
"inProgress": "Recording or live streaming in progress",
|
||||
"invalidStreamKey": "Live stream key may be incorrect.",
|
||||
"limitNotificationDescriptionNative": "Your streaming will be limited to {{limit}} min. For unlimited streaming try {{app}}.",
|
||||
"limitNotificationDescriptionWeb": "Due to high demand your streaming will be limited to {{limit}} min. For unlimited streaming try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"off": "Live Streaming stopped",
|
||||
"offBy": "{{name}} stopped the live streaming",
|
||||
"on": "Live Streaming started",
|
||||
@@ -724,6 +729,7 @@
|
||||
"streamIdHelp": "What's this?",
|
||||
"title": "Live Stream",
|
||||
"unavailableTitle": "Live Streaming unavailable",
|
||||
"youTubeGoLiveWarning": "Remember to click 'Go Live' in YouTube Studio if Auto-Start/Auto-Stop are disabled. Otherwise the stream will not begin recording.",
|
||||
"youtubeTerms": "YouTube terms of services"
|
||||
},
|
||||
"lobby": {
|
||||
@@ -1127,8 +1133,6 @@
|
||||
"highlightMomentSuccess": "Moment highlighted",
|
||||
"highlightMomentSucessDescription": "Your highlighted moment will be added to the meeting summary.",
|
||||
"inProgress": "Recording or live streaming in progress",
|
||||
"limitNotificationDescriptionNative": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <3>{{app}}</3>.",
|
||||
"limitNotificationDescriptionWeb": "Due to high demand your recording will be limited to {{limit}} min. For unlimited recordings try <a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>.",
|
||||
"linkGenerated": "We have generated a link to your recording.",
|
||||
"localRecordingNoNotificationWarning": "The recording will not be announced to other participants. You will need to let them know that the meeting is recorded.",
|
||||
"localRecordingNoVideo": "Video is not being recorded",
|
||||
@@ -1190,7 +1194,7 @@
|
||||
"signedIn": "Currently accessing calendar events for {{email}}. Click the Disconnect button below to stop accessing calendar events.",
|
||||
"title": "Calendar"
|
||||
},
|
||||
"chatWithPermissions": "Chat requires permission",
|
||||
"chatWithPermissions": "Disable chat for non-moderators",
|
||||
"desktopShareFramerate": "Desktop sharing frame rate",
|
||||
"desktopShareHighFpsWarning": "A higher frame rate for desktop sharing might affect your bandwidth. You need to restart the screen share for the new settings to take effect.",
|
||||
"desktopShareWarning": "You need to restart the screen share for the new settings to take effect.",
|
||||
@@ -1315,6 +1319,7 @@
|
||||
"chat": "Open / Close chat",
|
||||
"clap": "Clap",
|
||||
"closeChat": "Close chat",
|
||||
"closeCustomPanel": "Close",
|
||||
"closeMoreActions": "Close more actions menu",
|
||||
"closeParticipantsPane": "Close participants pane",
|
||||
"closedCaptions": "Closed captions",
|
||||
@@ -1358,7 +1363,7 @@
|
||||
"muteEveryoneElsesVideoStream": "Stop everyone else's video",
|
||||
"muteEveryonesVideoStream": "Stop everyone's video",
|
||||
"muteGUMPending": "Connecting your microphone",
|
||||
"noiseSuppression": "Extra noise suppression (BETA)",
|
||||
"noiseSuppression": "Extra noise suppression",
|
||||
"openChat": "Open chat",
|
||||
"participants": "Open participants panel. {{participantsCount}} participants",
|
||||
"pip": "Toggle Picture-in-Picture mode",
|
||||
@@ -1420,17 +1425,19 @@
|
||||
"chat": "Open / Close chat",
|
||||
"clap": "Clap",
|
||||
"closeChat": "Close chat",
|
||||
"closeCustomPanel": "Close",
|
||||
"closeParticipantsPane": "Close participants pane",
|
||||
"closeReactionsMenu": "Close reactions menu",
|
||||
"closedCaptions": "Closed captions",
|
||||
"disableNoiseSuppression": "Disable extra noise suppression (BETA)",
|
||||
"copilot": "Copilot",
|
||||
"disableNoiseSuppression": "Disable extra noise suppression",
|
||||
"disableReactionSounds": "You can disable reaction sounds for this meeting",
|
||||
"documentClose": "Close shared document",
|
||||
"documentOpen": "Open shared document",
|
||||
"download": "Download our apps",
|
||||
"e2ee": "End-to-End Encryption",
|
||||
"embedMeeting": "Embed meeting",
|
||||
"enableNoiseSuppression": "Enable extra noise suppression (BETA)",
|
||||
"enableNoiseSuppression": "Enable extra noise suppression",
|
||||
"endConference": "End meeting for all",
|
||||
"enterFullScreen": "View full screen",
|
||||
"enterTileView": "Enter tile view",
|
||||
@@ -1466,7 +1473,7 @@
|
||||
"noAudioSignalDialInDesc": "You can also dial-in using:",
|
||||
"noAudioSignalDialInLinkDesc": "Dial-in numbers",
|
||||
"noAudioSignalTitle": "There is no input coming from your mic!",
|
||||
"noiseSuppression": "Extra noise suppression (BETA)",
|
||||
"noiseSuppression": "Extra noise suppression",
|
||||
"noisyAudioInputDesc": "It sounds like your microphone is making noise, please consider muting or changing the device.",
|
||||
"noisyAudioInputTitle": "Your microphone appears to be noisy!",
|
||||
"openChat": "Open chat",
|
||||
@@ -1600,6 +1607,7 @@
|
||||
"addBackground": "Add background",
|
||||
"apply": "Apply",
|
||||
"backgroundEffectError": "Failed to apply background effect.",
|
||||
"backgroundLimitReached": "Custom background limit reached",
|
||||
"blur": "Blur",
|
||||
"deleteImage": "Delete image",
|
||||
"desktopShare": "Desktop share",
|
||||
@@ -1612,6 +1620,7 @@
|
||||
"image6": "Forest ",
|
||||
"image7": "Sunrise",
|
||||
"none": "None",
|
||||
"oldestBackgroundRemoved": "The oldest custom background has been removed to add the new one.",
|
||||
"pleaseWait": "Please wait…",
|
||||
"removeBackground": "Remove background",
|
||||
"slightBlur": "Half Blur",
|
||||
|
||||
@@ -107,9 +107,10 @@ import {
|
||||
open as openParticipantsPane
|
||||
} from '../../react/features/participants-pane/actions';
|
||||
import { getParticipantsPaneOpen } from '../../react/features/participants-pane/functions';
|
||||
import { hidePiP, showPiP } from '../../react/features/pip/actions';
|
||||
import { startLocalVideoRecording, stopLocalVideoRecording } from '../../react/features/recording/actions.any';
|
||||
import { grantRecordingConsent, grantRecordingConsentAndUnmute } from '../../react/features/recording/actions.web';
|
||||
import { RECORDING_METADATA_ID, RECORDING_TYPES } from '../../react/features/recording/constants';
|
||||
import { RECORDING_TYPES } from '../../react/features/recording/constants';
|
||||
import { getActiveSession, supportsLocalRecording } from '../../react/features/recording/functions';
|
||||
import { startAudioScreenShareFlow, startScreenShareFlow } from '../../react/features/screen-share/actions';
|
||||
import { isScreenAudioSupported } from '../../react/features/screen-share/functions';
|
||||
@@ -125,7 +126,7 @@ import { extractYoutubeIdOrURL } from '../../react/features/shared-video/functio
|
||||
import { setRequestingSubtitles, toggleRequestingSubtitles } from '../../react/features/subtitles/actions';
|
||||
import { isAudioMuteButtonDisabled } from '../../react/features/toolbox/functions';
|
||||
import { setTileView, toggleTileView } from '../../react/features/video-layout/actions.any';
|
||||
import { muteAllParticipants } from '../../react/features/video-menu/actions';
|
||||
import { muteAllParticipants, muteRemote } from '../../react/features/video-menu/actions';
|
||||
import { setVideoQuality } from '../../react/features/video-quality/actions';
|
||||
import { toggleBackgroundEffect, toggleBlurredBackgroundEffect } from '../../react/features/virtual-background/actions';
|
||||
import { VIRTUAL_BACKGROUND_TYPE } from '../../react/features/virtual-background/constants';
|
||||
@@ -238,6 +239,31 @@ function initCommands() {
|
||||
|
||||
APP.store.dispatch(muteAllParticipants(exclude, muteMediaType));
|
||||
},
|
||||
'mute-remote-participant': (participantId, mediaType) => {
|
||||
const state = APP.store.getState();
|
||||
const muteMediaType = mediaType ? mediaType : MEDIA_TYPE.AUDIO;
|
||||
const localParticipant = getLocalParticipant(state);
|
||||
|
||||
// Check if targeting the local participant
|
||||
if (participantId === localParticipant?.id) {
|
||||
|
||||
if (muteMediaType === MEDIA_TYPE.AUDIO) {
|
||||
APP.conference.toggleAudioMuted(false);
|
||||
} else if (muteMediaType === MEDIA_TYPE.VIDEO) {
|
||||
APP.conference.toggleVideoMuted(false, true);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isLocalParticipantModerator(state)) {
|
||||
logger.error('Missing moderator rights to mute remote participant');
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
APP.store.dispatch(muteRemote(participantId, muteMediaType));
|
||||
},
|
||||
'toggle-lobby': isLobbyEnabled => {
|
||||
APP.store.dispatch(toggleLobbyMode(isLobbyEnabled));
|
||||
},
|
||||
@@ -340,6 +366,7 @@ function initCommands() {
|
||||
|
||||
APP.store.dispatch(setAssumedBandwidthBps(value));
|
||||
},
|
||||
|
||||
'set-blurred-background': blurType => {
|
||||
const tracks = APP.store.getState()['features/base/tracks'];
|
||||
const videoTrack = getLocalVideoTrack(tracks)?.jitsiTrack;
|
||||
@@ -778,9 +805,6 @@ function initCommands() {
|
||||
|
||||
if (transcription) {
|
||||
APP.store.dispatch(setRequestingSubtitles(true, false, null, true));
|
||||
conference.getMetadataHandler().setMetadata(RECORDING_METADATA_ID, {
|
||||
isTranscribingEnabled: true
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
@@ -802,10 +826,7 @@ function initCommands() {
|
||||
}
|
||||
|
||||
if (transcription) {
|
||||
APP.store.dispatch(setRequestingSubtitles(false, false, null));
|
||||
conference.getMetadataHandler().setMetadata(RECORDING_METADATA_ID, {
|
||||
isTranscribingEnabled: false
|
||||
});
|
||||
APP.store.dispatch(setRequestingSubtitles(false, false, null, true));
|
||||
}
|
||||
|
||||
if (mode === 'local') {
|
||||
@@ -906,6 +927,12 @@ function initCommands() {
|
||||
backgroundType: VIRTUAL_BACKGROUND_TYPE.IMAGE,
|
||||
virtualSource: backgroundImage
|
||||
}, jitsiTrack));
|
||||
},
|
||||
'show-pip': () => {
|
||||
APP.store.dispatch(showPiP());
|
||||
},
|
||||
'hide-pip': () => {
|
||||
APP.store.dispatch(hidePiP());
|
||||
}
|
||||
};
|
||||
transport.on('event', ({ data, name }) => {
|
||||
@@ -1241,6 +1268,20 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application (if API is enabled) that the in-page toolbox
|
||||
* visibility changed.
|
||||
*
|
||||
* @param {boolean} visible - True if the toolbox is visible, false otherwise.
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyToolbarVisibilityChanged(visible) {
|
||||
this._sendEvent({
|
||||
name: 'toolbar-visibility-changed',
|
||||
visible
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies the external application (spot) that the local jitsi-participant
|
||||
* has a status update.
|
||||
@@ -1385,6 +1426,23 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external application that a participant's mute status changed.
|
||||
*
|
||||
* @param {string} participantId - The ID of the participant.
|
||||
* @param {boolean} isMuted - True if muted, false if unmuted.
|
||||
* @param {string} mediaType - Media type that was muted ('audio' or 'video').
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyParticipantMuted(participantId, isMuted, mediaType) {
|
||||
this._sendEvent({
|
||||
name: 'participant-muted',
|
||||
id: participantId,
|
||||
isMuted,
|
||||
mediaType
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external app that a notification has been triggered.
|
||||
*
|
||||
@@ -2195,6 +2253,32 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external application that a file has been uploaded.
|
||||
*
|
||||
* @param {Object} fileMetadata - The file metadata.
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyFileUploaded(fileMetadata) {
|
||||
this._sendEvent({
|
||||
name: 'file-uploaded',
|
||||
file: fileMetadata
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external application that a file has been deleted.
|
||||
*
|
||||
* @param {string} fileId - The ID of the deleted file.
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyFileDeleted(fileId) {
|
||||
this._sendEvent({
|
||||
name: 'file-deleted',
|
||||
fileId
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify the external application that the audio or video is being shared by a participant.
|
||||
*
|
||||
@@ -2234,6 +2318,43 @@ class API {
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application (if API is enabled) that Picture-in-Picture was requested.
|
||||
* Used by Electron to handle PiP requests with proper user gesture context.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyPictureInPictureRequested() {
|
||||
logger.debug('Sending _pip-requested event to External API');
|
||||
this._sendEvent({
|
||||
name: '_pip-requested'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application (if API is enabled) that Picture-in-Picture mode was entered.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyPictureInPictureEntered() {
|
||||
logger.debug('Sending pip-entered event to External API');
|
||||
this._sendEvent({
|
||||
name: 'pip-entered'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application (if API is enabled) that Picture-in-Picture mode was exited.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
notifyPictureInPictureLeft() {
|
||||
logger.debug('Sending pip-left event to External API');
|
||||
this._sendEvent({
|
||||
name: 'pip-left'
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Notify external application ( if API is enabled) that a participant menu button was clicked.
|
||||
*
|
||||
|
||||
129
modules/API/external/external_api.js
vendored
129
modules/API/external/external_api.js
vendored
@@ -2,6 +2,7 @@ import { jitsiLocalStorage } from '@jitsi/js-utils/jitsi-local-storage';
|
||||
import EventEmitter from 'events';
|
||||
|
||||
import { urlObjectToString } from '../../../react/features/base/util/uri';
|
||||
import { isPiPEnabled } from '../../../react/features/pip/external-api.shared';
|
||||
import {
|
||||
PostMessageTransportBackend,
|
||||
Transport
|
||||
@@ -46,6 +47,7 @@ const commands = {
|
||||
localSubject: 'local-subject',
|
||||
kickParticipant: 'kick-participant',
|
||||
muteEveryone: 'mute-everyone',
|
||||
muteRemoteParticipant: 'mute-remote-participant',
|
||||
overwriteConfig: 'overwrite-config',
|
||||
overwriteNames: 'overwrite-names',
|
||||
password: 'password',
|
||||
@@ -94,7 +96,9 @@ const commands = {
|
||||
toggleTileView: 'toggle-tile-view',
|
||||
toggleVirtualBackgroundDialog: 'toggle-virtual-background',
|
||||
toggleVideo: 'toggle-video',
|
||||
toggleWhiteboard: 'toggle-whiteboard'
|
||||
toggleWhiteboard: 'toggle-whiteboard',
|
||||
showPiP: 'show-pip',
|
||||
hidePiP: 'hide-pip'
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -102,6 +106,9 @@ const commands = {
|
||||
* events expected by jitsi-meet.
|
||||
*/
|
||||
const events = {
|
||||
'_pip-requested': '_pipRequested',
|
||||
'pip-entered': 'pipEntered',
|
||||
'pip-left': 'pipLeft',
|
||||
'avatar-changed': 'avatarChanged',
|
||||
'audio-availability-changed': 'audioAvailabilityChanged',
|
||||
'audio-mute-status-changed': 'audioMuteStatusChanged',
|
||||
@@ -126,6 +133,8 @@ const events = {
|
||||
'face-landmark-detected': 'faceLandmarkDetected',
|
||||
'feedback-submitted': 'feedbackSubmitted',
|
||||
'feedback-prompt-displayed': 'feedbackPromptDisplayed',
|
||||
'file-deleted': 'fileDeleted',
|
||||
'file-uploaded': 'fileUploaded',
|
||||
'filmstrip-display-changed': 'filmstripDisplayChanged',
|
||||
'incoming-message': 'incomingMessage',
|
||||
'knocking-participant': 'knockingParticipant',
|
||||
@@ -144,6 +153,7 @@ const events = {
|
||||
'participant-joined': 'participantJoined',
|
||||
'participant-kicked-out': 'participantKickedOut',
|
||||
'participant-left': 'participantLeft',
|
||||
'participant-muted': 'participantMuted',
|
||||
'participant-role-changed': 'participantRoleChanged',
|
||||
'participants-pane-toggled': 'participantsPaneToggled',
|
||||
'password-required': 'passwordRequired',
|
||||
@@ -167,6 +177,7 @@ const events = {
|
||||
'suspend-detected': 'suspendDetected',
|
||||
'tile-view-changed': 'tileViewChanged',
|
||||
'toolbar-button-clicked': 'toolbarButtonClicked',
|
||||
'toolbar-visibility-changed': 'toolbarVisibilityChanged',
|
||||
'transcribing-status-changed': 'transcribingStatusChanged',
|
||||
'transcription-chunk-received': 'transcriptionChunkReceived',
|
||||
'whiteboard-status-changed': 'whiteboardStatusChanged'
|
||||
@@ -329,6 +340,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
this._myUserID = undefined;
|
||||
this._onStageParticipant = undefined;
|
||||
this._iAmvisitor = undefined;
|
||||
this._pipConfig = configOverwrite?.pip;
|
||||
this._setupListeners();
|
||||
id++;
|
||||
}
|
||||
@@ -648,6 +660,56 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
this.emit(requestName, data, callback);
|
||||
}
|
||||
});
|
||||
|
||||
this._setupIntersectionObserver();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets up IntersectionObserver to monitor iframe visibility.
|
||||
* Calls showPiP/hidePiP based on visibility.
|
||||
*
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_setupIntersectionObserver() {
|
||||
if (!isPiPEnabled(this._pipConfig)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't create duplicate observers.
|
||||
if (this._intersectionObserver) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._isIntersecting = true;
|
||||
|
||||
this._intersectionObserver = new IntersectionObserver(entries => {
|
||||
const entry = entries[entries.length - 1];
|
||||
const wasIntersecting = this._isIntersecting;
|
||||
|
||||
this._isIntersecting = entry.isIntersecting;
|
||||
|
||||
if (!entry.isIntersecting && wasIntersecting) {
|
||||
this.showPiP();
|
||||
} else if (entry.isIntersecting && !wasIntersecting) {
|
||||
this.hidePiP();
|
||||
}
|
||||
});
|
||||
|
||||
this._intersectionObserver.observe(this._frame);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tears down IntersectionObserver.
|
||||
*
|
||||
* @private
|
||||
* @returns {void}
|
||||
*/
|
||||
_teardownIntersectionObserver() {
|
||||
if (this._intersectionObserver) {
|
||||
this._intersectionObserver.disconnect();
|
||||
this._intersectionObserver = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -713,7 +775,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
* @returns {void}
|
||||
*
|
||||
* @deprecated
|
||||
* NOTE: This method is not removed for backward comatability purposes.
|
||||
* NOTE: This method is not removed for backward compatibility purposes.
|
||||
*/
|
||||
addEventListener(event, listener) {
|
||||
this.on(event, listener);
|
||||
@@ -800,7 +862,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
* @returns {void}
|
||||
*
|
||||
* @deprecated
|
||||
* NOTE: This method is not removed for backward comatability purposes.
|
||||
* NOTE: This method is not removed for backward compatibility purposes.
|
||||
*/
|
||||
addEventListeners(listeners) {
|
||||
for (const event in listeners) { // eslint-disable-line guard-for-in
|
||||
@@ -850,6 +912,8 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
this.emit('_willDispose');
|
||||
this._transport.dispose();
|
||||
this.removeAllListeners();
|
||||
this._teardownIntersectionObserver();
|
||||
|
||||
if (this._frame && this._frame.parentNode) {
|
||||
this._frame.parentNode.removeChild(this._frame);
|
||||
}
|
||||
@@ -878,10 +942,47 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle pip config changes locally.
|
||||
// We update local state, send command to iframe, then handle PiP show/hide
|
||||
// so the iframe config is updated before we try to show PiP.
|
||||
let pipTransition = null;
|
||||
|
||||
if (name === 'overwriteConfig' && args[0]?.pip !== undefined) {
|
||||
const wasEnabled = isPiPEnabled(this._pipConfig);
|
||||
|
||||
this._pipConfig = {
|
||||
...this._pipConfig,
|
||||
...args[0].pip
|
||||
};
|
||||
|
||||
const isEnabled = isPiPEnabled(this._pipConfig);
|
||||
|
||||
if (!wasEnabled && isEnabled) {
|
||||
this._setupIntersectionObserver();
|
||||
pipTransition = 'enabled';
|
||||
} else if (wasEnabled && !isEnabled) {
|
||||
this._teardownIntersectionObserver();
|
||||
pipTransition = 'disabled';
|
||||
}
|
||||
}
|
||||
|
||||
// Send command to iframe first.
|
||||
this._transport.sendEvent({
|
||||
data: args,
|
||||
name: commands[name]
|
||||
});
|
||||
|
||||
// Handle PiP state after command is sent so iframe config is updated.
|
||||
if (pipTransition === 'enabled') {
|
||||
// Show PiP if iframe is currently not visible.
|
||||
if (!this._isIntersecting) {
|
||||
this.showPiP();
|
||||
}
|
||||
} else if (pipTransition === 'disabled') {
|
||||
// Hide any open PiP window.
|
||||
this.hidePiP();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1312,7 +1413,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
* @returns {void}
|
||||
*
|
||||
* @deprecated
|
||||
* NOTE: This method is not removed for backward comatability purposes.
|
||||
* NOTE: This method is not removed for backward compatibility purposes.
|
||||
*/
|
||||
removeEventListener(event) {
|
||||
this.removeAllListeners(event);
|
||||
@@ -1325,7 +1426,7 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
* @returns {void}
|
||||
*
|
||||
* @deprecated
|
||||
* NOTE: This method is not removed for backward comatability purposes.
|
||||
* NOTE: This method is not removed for backward compatibility purposes.
|
||||
*/
|
||||
removeEventListeners(eventList) {
|
||||
eventList.forEach(event => this.removeEventListener(event));
|
||||
@@ -1495,6 +1596,24 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
|
||||
this.executeCommand('setVirtualBackground', enabled, backgroundImage);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows Picture-in-Picture window.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
showPiP() {
|
||||
this.executeCommand('showPiP');
|
||||
}
|
||||
|
||||
/**
|
||||
* Hides Picture-in-Picture window.
|
||||
*
|
||||
* @returns {void}
|
||||
*/
|
||||
hidePiP() {
|
||||
this.executeCommand('hidePiP');
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens the desktop picker. This is invoked by the Electron SDK when gDM is used.
|
||||
*
|
||||
|
||||
@@ -3,15 +3,11 @@
|
||||
|
||||
const UI = {};
|
||||
|
||||
import Logger from '@jitsi/logger';
|
||||
|
||||
import {
|
||||
conferenceWillInit
|
||||
} from '../../react/features/base/conference/actions';
|
||||
import { isMobileBrowser } from '../../react/features/base/environment/utils';
|
||||
import { setColorAlpha } from '../../react/features/base/util/helpers';
|
||||
import { sanitizeUrl } from '../../react/features/base/util/uri';
|
||||
import { setDocumentUrl } from '../../react/features/etherpad/actions';
|
||||
import {
|
||||
setNotificationsEnabled,
|
||||
showNotification
|
||||
@@ -28,8 +24,6 @@ import EtherpadManager from './etherpad/Etherpad';
|
||||
import UIUtil from './util/UIUtil';
|
||||
import VideoLayout from './videolayout/VideoLayout';
|
||||
|
||||
const logger = Logger.getLogger('ui:core');
|
||||
|
||||
let etherpadManager;
|
||||
|
||||
/**
|
||||
@@ -117,24 +111,17 @@ UI.unbindEvents = () => {
|
||||
|
||||
/**
|
||||
* Setup and show Etherpad.
|
||||
* @param {string} name etherpad id
|
||||
*/
|
||||
UI.initEtherpad = name => {
|
||||
const { getState, dispatch } = APP.store;
|
||||
UI.initEtherpad = () => {
|
||||
const { getState } = APP.store;
|
||||
const configState = getState()['features/base/config'];
|
||||
const etherpadBaseUrl = sanitizeUrl(configState.etherpad_base);
|
||||
|
||||
if (etherpadManager || !etherpadBaseUrl || !name) {
|
||||
if (etherpadManager) {
|
||||
return;
|
||||
}
|
||||
logger.log('Etherpad is enabled');
|
||||
|
||||
etherpadManager = new EtherpadManager();
|
||||
|
||||
const url = new URL(name, etherpadBaseUrl);
|
||||
|
||||
dispatch(setDocumentUrl(url.toString()));
|
||||
|
||||
if (configState.openSharedDocumentOnJoin) {
|
||||
etherpadManager.toggleEtherpad();
|
||||
}
|
||||
|
||||
@@ -158,11 +158,10 @@ const VideoLayout = {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const state = APP.store.getState();
|
||||
const currentContainer = largeVideo.getCurrentContainer();
|
||||
const currentContainerType = largeVideo.getCurrentContainerType();
|
||||
const isOnLarge = this.isCurrentlyOnLarge(id);
|
||||
const state = APP.store.getState();
|
||||
const participant = getParticipantById(state, id);
|
||||
const videoTrack = getVideoTrackByParticipant(state, participant);
|
||||
const videoStream = videoTrack?.jitsiTrack;
|
||||
|
||||
6137
package-lock.json
generated
6137
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
34
package.json
34
package.json
@@ -28,7 +28,7 @@
|
||||
"@jitsi/js-utils": "2.6.7",
|
||||
"@jitsi/logger": "2.1.1",
|
||||
"@jitsi/rnnoise-wasm": "0.2.1",
|
||||
"@matrix-org/olm": "https://gitlab.matrix.org/api/v4/projects/27/packages/npm/@matrix-org/olm/-/@matrix-org/olm-3.2.3.tgz",
|
||||
"@matrix-org/olm": "3.2.15",
|
||||
"@microsoft/microsoft-graph-client": "3.0.1",
|
||||
"@mui/material": "5.12.1",
|
||||
"@react-native-async-storage/async-storage": "1.23.1",
|
||||
@@ -57,10 +57,10 @@
|
||||
"clipboard-copy": "4.0.1",
|
||||
"clsx": "1.1.1",
|
||||
"dayjs": "1.11.13",
|
||||
"dompurify": "3.2.6",
|
||||
"dompurify": "3.3.2",
|
||||
"dropbox": "10.7.0",
|
||||
"focus-visible": "5.1.0",
|
||||
"glob": "11.0.3",
|
||||
"glob": "12.0.0",
|
||||
"grapheme-splitter": "1.0.4",
|
||||
"i18n-iso-countries": "6.8.0",
|
||||
"i18next": "17.0.6",
|
||||
@@ -72,8 +72,8 @@
|
||||
"js-md5": "0.6.1",
|
||||
"js-sha512": "0.8.0",
|
||||
"jwt-decode": "2.2.0",
|
||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2101.0.0+8061f52a/lib-jitsi-meet.tgz",
|
||||
"lodash-es": "4.17.21",
|
||||
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v2137.0.0+084a5a9c/lib-jitsi-meet.tgz",
|
||||
"lodash-es": "4.17.23",
|
||||
"null-loader": "4.0.1",
|
||||
"optional-require": "1.0.3",
|
||||
"pixelmatch": "5.3.0",
|
||||
@@ -97,7 +97,7 @@
|
||||
"react-native-pager-view": "6.8.1",
|
||||
"react-native-paper": "5.10.3",
|
||||
"react-native-performance": "5.1.2",
|
||||
"react-native-safe-area-context": "5.5.2",
|
||||
"react-native-safe-area-context": "5.6.1",
|
||||
"react-native-screens": "4.11.1",
|
||||
"react-native-sound": "https://github.com/jitsi/react-native-sound.git#ea13c97b5c2a4ff5e0d9bacbd9ff5e4457fe2c3c",
|
||||
"react-native-splash-view": "0.0.18",
|
||||
@@ -164,12 +164,12 @@
|
||||
"@types/w3c-image-capture": "1.0.6",
|
||||
"@types/w3c-web-hid": "1.0.3",
|
||||
"@types/zxcvbn": "4.4.1",
|
||||
"@wdio/allure-reporter": "9.16.0",
|
||||
"@wdio/cli": "9.16.0",
|
||||
"@wdio/globals": "9.16.0",
|
||||
"@wdio/junit-reporter": "9.16.0",
|
||||
"@wdio/local-runner": "9.16.0",
|
||||
"@wdio/mocha-framework": "9.16.0",
|
||||
"@wdio/allure-reporter": "9.23.2",
|
||||
"@wdio/cli": "9.23.2",
|
||||
"@wdio/globals": "9.23.0",
|
||||
"@wdio/junit-reporter": "9.23.2",
|
||||
"@wdio/local-runner": "9.23.2",
|
||||
"@wdio/mocha-framework": "9.23.2",
|
||||
"babel-loader": "9.1.0",
|
||||
"babel-plugin-optional-require": "0.3.1",
|
||||
"circular-dependency-plugin": "5.2.0",
|
||||
@@ -193,15 +193,15 @@
|
||||
"ts-loader": "9.4.2",
|
||||
"typescript": "5.7.2",
|
||||
"unorm": "1.6.0",
|
||||
"webdriverio": "9.16.0",
|
||||
"webpack": "5.95.0",
|
||||
"webdriverio": "9.22.0",
|
||||
"webpack": "5.105.0",
|
||||
"webpack-bundle-analyzer": "4.4.2",
|
||||
"webpack-cli": "5.1.4",
|
||||
"webpack-dev-server": "5.1.0"
|
||||
"webpack-dev-server": "5.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.0.0",
|
||||
"npm": ">=10.0.0"
|
||||
"node": ">=24.0.0",
|
||||
"npm": ">=11.0.0"
|
||||
},
|
||||
"license": "Apache-2.0",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,9 +1,50 @@
|
||||
import { createInstance } from '@amplitude/analytics-browser';
|
||||
import { EnrichmentPlugin, Event, PluginType } from '@amplitude/analytics-types';
|
||||
|
||||
const amplitude = createInstance();
|
||||
|
||||
export default amplitude;
|
||||
|
||||
function stripParam(url?: string): string | undefined {
|
||||
if (!url) return url;
|
||||
|
||||
try {
|
||||
const u = new URL(url);
|
||||
|
||||
u.hash = '';
|
||||
u.search = '';
|
||||
|
||||
return u.toString();
|
||||
} catch {
|
||||
return url.split('#')[0].split('?')[0];
|
||||
}
|
||||
}
|
||||
|
||||
class StripParamsPlugin implements EnrichmentPlugin {
|
||||
name: 'strip-params-plugin';
|
||||
type: PluginType.ENRICHMENT;
|
||||
|
||||
async setup(): Promise<void> {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
async execute(event: Event): Promise<Event | null> {
|
||||
const { event_properties } = event;
|
||||
|
||||
if (event_properties) {
|
||||
// These are only needed to make TS happy.
|
||||
type EventPropertiesKey = keyof typeof event_properties;
|
||||
const PAGE_LOCATION_KEY = '[Amplitude] Page Location' as EventPropertiesKey;
|
||||
const PAGE_URL_KEY = '[Amplitude] Page URL' as EventPropertiesKey;
|
||||
|
||||
event_properties[PAGE_LOCATION_KEY] = stripParam(event_properties[PAGE_LOCATION_KEY]);
|
||||
event_properties[PAGE_URL_KEY] = stripParam(event_properties[PAGE_URL_KEY]);
|
||||
}
|
||||
|
||||
return event;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes the Amplitude instance.
|
||||
*
|
||||
@@ -31,8 +72,9 @@ export function initAmplitude(
|
||||
formInteractions: false,
|
||||
elementInteractions: false
|
||||
},
|
||||
defaultTracking: false
|
||||
};
|
||||
|
||||
amplitude.add(new StripParamsPlugin());
|
||||
|
||||
return amplitude.init(amplitudeAPPKey, user, options).promise;
|
||||
}
|
||||
|
||||
@@ -113,17 +113,17 @@ export function maybeRedirectToTokenAuthUrl(
|
||||
const audioMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.AUDIO);
|
||||
const videoMuted = isLocalTrackMuted(state['features/base/tracks'], MEDIA_TYPE.VIDEO);
|
||||
|
||||
if (!isTokenAuthEnabled(config)) {
|
||||
if (!isTokenAuthEnabled(state)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// if tokenAuthUrl check jwt if is about to expire go through the url to get new token
|
||||
const jwt = state['features/base/jwt'].jwt;
|
||||
const refreshToken = state['features/base/jwt'].refreshToken;
|
||||
const expirationDate = getJwtExpirationDate(jwt);
|
||||
|
||||
// if there is jwt and its expiration time is less than 3 minutes away
|
||||
// let's obtain new token
|
||||
if (expirationDate && expirationDate.getTime() - Date.now() < 3 * 60 * 1000) {
|
||||
// if there is jwt token, and it is expired let's obtain a new one
|
||||
if (expirationDate && expirationDate.getTime() <= Date.now()) {
|
||||
const room = state['features/base/conference'].room;
|
||||
const { tenant } = parseURIString(locationURL.href) || {};
|
||||
|
||||
@@ -137,7 +137,8 @@ export function maybeRedirectToTokenAuthUrl(
|
||||
videoMuted
|
||||
},
|
||||
room,
|
||||
tenant
|
||||
tenant,
|
||||
refreshToken
|
||||
)
|
||||
.then((tokenAuthServiceUrl: string | undefined) => {
|
||||
if (!tokenAuthServiceUrl) {
|
||||
@@ -148,8 +149,8 @@ export function maybeRedirectToTokenAuthUrl(
|
||||
|
||||
return dispatch(openTokenAuthUrl(tokenAuthServiceUrl));
|
||||
})
|
||||
.catch(() => {
|
||||
failureCallback();
|
||||
.catch(e => {
|
||||
failureCallback(e);
|
||||
});
|
||||
|
||||
return true;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { setRoom } from '../base/conference/actions';
|
||||
import { setRoom } from '../base/conference/actions.native';
|
||||
import { getConferenceState } from '../base/conference/functions';
|
||||
import {
|
||||
configWillLoad,
|
||||
@@ -18,7 +18,7 @@ import isInsecureRoomName from '../base/util/isInsecureRoomName';
|
||||
import { parseURLParams } from '../base/util/parseURLParams';
|
||||
import {
|
||||
appendURLParam,
|
||||
getBackendSafeRoomName,
|
||||
getNormalizedRoomName,
|
||||
parseURIString,
|
||||
toURLString
|
||||
} from '../base/util/uri';
|
||||
@@ -29,7 +29,7 @@ import {
|
||||
} from '../mobile/navigation/rootNavigationContainerRef';
|
||||
import { screen } from '../mobile/navigation/routes';
|
||||
import { clearNotifications } from '../notifications/actions';
|
||||
import { isUnsafeRoomWarningEnabled } from '../prejoin/functions';
|
||||
import { isUnsafeRoomWarningEnabled } from '../prejoin/functions.native';
|
||||
|
||||
import { maybeRedirectToTokenAuthUrl } from './actions.any';
|
||||
import { addTrackStateToURL, getDefaultURL } from './functions.native';
|
||||
@@ -110,7 +110,7 @@ export function appNavigate(uri?: string, options: IReloadNowOptions = {}) {
|
||||
let url = `${baseURL}config.js`;
|
||||
|
||||
// XXX In order to support multiple shards, tell the room to the deployment.
|
||||
room && (url = appendURLParam(url, 'room', getBackendSafeRoomName(room) ?? ''));
|
||||
room && (url = appendURLParam(url, 'room', getNormalizedRoomName(room) ?? ''));
|
||||
|
||||
const { release } = parseURLParams(location, true, 'search');
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider.web'
|
||||
import DialogContainer from '../../base/ui/components/web/DialogContainer';
|
||||
import ChromeExtensionBanner from '../../chrome-extension-banner/components/ChromeExtensionBanner.web';
|
||||
import OverlayContainer from '../../overlay/components/web/OverlayContainer';
|
||||
import PiP from '../../pip/components/PiP';
|
||||
|
||||
import { AbstractApp } from './AbstractApp';
|
||||
|
||||
@@ -47,6 +48,7 @@ export class App extends AbstractApp {
|
||||
<JitsiThemeProvider>
|
||||
<GlobalStyles />
|
||||
<ChromeExtensionBanner />
|
||||
<PiP />
|
||||
{ super._createMainElement(component, props) }
|
||||
</JitsiThemeProvider>
|
||||
);
|
||||
|
||||
@@ -11,8 +11,9 @@ const route = {
|
||||
* store.
|
||||
*
|
||||
* @param {any} _stateful - Used on web.
|
||||
* @param {any} _dispatch - Used on web.
|
||||
* @returns {Promise<Object>}
|
||||
*/
|
||||
export function _getRouteToRender(_stateful?: any) {
|
||||
export function _getRouteToRender(_stateful?: any): Promise<object> {
|
||||
return Promise.resolve(route);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
// @ts-expect-error
|
||||
import { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';
|
||||
|
||||
import { getTokenAuthUrl } from '../authentication/functions.web';
|
||||
import { IStateful } from '../base/app/types';
|
||||
import { isRoomValid } from '../base/conference/functions';
|
||||
import { isSupportedBrowser } from '../base/environment/environment';
|
||||
import { browser } from '../base/lib-jitsi-meet';
|
||||
import { toState } from '../base/redux/functions';
|
||||
import { parseURIString } from '../base/util/uri';
|
||||
import Conference from '../conference/components/web/Conference';
|
||||
import { getDeepLinkingPage } from '../deep-linking/functions';
|
||||
import UnsupportedDesktopBrowser from '../unsupported-browser/components/UnsupportedDesktopBrowser';
|
||||
@@ -23,9 +20,10 @@ import { IReduxState } from './types';
|
||||
*
|
||||
* @param {(Function|Object)} stateful - THe redux store, state, or
|
||||
* {@code getState} function.
|
||||
* @param {Dispatch} dispatch - The Redux dispatch function.
|
||||
* @returns {Promise<Object>}
|
||||
*/
|
||||
export function _getRouteToRender(stateful: IStateful) {
|
||||
export function _getRouteToRender(stateful: IStateful): Promise<object> {
|
||||
const state = toState(stateful);
|
||||
|
||||
return _getWebConferenceRoute(state) || _getWebWelcomePageRoute(state);
|
||||
@@ -36,9 +34,10 @@ export function _getRouteToRender(stateful: IStateful) {
|
||||
* a valid conference is being joined.
|
||||
*
|
||||
* @param {Object} state - The redux state.
|
||||
* @param {Dispatch} dispatch - The Redux dispatch function.
|
||||
* @returns {Promise|undefined}
|
||||
*/
|
||||
function _getWebConferenceRoute(state: IReduxState) {
|
||||
function _getWebConferenceRoute(state: IReduxState): Promise<any> | undefined {
|
||||
const room = state['features/base/conference'].room;
|
||||
|
||||
if (!isRoomValid(room)) {
|
||||
@@ -46,36 +45,6 @@ function _getWebConferenceRoute(state: IReduxState) {
|
||||
}
|
||||
|
||||
const route = _getEmptyRoute();
|
||||
const config = state['features/base/config'];
|
||||
|
||||
// if we have auto redirect enabled, and we have previously logged in successfully
|
||||
// let's redirect to the auth url to get the token and login again
|
||||
if (!browser.isElectron() && config.tokenAuthUrl && config.tokenAuthUrlAutoRedirect
|
||||
&& state['features/authentication'].tokenAuthUrlSuccessful
|
||||
&& !state['features/base/jwt'].jwt && room) {
|
||||
const { locationURL = { href: '' } as URL } = state['features/base/connection'];
|
||||
const { tenant } = parseURIString(locationURL.href) || {};
|
||||
const { startAudioOnly } = config;
|
||||
|
||||
return getTokenAuthUrl(
|
||||
config,
|
||||
locationURL,
|
||||
{
|
||||
audioMuted: false,
|
||||
audioOnlyEnabled: startAudioOnly,
|
||||
skipPrejoin: false,
|
||||
videoMuted: false
|
||||
},
|
||||
room,
|
||||
tenant
|
||||
)
|
||||
.then((url: string | undefined) => {
|
||||
route.href = url;
|
||||
|
||||
return route;
|
||||
})
|
||||
.catch(() => Promise.resolve(route));
|
||||
}
|
||||
|
||||
// Update the location if it doesn't match. This happens when a room is
|
||||
// joined from the welcome page. The reason for doing this instead of using
|
||||
|
||||
@@ -2,9 +2,8 @@ import '../analytics/middleware';
|
||||
import '../authentication/middleware';
|
||||
import '../av-moderation/middleware';
|
||||
import '../base/conference/middleware';
|
||||
import '../base/config/middleware';
|
||||
import '../base/i18n/middleware';
|
||||
import '../base/jwt/middleware';
|
||||
import '../base/jwt/middleware.any';
|
||||
import '../base/known-domains/middleware';
|
||||
import '../base/lastn/middleware';
|
||||
import '../base/lib-jitsi-meet/middleware';
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import '../base/config/middleware';
|
||||
import '../dynamic-branding/middleware';
|
||||
import '../gifs/middleware';
|
||||
import '../mobile/audio-mode/middleware';
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import '../base/app/middleware';
|
||||
import '../base/jwt/middleware.web';
|
||||
import '../base/config/middleware';
|
||||
import '../base/connection/middleware';
|
||||
import '../base/devices/middleware';
|
||||
import '../base/media/middleware';
|
||||
@@ -11,6 +13,7 @@ import '../no-audio-signal/middleware';
|
||||
import '../notifications/middleware';
|
||||
import '../noise-detection/middleware';
|
||||
import '../old-client-notification/middleware';
|
||||
import '../pip/middleware';
|
||||
import '../power-monitor/middleware';
|
||||
import '../prejoin/middleware';
|
||||
import '../remote-control/middleware';
|
||||
@@ -24,5 +27,6 @@ import '../face-landmarks/middleware';
|
||||
import '../gifs/middleware';
|
||||
import '../whiteboard/middleware.web';
|
||||
import '../file-sharing/middleware.web';
|
||||
import '../custom-panel/middleware.web';
|
||||
|
||||
import './middlewares.any';
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import '../base/devices/reducer';
|
||||
import '../base/premeeting/reducer';
|
||||
import '../custom-panel/reducer';
|
||||
import '../base/tooltip/reducer';
|
||||
import '../e2ee/reducer';
|
||||
import '../face-landmarks/reducer';
|
||||
@@ -8,6 +9,7 @@ import '../keyboard-shortcuts/reducer';
|
||||
import '../no-audio-signal/reducer';
|
||||
import '../noise-detection/reducer';
|
||||
import '../participants-pane/reducer';
|
||||
import '../pip/reducer';
|
||||
import '../power-monitor/reducer';
|
||||
import '../prejoin/reducer';
|
||||
import '../remote-control/reducer';
|
||||
|
||||
@@ -31,6 +31,7 @@ import { IUserInteractionState } from '../base/user-interaction/reducer';
|
||||
import { IBreakoutRoomsState } from '../breakout-rooms/reducer';
|
||||
import { ICalendarSyncState } from '../calendar-sync/reducer';
|
||||
import { IChatState } from '../chat/reducer';
|
||||
import { ICustomPanelState } from '../custom-panel/reducer';
|
||||
import { IDeepLinkingState } from '../deep-linking/reducer';
|
||||
import { IDropboxState } from '../dropbox/reducer';
|
||||
import { IDynamicBrandingState } from '../dynamic-branding/reducer';
|
||||
@@ -57,6 +58,7 @@ import { INoiseDetectionState } from '../noise-detection/reducer';
|
||||
import { INoiseSuppressionState } from '../noise-suppression/reducer';
|
||||
import { INotificationsState } from '../notifications/reducer';
|
||||
import { IParticipantsPaneState } from '../participants-pane/reducer';
|
||||
import { IPipState } from '../pip/reducer';
|
||||
import { IPollsState } from '../polls/reducer';
|
||||
import { IPollsHistoryState } from '../polls-history/reducer';
|
||||
import { IPowerMonitorState } from '../power-monitor/reducer';
|
||||
@@ -120,6 +122,7 @@ export interface IReduxState {
|
||||
'features/calendar-sync': ICalendarSyncState;
|
||||
'features/call-integration': ICallIntegrationState;
|
||||
'features/chat': IChatState;
|
||||
'features/custom-panel': ICustomPanelState;
|
||||
'features/deep-linking': IDeepLinkingState;
|
||||
'features/dropbox': IDropboxState;
|
||||
'features/dynamic-branding': IDynamicBrandingState;
|
||||
@@ -145,6 +148,7 @@ export interface IReduxState {
|
||||
'features/noise-suppression': INoiseSuppressionState;
|
||||
'features/notifications': INotificationsState;
|
||||
'features/participants-pane': IParticipantsPaneState;
|
||||
'features/pip': IPipState;
|
||||
'features/polls': IPollsState;
|
||||
'features/polls-history': IPollsHistoryState;
|
||||
'features/power-monitor': IPowerMonitorState;
|
||||
|
||||
@@ -26,16 +26,6 @@ export const LOGIN = 'LOGIN';
|
||||
*/
|
||||
export const LOGOUT = 'LOGOUT';
|
||||
|
||||
/**
|
||||
* The type of (redux) action which signals that we have authenticated successful when
|
||||
* tokenAuthUrl is set.
|
||||
*
|
||||
* {
|
||||
* type: SET_TOKEN_AUTH_URL_SUCCESS
|
||||
* }
|
||||
*/
|
||||
export const SET_TOKEN_AUTH_URL_SUCCESS = 'SET_TOKEN_AUTH_URL_SUCCESS';
|
||||
|
||||
/**
|
||||
* The type of (redux) action which signals that the cyclic operation of waiting
|
||||
* for conference owner has been aborted.
|
||||
|
||||
@@ -8,7 +8,6 @@ import {
|
||||
ENABLE_MODERATOR_LOGIN,
|
||||
LOGIN,
|
||||
LOGOUT,
|
||||
SET_TOKEN_AUTH_URL_SUCCESS,
|
||||
STOP_WAIT_FOR_OWNER,
|
||||
UPGRADE_ROLE_FINISHED,
|
||||
UPGRADE_ROLE_STARTED,
|
||||
@@ -139,7 +138,7 @@ function _upgradeRoleStarted(thenableWithCancel: Object) {
|
||||
* @returns {Function}
|
||||
*/
|
||||
export function hideLoginDialog() {
|
||||
return hideDialog(LoginDialog);
|
||||
return hideDialog('LoginDialog', LoginDialog);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -199,7 +198,7 @@ export function enableModeratorLogin() {
|
||||
* @returns {Action}
|
||||
*/
|
||||
export function openWaitForOwnerDialog() {
|
||||
return openDialog(WaitForOwnerDialog);
|
||||
return openDialog('WaitForOwnerDialog', WaitForOwnerDialog);
|
||||
}
|
||||
|
||||
|
||||
@@ -240,18 +239,5 @@ export function waitForOwner() {
|
||||
* @returns {Action}
|
||||
*/
|
||||
export function openLoginDialog() {
|
||||
return openDialog(LoginDialog);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the config with new options.
|
||||
*
|
||||
* @param {boolean} value - The new value.
|
||||
* @returns {Function}
|
||||
*/
|
||||
export function setTokenAuthUrlSuccess(value: boolean) {
|
||||
return {
|
||||
type: SET_TOKEN_AUTH_URL_SUCCESS,
|
||||
value
|
||||
};
|
||||
return openDialog('LoginDialog', LoginDialog);
|
||||
}
|
||||
|
||||
@@ -88,3 +88,13 @@ export function openTokenAuthUrl(tokenAuthServiceUrl: string) {
|
||||
Linking.openURL(tokenAuthServiceUrl);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Not used.
|
||||
*
|
||||
* @param {string} tokenAuthServiceUrl - Authentication service URL.
|
||||
* @returns {Promise<any>} Resolves.
|
||||
*/
|
||||
export function loginWithPopup(tokenAuthServiceUrl: string): Promise<any> {
|
||||
return Promise.resolve(tokenAuthServiceUrl);
|
||||
}
|
||||
|
||||
@@ -1,13 +1,35 @@
|
||||
import { maybeRedirectToWelcomePage } from '../app/actions.web';
|
||||
import { IStore } from '../app/types';
|
||||
import { connect } from '../base/connection/actions';
|
||||
import { openDialog } from '../base/dialog/actions';
|
||||
import { setJWT } from '../base/jwt/actions';
|
||||
import { browser } from '../base/lib-jitsi-meet';
|
||||
import { hideNotification, showErrorNotification, showNotification } from '../notifications/actions';
|
||||
import { NOTIFICATION_TIMEOUT_TYPE, NOTIFICATION_TYPE } from '../notifications/constants';
|
||||
|
||||
import { CANCEL_LOGIN } from './actionTypes';
|
||||
import LoginQuestionDialog from './components/web/LoginQuestionDialog';
|
||||
import { isTokenAuthInline } from './functions.any';
|
||||
import logger from './logger';
|
||||
|
||||
export * from './actions.any';
|
||||
|
||||
const PROMPT_POPUP_NOTIFICATION_ID = 'PROMPT_POPUP_NOTIFICATION_ID';
|
||||
|
||||
/**
|
||||
* Custom error that includes a recovery callback.
|
||||
*/
|
||||
class PopupBlockedError extends Error {
|
||||
constructor(
|
||||
message: string = 'Popup was blocked by browser',
|
||||
public readonly retry?: () => Window | null
|
||||
) {
|
||||
super(message);
|
||||
this.name = 'PopupBlockedError';
|
||||
Error.captureStackTrace(this, PopupBlockedError);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Cancels {@ink LoginDialog}.
|
||||
*
|
||||
@@ -46,6 +68,158 @@ export function redirectToDefaultLocation() {
|
||||
return (dispatch: IStore['dispatch']) => dispatch(maybeRedirectToWelcomePage());
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a cryptographic nonce.
|
||||
*
|
||||
* @returns {string} The generated nonce.
|
||||
*/
|
||||
function generateNonce(): string {
|
||||
const array = new Uint8Array(32);
|
||||
|
||||
crypto.getRandomValues(array);
|
||||
|
||||
return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs login with a popup window.
|
||||
*
|
||||
* @param {string} tokenAuthServiceUrl - Authentication service URL.
|
||||
* @param {Window|undefined} popup - Authentication service URL.
|
||||
* @returns {Promise<any>} A promise that resolves with the authentication
|
||||
* result or rejects with an error.
|
||||
*/
|
||||
export function loginWithPopup(tokenAuthServiceUrl: string, popup?: Window | null): Promise<any> {
|
||||
return new Promise<any>((resolve, reject) => {
|
||||
let nonceParam = '';
|
||||
|
||||
try {
|
||||
const nonce = generateNonce();
|
||||
|
||||
sessionStorage.setItem('oauth_nonce', nonce);
|
||||
|
||||
nonceParam = `&nonce=${nonce}`;
|
||||
} catch (e) {
|
||||
if (e instanceof DOMException && e.name === 'SecurityError') {
|
||||
logger.warn(
|
||||
'sessionStorage access denied (cross-origin or restricted context) enable it to improve security',
|
||||
e);
|
||||
} else {
|
||||
logger.error('Unable to save nonce in session storage', e);
|
||||
}
|
||||
}
|
||||
|
||||
const openPopup = () => {
|
||||
// Open popup
|
||||
const width = 500;
|
||||
const height = 600;
|
||||
const left = window.screen.width / 2 - width / 2;
|
||||
const top = window.screen.height / 2 - height / 2;
|
||||
|
||||
return window.open(
|
||||
`${tokenAuthServiceUrl}${nonceParam}`,
|
||||
`Auth-${Date.now()}`,
|
||||
`width=${width},height=${height},left=${left},top=${top}`
|
||||
);
|
||||
};
|
||||
|
||||
if (!popup) {
|
||||
popup = openPopup();
|
||||
}
|
||||
|
||||
if (!popup) {
|
||||
// adds a callback to the error that can be used to directly retry where window.open will be executed
|
||||
// on the user click without any promises(dispatches) incoved
|
||||
reject(new PopupBlockedError('Popup blocked', () => {
|
||||
return openPopup();
|
||||
}));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
let closedPollInterval: ReturnType<typeof setInterval> | undefined = undefined;
|
||||
const cleanup = (handler: (event: MessageEvent) => void) => {
|
||||
window.removeEventListener('message', handler);
|
||||
clearInterval(closedPollInterval);
|
||||
popup?.close();
|
||||
|
||||
try {
|
||||
sessionStorage.removeItem('oauth_nonce');
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
try {
|
||||
sessionStorage.removeItem('code_verifier');
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
};
|
||||
|
||||
const handler = (event: MessageEvent) => {
|
||||
// Verify origin
|
||||
if (event.origin !== window.location.origin) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.data.type === 'oauth-success') {
|
||||
cleanup(handler);
|
||||
|
||||
resolve({
|
||||
accessToken: event.data.accessToken,
|
||||
idToken: event.data.idToken,
|
||||
refreshToken: event.data.refreshToken
|
||||
});
|
||||
} else if (event.data.type === 'oauth-error') {
|
||||
cleanup(handler);
|
||||
|
||||
reject(new Error(event.data.error));
|
||||
}
|
||||
};
|
||||
|
||||
// Listen for messages from the popup
|
||||
window.addEventListener('message', handler);
|
||||
|
||||
// Detect manual popup close before authentication completes
|
||||
closedPollInterval = setInterval(() => {
|
||||
if (popup?.closed) {
|
||||
cleanup(handler);
|
||||
reject(new Error('Login cancelled'));
|
||||
}
|
||||
}, 500);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs silent logout by loading the token authentication logout service URL in an
|
||||
* invisible iframe.
|
||||
*
|
||||
* @param {string} tokenAuthLogoutServiceUrl - Logout service URL.
|
||||
* @returns {Promise<any>} A promise that resolves when logout is complete.
|
||||
*/
|
||||
export function silentLogout(tokenAuthLogoutServiceUrl: string): any {
|
||||
return new Promise<void>(resolve => {
|
||||
const iframe = document.createElement('iframe');
|
||||
|
||||
iframe.style.display = 'none';
|
||||
iframe.src = tokenAuthLogoutServiceUrl;
|
||||
document.body.appendChild(iframe);
|
||||
|
||||
// Listen for logout completion
|
||||
const handler = (event: any) => {
|
||||
if (event.origin !== window.location.origin) return;
|
||||
|
||||
if (event.data.type === 'logout-success') {
|
||||
window.removeEventListener('message', handler);
|
||||
document.body.removeChild(iframe);
|
||||
|
||||
resolve();
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('message', handler);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Opens token auth URL page.
|
||||
*
|
||||
@@ -63,9 +237,70 @@ export function openTokenAuthUrl(tokenAuthServiceUrl: string): any {
|
||||
}
|
||||
};
|
||||
|
||||
if (!browser.isElectron() && isTokenAuthInline(getState()['features/base/config'])) {
|
||||
const login = (popup?: Window | null) => {
|
||||
return loginWithPopup(tokenAuthServiceUrl, popup)
|
||||
.then((result: { accessToken: string; idToken: string; refreshToken?: string; }) => {
|
||||
// @ts-ignore
|
||||
const token: string = result.accessToken;
|
||||
const idToken: string = result.idToken;
|
||||
const refreshToken: string | undefined = result.refreshToken;
|
||||
|
||||
// @ts-ignore
|
||||
dispatch(setJWT(token, idToken, refreshToken));
|
||||
|
||||
logger.info('Reconnecting to conference with new token.');
|
||||
|
||||
const { connection } = getState()['features/base/connection'];
|
||||
|
||||
if (connection) {
|
||||
connection.refreshToken(token).then(
|
||||
() => {
|
||||
const { membersOnly } = getState()['features/base/conference'];
|
||||
|
||||
membersOnly?.join();
|
||||
})
|
||||
.catch((err: any) => {
|
||||
dispatch(setJWT());
|
||||
logger.error(err);
|
||||
});
|
||||
} else {
|
||||
dispatch(connect());
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
login().catch(err => {
|
||||
if (err instanceof PopupBlockedError) {
|
||||
dispatch(showNotification({
|
||||
titleKey: 'dialog.loginPopupBlocked',
|
||||
uid: PROMPT_POPUP_NOTIFICATION_ID,
|
||||
customActionNameKey: [ 'dialog.retry' ],
|
||||
customActionHandler: [ () => {
|
||||
dispatch(hideNotification(PROMPT_POPUP_NOTIFICATION_ID));
|
||||
|
||||
// the window.open will be executed directly from the onClick handler of the notification action button
|
||||
login(err.retry ? err.retry() : undefined)
|
||||
.catch(logger.error);
|
||||
} ],
|
||||
appearance: NOTIFICATION_TYPE.ERROR
|
||||
}, NOTIFICATION_TIMEOUT_TYPE.STICKY));
|
||||
|
||||
} else {
|
||||
// let's add expand that will show the error message in the notification
|
||||
dispatch(showErrorNotification({
|
||||
titleKey: 'dialog.loginFailed'
|
||||
}));
|
||||
}
|
||||
logger.error(err);
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Show warning for leaving conference only when in a conference.
|
||||
if (!browser.isElectron() && getState()['features/base/conference'].conference) {
|
||||
dispatch(openDialog(LoginQuestionDialog, {
|
||||
dispatch(openDialog('LoginQuestionDialog', LoginQuestionDialog, {
|
||||
handler: () => {
|
||||
// Give time for the dialog to close.
|
||||
setTimeout(() => redirect(), 500);
|
||||
|
||||
@@ -1,15 +1,30 @@
|
||||
import { IReduxState } from '../app/types';
|
||||
import { IConfig } from '../base/config/configType';
|
||||
import { parseURLParams } from '../base/util/parseURLParams';
|
||||
import { getBackendSafeRoomName } from '../base/util/uri';
|
||||
import { isVpaasMeeting } from '../jaas/functions';
|
||||
|
||||
/**
|
||||
* Checks if the token for authentication is available.
|
||||
* Checks if the token for authentication URL is available and the meeting is not jaas.
|
||||
*
|
||||
* @param {IReduxState} state - The state of the app.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export const isTokenAuthEnabled = (state: IReduxState): boolean => {
|
||||
const config = state['features/base/config'];
|
||||
|
||||
return typeof config.tokenAuthUrl === 'string' && config.tokenAuthUrl.length > 0
|
||||
&& !isVpaasMeeting(state);
|
||||
};
|
||||
|
||||
/**
|
||||
* Checks if the token authentication should be done inline.
|
||||
*
|
||||
* @param {Object} config - Configuration state object from store.
|
||||
* @returns {boolean}
|
||||
*/
|
||||
export const isTokenAuthEnabled = (config: IConfig): boolean =>
|
||||
typeof config.tokenAuthUrl === 'string' && config.tokenAuthUrl.length > 0;
|
||||
export const isTokenAuthInline = (config: IConfig): boolean =>
|
||||
config.tokenAuthInline === true;
|
||||
|
||||
/**
|
||||
* Returns the state that we can add as a parameter to the tokenAuthUrl.
|
||||
@@ -23,6 +38,7 @@ export const isTokenAuthEnabled = (config: IConfig): boolean =>
|
||||
* }.
|
||||
* @param {string?} roomName - The room name.
|
||||
* @param {string?} tenant - The tenant name if any.
|
||||
* @param {string?} refreshToken - The refresh token if available.
|
||||
*
|
||||
* @returns {Object} The state object.
|
||||
*/
|
||||
@@ -35,8 +51,10 @@ export const _getTokenAuthState = (
|
||||
videoMuted: boolean | undefined;
|
||||
},
|
||||
roomName: string | undefined,
|
||||
tenant: string | undefined): object => {
|
||||
tenant: string | undefined,
|
||||
refreshToken?: string): object => {
|
||||
const state = {
|
||||
refreshToken,
|
||||
room: roomName,
|
||||
roomSafe: getBackendSafeRoomName(roomName),
|
||||
tenant
|
||||
|
||||
@@ -23,6 +23,7 @@ export * from './functions.any';
|
||||
* }.
|
||||
* @param {string?} roomName - The room name.
|
||||
* @param {string?} tenant - The tenant name if any.
|
||||
* @param {string?} refreshToken - The refreshToken if any.
|
||||
*
|
||||
* @returns {Promise<string|undefined>} - The URL pointing to JWT login service or
|
||||
* <tt>undefined</tt> if the pattern stored in config is not a string and the URL can not be
|
||||
@@ -39,7 +40,9 @@ export const getTokenAuthUrl = (
|
||||
},
|
||||
roomName: string | undefined,
|
||||
// eslint-disable-next-line max-params
|
||||
tenant: string | undefined): Promise<string | undefined> => {
|
||||
tenant: string | undefined,
|
||||
// eslint-disable-next-line max-params
|
||||
refreshToken?: string | undefined): Promise<string | undefined> => {
|
||||
|
||||
const {
|
||||
audioMuted = false,
|
||||
@@ -64,7 +67,8 @@ export const getTokenAuthUrl = (
|
||||
videoMuted
|
||||
},
|
||||
roomName,
|
||||
tenant
|
||||
tenant,
|
||||
refreshToken
|
||||
);
|
||||
|
||||
// Append ios=true or android=true to the token URL.
|
||||
|
||||
@@ -4,6 +4,7 @@ import { IConfig } from '../base/config/configType';
|
||||
import { browser } from '../base/lib-jitsi-meet';
|
||||
|
||||
import { _getTokenAuthState } from './functions.any';
|
||||
import logger from './logger';
|
||||
|
||||
export * from './functions.any';
|
||||
|
||||
@@ -41,6 +42,7 @@ function _cryptoRandom() {
|
||||
* }.
|
||||
* @param {string?} roomName - The room name.
|
||||
* @param {string?} tenant - The tenant name if any.
|
||||
* @param {string?} refreshToken - The refresh token if available.
|
||||
*
|
||||
* @returns {Promise<string|undefined>} - The URL pointing to JWT login service or
|
||||
* <tt>undefined</tt> if the pattern stored in config is not a string and the URL can not be
|
||||
@@ -56,9 +58,10 @@ export const getTokenAuthUrl = (
|
||||
videoMuted: boolean | undefined;
|
||||
},
|
||||
roomName: string | undefined,
|
||||
// eslint-disable-next-line max-params
|
||||
tenant: string | undefined): Promise<string | undefined> => {
|
||||
|
||||
// eslint-disable max-params
|
||||
tenant: string | undefined,
|
||||
refreshToken?: string): Promise<string | undefined> => {
|
||||
// eslint-enable max-params
|
||||
const {
|
||||
audioMuted = false,
|
||||
audioOnlyEnabled = false,
|
||||
@@ -82,7 +85,8 @@ export const getTokenAuthUrl = (
|
||||
videoMuted
|
||||
},
|
||||
roomName,
|
||||
tenant
|
||||
tenant,
|
||||
refreshToken
|
||||
);
|
||||
|
||||
if (browser.isElectron()) {
|
||||
@@ -103,7 +107,17 @@ export const getTokenAuthUrl = (
|
||||
codeVerifier += POSSIBLE_CHARS.charAt(Math.floor(_cryptoRandom() * POSSIBLE_CHARS.length));
|
||||
}
|
||||
|
||||
window.sessionStorage.setItem('code_verifier', codeVerifier);
|
||||
try {
|
||||
window.sessionStorage.setItem('code_verifier', codeVerifier);
|
||||
} catch (e) {
|
||||
if (e instanceof DOMException && e.name === 'SecurityError') {
|
||||
logger.warn(
|
||||
'sessionStorage access denied (cross-origin or restricted context) enable it to improve security',
|
||||
e);
|
||||
} else {
|
||||
logger.error('Unable to save code verifier in session storage', e);
|
||||
}
|
||||
}
|
||||
|
||||
return window.crypto.subtle.digest('SHA-256', new TextEncoder().encode(codeVerifier))
|
||||
.then(digest => {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user