Compare commits

..

237 Commits

Author SHA1 Message Date
Robert Pintilii
2de416c1fa fix(dial-in) Make text selectable (#13205) 2023-04-13 12:27:11 +03:00
Jaya Allamsetty
64838df712 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1614.0.0+5d3ce8c2...v1615.0.0+a23a8c7c
2023-04-12 12:35:48 -04:00
Robert Pintilii
84ad0200a8 ref(TS) Convert some native components to TS (#13200) 2023-04-12 16:58:42 +03:00
Christoph Settgast
046f9c53ab fix: breakout rooms with non-ascii room names
Somewhere along a double encoding for the room names occurred, thus
currently moderation does not work for rooms names which contain non-
ascii charaters like ä etc.

This essentially reverts a6bc51cff1
2023-04-11 16:27:48 -05:00
infl00pLabs
62f1139193 lang: Greek translations update (#13163)
* Complete and Replace Greek translated strings

* Greek translated strings - sorted

* Add files via upload
2023-04-11 09:09:59 -05:00
Robert Pintilii
373be54b04 ref(TS) Convert some components to TS (#13192) 2023-04-11 12:10:37 +03:00
Robert Pintilii
00c3ea07e7 fix(notifications-tab) Fix sounds settings (#13195) 2023-04-11 11:31:51 +03:00
Robert Pintilii
5a64bd76fb ref(prejoin) Refactor styles (#13187)
Move styles from SCSS to JSS
Convert class to function component
2023-04-10 14:22:08 +03:00
Robert Pintilii
57dbd3cf54 fix(device-picker) Close picker when another is open (#13190) 2023-04-10 12:52:22 +03:00
Дамян Минков
e772831f7c feat(visitors): Fix creating breakout rooms for promoted visitor. (#13188)
* feat(visitors): Fix creating breakout rooms for promoted visitor.

* squash: Drop caching as we hardcode the nick.
2023-04-07 22:47:13 -05:00
damencho
9363b79454 feat(visitors): Updates meeting id for visitor rooms. 2023-04-07 08:53:13 -05:00
Gabriel Borlea
cf97ff724c fix: leave the conference after it is destroyed (#13182)
* fix: leave the conference after it is destroyed

* add timeout for leave conference
2023-04-07 08:34:18 -05:00
Robert Pintilii
c1f1c0d341 ref(TS) Convert some components to TS (#13179) 2023-04-07 13:59:25 +03:00
Robert Pintilii
fd47225d30 fix(popover) Fix close popover from toggle button (#13180) 2023-04-07 12:26:56 +03:00
damencho
0e9e884ab4 fix(visitors): Fixes large video and pinning. 2023-04-06 13:23:13 -05:00
damencho
85d13ddfdf chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1612.0.0+67d92a96...v1614.0.0+5d3ce8c2
2023-04-05 17:55:51 -05:00
damencho
deadd8ad07 fix: Updates the rules for visitor room destroy.
Will destroy room immediately when there are no main participant, cause anyway the main room will be destroyed and jicofo will leave this room.
Visitors will reload when seeing jicofo leaving.
When there are no visitors we give 15 seconds for them to connect and after that we destroy the room.
2023-04-05 17:12:37 -05:00
Trang Sĩ Thái
b9e5e5f114 Update main-vi.json
Correct translations of the Vietnamese language
2023-04-05 16:07:31 -05:00
Дамян Минков
e5d948af44 feat(visitors): Adds an option to ignore certain domains. (#13174)
* feat(visitors): Adds an option to ignore certain domains.

Can ignore domains (used for jibri and transcriber) to avoid propagating them to visitor nodes.

* squash: Drop filtering messages.
2023-04-05 16:07:12 -05:00
damencho
352ffa589c fix: Handles max occupants reached from a visitor node.
When we receive the error from a visitor node, we need to restore the previous configuration, reconnect to the main prosody and be ready to try to rejoin again (from prejoin screen).
2023-04-05 07:38:00 -05:00
damencho
2dac69b679 fix: Show visitors notification only when iAmVisitor is true. 2023-04-05 07:38:00 -05:00
Peter Dave Hello
a062fe0d0b lang: Improve Traditional Chinese (zhTW) locale (#13169) 2023-04-04 15:12:51 -05:00
damencho
67692149a2 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1611.0.0+14cd7a89...v1612.0.0+67d92a96
2023-04-04 14:05:08 -04:00
Jaya Allamsetty
ec4ab7c49c fix(lastn): Do not update lastn on participant join/leave.
Last-n doesn't need to be updated when participants join/leave the conference or for other layout changes.
2023-04-04 11:14:46 -04:00
Jaya Allamsetty
6efa4f2475 fix(config) Remove the code related to lastN limits which is not used anymore. 2023-04-04 11:14:46 -04:00
Robert Pintilii
3a2a129f44 ref(TS) Improve TS (#13167)
Fix some errors. Remove @ts-ignores
Convert some files to TS
Remove some eslint-disables
2023-04-04 17:08:59 +03:00
Calinteodor
a828cacbfe feat(polls): answer and question inputs native updates (#13166)
* feat(polls): fixed scroll inside components and added pointerEvents auto for question and answer inputs
2023-04-04 15:15:44 +03:00
Calin-Teodor
5d840a5072 feat(conference, toolbox): reverted PR and removed pointer events from parent views 2023-04-04 14:00:50 +03:00
Robert Pintilii
db5e63411f feat(participants-pane) Design update (#13162)
Move ListItem to base/ui
2023-04-04 13:02:45 +03:00
Calin-Teodor
7457480f02 feat(conference, toolbox): fixed linter 2023-04-04 12:18:40 +03:00
Calin-Teodor
c834627949 fix(toolbox): stop onpress bubbling for components underneath the toolbox 2023-04-04 12:18:40 +03:00
Calin-Teodor
2a0b87ee3e feat(filmstrip): update method to match meeting participant item onpress method 2023-04-04 12:18:40 +03:00
Calin-Teodor
ff83276a2b fix(conference): stop onpress bubbling for components underneath the titlebar 2023-04-04 12:18:40 +03:00
Robert Pintilii
0bea2926d2 ref(TS) Convert some components to TS (#13142) 2023-04-04 10:21:53 +03:00
Hristo Terezov
aa3a8f24b8 feat(connection-table): e2ee verified changes
moves e2ee verified into "Show More" section of the connection table popup.
changes the values to yes/no.
2023-04-03 15:06:35 -05:00
Aaron van Meerten
be493c5343 fix: revert base.html clearing (#13161) 2023-04-03 14:59:03 -05:00
damencho
47a2943682 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1610.0.0+a1bbdc1f...v1611.0.0+14cd7a89
2023-04-03 11:43:56 -04:00
Bartosz Schiller
5201f8791a Add feature flag to hide the participant name editing field on the prejoin page 2023-04-03 18:25:47 +03:00
Aaron van Meerten
0f4af44220 feature: clear base.html (#13157) 2023-04-03 10:12:05 -05:00
Aaron van Meerten
78bdbe2c3f feature: support loading pwa-worker from subdir (#13156) 2023-04-03 10:06:10 -05:00
Hristo Terezov
e781bc9458 fix(external-api): Set ifame.src before adding it.
Revert a7b25d6
2023-04-03 09:50:38 -05:00
Peter Dave Hello
847d1dd4b7 fix(docs) set proper language for codeblocks in lang/readme.md 2023-04-03 15:45:53 +02:00
Robert Pintilii
05a79ec793 ref: Remove index files (#13154)
Fix imports
Convert some files to TS
2023-04-03 16:33:18 +03:00
Calinteodor
20fd544ded fix(notications): increased notification max height for buttons to fit (#13152) 2023-04-03 14:13:37 +03:00
Robert Pintilii
0b65acb528 ref: Remove some index files (#13151)
Fix imports
2023-04-03 13:49:19 +03:00
JohannesPertl
75bb460ccf misc(editorconfig) don't trim trailing whitespaces for .md files 2023-04-03 11:17:36 +02:00
Robert Pintilii
6afb7ba9a6 ref(TS) Changes types to interfaces (#13141) 2023-04-03 11:09:50 +03:00
Robert Oanta
f1ad9dc2e0 fix(api) webhid error showing up in logs 2023-03-31 13:40:33 -05:00
Jaya Allamsetty
9d76c54288 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1608.0.0+87bce92f...v1610.0.0+a1bbdc1f
2023-03-31 08:21:28 -05:00
Robert Pintilii
9ac039a408 ref: Remove some index files (#13140) 2023-03-31 14:04:33 +03:00
Дамян Минков
275e7b00a9 feat: Visitors stats (#13139)
* fix: Fixes mac occupants check logic.

Now works and with missing muc_access_whitelist option.

* feat: Adds visitor stats.

* squash: Drops check for healthcheck room.
2023-03-30 17:23:04 -05:00
Jaya Allamsetty
44dde32bab fix(config) Remove ununsed abTesting config. 2023-03-30 17:46:17 -04:00
Jaya Allamsetty
f72fb4063b fix(config) cleanup unused 'enableLayerSuspension' flag. 2023-03-30 17:46:17 -04:00
Jaya Allamsetty
710dab8b76 fix(config) Ignore enableUnifiedOnChrome config flag.
Always enable unified plan support on Chromium endpoints.
2023-03-30 17:46:17 -04:00
Calinteodor
fde975ba62 feat(recording): fix ui for live stream screen on mobile (#13123)
* feat(recording): fix ui for live stream screen on mobile
2023-03-30 16:06:01 +03:00
Calin-Teodor
d75ab7b246 fix(filmstrip): show video for screenshare participant in tile view 2023-03-30 15:44:36 +03:00
Robert Pintilii
46c91b7566 ref(TS) Convert some components to TS (#13137)
*Remove unnecessary @ts-ignores
2023-03-30 15:30:15 +03:00
Robert Pintilii
206a4afd76 ref(TS) Convert some components to TS (#13129) 2023-03-30 11:27:53 +03:00
Дамян Минков
570ae81a37 feat: Updates visitors component with new iq messages. (#13125)
* feat: Updates visitors component with new iq messages.

* squash: Fix comments.

* squash: Fix using multiple connect and disconnect.
2023-03-29 15:26:39 -05:00
Jaya Allamsetty
5d0d23ac63 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1607.0.0+28d5f6b2...v1608.0.0+87bce92f
2023-03-29 16:04:56 -04:00
bgrozev
d61295a8a1 chore(deps) lib-jitsi-meet@latest (#13130)
https://github.com/jitsi/lib-jitsi-meet/compare/v1606.0.0+05edc9b5...v1607.0.0+28d5f6b2
2023-03-29 13:49:57 -05:00
Robert Pintilii
a52f9313a6 ref(TS Convert all Abstract classes to TS (#13127) 2023-03-29 12:54:56 +03:00
Robert Pintilii
29945f4809 ref(TS) Improve TS (#13120)
Remove unnecessary @ts-ignore
Fix some TS errors
2023-03-29 10:16:54 +03:00
Robert Pintilii
b942ce9378 ref(TS) Convert some Abstract classes to TS (#13117) 2023-03-29 10:04:23 +03:00
Robert Pintilii
1bf0bd6bca fix(design-system) Remove tokens that are not part of DS (#13122)
Replace tokens with ones that are part of the Design System and are either the same or very similar
2023-03-29 09:20:18 +03:00
damencho
5706d077e2 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1605.0.0+b6a5a8d9...v1606.0.0+05edc9b5
2023-03-28 18:57:02 -04:00
damencho
f1e5903bd1 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1604.0.0+bf79fef6...v1605.0.0+b6a5a8d9
2023-03-28 10:00:21 -05:00
Дамян Минков
397b94da79 feat: Visitors chat (#13112)
* feat(visitors): Visitors chat.

Only live chat is supported, no room history is loaded on visitor nodes.

* feat(visitors): Append display name to promotion requests.

* feat: Indicate visitor's chat messages.

* fix: Fixes preconfigure vnodes script.

* fix: Fixes few cases around routing messages.

Disables private messaging on visitor node and add anonymous name to those visitors without a pre-set name.

* fix: Fixes grouping visitor's messages and some error translations.

* squash: Fixes main.json.
2023-03-28 09:02:43 -05:00
Дамян Минков
649a4ffd46 feat(visitors): Updates mobile to handle redirected conf error. (#13110)
* feat(visitors): Updates mobile to handle redirected conf error.

* squash: Center the buttons when iAmVisitor.

* squash: Enables chat in visitor mode.

* feat: Prints the used lib-jitsi-meet.

* feat: Shows a notification when joining as a visitor.

* fix(notifications): display and fix styles for notifications in tile view

---------

Co-authored-by: Calin-Teodor <calin.chitu@8x8.com>
2023-03-28 08:08:56 -05:00
Calin-Teodor
ba57b1afff fix(filmstrip): hide screenshare indicator if not screen sharing 2023-03-28 13:26:55 +03:00
impocode
d68f1572a3 lang: Update Russian translations (#12979)
Co-authored-by: Дамян Минков <damencho@jitsi.org>
2023-03-27 22:34:36 -05:00
Jaya Allamsetty
8c15e940d8 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1603.0.0+51bda6ff...v1604.0.0+bf79fef6
2023-03-27 10:30:38 -04:00
Robert Pintilii
89c914272c ref: Convert some class components to function components (#13103)
Replace withStyles with makeStyles
2023-03-27 13:40:55 +03:00
Robert Pintilii
c879f5f04d ref(jQuery) Replace some jQuery with JS (#13116) 2023-03-27 13:12:32 +03:00
Robert Pintilii
c307a819f6 ref: Convert some class components to function components (#13107) 2023-03-27 11:54:44 +03:00
Saúl Ibarra Corretgé
123fa6681f fix(notifications) drop no longer used css file (#13100) 2023-03-27 11:37:40 +03:00
Robert Pintilii
46597bd6e7 ref(TS Convert some Abstract classes to TS (#13105) 2023-03-27 11:34:33 +03:00
Robert Pintilii
aae0ffc3b3 fix(share-audio) Fix dialog max-height (#13114) 2023-03-27 11:29:22 +03:00
Robert Pintilii
ce5f7ba317 fix(tooltip) Don't show on small screens (#13113) 2023-03-27 11:29:12 +03:00
Дамян Минков
1c04a41081 fix(visitors): Visitor updates - request to participate (#13106)
* fix(visitors): Updates docs and instructions.

* fix(visitors): Show counter only for main participants.

* fix(visitors): Skip showing the label even for 0 visitors.

It was showing 0 when visitor count down back to 0.

* feat(visitors): Small optimization for jid.split calls.

* fix: Fix skipping properties changed received before conference joined.

* fix(visitors): Propagates newly joined participants to visitor nodes.

* feat(visitors): When iAmVisitor is set, subtract visitor from participants count.

* feat(visitors): Visitors request to participate impl.

Adds option for auto promotion setting which is the only one available at the moment.

* squash: Fix comments.

* squash: Fix default case when vnode is missing.
2023-03-24 11:54:11 -05:00
Jaya Allamsetty
9e33839b31 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1600.0.0+6a7a9acf...v1603.0.0+51bda6ff
2023-03-24 11:00:52 -05:00
Calin-Teodor
ab809875f7 feat(conference): hide status bar on android devices 2023-03-23 16:33:00 +02:00
Robert Pintilii
ac8e088e50 ref(jQuery) Replace some jQuery with JS (#13102) 2023-03-23 13:29:24 +02:00
Robert Pintilii
e95b964b78 ref(TS) Convert some Abstract classes to TS (#13099) 2023-03-23 13:24:57 +02:00
Saúl Ibarra Corretgé
34b2577b97 chore(cleanup) drop no longer needed AtlasKit supporting code 2023-03-23 12:00:14 +01:00
Robert Pintilii
d7cad9d560 feat(prejoin) Update design & refactor (#13089)
Update Dial Out Dialog design
Update Country Picker design
Convert some files to TS
Move styles from SCSS to JSS
Replace atlaskit InlineDialog with Popover in CountryPIcker and Prejoin components
2023-03-23 11:45:29 +02:00
Kazuma Arimura
c6213eb160 fix(lang) update Japanese translation 2023-03-23 10:19:05 +01:00
Vadim S
b5f16c52c9 fix(lang) update Russian translation 2023-03-23 10:15:25 +01:00
Robert Pintilii
78a4f9b792 ref(avatar) Convert to TS (#13092)
Fix imports
Remove unnecessary @ts-ignore
2023-03-23 10:26:19 +02:00
Saúl Ibarra Corretgé
0792d89c46 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1598.0.0+4733465e...v1600.0.0+6a7a9acf
2023-03-22 13:29:21 +01:00
Robert Pintilii
09426643cf fix(welcome-page) Fix function name (#13097) 2023-03-22 12:24:53 +02:00
Calinteodor
1d119cbd36 feat(filmstrip): updated styles and moved raised hand count to the right (#13094) 2023-03-21 21:30:30 +02:00
Robert Pintilii
3dd9a303c3 ref(abstract-button) Convert to TS (#13093) 2023-03-21 19:34:02 +02:00
Robert Pintilii
31073fb5df fix(polls) Fix style issue (#13090) 2023-03-21 17:25:47 +02:00
Robert Pintilii
bc1827fb4a ref(TS) Convert some Abstract classes to TS (#13095) 2023-03-21 17:14:17 +02:00
Robert Pintilii
aeeca7c343 fix(device-picker) Close the picker when the other one opens (#13091) 2023-03-21 14:46:53 +02:00
Calin-Teodor
a7fa33286d feat(prejoin): decreased height for bottom container 2023-03-21 11:12:44 +02:00
Robert Pintilii
754f658489 ref(redux) Remove connect wrapper (#13083) 2023-03-21 09:47:52 +02:00
Jaya Allamsetty
679711534a chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1595.0.0+5155e550...v1598.0.0+4733465e
2023-03-20 16:56:09 -04:00
nomadbyte
238bd46480 fix(lang) update Ukrainian translation 2023-03-19 07:43:59 +01:00
Hristo Terezov
e4d4bec175 fix(remote-control):Pin the control participant SS 2023-03-17 14:12:40 -05:00
damencho
2b3fbaa360 fix: Returns source names only for existing participants.
There are cases when participant is left and still we receive a track added. In this occasions for screensharing sources a virtual participant is created for non-existing participant.
2023-03-17 13:54:22 -05:00
Tipuch
8949753874 fix(external_api) fix linking to the Jitsi mobile application 2023-03-17 19:23:00 +01:00
Hristo Terezov
16115a3a16 fix(large-video):Dont elect participants that left 2023-03-17 09:59:27 -05:00
Calin-Teodor
7c17d80ae8 feat(filmstrip): thumnail indicators ui updates 2023-03-17 14:39:22 +02:00
Robert Pintilii
511548060a fix(speaker-stats) Change icon (#13074) 2023-03-17 14:20:14 +02:00
Robert Pintilii
00780929e5 feat(tooltip) Create and move to our component (#13061)
Create Tooltip component
Fix Popover positioning calculations
Add margins to popover
Remove @atlaskit/tooltip
Update all components to use the new Tooltip component

Added tooltip actions and reducers for the following functionality: when a user hovers over an element is sees the tooltip for that element and then hovers another element that has a tooltip, instead of using the delay and animations we just unmount the current tooltip and mount the next one immediately
2023-03-17 12:23:51 +02:00
Robert Pintilii
a89f762a66 fix(conference-timer) Show correct time (#13070)
Show meeting time after returning from breakout room
2023-03-17 12:23:20 +02:00
Saúl Ibarra Corretgé
82a03c36c6 deps(rn) react-native@0.68.6
Final minor update to 0.68: https://github.com/facebook/react-native/releases/tag/v0.68.6
2023-03-17 09:44:28 +01:00
Robert Pintilii
7968578a25 fix(notification) Fix overflow issue (#13068)
When displaying a long URL break it into multiple lines
2023-03-17 10:25:52 +02:00
Duduman Bogdan Vlad
62b6411bb6 feat(webhid) - add webhid feature flag (#13071) 2023-03-17 10:24:29 +02:00
Robert Pintilii
b3bce9e5ae fix(audio-picker) Fix max height (#13069) 2023-03-17 09:54:27 +02:00
Christoph Settgast
ed37bedee2 lang: update German translation (#13065) 2023-03-16 22:22:18 +01:00
Jaya Allamsetty
2182a1e452 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1592.0.0+6afb0a56...v1595.0.0+5155e550
2023-03-16 16:40:45 -04:00
Calinteodor
4eea924c02 feat(mobile/navigation): fixed close button size (#13063) 2023-03-16 17:53:31 +02:00
Saúl Ibarra Corretgé
de3b6d2a9f feat(noise-suppression) add support for Krisp 2023-03-16 14:50:47 +01:00
Horatiu Muresan
2a090d8034 fix(welcome-header) Fix and improve welcome page header (#13056)
- small refactor
2023-03-16 12:50:59 +02:00
Calinteodor
238def34cf feat(conference): dismiss calendar notification (#13050)
* feat(conference): created action that dismisses calendar notification
2023-03-16 12:17:57 +02:00
Robert Pintilii
43c4ec0808 feat(avatar) Update style (#13019) 2023-03-16 10:20:16 +02:00
Duduman Bogdan Vlad
7910554625 feat(thumbnail,filmstrip) - remove tint from owner screenshare participants (#12944) 2023-03-16 08:59:43 +02:00
Jaya Allamsetty
56d2af197e fix(thumbnail) Fix broken video for thumbnail.
Fixes a regression introduced by 466a36dc93
2023-03-15 17:36:52 -04:00
Jaya Allamsetty
466a36dc93 fix(test) Switch to using 'streamingStatus' on the track for checking… (#13055)
* fix(test) Switch to using 'streamingStatus' on the track for checking if video is received

* fix lint error
2023-03-15 11:24:36 -04:00
Calinteodor
1fc5d6e97e feat(notifications): NotificationsContainer native updates (#13047)
feat(notifications): NotificationsContainer native updates
2023-03-14 19:53:55 +02:00
robertpin
7156df5b99 feat(notifications) Use our own component
Use our component instead of atlaskit
Implement redesign
Add unmount animation
Change mount animation from external lib to CSS
Remove @atlaskit/flag
Remove react-transition-group
Add unmount animation on native
Remove AbstractNotification
2023-03-14 15:18:11 +02:00
Calin-Teodor
2c8c98aaf3 feat(filmstrip): fix indicators size 2023-03-14 14:07:59 +02:00
Horatiu Muresan
afcedd0f3c fix(prejoin) Fix prejoin toolbar buttons 2023-03-14 13:02:22 +02:00
Paweł Domas
f253939f28 fix(useVideoStream): a crash after GUM failure (#13040)
Fixes a crash which happens after GUM fails without any
track previosuly created.

Steps to reproduce:

1. Join a meeting without camera.
2. Disable camera access permissions in the browser.
3. Try to use the camera button.
2023-03-13 21:09:46 -05:00
José Luís Andrade
98cba457f2 fix(lang) update Portuguese translation 2023-03-13 20:18:47 +01:00
Calinteodor
f7e7750cfb fix(base/ui): Buttons fix for accessibility large text (#13036)
* feat(base/ui): native ui updates
2023-03-13 16:40:14 +02:00
Calin-Teodor
d9749f3da6 feat(recording/LiveStream): native ui updates 2023-03-13 14:20:57 +02:00
Emmanuel Pelletier
45b7f53294 Improve usability of toggled button labels (#12426)
* feat(a11y) buttons can now have toggled-aware a11y labels
2023-03-13 10:19:28 +02:00
Jaya Allamsetty
27765b47d7 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1590.0.0+0b9ab37c...v1592.0.0+6afb0a56
2023-03-10 14:56:27 -06:00
Jaya Allamsetty
185e9d4f58 fix(AudioTrack): Reattach the track to the audio element on error.
Audio playback for a remote participant doesn't happen when the browser fires an error event on the audio element that the audio track is attached to.
'[modules/RTC/JitsiRemoteTrack.js] <._containerEventHandler>:  error handler was called for a container with attached RemoteTrack'
Log an error when that happens and try to re-attach the audio track and execute play on it as a potential fix.
2023-03-10 14:19:55 -06:00
damencho
39991da2cf fix: Updates gapi to use new google identity service.
fix: Updates gapi to use new google identity service.
2023-03-10 17:51:22 +02:00
Damien Fetis
f968d5e70a fix(lang) update french translation 2023-03-10 16:49:09 +01:00
Saúl Ibarra Corretgé
f846eb9234 deps(rn) update react-native-webrtc to 106.0.7
Fixes a bug setting encoding parameters so layer bitrate can be
adjusted.
2023-03-10 16:05:19 +02:00
Robert Pintilii
126b0d385f feat(ui-components) Create Spinner component (#13026)
Replace atlaskit Spinner with the new component
Remove @atlaskit/spinner
2023-03-10 15:35:55 +02:00
Robert Pintilii
306c979adb ref(notifications) Update icons (#13025)
Replace @atlaskit icons with our own
Convert some files to TS
Remove @atlaskit/icons
2023-03-10 14:11:31 +02:00
Calinteodor
99d6012743 feat(conference): calendar updates (#13020)
* fix(conference): resolved undefined error for calendar events and updated SecondaryAction button
2023-03-10 10:45:13 +02:00
Robert Pintilii
a94ba85a98 ref(settings-dialog) Refactor styles (#13017)
Remove unused styles
Move some styles to their tab
Convert CalendarTab to TS
Fix mobile styles
2023-03-10 10:16:43 +02:00
Joan Montané
f618194587 lang: Update main-sc.json (#12598) 2023-03-09 21:06:30 -06:00
Joan Montané
e9c4774695 lang: Update main-ca.json (#12597) 2023-03-09 19:59:57 -06:00
Antti Lämsä
6421df7fa0 lang: Update Finnish translations (#12678)
* Update Finnish translations

* Add few more finnish translations

---------

Co-authored-by: antti <antti.lamsa@solidabis.com>
2023-03-09 17:32:53 -06:00
damencho
4ffc2bca5f fix: Fixes video unmuting in case of av moderation. 2023-03-09 17:02:30 -06:00
Besnik Bleta
79a252652c lang: Update for sq locale translation (#12665)
* Adding sq translation

* Adding sq to languages.json

* Updating sq translation

* Fixing missing commas and updating string changes

* Fixing unclosed quotes

* Updating sq translation

* Updating sq translation

* Typo fixing; removing and adding commas to make the .json file valid

* Another comma missing fix

* Sorting entries aphabetically

* More sorting…

* More entry sorting

* Adding a missing space

* Adding spaces

* Get rid of an extra period

* Update for sq locale

* Update main-sq.json

* Update main-sq.json

* Update main-sq.json

* Update main-sq.json

* Update main-sq.json
2023-03-09 17:02:19 -06:00
Jaya Allamsetty
9eddb71e92 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1589.0.0+d43c349d...v1590.0.0+0b9ab37c
2023-03-09 14:16:03 -05:00
Calin-Teodor
ac65b23ccf fix(overlay): fixed undefined error on web 2023-03-09 09:24:49 -06:00
Calinteodor
1f6483daae feat(calendar-sync): refactored ConferenceNotification (#12945)
* feat(calendar-sync): converted ConferenceNotification to a notification
2023-03-09 15:59:31 +02:00
Robert Pintilii
c8ecd47ff5 fix(virtual-background) Style fix (#13016) 2023-03-09 14:46:09 +02:00
Saúl Ibarra Corretgé
50885e258c fix(settings) use new moderator icon 2023-03-09 13:20:44 +01:00
Robert Pintilii
164d305528 fix(native) Move function to web file (#13014) 2023-03-09 14:10:42 +02:00
Saúl Ibarra Corretgé
183de81a57 feat(ci) build mobile bundles as part of the CI
This will help catch bugs such as bogus imports that would trigger a
mobile bundle failure.
2023-03-09 12:20:50 +01:00
Boris Grozev
e12999d44f chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1588.0.0+04e906cc...v1589.0.0+d43c349d
2023-03-08 11:16:05 -05:00
Robert Pintilii
8982f17ce1 feat(virtual-background) Move dialog to SettingsDialog tab (#13005)
Implement redesign
2023-03-08 13:15:07 +02:00
Robert Pintilii
c8f1690057 ref(feedback-dialog) Update design (#12926)
Convert file to TS
Move styles from SCSS to JSS
2023-03-08 12:46:10 +02:00
Robert Pintilii
aa57309057 ref(more-tab) Update design on SettingsDialog More tab (#13006) 2023-03-08 10:40:40 +02:00
damencho
fb81619fc5 fix: Fixes muc rate limit to fire occupant-pre-join.
If any handler returns a value (that isn't nil) then processing will halt and that value will be returned.
2023-03-07 18:54:06 -06:00
Hristo Terezov
5a5656020b fix(e2ee): enabled/supported flags calculation. 2023-03-07 15:36:47 -06:00
Hristo Terezov
0ff44a2f22 fix(participants-reducer):old particpant selection 2023-03-07 15:36:47 -06:00
Hristo Terezov
4d04ea325e fix(everyoneIsModerator): Optimize. 2023-03-07 15:36:47 -06:00
Hristo Terezov
42ce6dcc58 fix(e2ee): Optimize. 2023-03-07 15:36:47 -06:00
Hristo Terezov
b033d0268a fix(speaker-stats): dispatch action only on change 2023-03-07 15:36:47 -06:00
Hristo Terezov
4aea40d34f fix: Batch actions. 2023-03-07 15:36:47 -06:00
Hristo Terezov
e5a170fb28 fix(Filmstrip): Use id for localScreenShare. 2023-03-07 15:36:47 -06:00
Hristo Terezov
d1cf5578fc fix(avatar): Remove unnecessary code. 2023-03-07 15:36:47 -06:00
Hristo Terezov
4b29af6b5f fix(lastN): Update only if neccessary. 2023-03-07 15:36:47 -06:00
bgrozev
f3481576ff doc: Document new bridgeChannel options. (#13010) 2023-03-07 14:21:41 -06:00
bgrozev
455a91a5c6 chore(deps) lib-jitsi-meet@latest (#13009)
https://github.com/jitsi/lib-jitsi-meet/compare/v1586.0.0+df2c3096...v1588.0.0+04e906cc
2023-03-07 13:44:42 -06:00
Gabriel Borlea
297ab194a8 fix(dialog-portal): set z-index to high value (#13004) 2023-03-07 16:39:27 +02:00
Christoph Settgast
077a88a803 lang: update German translation (#13000) 2023-03-07 08:17:41 +01:00
Gabriel Borlea
02c232440e fix(av-moderation): buttons for participants pane (#12977)
* fix(av): buttons for participants pane

* fix tests

* fix lint

* rename cliked from participant pane
2023-03-06 11:05:26 -06:00
Emmanuel Pelletier
f727b9295f Use tabs ARIA design pattern when using tabbed UI (#12994)
feat(a11y): use tabs ARIA design pattern when using tabbed UI
2023-03-06 17:13:29 +02:00
Robert Pintilii
0d0bec3aad feat(device-selection) Separate Devices into Audio and Video in Settings (#12987)
Create separate tabs for Audio and Video in the Settings Dialog
Move some settings from the More tab to Audio/ Video tab
Implement redesign
Convert some files to TS
Move some styles from SCSS to JSS
Enable device selection on welcome page
2023-03-06 15:14:52 +02:00
Emmanuel Pelletier
cfb8589bef Use focus-visible for some focus styles to fix a11y issues (#12968)
feat(a11y): fix-focus-styles
2023-03-06 12:39:46 +02:00
japm48
65730e256e fix(lang) update Spanish translation 2023-03-04 15:41:39 +01:00
Robert Pintilii
7b8b911fee feat(shortcuts) Update dialog (#12993)
Create Shortcuts tab in Settings Dialog
Move keyboard shortcut option from More to this tab
Move shortcuts info from KeyboardShortcuts dialog to this tab
Remove KeyboardShortcuts dialog
2023-03-03 13:48:17 +02:00
Robert Pintilii
036286a1d6 feat(notification-settings) Update Sounds tab in Settings Dialog (#12990)
Rename from Sounds to Notifications
Move Notifications settings from More tab to this tab
2023-03-03 12:53:39 +02:00
Robert Pintilii
d550254f31 ref(moderator-settings) Update Moderator tab in Settings Dialog (#12991)
Update design
2023-03-03 11:48:00 +02:00
Robert Pintilii
b1a71d55d7 feat(profile-tab) Update Profile tab in Settings Dialog (#12992)
Implement redesign
Move some options from More to this tab
2023-03-03 10:42:59 +02:00
George Politis
17ed45799c feat: Sends the statisticsDisplayName to rtcstats. 2023-03-02 19:34:25 +01:00
Jaya Allamsetty
e5681382b0 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1585.0.0+362d1b2c...v1586.0.0+df2c3096
2023-03-01 20:58:55 -05:00
Robert Pintilii
c27cb25afe chore(deps) Upgrade eslint (#12981) 2023-03-01 13:30:43 +02:00
Avram Tudor
baf5aa14e8 feat(devices) scroll overflow devices texts on hover (#12974) 2023-03-01 09:38:26 +02:00
Horatiu Muresan
29b6ce7721 fix(numbers-list) Re-add sip svg 2023-02-28 11:53:26 -06:00
Mihaela Dumitru
4f95c45e50 fix(ui) change streaming icon background + add tooltip (#12973) 2023-02-28 16:52:33 +02:00
Emmanuel Pelletier
72dd609247 feat(a11y) add headings across the app for easier screen reader nav (#12427)
feat(a11y): added headings across the app for easier screen reader nav
2023-02-28 16:52:06 +02:00
Horatiu Muresan
fed74afffe fix(sound-settings) Disable checkbox for disabled sounds (#12976) 2023-02-28 16:47:00 +02:00
Mihaela Dumitru
204f34cccb fix(pinning) Fix whiteboard pinning behavior when stage filmstrip is enabled (#12966) 2023-02-28 14:44:37 +02:00
Emmanuel Pelletier
c81777a475 Make (most) UI elements reachable via keyboard (#12657)
feat(a11y): make (most) UI elements reachable via keyboard
2023-02-28 12:21:15 +02:00
Horatiu Muresan
778bca3031 fix(always-on-top) Show participant`s avatar (#12967) 2023-02-27 16:20:40 +02:00
Avram Tudor
336fa304ce feat(notifications) trigger iframe api event when a notification occurs (#12952)
* feat(notifications) trigger iframe api event when a notification occurs

* remove useless comment

* fix typo
2023-02-27 15:31:54 +02:00
damencho
f14b69166c fix: Fixes visitors count when the data is missing. 2023-02-24 11:44:31 -06:00
Calin-Teodor
e405595a11 feat(notifications): moved notifications to the bottom of the screen 2023-02-24 17:22:55 +02:00
zobadaniel
cabe48d66a lang: Add lower sorbian translation (#12947)
* add lower sorbian translation

* adjustments after using update-translation.js

* adjustments after running lint

* add translation into language list
2023-02-24 09:04:06 -06:00
Duduman Bogdan Vlad
8d7f46024b feat(webhid) - add integration webhid telephony device (#12904) 2023-02-24 16:37:30 +02:00
damencho
d7f6c2bbf0 feat: Introduces iAmVisitor mode. 2023-02-24 07:51:47 -06:00
damencho
3c69645169 feat(mobile): Adds visitors count. 2023-02-24 07:51:47 -06:00
damencho
abe2fa4dd4 feat: Adds visitors count in conference info. 2023-02-24 07:51:47 -06:00
damencho
863fd12488 feat: Hide self-view and buttons in visitors mode. 2023-02-24 07:51:47 -06:00
damencho
50c4748d40 feat: Adds visitors count in participants pane. 2023-02-24 07:51:47 -06:00
damencho
f83840a3bc feat: Adds initial impl of visitors feature. 2023-02-24 07:51:47 -06:00
damencho
1466d7d149 fix: Always normalizes bosh config. 2023-02-24 07:51:47 -06:00
Calinteodor
d0fe034db5 feat(base/dialog): visibility control for PageReloadDialog (#12961)
* feat(base/dialog): visibility control for  PageReloadDialog
2023-02-24 13:51:27 +02:00
Дамян Минков
8225f5e363 feat: Drops external connect optimization. (#12958)
* feat: Drops external connect optimization.

A bosh only optimization which is no longer used and does not bring any significant value when measured.

* squash: Updates ljm.
2023-02-24 08:59:00 +01:00
Saúl Ibarra Corretgé
c641835d0f fix(virtual-background) don't disable uploads
Even when images are provided via dyamic branding.

Fixes: https://github.com/jitsi/jitsi-meet/issues/12941
2023-02-23 16:41:27 +01:00
Horatiu Muresan
35ee92869f feat(deeplinking) Refactor deeplinking (#12950)
- redesign deeplinking mobile page, desktop page and dial in number page
- now dial in number page is an entry point in app.bundle.
2023-02-23 17:01:55 +02:00
Stefan Plücken
9b7a5ffdd1 fix(reservations): fixes errors not being displayed when reservation system returns error. removed translations applied twice. (#11144) 2023-02-23 08:52:54 -06:00
Calin-Teodor
581c2e621c feat(notifications): fix width for notifications on all devices 2023-02-23 16:39:19 +02:00
Mihaela Dumitru
f3117f3037 fix(video-layout) get pinned participant from payload to determine pinning behavior (#12951) 2023-02-23 14:41:29 +02:00
Saúl Ibarra Corretgé
877ef58dfb deps(rn) react-native-webrtc@106.0.6
Fixes to SDP negotiation and transceiver lifetime.
2023-02-23 13:08:49 +01:00
Calinteodor
19e61747b8 feat(notifications): small ui updates (#12943)
* feat(notifications): small ui updates
2023-02-23 11:49:26 +02:00
Calinteodor
b4bf363237 feat(lobby): deleted knocking participant api event (#12940)
feat(lobby): make sure that that the knocking participant event is always fired
2023-02-21 13:55:03 +02:00
Calinteodor
f8af9c4fae feat(notifications): native UI updates (#12798)
* feat(notifications): native notifications UI updates
2023-02-21 11:26:04 +02:00
Nitish Kumar
9fa426d97f fix(ParticipantsCounter)fixup badge style 2023-02-21 10:17:22 +01:00
Yash-Ambekar
e3c95e376a fix(toolbar) Removed width from toolbar (#12935) 2023-02-20 20:29:57 +02:00
Calinteodor
00ed794c50 feat(mobile/navigation): reload now navigates to conference (#12919)
* feat(mobile/navigation): navigate back to same room when reload now is initiated
2023-02-17 17:40:01 +02:00
Saúl Ibarra Corretgé
b52d5629e2 chore(deps) remove unused dependencies 2023-02-17 15:03:55 +01:00
Horatiu Muresan
9d8e646d4e fix(lobby) Fix lobby inputs (#12930) 2023-02-17 15:34:45 +02:00
Horatiu Muresan
850c0b97e4 chore(recording-notif) Show sticky notif for copy recording link (#12928) 2023-02-17 14:24:39 +02:00
Robert Pintilii
87035d0812 ref(deps) Remove atlaskit/tabs (#12927) 2023-02-17 13:36:00 +02:00
Robert Pintilii
ef0168c9ff ref(dialog) Remove atlaskit dialog (#12925) 2023-02-17 12:53:14 +02:00
Robert Pintilii
df1a5a25d4 ref(desktop-picker) Replace atlaskit tabs with our component (#12910)
Fixes wrong focus on desktop picker dialog
2023-02-17 11:34:47 +02:00
Robert Pintilii
c424884201 ref(settings-dialog) Update to use new Dialog component (#12912)
* ref(settings-dialog) Update to use new Dialog component

Created new DialogWithTabs component
Refactored Dialog into Dialog and BaseDialog
Updated dialog functionality on mobile
2023-02-17 11:34:30 +02:00
Дамян Минков
0a464a5223 feat: Avoids joining participants before jicofo is in the room. (#12923)
* feat: Avoids joining participants before jicofo is in the room.

* squash: Move away from global hook to be able to use it per muc component.
2023-02-16 18:16:43 -06:00
Horatiu Muresan
8cd62bc132 fix(external-api) Unpin all participants when participant id is null (#12921) 2023-02-16 18:14:10 +02:00
Jaya Allamsetty
123a74b38b fix(video-quality) Add pinned participants to selectedSources.
When mulltiple videos are pinned to the stage filmstrip, the expectation is that the bridge will forward all the videos even if they are of lower quality. For this, the video sources need to be added to selectedSources instead of onStageSources.
2023-02-16 10:36:22 -05:00
Christoph Settgast
dbeca806bb lang: update German translation 2023-02-15 14:03:20 -06:00
Jaya Allamsetty
f790d3e3ed chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1582.0.0+829f5ac0...v1583.0.0+931ca368
2023-02-15 13:59:05 -05:00
Horatiu Muresan
a12f7fc4d2 fix(follow-me-pinning) Fix pin/unpin when follow-me (#12911) 2023-02-15 19:08:08 +02:00
Gabriel Borlea
456ce38a10 fix(context-menu): set height for context menu when it does not have enough space at top 2023-02-15 19:06:57 +02:00
Gabriel Borlea
72ef1668f2 fix(video-background): set dialog add button margin to right size 2023-02-15 19:06:57 +02:00
Jaya Allamsetty
fce8f52574 chore(deps) lib-jitsi-meet@latest
https://github.com/jitsi/lib-jitsi-meet/compare/v1578.0.0+5855ca72...v1582.0.0+829f5ac0
2023-02-15 09:15:01 -05:00
Titus Moldovan
8fcfd7a308 fix(rn) makes the preferedCode vp8 and enabled p2p 2023-02-14 16:40:38 +01:00
Saúl Ibarra Corretgé
04a41395c8 fix(notifications) remove dead code 2023-02-14 11:51:47 +01:00
Robert Pintilii
18e8201167 fix(participants-counter) Style fix (#12907) 2023-02-14 12:40:29 +02:00
Robert Pintilii
27b8794d8c feat(video-picker) Redesign (#12902)
Convert some files to TS
Implement redesign
Add Virtual background and Flip video to picker menu
2023-02-14 12:15:37 +02:00
Calinteodor
3cb0df579c feat(overlay): native page reload dialog (#12667)
feat(overlay): native feature removal + replaced PageReloadOverlay with PageReloadDialog
2023-02-14 11:50:46 +02:00
1338 changed files with 23991 additions and 21665 deletions

View File

@@ -9,5 +9,8 @@ indent_style = space
max_line_length = 80
trim_trailing_whitespace = true
[*.md]
trim_trailing_whitespace = false
[Makefile]
indent_style = tab

View File

@@ -42,3 +42,25 @@ jobs:
cache: 'npm'
- run: npm install
- run: make
android-build:
name: Build mobile bundle (Android)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- run: npm install
- run: npx react-native bundle --entry-file react/index.native.js --platform android --bundle-output /tmp/android.bundle --reset-cache
ios-build:
name: Build mobile bundle (iOS)
runs-on: macOS-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
cache: 'npm'
- run: npm install
- run: npx react-native bundle --entry-file react/index.native.js --platform ios --bundle-output /tmp/ios.bundle --reset-cache

View File

@@ -44,12 +44,8 @@ deploy-appbundle:
cp \
$(BUILD_DIR)/app.bundle.min.js \
$(BUILD_DIR)/app.bundle.min.js.map \
$(BUILD_DIR)/do_external_connect.min.js \
$(BUILD_DIR)/do_external_connect.min.js.map \
$(BUILD_DIR)/external_api.min.js \
$(BUILD_DIR)/external_api.min.js.map \
$(BUILD_DIR)/dial_in_info_bundle.min.js \
$(BUILD_DIR)/dial_in_info_bundle.min.js.map \
$(BUILD_DIR)/alwaysontop.min.js \
$(BUILD_DIR)/alwaysontop.min.js.map \
$(OUTPUT_DIR)/analytics-ga.js \
@@ -70,7 +66,6 @@ deploy-lib-jitsi-meet:
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.js \
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.min.map \
$(LIBJITSIMEET_DIR)/dist/umd/lib-jitsi-meet.e2ee-worker.js \
$(LIBJITSIMEET_DIR)/connection_optimization/external_connect.js \
$(LIBJITSIMEET_DIR)/modules/browser/capabilities.json \
$(DEPLOY_DIR)
@@ -131,7 +126,7 @@ dev: deploy-init deploy-css deploy-rnnoise-binary deploy-tflite deploy-meet-mode
source-package:
mkdir -p source_package/jitsi-meet/css && \
cp -r *.js *.html resources/*.txt connection_optimization favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
cp -r *.js *.html resources/*.txt favicon.ico fonts images libs static sounds LICENSE lang source_package/jitsi-meet && \
cp css/all.css source_package/jitsi-meet/css && \
(cd source_package ; tar cjf ../jitsi-meet.tar.bz2 jitsi-meet) && \
rm -rf source_package

11
app.js
View File

@@ -33,17 +33,6 @@ window.APP = {
API,
conference,
// Used by do_external_connect.js if we receive the attach data after
// connect was already executed. status property can be 'initialized',
// 'ready', or 'connecting'. We are interested in 'ready' status only which
// means that connect was executed but we have to wait for the attach data.
// In status 'ready' handler property will be set to a function that will
// finish the connect process when the attach data or error is received.
connect: {
handler: null,
status: 'initialized'
},
// Used for automated performance tests.
connectionTimes: {
'index.loaded': window.indexLoadedTime

View File

@@ -17,9 +17,9 @@ import {
createDeviceChangedEvent,
createScreenSharingEvent,
createStartSilentEvent,
createTrackMutedEvent,
sendAnalytics
} from './react/features/analytics';
createTrackMutedEvent
} from './react/features/analytics/AnalyticsEvents';
import { sendAnalytics } from './react/features/analytics/functions';
import {
maybeRedirectToWelcomePage,
redirectToStaticPage,
@@ -28,13 +28,8 @@ import {
import { showModeratedNotification } from './react/features/av-moderation/actions';
import { shouldShowModeratedNotification } from './react/features/av-moderation/functions';
import {
AVATAR_URL_COMMAND,
CONFERENCE_LEAVE_REASONS,
EMAIL_COMMAND,
_conferenceWillJoin,
authStatusChanged,
commonUserJoinedHandling,
commonUserLeftHandling,
conferenceFailed,
conferenceJoinInProgress,
conferenceJoined,
@@ -47,15 +42,26 @@ import {
dataChannelClosed,
dataChannelOpened,
e2eRttChanged,
generateVisitorConfig,
getConferenceOptions,
kickedOut,
lockStateChanged,
nonParticipantMessageReceived,
onStartMutedPolicyChanged,
p2pStatusChanged,
p2pStatusChanged
} from './react/features/base/conference/actions';
import {
AVATAR_URL_COMMAND,
CONFERENCE_LEAVE_REASONS,
EMAIL_COMMAND
} from './react/features/base/conference/constants';
import {
commonUserJoinedHandling,
commonUserLeftHandling,
getConferenceOptions,
getVisitorOptions,
restoreConferenceOptions,
sendLocalParticipant
} from './react/features/base/conference';
} from './react/features/base/conference/functions';
import { overwriteConfig } from './react/features/base/config/actions';
import { getReplaceParticipant } from './react/features/base/config/functions';
import {
checkAndNotifyForNewDevice,
@@ -81,22 +87,21 @@ import {
} from './react/features/base/lib-jitsi-meet';
import { isFatalJitsiConnectionError } from './react/features/base/lib-jitsi-meet/functions';
import {
MEDIA_TYPE,
getStartWithAudioMuted,
getStartWithVideoMuted,
isVideoMutedByUser,
setAudioAvailable,
setAudioMuted,
setAudioUnmutePermissions,
setVideoAvailable,
setVideoMuted,
setVideoUnmutePermissions
} from './react/features/base/media';
} from './react/features/base/media/actions';
import { MEDIA_TYPE } from './react/features/base/media/constants';
import {
getStartWithAudioMuted,
getStartWithVideoMuted,
isVideoMutedByUser
} from './react/features/base/media/functions';
import {
dominantSpeakerChanged,
getLocalParticipant,
getNormalizedDisplayName,
getVirtualScreenshareParticipantByOwnerId,
localParticipantAudioLevelChanged,
localParticipantRoleChanged,
participantKicked,
@@ -107,52 +112,56 @@ import {
participantUpdated,
screenshareParticipantDisplayNameChanged,
updateRemoteParticipantFeatures
} from './react/features/base/participants';
import { updateSettings } from './react/features/base/settings';
} from './react/features/base/participants/actions';
import {
getLocalParticipant,
getNormalizedDisplayName,
getVirtualScreenshareParticipantByOwnerId
} from './react/features/base/participants/functions';
import { updateSettings } from './react/features/base/settings/actions';
import {
addLocalTrack,
createLocalTracksF,
destroyLocalTracks,
replaceLocalTrack,
toggleScreensharing as toggleScreensharingA,
trackAdded,
trackRemoved
} from './react/features/base/tracks/actions';
import {
createLocalTracksF,
getLocalJitsiAudioTrack,
getLocalJitsiVideoTrack,
getLocalTracks,
getLocalVideoTrack,
isLocalTrackMuted,
isUserInteractionRequiredForUnmute,
replaceLocalTrack,
toggleScreensharing as toggleScreensharingA,
trackAdded,
trackRemoved
} from './react/features/base/tracks';
isUserInteractionRequiredForUnmute
} from './react/features/base/tracks/functions';
import { downloadJSON } from './react/features/base/util/downloadJSON';
import { showDesktopPicker } from './react/features/desktop-picker';
import { appendSuffix } from './react/features/display-name';
import {
maybeOpenFeedbackDialog,
submitFeedback
} from './react/features/feedback';
import { showDesktopPicker } from './react/features/desktop-picker/actions';
import { appendSuffix } from './react/features/display-name/functions';
import { maybeOpenFeedbackDialog, submitFeedback } from './react/features/feedback/actions';
import { maybeSetLobbyChatMessageListener } from './react/features/lobby/actions.any';
import { setNoiseSuppressionEnabled } from './react/features/noise-suppression/actions';
import { hideNotification, showNotification, showWarningNotification } from './react/features/notifications/actions';
import {
DATA_CHANNEL_CLOSED_NOTIFICATION_ID,
NOTIFICATION_TIMEOUT_TYPE,
hideNotification,
isModerationNotificationDisplayed,
showNotification,
showWarningNotification
} from './react/features/notifications';
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay';
import { suspendDetected } from './react/features/power-monitor';
NOTIFICATION_TIMEOUT_TYPE
} from './react/features/notifications/constants';
import { isModerationNotificationDisplayed } from './react/features/notifications/functions';
import { mediaPermissionPromptVisibilityChanged } from './react/features/overlay/actions';
import { suspendDetected } from './react/features/power-monitor/actions';
import { initPrejoin, makePrecallTest, setJoiningInProgress } from './react/features/prejoin/actions';
import { isPrejoinPageVisible } from './react/features/prejoin/functions';
import { disableReceiver, stopReceiver } from './react/features/remote-control';
import { isScreenAudioShared, setScreenAudioShareState } from './react/features/screen-share/';
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture';
import { disableReceiver, stopReceiver } from './react/features/remote-control/actions';
import { setScreenAudioShareState } from './react/features/screen-share/actions.web';
import { isScreenAudioShared } from './react/features/screen-share/functions';
import { toggleScreenshotCaptureSummary } from './react/features/screenshot-capture/actions';
import { AudioMixerEffect } from './react/features/stream-effects/audio-mixer/AudioMixerEffect';
import { createRnnoiseProcessor } from './react/features/stream-effects/rnnoise';
import { endpointMessageReceived } from './react/features/subtitles';
import { endpointMessageReceived } from './react/features/subtitles/actions.any';
import { handleToggleVideoMuted } from './react/features/toolbox/actions.any';
import { muteLocal } from './react/features/video-menu/actions.any';
import { setIAmVisitor } from './react/features/visitors/actions';
import UIEvents from './service/UI/UIEvents';
const logger = Logger.getLogger(__filename);
@@ -340,21 +349,30 @@ class ConferenceConnector {
}
case JitsiConferenceErrors.REDIRECTED: {
generateVisitorConfig(APP.store.getState(), params);
const newConfig = getVisitorOptions(APP.store.getState(), params);
connection.disconnect().then(() => {
connect(this._conference.roomName).then(con => {
const localTracks = getLocalTracks(APP.store.getState()['features/base/tracks']);
if (!newConfig) {
logger.warn('Not redirected missing params');
break;
}
const jitsiTracks = localTracks.map(t => t.jitsiTrack);
const [ vnode ] = params;
// visitors connect muted
jitsiTracks.forEach(t => t.mute());
APP.store.dispatch(overwriteConfig(newConfig))
.then(this._conference.leaveRoom())
.then(APP.store.dispatch(setIAmVisitor(Boolean(vnode))))
// TODO disable option to unmute audio or video
this._conference.startConference(con, jitsiTracks);
// we do not clear local tracks on error, so we need to manually clear them
.then(APP.store.dispatch(destroyLocalTracks()))
.then(() => {
// Reset VideoLayout. It's destroyed in features/video-layout/middleware.web.js so re-initialize it.
VideoLayout.initLargeVideo();
VideoLayout.resizeVideoArea();
connect(this._conference.roomName).then(con => {
this._conference.startConference(con, []);
});
});
});
break;
}
@@ -389,10 +407,28 @@ class ConferenceConnector {
room.leave(CONFERENCE_LEAVE_REASONS.UNRECOVERABLE_ERROR).then(() => connection.disconnect());
break;
case JitsiConferenceErrors.CONFERENCE_MAX_USERS:
case JitsiConferenceErrors.CONFERENCE_MAX_USERS: {
APP.UI.notifyMaxUsersLimitReached();
break;
// in case of max users(it can be from a visitor node), let's restore
// oldConfig if any as we will be back to the main prosody
const newConfig = restoreConferenceOptions(APP.store.getState());
if (newConfig) {
APP.store.dispatch(overwriteConfig(newConfig))
.then(this._conference.leaveRoom())
.then(() => {
_connectionPromise = connect(this._conference.roomName);
return _connectionPromise;
})
.then(con => {
APP.connection = connection = con;
});
}
break;
}
case JitsiConferenceErrors.INCOMPATIBLE_SERVER_VERSIONS:
APP.store.dispatch(reloadWithStoredParams());
break;
@@ -1034,13 +1070,20 @@ export default {
return;
}
const state = APP.store.getState();
if (!mute
&& isUserInteractionRequiredForUnmute(APP.store.getState())) {
&& isUserInteractionRequiredForUnmute(state)) {
logger.error('Unmuting video requires user interaction');
return;
}
// check for A/V Moderation when trying to unmute and return early
if (!mute && shouldShowModeratedNotification(MEDIA_TYPE.VIDEO, state)) {
return;
}
// If not ready to modify track's state yet adjust the base/media
if (!this._localTracksInitialized) {
// This will only modify base/media.video.muted which is then synced
@@ -1054,7 +1097,7 @@ export default {
return;
}
const localVideo = getLocalJitsiVideoTrack(APP.store.getState());
const localVideo = getLocalJitsiVideoTrack(state);
if (!localVideo && !mute && !this.isCreatingLocalTrack) {
const maybeShowErrorDialog = error => {
@@ -1445,7 +1488,7 @@ export default {
logger.debug(`useVideoStream: Replacing ${oldTrack} with ${newTrack}`);
if (oldTrack === newTrack) {
if (oldTrack === newTrack || (!oldTrack && !newTrack)) {
resolve();
onFinish();

View File

@@ -46,9 +46,9 @@ var config = {
},
// BOSH URL. FIXME: use XEP-0156 to discover it.
bosh: '//jitsi-meet.example.com/' + subdir + 'http-bind',
bosh: 'https://jitsi-meet.example.com/' + subdir + 'http-bind',
// Websocket URL
// Websocket URL (XMPP)
// websocket: 'wss://jitsi-meet.example.com/' + subdir + 'xmpp-websocket',
// The real JID of focus participant - can be overridden here
@@ -56,6 +56,19 @@ var config = {
// https://github.com/jitsi/jitsi-meet/issues/7376
// focusUserJid: 'focus@auth.jitsi-meet.example.com',
// Options related to the bridge (colibri) data channel
bridgeChannel: {
// If the backend advertises multiple colibri websockets, this options allows
// to filter some of them out based on the domain name. We use the first URL
// which does not match ignoreDomain, falling back to the first one that matches
// ignoreDomain. Has no effect if undefined.
// ignoreDomain: 'example.com',
// Prefer SCTP (WebRTC data channels over the media path) over a colibri websocket.
// If SCTP is available in the backend it will be used instead of a WS. Defaults to
// false (SCTP is used only if available and no WS are available).
// preferSctp: false
},
// Testing / experimental features.
//
@@ -126,9 +139,6 @@ var config = {
// Media
//
// Enable unified plan implementation support on Chromium based browsers.
// enableUnifiedOnChrome: false,
// Audio
// Disable measuring of audio levels.
@@ -184,6 +194,22 @@ var config = {
// enableOpusDtx: false,
// },
// Noise suppression configuration. By default rnnoise is used. Optionally Krisp
// can be used by enabling it below, but the Krisp JS SDK files must be supplied in your
// installation. Specifically, these files are needed:
// - https://meet.example.com/libs/krisp/krisp.mjs
// - https://meet.example.com/libs/krisp/models/model_8.kw
// - https://meet.example.com/libs/krisp/models/model_16.kw
// - https://meet.example.com/libs/krisp/models/model_32.kw
// NOTE: Krisp JS SDK v1.0.9 was tested.
// noiseSuppression: {
// krisp: {
// enabled: false,
// logProcessStats: false,
// debugLogs: false,
// },
// },
// Video
// Sets the preferred resolution (height) for local video. Defaults to 720.
@@ -244,12 +270,6 @@ var config = {
// Enable / disable simulcast support.
// disableSimulcast: false,
// Enable / disable layer suspension. If enabled, endpoints whose HD layers are not in use will be suspended
// (no longer sent) until they are requested again. This is enabled by default. This must be enabled for screen
// sharing to work as expected on Chrome. Disabling this might result in low resolution screenshare being sent
// by the client.
// enableLayerSuspension: false,
// Every participant after the Nth will start video muted.
// startVideoMuted: 10,
@@ -402,22 +422,6 @@ var config = {
// value will be used when the quality level is selected using "Manage Video Quality" slider.
// startLastN: 1,
// Provides a way to use different "last N" values based on the number of participants in the conference.
// The keys in an Object represent number of participants and the values are "last N" to be used when number of
// participants gets to or above the number.
//
// For the given example mapping, "last N" will be set to 20 as long as there are at least 5, but less than
// 29 participants in the call and it will be lowered to 15 when the 30th participant joins. The 'channelLastN'
// will be used as default until the first threshold is reached.
//
// lastNLimits: {
// 5: 20,
// 30: 15,
// 50: 10,
// 70: 5,
// 90: 2,
// },
// Specify the settings for video quality optimizations on the client.
// videoQuality: {
// // Provides a way to prevent a video codec from being negotiated on the JVB connection. The codec specified
@@ -561,6 +565,9 @@ var config = {
// Require users to always specify a display name.
// requireDisplayName: true,
// Enables webhid functionality for Audio.
// enableWebHIDFeature: false,
// DEPRECATED! Use 'welcomePage.disabled' instead.
// Whether to use a welcome page or not. In case it's false a random room
// will be joined when no room is specified.
@@ -917,9 +924,6 @@ var config = {
// connection.
enabled: true,
// Enable unified plan implementation support on Chromium for p2p connection.
// enableUnifiedOnChrome: false,
// Sets the ICE transport policy for the p2p connection. At the time
// of this writing the list of possible values are 'all' and 'relay',
// but that is subject to change in the future. The enum is defined in
@@ -1146,6 +1150,13 @@ var config = {
// }
// },
// // The terms, privacy and help centre URL's.
// legalUrls: {
// helpCentre: 'https://web-cdn.jitsi.net/faq/meet-faq.html',
// privacy: 'https://jitsi.org/meet/privacy',
// terms: 'https://jitsi.org/meet/terms'
// },
// A property to disable the right click context menu for localVideo
// the menu has option to flip the locally seen video for local presentations
// disableLocalVideoFlip: false,
@@ -1238,7 +1249,6 @@ var config = {
ui03: "violet",
ui04: "magenta",
ui05: "blueviolet",
field02Hover: 'red',
action01: 'green',
action01Hover: 'lightgreen',
disabled01: 'beige',
@@ -1365,7 +1375,6 @@ var config = {
dialOutRegionUrl
disableRemoteControl
displayJids
externalConnectUrl
e2eeLabels
firefox_fake_device
googleApiApplicationClientID
@@ -1389,7 +1398,6 @@ var config = {
/**
_peerConnStatusOutOfLastNTimeout
_peerConnStatusRtcMuteTimeout
abTesting
avgRtpStatsN
callStatsConfIDNamespace
callStatsCustomScriptUrl

View File

@@ -12,7 +12,7 @@ import {
constructOptions
} from './react/features/base/connection/actions.web';
import { openDialog } from './react/features/base/dialog/actions';
import { setJWT } from './react/features/base/jwt';
import { setJWT } from './react/features/base/jwt/actions';
import {
JitsiConnectionErrors,
JitsiConnectionEvents
@@ -32,54 +32,6 @@ const logger = Logger.getLogger(__filename);
*/
export const DISCO_JIBRI_FEATURE = 'http://jitsi.org/protocol/jibri';
/**
* Checks if we have data to use attach instead of connect. If we have the data
* executes attach otherwise check if we have to wait for the data. If we have
* to wait for the attach data we are setting handler to APP.connect.handler
* which is going to be called when the attach data is received otherwise
* executes connect.
*
* @param {string} [id] user id
* @param {string} [password] password
* @param {string} [roomName] the name of the conference.
*/
function checkForAttachParametersAndConnect(id, password, connection) {
if (window.XMPPAttachInfo) {
APP.connect.status = 'connecting';
// When connection optimization is not deployed or enabled the default
// value will be window.XMPPAttachInfo.status = "error"
// If the connection optimization is deployed and enabled and there is
// a failure the value will be window.XMPPAttachInfo.status = "error"
if (window.XMPPAttachInfo.status === 'error') {
connection.connect({
id,
password
});
return;
}
const attachOptions = window.XMPPAttachInfo.data;
if (attachOptions) {
connection.attach(attachOptions);
delete window.XMPPAttachInfo.data;
} else {
connection.connect({
id,
password
});
}
} else {
APP.connect.status = 'ready';
APP.connect.handler
= checkForAttachParametersAndConnect.bind(
null,
id, password, connection);
}
}
/**
* Try to open connection using provided credentials.
* @param {string} [id]
@@ -182,7 +134,10 @@ export async function connect(id, password) {
APP.store.dispatch(setPrejoinDisplayNameRequired());
}
checkForAttachParametersAndConnect(id, password, connection);
connection.connect({
id,
password
});
});
}
@@ -212,7 +167,7 @@ export function openConnection({ id, password, retry, roomName }) {
password = passwordOverride; // eslint-disable-line no-param-reassign
}
return connect(id, password, roomName).catch(err => {
return connect(id, password).catch(err => {
if (retry) {
const { jwt } = APP.store.getState()['features/base/jwt'];

View File

@@ -1,3 +0,0 @@
module.exports = {
'extends': '../react/.eslintrc.js'
};

View File

@@ -1,86 +0,0 @@
/* global config, createConnectionExternally */
import getRoomName from '../react/features/base/config/getRoomName';
import { parseURLParams } from '../react/features/base/util/parseURLParams';
/**
* Implements external connect using createConnectionExternally function defined
* in external_connect.js for Jitsi Meet. Parses the room name and JSON Web
* Token (JWT) from the URL and executes createConnectionExternally.
*
* NOTE: If you are using lib-jitsi-meet without Jitsi Meet, you should use this
* file as reference only because the implementation is Jitsi Meet-specific.
*
* NOTE: For optimal results this file should be included right after
* external_connect.js.
*/
if (typeof createConnectionExternally === 'function') {
// URL params have higher priority than config params.
// Do not use external connect if websocket is enabled.
let url
= parseURLParams(window.location, true, 'hash')[
'config.externalConnectUrl']
|| config.websocket ? undefined : config.externalConnectUrl;
const isRecorder
= parseURLParams(window.location, true, 'hash')['config.iAmRecorder'];
let roomName;
if (url && (roomName = getRoomName()) && !isRecorder) {
url += `?room=${roomName}`;
const token = parseURLParams(window.location, true, 'search').jwt;
if (token) {
url += `&token=${token}`;
}
createConnectionExternally(
url,
connectionInfo => {
// Sets that global variable to be used later by connect method
// in connection.js.
window.XMPPAttachInfo = {
status: 'success',
data: connectionInfo
};
checkForConnectHandlerAndConnect();
},
errorCallback);
} else {
errorCallback();
}
} else {
errorCallback();
}
/**
* Check if connect from connection.js was executed and executes the handler
* that is going to finish the connect work.
*
* @returns {void}
*/
function checkForConnectHandlerAndConnect() {
window.APP
&& window.APP.connect.status === 'ready'
&& window.APP.connect.handler();
}
/**
* Implements a callback to be invoked if anything goes wrong.
*
* @param {Error} error - The specifics of what went wrong.
* @returns {void}
*/
function errorCallback(error) {
// The value of error is undefined if external connect is disabled.
error && console.warn(error);
// Sets that global variable to be used later by connect method in
// connection.js.
window.XMPPAttachInfo = {
status: 'error'
};
checkForConnectHandlerAndConnect();
}

View File

@@ -1,117 +0,0 @@
/**
* Mixins that mimic the way Atlaskit fills the screen with modals at low screen widths.
*/
@mixin full-size-modal-positioner() {
height: 100%;
left: 0;
position: fixed;
top: 0;
max-width: 100%;
width: 100%;
}
@mixin full-size-modal-dialog() {
height: 100%;
max-height: 100%;
border-radius: 0;
}
/**
* Move the @atlaskit/flag container up a little bit so it does not cover the
* toolbar with the first notification.
*/
.atlaskit-portal > #notifications-container {
bottom: calc(#{$newToolbarSizeWithPadding}) !important;
}
/**
* Keep overflow menu within screen vertical bounds and make it scrollable.
*/
.toolbox-button-wth-dialog > div:nth-child(2) {
background: $menuBG;
max-height: calc(100vh - #{$newToolbarSizeWithPadding} - 46px);
margin-bottom: 4px;
padding: 0;
overflow-y: auto;
}
/**
* Remove background color and box-shadow for the context menu container.
*/
.toolbox-button-wth-dialog.context-menu > div:nth-child(2) {
background: transparent;
box-shadow: none;
overflow-y: initial;
}
.audio-preview > div:nth-child(2),
.video-preview > div:nth-child(2) {
margin-bottom: 4px;
outline: none;
padding: 0;
}
/**
* The following selectors keep the chat modal full-size anywhere between 100px
* and 580px for desktop or 680px for mobile.
*/
@media (min-width: 100px) and (max-width: 320px) {
.smiley-input {
display: none;
}
.shift-right .focus-lock > div > div {
@include full-size-modal-positioner();
}
.shift-right .focus-lock [role="dialog"] {
@include full-size-modal-dialog();
}
}
@media (min-width: 480px) and (max-width: 580px) {
.shift-right .focus-lock > div > div {
@include full-size-modal-positioner();
}
.shift-right .focus-lock [role="dialog"] {
@include full-size-modal-dialog();
}
}
@media (max-width: 580px) {
// Override Atlaskit inline style for the modal background.
// Important is unfortunately needed for that.
.shift-right .focus-lock [role="dialog"][style] {
background-color: $chatBackgroundColor !important;
}
// Remove Atlaskit padding from the chat dialog.
.shift-right .focus-lock [role="dialog"] > div:first-child > div:nth-child(2) {
padding: 0;
}
}
div.Tooltip {
color: #fff;
font-size: 12px;
line-height: 14px;
padding: 8px;
}
// make modal full screen on landscape orientation
@media (max-height: 420px) {
.atlaskit-portal {
.css-1oc7v0j {
height: 100%;
padding: 0;
max-width: 100%;
top: 0;
width: 100%;
&> div {
height: 100%;
}
}
}
}

View File

@@ -4,8 +4,9 @@
&-content {
position: relative;
right: auto;
margin-bottom: 8px;
max-height: 456px;
margin: 0;
margin-bottom: 4px;
max-height: calc(100vh - 100px);
overflow: auto;
width: 300px;
@@ -22,11 +23,7 @@
}
&-entry-text {
display: inline-block;
text-overflow: ellipsis;
max-width: 213px;
overflow: hidden;
white-space: nowrap;
&.left-margin {
margin-left: 36px;

View File

@@ -1,75 +0,0 @@
.cpick {
border: 1px solid #A4B8D1;
color: #fff;
display: flex;
font-size: 15px;
height: 38px;
line-height: 24px;
&-selector {
align-items: center;
background-color: #283447;
border-right: 1px solid #A4B8D1;
cursor: pointer;
display: flex;
padding: 8px 10px;
position: relative;
width: 88px;
}
&-icon {
margin-right: 8px;
position: absolute;
right: 0;
top: 12px;
& > svg {
fill: #fff;
}
}
&-input {
padding: 8px;
background: #1C2025;
border: 0;
margin: 0;
color: #fff;
caret-color: #0376DA;
flex-grow: 1;
}
&-dropdown {
height: 190px;
overflow-y: auto;
width: 343px;
}
&-dropdown-entry {
align-items: center;
cursor: pointer;
display: flex;
height: 40px;
padding: 0 10px;
&:hover {
background-color: #66768b;
}
&-text {
color: #fff;
flex-grow: 1;
font-size: 15px;
line-height: 24px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
}
// Override @Atlaskit/inline-dialog styles
.cpick-container > div:nth-child(2) {
outline: none;
padding: 8px 0 0 0;
}

View File

@@ -82,6 +82,7 @@
}
.left-column {
order: -1;
display: flex;
flex-direction: column;
flex-grow: 0;
@@ -92,6 +93,7 @@
.right-column {
display: flex;
flex-direction: column;
align-items: flex-start;
flex-grow: 1;
padding-left: 16px;
padding-top: 13px;
@@ -99,11 +101,11 @@
}
.title {
font-size: 12px;
font-weight: 600;
line-height: 16px;
padding-bottom: 4px;
}
font-size: 12px;
font-weight: 600;
line-height: 16px;
margin-bottom: 4px;
}
.subtitle {
color: #5E6D7A;
@@ -125,8 +127,7 @@
cursor: pointer;
}
&.with-click-handler:hover,
&.with-click-handler:focus {
&.with-click-handler:hover {
background-color: #c7ddff;
}

View File

@@ -1,23 +0,0 @@
.notification-appear, .notification-enter {
opacity: 0;
position: relative;
left: -200px;
transition: all .2s !important; // !important needed to overwrite atlaskit default style
&-active {
opacity: 1;
left: 0;
}
}
.notification-exit {
opacity: 1;
position: relative;
left: 0;
transition: all .2s !important; // !important needed to overwrite atlaskit default style
&-active {
opacity: 0;
left: -200px;
}
}

View File

@@ -1,3 +1,3 @@
#polls-panel {
.polls-panel {
height: calc(100% - 119px);
}

View File

@@ -1,49 +1,33 @@
/**
* Mousemove padding styles are used to add invisible elements to the popover
* to allow mouse movement from the popover trigger to the popover itself
* without triggering a mouseleave event.
*/
%vertical-popover-padding {
height: 100%;
position: absolute;
top: 0;
width: 20px;
padding: 20px 0;
top: -20px;
}
%horizontal-popover-padding {
height: 25px;
position: absolute;
right: 0;
width: 100%;
padding: 0 35px;
left: -35px;
}
.popover-mousemove-padding-left {
@extend %vertical-popover-padding;
left: -35px;
}
.popover-mousemove-padding-right {
@extend %vertical-popover-padding;
right: -35px;
}
.popover-mousemove-padding-bottom {
@extend %horizontal-popover-padding;
bottom: -40px;
}
.popover-mousemove-padding-top {
@extend %horizontal-popover-padding;
top: -40px;
}
.popover {
margin: -16px -24px;
z-index: $popoverZ;
.popover-content {
position: relative;
}
&.hover {
margin: -16px -24px;
.popover-content {
margin: 16px 24px;
&.top {
bottom: 8px;
}
&.bottom {
top: 4px;
}
&.left {
right: 4px;
}
&.right {
left: 4px;
}
}
}
}
.excalidraw .popover {

View File

@@ -4,7 +4,7 @@
width: 280px;
background: $menuBG;
box-shadow: 0px 3px 16px rgba(0, 0, 0, 0.6), 0px 0px 4px 1px rgba(0, 0, 0, 0.25);
border-radius: 3px;
border-radius: 6px;
padding: 16px;
&.with-gif {
@@ -104,10 +104,6 @@
}
}
.reactions-menu-container {
padding-bottom: 6px;
}
.reactions-animations-container {
position: absolute;
width: 20%;

View File

@@ -3,30 +3,33 @@
display: block;
#enter_room {
position: relative;
height: 42px;
.welcome-page-button {
font-size: 16px;
left: 0;
position: absolute;
top: 68px;
text-align: center;
width: 100%;
font-size: 16px;
left: 0;
text-align: center;
width: 100%;
}
}
.header {
background-color: #002637;
.insecure-room-name-warning {
width: 100%;
}
#enter_room {
.enter-room-input-container {
padding-right: 0;
width: 100%;
.join-meeting-container {
padding: 0;
flex-direction: column;
background: transparent;
}
.warning-without-link,
.warning-with-link {
top: 120px;
.enter-room-input-container {
padding-right: 0;
margin-bottom: 10px;
}
}
}

View File

@@ -34,20 +34,20 @@
background: #F2F3F4;
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.25), 0px 0px 0px 1px rgba(0, 0, 0, 0.1);
& > svg {
& svg {
fill: #040404;
}
&.settings-button-small-icon--disabled {
background: #36383C;
&> svg {
& svg {
fill: #929292;
}
}
}
& > svg {
& svg {
fill: #fff;
}
@@ -55,7 +55,7 @@
background-color: #36383c;
cursor: default;
&> svg {
& svg {
fill: #929292;
}
}

View File

@@ -161,7 +161,7 @@ $welcomePageHeaderBackground: linear-gradient(0deg, rgba(0, 0, 0, 0.2), rgba(0,
$welcomePageHeaderBackgroundPosition: center;
$welcomePageHeaderBackgroundRepeat: none;
$welcomePageHeaderBackgroundSize: cover;
$welcomePageHeaderPaddingBottom: 0px;
$welcomePageHeaderPaddingBottom: 15px;
$welcomePageHeaderTitleMaxWidth: initial;
$welcomePageHeaderTextAlign: center;
@@ -201,11 +201,6 @@ $deepLinkingDialInConferenceIdPadding: inherit;
$deepLinkingDialInConferenceIdBackgroundColor: inherit;
$deepLinkingDialInConferenceIdBorderRadius: inherit;
$deepLinkingDialInConferenceNameFontSize: inherit;
$deepLinkingDialInConferenceNameLineHeight: inherit;
$deepLinkingDialInConferenceNameMarginBottom: none;
$deepLinkingDialInConferenceNameFontWeight: inherit;
$deepLinkingDialInConferenceDescriptionFontSize: 0.8em;
$deepLinkingDialInConferenceDescriptionLineHeight: inherit;
$deepLinkingDialInConferenceDescriptionMarginBottom: none;

View File

@@ -3,49 +3,39 @@
display: inline-block;
&-container {
max-height: 344px;
background: $menuBG;
border-radius: 3px;
max-height: 456px;
overflow: auto;
padding: 8px;
margin-bottom: 8px;
margin: 0;
margin-bottom: 4px;
position: relative;
right: auto;
}
&-entry {
cursor: pointer;
height: 168px;
margin-bottom: 8px;
height: 138px;
width: 244px;
position: relative;
width: 284px;
margin: 0 7px 4px;
border-radius: 6px;
box-sizing: border-box;
overflow: hidden;
&:last-child {
margin-bottom: 0;
}
&--selected {
border: 3px solid #31B76A;
border-radius: 3px;
cursor: default;
height: 162px;
width: 278px;
border: 2px solid #4687ED;
}
}
&-video {
border-radius: 3px;
height: 100%;
object-fit: cover;
width: 100%;
}
&-overlay {
background: rgba(42, 58, 75, 0.6);
height: 100%;
position: absolute;
width: 100%;
z-index: 1;
}
&-error {
align-items: center;
display: flex;
@@ -56,23 +46,22 @@
}
&-label {
bottom: 8px;
color: #fff;
position: absolute;
width: 100%;
bottom: 0;
left: 0;
right: 0;
max-width: 100%;
padding: 8px;
z-index: 2;
&-container {
margin: 0 16px;
}
&-text {
background-color: #131519;
border-radius: 3px;
padding: 2px 8px;
font-size: 13px;
line-height: 20px;
margin: 0 auto;
background-color: rgba(0, 0, 0, 0.7);
border-radius: 4px;
padding: 4px 8px;
color: #fff;
font-size: 12px;
line-height: 16px;
font-weight: 600;
max-width: calc(100% - 16px);
overflow: hidden;
text-overflow: ellipsis;
@@ -80,8 +69,8 @@
white-space: nowrap;
}
}
// Override @atlaskit/InlineDialog container which is made with styled components
& > div:nth-child(2) {
padding: 0;
&-checkbox-container {
padding: 10px 14px;
}
}

View File

@@ -76,6 +76,35 @@
}
}
.animatedFadeIn {
opacity: 0;
animation: fadeInAnimation 0.3s ease forwards;
}
@keyframes fadeInAnimation {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.animatedFadeOut {
opacity: 1;
animation: fadeOutAnimation 0.3s ease forwards;
}
@keyframes fadeOutAnimation {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
#largeVideoContainer {
height: 100%;
width: 100%;

View File

@@ -20,7 +20,6 @@ body.welcome-page {
background-size: $welcomePageHeaderBackgroundSize;
padding-bottom: $welcomePageHeaderPaddingBottom;
background-color: #131519;
height: 400px;
overflow: hidden;
position: relative;
@@ -62,26 +61,58 @@ body.welcome-page {
}
.insecure-room-name-warning {
align-items: center;
color: $defaultWarningColor;
font-weight: 600;
display: flex;
flex-direction: row;
margin-top: 15px;
max-width: 480px;
width: $welcomePageEnterRoomWidth;
.jitsi-icon {
margin-right: 15px;
svg {
fill: $defaultWarningColor;
& > *:first-child {
fill: none !important;
}
}
}
}
::placeholder {
color: #253858;
}
#enter_room {
display: $welcomePageEnterRoomDisplay;
align-items: center;
max-width: 480px;
width: $welcomePageEnterRoomWidth;
z-index: $zindex2;
background-color: #fff;
padding: $welcomePageEnterRoomPadding;
border-radius: 4px;
margin: $welcomePageEnterRoomMargin;
height: fit-content;
.enter-room-input-container {
.join-meeting-container {
margin: $welcomePageEnterRoomMargin;
padding: $welcomePageEnterRoomPadding;
border-radius: 4px;
background-color: #fff;
display: flex;
width: 100%;
text-align: left;
color: #253858;
}
.enter-room-input-container {
flex-grow: 1;
height: fit-content;
padding-right: 4px;
position: relative;
.enter-room-input {
border-radius: 4px;
border: 0;
background: #fff;
display: inline-block;
@@ -90,48 +121,17 @@ body.welcome-page {
font-size: 14px;
padding-left: 10px;
&:focus {
&.focus-visible {
outline: auto 2px #005fcc;
}
}
.insecure-room-name-warning {
align-items: center;
color: $defaultWarningColor;
display: flex;
flex-direction: row;
margin-top: 15px;
.jitsi-icon {
margin-right: 15px;
svg {
fill: $defaultWarningColor
}
}
}
::placeholder {
color: #253858;
}
}
.warning-without-link {
position: absolute;
top: 44px;
left: -10px;
}
.warning-with-link {
position: absolute;
top: 84px;
}
}
#moderated-meetings {
max-width: calc(100% - 40px);
padding: 16px 0 39px 0;
padding: 16px 0 0;
width: $welcomePageEnterRoomWidth;
text-align: center;
@@ -167,7 +167,7 @@ body.welcome-page {
margin: 4px;
display: $welcomePageTabButtonsDisplay;
.tab {
[role="tab"] {
background-color: #c7ddff;
border-radius: 7px;
cursor: pointer;
@@ -176,8 +176,10 @@ body.welcome-page {
margin: 2px;
padding: 7px 0;
text-align: center;
color: inherit;
border: 0;
&.selected {
&[aria-selected="true"] {
background-color: #FFF;
}
}

View File

@@ -67,6 +67,13 @@
font-size: 1em;
}
.dial-in-conference-id {
text-align: center;
min-width: 200px;
margin-top: 40px;
}
.dial-in-conference-id {
margin: $deepLinkingDialInConferenceIdMargin;
padding: $deepLinkingDialInConferenceIdPadding;
@@ -74,24 +81,12 @@
border-radius: $deepLinkingDialInConferenceIdBorderRadius;
}
.dial-in-conference-name {
font-size: $deepLinkingDialInConferenceNameFontSize;
line-height: $deepLinkingDialInConferenceNameLineHeight;
margin-bottom: $deepLinkingDialInConferenceNameMarginBottom;
font-weight: $deepLinkingDialInConferenceNameFontWeight;
}
.dial-in-conference-description {
font-size: $deepLinkingDialInConferenceDescriptionFontSize;
line-height: $deepLinkingDialInConferenceDescriptionLineHeight;
margin-bottom: $deepLinkingDialInConferenceDescriptionMarginBottom;
}
.dial-in-conference-pin {
font-size: $deepLinkingDialInConferencePinFontSize;
line-height: $deepLinkingDialInConferencePinLineHeight;
}
.toll-free-list {
min-width: 80px;
}

View File

@@ -25,7 +25,6 @@ $flagsImagePath: "../images/";
/* Modules BEGIN */
@import 'reset';
@import 'atlaskit_overrides';
@import 'base';
@import 'utils';
@import 'overlay/overlay';
@@ -33,7 +32,6 @@ $flagsImagePath: "../images/";
@import 'reload_overlay/reload_overlay';
@import 'mini_toolbox';
@import 'modals/desktop-picker/desktop-picker';
@import 'modals/device-selection/device-selection';
@import 'modals/dialog';
@import 'modals/embed-meeting/embed-meeting';
@import 'modals/feedback/feedback';
@@ -82,7 +80,6 @@ $flagsImagePath: "../images/";
@import 'audio-preview';
@import 'video-preview';
@import 'premeeting/main';
@import 'country-picker';
@import 'modals/invite/invite_more';
@import 'modals/security/security';
@import 'e2ee';
@@ -92,6 +89,5 @@ $flagsImagePath: "../images/";
@import 'reactions-menu';
@import 'plan-limit';
@import 'polls';
@import 'notifications';
/* Modules END */

View File

@@ -63,3 +63,8 @@
.desktop-source-preview-image-container {
padding: 10px;
}
.desktop-picker-tabs-container {
width: 65%;
margin-top: 3px;
}

View File

@@ -1,148 +0,0 @@
.device-selection {
.device-selectors {
font-size: 14px;
> div {
display: block;
margin-bottom: 4px;
}
.device-selector-icon {
align-self: center;
color: inherit;
font-size: 20px;
margin-left: 3px;
}
.device-selector-label {
margin-bottom: 1px;
}
/* device-selector-trigger stylings attempt to mimic AtlasKit button */
.device-selector-trigger {
background-color: #0E1624;
border: 1px solid #455166;
border-radius: 5px;
display: flex;
height: 2.3em;
justify-content: space-between;
line-height: 2.3em;
overflow: hidden;
padding: 0 8px;
}
.device-selector-trigger-disabled {
.device-selector-trigger {
color: #a5adba;
cursor: default;
}
}
.device-selector-trigger-text {
overflow: hidden;
text-align: center;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
}
}
.device-selection-column {
box-sizing: border-box;
display: inline-block;
vertical-align: top;
&.column-selectors {
margin-left: 15px;
width: 45%;
}
&.column-video {
width: 50%;
}
}
.device-selection-video-container {
border-radius: 3px;
margin-bottom: 5px;
.video-input-preview {
margin-top: 2px;
position: relative;
> video {
border-radius: 3px;
}
.video-input-preview-error {
color: $participantNameColor;
display: none;
left: 0;
position: absolute;
right: 0;
text-align: center;
top: 50%;
}
&.video-preview-has-error {
background: black;
.video-input-preview-error {
display: block;
}
}
.video-input-preview-display {
height: auto;
overflow: hidden;
width: 100%;
}
}
}
.audio-output-preview {
font-size: 14px;
a {
color: #6FB1EA;
cursor: pointer;
text-decoration: none;
}
a:hover {
color: #B3D4FF;
}
}
.audio-input-preview {
background: #1B2638;
border-radius: 5px;
height: 8px;
.audio-input-preview-level {
background: #75B1FF;
border-radius: 5px;
height: 100%;
-webkit-transition: width .1s ease-in-out;
-moz-transition: width .1s ease-in-out;
-o-transition: width .1s ease-in-out;
transition: width .1s ease-in-out;
}
}
}
.device-selection.video-hidden {
display: flex;
flex-direction: column;
width: 100%;
.column-selectors {
width: 100%;
margin-left: 0;
}
.column-video {
order: 1;
width: 100%;
margin-top: 8px;
}
}

View File

@@ -44,61 +44,3 @@
-webkit-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out
}
.feedback-dialog {
margin-bottom: 5px;
.details {
textarea {
min-height: 100px;
}
}
.input-control {
background-color: $feedbackInputBg;
color: $feedbackInputTextColor;
&::-webkit-input-placeholder {
color: $feedbackInputPlaceholderColor;
}
&::-moz-placeholder { /* Firefox 19+ */
color: $feedbackInputPlaceholderColor;
}
&:-ms-input-placeholder {
color: $feedbackInputPlaceholderColor;
}
}
.rating {
line-height: 1.2;
margin-top: 10px;
text-align: center;
.star-label {
font-size: 14px;
height: 16px;
}
.star-btn {
color: inherit;
cursor: pointer;
display: inline-block;
font-size: 34px;
outline: none;
position: relative;
text-decoration: none;
@include transition(all .2s ease);
&.active,
&:hover,
&.starHover {
color: #36B37E;
};
}
.star-btn:focus,
.star-btn:active {
outline: 1px solid #B8C7E0;
}
}
}

View File

@@ -50,6 +50,8 @@
}
.dial-in-numbers-list {
max-width: 334px;
width: 100%;
margin-top: 20px;
font-size: 12px;
line-height: 24px;
@@ -59,10 +61,6 @@
text-align: left;
}
tr {
border-bottom: 1px solid #d1dbe8;
}
.flag-cell {
vertical-align: top;
width: 30px;
@@ -91,6 +89,7 @@
font-weight: bold;
list-style: none;
vertical-align: top;
text-align: right;
}
li.toll-free:empty:before {
@@ -119,11 +118,6 @@
margin-top: 40px;
}
.dial-in-conference-name,
.dial-in-conference-pin {
font-size: 18px;
}
.dial-in-conference-description {
margin: 12px;
}

View File

@@ -1,7 +1,3 @@
.share-audio-dialog-container {
max-height: none;
}
.share-audio-dialog {
.share-audio-animation {
width: 100%;

View File

@@ -208,3 +208,26 @@
.lobby-button-margin {
margin-bottom: 16px;
}
.lobby-prejoin-error {
background-color: #E04757;
border-radius: 6px;
box-sizing: border-box;
color: white;
font-size: 12px;
line-height: 16px;
margin-bottom: 16px;
margin-top: -8px;
padding: 4px;
text-align: center;
width: 100%;
}
.lobby-prejoin-input {
margin-bottom: 16px;
width: 100%;
& input {
text-align: center;
}
}

View File

@@ -1,4 +1,3 @@
@import 'lobby';
@import 'premeeting-screens';
@import 'prejoin';
@import 'prejoin-third-party';

View File

@@ -3,6 +3,7 @@ $sidePanelWidth: 300px;
.prejoin-third-party {
flex-direction: column-reverse;
z-index: auto;
align-items: center;
.content {
height: auto;

View File

@@ -1,67 +0,0 @@
.prejoin {
&-input-area {
width: 100%;
}
&-avatar {
margin: 8px auto 16px;
&-name {
color: white;
font-size: 16px;
font-weight: 600;
line-height: 26px;
margin-bottom: 32px;
text-align: center;
}
&-container {
align-items: center;
display: flex;
flex-direction: column;
}
}
&-error {
background-color: #E04757;
border-radius: 6px;
box-sizing: border-box;
color: white;
font-size: 12px;
line-height: 16px;
margin-bottom: 16px;
margin-top: -8px;
padding: 4px;
text-align: center;
width: 100%;
}
}
.prejoin-preview {
&-dropdown-btns {
padding: 8px 0;
}
&-dropdown-container {
position: relative;
width: 100%;
/**
* Override default InlineDialog behaviour, since it does not play nicely with relative widths
*/
& > div:nth-child(2) {
background: #E0E0E0;
padding: 0;
position: absolute !important;
width: 100%;
}
}
}
.prejoin-input {
margin-bottom: 16px;
& input {
text-align: center;
}
}

View File

@@ -87,7 +87,7 @@
.toolbox-content-wrapper,
.toolbox-content-items {
box-sizing: border-box;
width: 100%;
width: auto;
}
}

View File

@@ -8,7 +8,6 @@ sounds /usr/share/jitsi-meet/
fonts /usr/share/jitsi-meet/
images /usr/share/jitsi-meet/
lang /usr/share/jitsi-meet/
connection_optimization /usr/share/jitsi-meet/
resources/robots.txt /usr/share/jitsi-meet/
resources/*.sh /usr/share/jitsi-meet/scripts/
pwa-worker.js /usr/share/jitsi-meet/

View File

@@ -93,7 +93,7 @@ server {
}
# ensure all static content can always be found first
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
location ~ ^/(libs|css|static|images|fonts|lang|sounds|.well-known)/(.*)$
{
add_header 'Access-Control-Allow-Origin' '*';
alias /usr/share/jitsi-meet/$1/$2;
@@ -157,6 +157,13 @@ server {
alias /etc/jitsi/meet/jitsi-meet.example.com-config.js;
}
# Matches /(TENANT)/pwa-worker.js or /(TENANT)/manifest.json to rewrite to / and look for file
location ~ ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ {
set $subdomain "$1.";
set $subdir "$1/";
rewrite ^/([^/?&:'"]+)/(pwa-worker.js|manifest.json)$ /$2;
}
# BOSH for subdomains
location ~ ^/([^/?&:'"]+)/http-bind {
set $subdomain "$1.";

12
globals.d.ts vendored
View File

@@ -25,9 +25,21 @@ declare global {
interfaceConfig?: any;
JitsiMeetJS?: any;
JitsiMeetElectron?: any;
// selenium tests handler
_sharedVideoPlayer: any;
}
interface Document {
mozCancelFullScreen?: Function;
webkitExitFullscreen?: Function;
}
const config: IConfig;
const JitsiMeetJS: any;
interface HTMLMediaElement {
setSinkId: (id: string) => Promise<undefined>;
stop: () => void;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

@@ -13,10 +13,19 @@
<link rel="manifest" id="manifest-placeholder">
<script>
function contextRoot(pathname) {
const contextRootEndIndex = pathname.lastIndexOf('/');
return (
contextRootEndIndex === -1
? '/'
: pathname.substring(0, contextRootEndIndex + 1)
);
}
window.EXCALIDRAW_ASSET_PATH = 'libs/';
// Dynamically generate the manifest location URL. It must be served from the document origin, and we may have
// the base pointing to the CDN. This way we can generate a full URL which will bypass the base.
document.querySelector('#manifest-placeholder').setAttribute('href', window.location.origin + '/manifest.json');
document.querySelector('#manifest-placeholder').setAttribute('href', window.location.origin + contextRoot(window.location.pathname) + 'manifest.json');
document.addEventListener('DOMContentLoaded', () => {
if (!JitsiMeetJS.app) {
@@ -40,7 +49,7 @@
if (shouldRegisterWorker) {
navigator.serviceWorker
.register(window.location.origin + '/pwa-worker.js')
.register(window.location.origin + contextRoot(window.location.pathname) + 'pwa-worker.js')
.then(reg => {
console.log('Service worker registered.', reg);
})
@@ -182,8 +191,6 @@
'error', loadErrHandler, true /* capture phase type of listener */);
</script>
<script><!--#include virtual="/config.js" --></script><!-- adapt to your needs, i.e. set hosts and bosh path -->
<!--#include virtual="connection_optimization/connection_optimization.html" -->
<script src="libs/do_external_connect.min.js?v=1"></script>
<script><!--#include virtual="/interface_config.js" --></script>
<script src="libs/lib-jitsi-meet.min.js?v=139"></script>
<script src="libs/app.bundle.min.js?v=139"></script>

View File

@@ -13,14 +13,14 @@ PODS:
- CocoaLumberjack/Core (= 3.7.2)
- CocoaLumberjack/Core (3.7.2)
- DoubleConversion (1.1.6)
- FBLazyVector (0.68.5)
- FBReactNativeSpec (0.68.5):
- FBLazyVector (0.68.6)
- FBReactNativeSpec (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.5)
- RCTTypeSafety (= 0.68.5)
- React-Core (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- RCTRequired (= 0.68.6)
- RCTTypeSafety (= 0.68.6)
- React-Core (= 0.68.6)
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- Firebase/Analytics (8.15.0):
- Firebase/Core
- Firebase/Core (8.15.0):
@@ -163,201 +163,201 @@ PODS:
- DoubleConversion
- fmt (~> 6.2.1)
- glog
- RCTRequired (0.68.5)
- RCTTypeSafety (0.68.5):
- FBLazyVector (= 0.68.5)
- RCTRequired (0.68.6)
- RCTTypeSafety (0.68.6):
- FBLazyVector (= 0.68.6)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.5)
- React-Core (= 0.68.5)
- React (0.68.5):
- React-Core (= 0.68.5)
- React-Core/DevSupport (= 0.68.5)
- React-Core/RCTWebSocket (= 0.68.5)
- React-RCTActionSheet (= 0.68.5)
- React-RCTAnimation (= 0.68.5)
- React-RCTBlob (= 0.68.5)
- React-RCTImage (= 0.68.5)
- React-RCTLinking (= 0.68.5)
- React-RCTNetwork (= 0.68.5)
- React-RCTSettings (= 0.68.5)
- React-RCTText (= 0.68.5)
- React-RCTVibration (= 0.68.5)
- React-callinvoker (0.68.5)
- React-Codegen (0.68.5):
- FBReactNativeSpec (= 0.68.5)
- RCTRequired (= 0.68.6)
- React-Core (= 0.68.6)
- React (0.68.6):
- React-Core (= 0.68.6)
- React-Core/DevSupport (= 0.68.6)
- React-Core/RCTWebSocket (= 0.68.6)
- React-RCTActionSheet (= 0.68.6)
- React-RCTAnimation (= 0.68.6)
- React-RCTBlob (= 0.68.6)
- React-RCTImage (= 0.68.6)
- React-RCTLinking (= 0.68.6)
- React-RCTNetwork (= 0.68.6)
- React-RCTSettings (= 0.68.6)
- React-RCTText (= 0.68.6)
- React-RCTVibration (= 0.68.6)
- React-callinvoker (0.68.6)
- React-Codegen (0.68.6):
- FBReactNativeSpec (= 0.68.6)
- RCT-Folly (= 2021.06.28.00-v2)
- RCTRequired (= 0.68.5)
- RCTTypeSafety (= 0.68.5)
- React-Core (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-Core (0.68.5):
- RCTRequired (= 0.68.6)
- RCTTypeSafety (= 0.68.6)
- React-Core (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-Core (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-Core/Default (= 0.68.6)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/CoreModulesHeaders (0.68.5):
- React-Core/CoreModulesHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/Default (0.68.5):
- React-Core/Default (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/DevSupport (0.68.5):
- React-Core/DevSupport (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.5)
- React-Core/RCTWebSocket (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-jsinspector (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-Core/Default (= 0.68.6)
- React-Core/RCTWebSocket (= 0.68.6)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-jsinspector (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTActionSheetHeaders (0.68.5):
- React-Core/RCTActionSheetHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTAnimationHeaders (0.68.5):
- React-Core/RCTAnimationHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTBlobHeaders (0.68.5):
- React-Core/RCTBlobHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTImageHeaders (0.68.5):
- React-Core/RCTImageHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTLinkingHeaders (0.68.5):
- React-Core/RCTLinkingHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTNetworkHeaders (0.68.5):
- React-Core/RCTNetworkHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTSettingsHeaders (0.68.5):
- React-Core/RCTSettingsHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTTextHeaders (0.68.5):
- React-Core/RCTTextHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTVibrationHeaders (0.68.5):
- React-Core/RCTVibrationHeaders (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-Core/RCTWebSocket (0.68.5):
- React-Core/RCTWebSocket (0.68.6):
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-Core/Default (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsiexecutor (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-Core/Default (= 0.68.6)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsiexecutor (= 0.68.6)
- React-perflogger (= 0.68.6)
- Yoga
- React-CoreModules (0.68.5):
- React-CoreModules (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/CoreModulesHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- React-RCTImage (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-cxxreact (0.68.5):
- RCTTypeSafety (= 0.68.6)
- React-Codegen (= 0.68.6)
- React-Core/CoreModulesHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- React-RCTImage (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-cxxreact (0.68.6):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.68.5)
- React-jsi (= 0.68.5)
- React-jsinspector (= 0.68.5)
- React-logger (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-runtimeexecutor (= 0.68.5)
- React-jsi (0.68.5):
- React-callinvoker (= 0.68.6)
- React-jsi (= 0.68.6)
- React-jsinspector (= 0.68.6)
- React-logger (= 0.68.6)
- React-perflogger (= 0.68.6)
- React-runtimeexecutor (= 0.68.6)
- React-jsi (0.68.6):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsi/Default (= 0.68.5)
- React-jsi/Default (0.68.5):
- React-jsi/Default (= 0.68.6)
- React-jsi/Default (0.68.6):
- boost (= 1.76.0)
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-jsiexecutor (0.68.5):
- React-jsiexecutor (0.68.6):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-jsinspector (0.68.5)
- React-logger (0.68.5):
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-perflogger (= 0.68.6)
- React-jsinspector (0.68.6)
- React-logger (0.68.6):
- glog
- react-native-background-timer (2.4.1):
- React-Core
@@ -389,76 +389,76 @@ PODS:
- react-native-video/Video (6.0.0-alpha.1):
- PromisesSwift
- React-Core
- react-native-webrtc (106.0.5):
- react-native-webrtc (106.0.7):
- JitsiWebRTC (~> 106.0.0)
- React-Core
- react-native-webview (11.15.1):
- React-Core
- React-perflogger (0.68.5)
- React-RCTActionSheet (0.68.5):
- React-Core/RCTActionSheetHeaders (= 0.68.5)
- React-RCTAnimation (0.68.5):
- React-perflogger (0.68.6)
- React-RCTActionSheet (0.68.6):
- React-Core/RCTActionSheetHeaders (= 0.68.6)
- React-RCTAnimation (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTAnimationHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTBlob (0.68.5):
- RCTTypeSafety (= 0.68.6)
- React-Codegen (= 0.68.6)
- React-Core/RCTAnimationHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-RCTBlob (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.68.5)
- React-Core/RCTBlobHeaders (= 0.68.5)
- React-Core/RCTWebSocket (= 0.68.5)
- React-jsi (= 0.68.5)
- React-RCTNetwork (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTImage (0.68.5):
- React-Codegen (= 0.68.6)
- React-Core/RCTBlobHeaders (= 0.68.6)
- React-Core/RCTWebSocket (= 0.68.6)
- React-jsi (= 0.68.6)
- React-RCTNetwork (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-RCTImage (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTImageHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- React-RCTNetwork (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTLinking (0.68.5):
- React-Codegen (= 0.68.5)
- React-Core/RCTLinkingHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTNetwork (0.68.5):
- RCTTypeSafety (= 0.68.6)
- React-Codegen (= 0.68.6)
- React-Core/RCTImageHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- React-RCTNetwork (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-RCTLinking (0.68.6):
- React-Codegen (= 0.68.6)
- React-Core/RCTLinkingHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-RCTNetwork (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTNetworkHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTSettings (0.68.5):
- RCTTypeSafety (= 0.68.6)
- React-Codegen (= 0.68.6)
- React-Core/RCTNetworkHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-RCTSettings (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- RCTTypeSafety (= 0.68.5)
- React-Codegen (= 0.68.5)
- React-Core/RCTSettingsHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-RCTText (0.68.5):
- React-Core/RCTTextHeaders (= 0.68.5)
- React-RCTVibration (0.68.5):
- RCTTypeSafety (= 0.68.6)
- React-Codegen (= 0.68.6)
- React-Core/RCTSettingsHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-RCTText (0.68.6):
- React-Core/RCTTextHeaders (= 0.68.6)
- React-RCTVibration (0.68.6):
- RCT-Folly (= 2021.06.28.00-v2)
- React-Codegen (= 0.68.5)
- React-Core/RCTVibrationHeaders (= 0.68.5)
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (= 0.68.5)
- React-runtimeexecutor (0.68.5):
- React-jsi (= 0.68.5)
- ReactCommon/turbomodule/core (0.68.5):
- React-Codegen (= 0.68.6)
- React-Core/RCTVibrationHeaders (= 0.68.6)
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (= 0.68.6)
- React-runtimeexecutor (0.68.6):
- React-jsi (= 0.68.6)
- ReactCommon/turbomodule/core (0.68.6):
- DoubleConversion
- glog
- RCT-Folly (= 2021.06.28.00-v2)
- React-callinvoker (= 0.68.5)
- React-Core (= 0.68.5)
- React-cxxreact (= 0.68.5)
- React-jsi (= 0.68.5)
- React-logger (= 0.68.5)
- React-perflogger (= 0.68.5)
- React-callinvoker (= 0.68.6)
- React-Core (= 0.68.6)
- React-cxxreact (= 0.68.6)
- React-jsi (= 0.68.6)
- React-logger (= 0.68.6)
- React-perflogger (= 0.68.6)
- RNCalendarEvents (2.2.0):
- React
- RNCAsyncStorage (1.17.3):
@@ -705,8 +705,8 @@ SPEC CHECKSUMS:
boost: a7c83b31436843459a1961bfd74b96033dc77234
CocoaLumberjack: b7e05132ff94f6ae4dfa9d5bce9141893a21d9da
DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662
FBLazyVector: 2b47ff52037bd9ae07cc9b051c9975797814b736
FBReactNativeSpec: 0e0d384ef17a33b385f13f0c7f97702c7cd17858
FBLazyVector: 74b042924fe14da854ac4e87cefc417f583b22b1
FBReactNativeSpec: cc0037b9914b9b1d92a15f179bc3e2e2c7cc0c6f
Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d
FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa
FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1
@@ -731,18 +731,18 @@ SPEC CHECKSUMS:
PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb
PromisesSwift: 99fddfe4a0ec88a56486644c0da106694c92a604
RCT-Folly: 4d8508a426467c48885f1151029bc15fa5d7b3b8
RCTRequired: 0f06b6068f530932d10e1a01a5352fad4eaacb74
RCTTypeSafety: b0ee81f10ef1b7d977605a2b266823dabd565e65
React: 3becd12bd51ea8a43bdde7e09d0f40fba7820e03
React-callinvoker: 11abfff50e6bf7a55b3a90b4dc2187f71f224593
React-Codegen: f8946ce0768fb8e92e092e30944489c4b2955b2d
React-Core: 203cdb6ee2657b198d97d41031c249161060e6ca
React-CoreModules: 6eb0c06a4a223fde2cb6a8d0f44f58b67e808942
React-cxxreact: afb0c6c07d19adbd850747fedeac20c6832d40b9
React-jsi: 14d37a6db2af2c1a49f6f5c2e4ee667c364ae45c
React-jsiexecutor: 45c0496ca8cef6b02d9fa0274c25cf458fe91a56
React-jsinspector: eb202e43b3879aba9a14f3f65788aec85d4e1ea9
React-logger: 98f663b292a60967ebbc6d803ae96c1381183b6d
RCTRequired: 92cbd71369a2de6add25fd2403ac39838f1b694f
RCTTypeSafety: 494e8af41d7410ed0b877210859ee3984f37e6b4
React: 59989499c0e8926a90d34a9ae0bdb2d1b5b53406
React-callinvoker: 8187db1c71cf2c1c66e8f7328a0cf77a2b255d94
React-Codegen: e806dc2f10ddae645d855cb58acf73ce41eb8ea5
React-Core: fc7339b493e368ae079850a4721bdf716cf3dba2
React-CoreModules: 2f54f6bbf2764044379332089fcbdaf79197021e
React-cxxreact: ee119270006794976e1ab271f0111a5a88b16bcf
React-jsi: ec691b2a475d13b1fd39f697145a526eeeb6661c
React-jsiexecutor: b4ce4afc5dd9c8fdd2ac59049ccf420f288ecef7
React-jsinspector: e396d5e56af08fce39f50571726b68a40f1e302d
React-logger: cec52b3f8fb0be0d47b2cb75dec69de60f2de3b6
react-native-background-timer: 17ea5e06803401a379ebf1f20505b793ac44d0fe
react-native-get-random-values: 30b3f74ca34e30e2e480de48e4add2706a40ac8f
react-native-keep-awake: afad8a51dfef9fe9655a6344771be32c8596d774
@@ -754,20 +754,20 @@ SPEC CHECKSUMS:
react-native-slider: 6e9b86e76cce4b9e35b3403193a6432ed07e0c81
react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457
react-native-video: bb6f12a7198db53b261fefb5d609dc77417acc8b
react-native-webrtc: ef315d8adb68e78298b22100377d12ef168efdb5
react-native-webrtc: 0df36747802476e758af6b6dceccdeaed8c826c2
react-native-webview: ea4899a1056c782afa96dd082179a66cbebf5504
React-perflogger: 0458a87ea9a7342079e7a31b0d32b3734fb8415f
React-RCTActionSheet: 22538001ea2926dea001111dd2846c13a0730bc9
React-RCTAnimation: 732ce66878d4aa151d56a0d142b1105aa12fd313
React-RCTBlob: 9cb9e3e9a41d27be34aaf89b0e0f52c7ca415d57
React-RCTImage: 6bd16627eb9c4bb79903c4cdec7c551266ee1a5b
React-RCTLinking: e9edfc8919c8fa9a3f3c7b34362811f58a2ebba4
React-RCTNetwork: 880eccd21bbe2660a0b63da5ccba75c46eceeaa6
React-RCTSettings: 8c85d8188c97d6c6bd470af6631a6c4555b79bb3
React-RCTText: bbd275ee287730c5acbab1aadc0db39c25c5c64e
React-RCTVibration: 9819a3bf6230e4b2a99877c21268b0b2416157a1
React-runtimeexecutor: b1f1995089b90696dbc2a7ffe0059a80db5c8eb1
ReactCommon: 149e2c0acab9bac61378da0db5b2880a1b5ff59b
React-perflogger: 46620fc6d1c3157b60ed28434e08f7fd7f3f3353
React-RCTActionSheet: b1f7e72a0ba760ec684df335c61f730b5179f5ff
React-RCTAnimation: d73b62d42867ab608dfb10e100d8b91106275b18
React-RCTBlob: b5f59693721d50967c35598158e6ca01b474c7de
React-RCTImage: 37cf34d0c2fbef2e0278d42a7c5e8ea06a9fed6b
React-RCTLinking: a11dced20019cf1c2ec7fd120f18b08f2851f79e
React-RCTNetwork: ba097188e5eac42e070029e7cedd9b978940833a
React-RCTSettings: 147073708a1c1bde521cf3af045a675682772726
React-RCTText: 23f76ebfb2717d181476432e5ecf1c6c4a104c5e
React-RCTVibration: be5f18ffc644f96f904e0e673ab639ca5d673ee8
React-runtimeexecutor: d5498cfb7059bf8397b6416db4777843f3f4c1e7
ReactCommon: 1974dab5108c79b40199f12a4833d2499b9f6303
RNCalendarEvents: 7e65eb4a94f53c1744d1e275f7fafcfaa619f7a3
RNCAsyncStorage: 005c0e2f09575360f142d0d1f1f15e4ec575b1af
RNCClipboard: 41d8d918092ae8e676f18adada19104fa3e68495
@@ -779,7 +779,7 @@ SPEC CHECKSUMS:
RNSound: 27e8268bdb0a1f191f219a33267f7e0445e8d62f
RNSVG: f3b60aeeaa81960e2e0536c3a9eef50b667ef3a9
RNWatch: dae6c858a2051dbdcfb00b9a86cf4d90400263b4
Yoga: c4d61225a466f250c35c1ee78d2d0b3d41fe661c
Yoga: 7929b92b1828675c1bebeb114dae8cb8fa7ef6a3
PODFILE CHECKSUM: e671cdcdb80fab67e305861c36bfae8ed5a5b0ef

View File

@@ -7,6 +7,7 @@
"cs": "Čeština",
"da": "Dansk",
"de": "Deutsch",
"dsb": "Dolnoserbšćina",
"el": "Ελληνικά",
"en": "English",
"enGB": "English (United Kingdom)",

View File

@@ -58,7 +58,7 @@
"today": "Днес"
},
"chat": {
"error": "Грешка: вашето съобщение не бе изпратено, пради: {{error}}",
"error": "Грешка: вашето съобщение не бе изпратено, поради: {{error}}",
"fieldPlaceHolder": "Въведете съобщението",
"messageTo": "Лично съобщение до {{recipient}}",
"messagebox": "Въведете съобщение",

View File

@@ -11,7 +11,6 @@
"defaultEmail": "La vostra adreça de correu electrònic predeterminada",
"disabled": "No podeu convidar-hi persones.",
"failedToAdd": "No s'han pogut afegir-hi participants",
"footerText": "La marcació està desactivada.",
"googleEmail": "Correu de Google",
"inviteMoreHeader": "Sou l'única persona en la reunió",
"inviteMoreMailSubject": "Entra a la reunió {{appName}}",
@@ -97,6 +96,7 @@
"messageAccessibleTitleMe": "jo dic:",
"messageTo": "Missatge privat per a {{recipient}}",
"messagebox": "Escriviu un missatge",
"newMessages": "Missatges nous",
"nickname": {
"popover": "Trieu un sobrenom",
"title": "Introduïu un sobrenom per a usar el xat",
@@ -116,6 +116,7 @@
},
"chromeExtensionBanner": {
"buttonText": "Instal·la l'extensió de Chrome",
"buttonTextEdge": "Instal·la l'extensió d'Edge",
"close": "Tanca",
"dontShowAgain": "No m'ho mostris més",
"installExtensionText": "Instal·la l'extensió per a la integració amb Google Calendar i Office 365"
@@ -206,6 +207,9 @@
"selectADevice": "Seleccioneu un aparell",
"testAudio": "Reprodueix un so de prova"
},
"dialIn": {
"screenTitle": "Resum de la trucada"
},
"dialOut": {
"statusMessage": "ara és {{status}}"
},
@@ -267,6 +271,7 @@
"gracefulShutdown": "El nostre servei ara mateix és en manteniment. Torneu-ho a intentar més tard.",
"grantModeratorDialog": "Esteu segur que voleu concedir drets de moderador a {{participantName}}?",
"grantModeratorTitle": "Concedeix drets de moderador",
"hide": "Amaga",
"hideShareAudioHelper": "No tornis a mostrar aquest diàleg",
"incorrectPassword": "El nom o la contrasenya no són correctes",
"incorrectRoomLockPassword": "La contrasenya no és correcta",
@@ -281,7 +286,6 @@
"linkMeetingTitle": "Enllaça la reunió a Salesforce",
"liveStreaming": "Transmissió en directe",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "No és possible mentre l'enregistrament estigui actiu",
"liveStreamingDisabledTooltip": "No es pot iniciar la transmissió en directe.",
"localUserControls": "Controls locals d'usuari",
"lockMessage": "No s'ha pogut blocar la conferència.",
"lockRoom": "Afegeix una $t(lockRoomPassword) de reunió",
@@ -336,7 +340,6 @@
"recentlyUsedObjects": "Els objectes que heu usat recentment",
"recording": "Enregistrament",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "No és possible mentre hi ha una transmissió en directe activa",
"recordingDisabledTooltip": "No es pot enregistrar.",
"rejoinNow": "Torna a entrar ara",
"remoteControlAllowedMessage": "{{user}} ha acceptat la petició de control remot!",
"remoteControlDeniedMessage": "{{user}} ha rebutjat la petició de control remot!",
@@ -386,6 +389,7 @@
"shareYourScreenDisabled": "S'ha inhabilitat la compartició de pantalla.",
"sharedVideoDialogError": "Error: URL no vàlid",
"sharedVideoLinkPlaceholder": "Enllaç de YouTube o enllaç directe del vídeo",
"show": "Mostra",
"start": "Inicia",
"startLiveStreaming": "Inicia la transmissió en directe",
"startRecording": "Inicia l'enregistrament",
@@ -476,9 +480,11 @@
"noRoom": "No s'ha indicat cap sala a què marcar.",
"numbers": "Números de marcatge",
"password": "$t(lockRoomPasswordUppercase): ",
"reachedLimit": "Heu arribat al límit del vostre pla.",
"sip": "Adreça SIP",
"title": "Comparteix",
"tooltip": "Comparteix l'enllaç i la informació de marcatge d'aquesta reunió"
"tooltip": "Comparteix l'enllaç i la informació de marcatge d'aquesta reunió",
"upgradeOptions": "Vegeu les opcions d'actualització"
},
"inlineDialogFailure": {
"msg": "Vam ensopegar una mica.",
@@ -513,6 +519,10 @@
"toggleShortcuts": "Mostra o amaga les dreceres de teclat",
"videoMute": "Inicia o atura la càmera"
},
"largeVideo": {
"screenIsShared": "Esteu compartint la pantalla",
"showMeWhatImSharing": "Mostra'm què estic compartint"
},
"liveStreaming": {
"busy": "Treballem per a alliberar recursos de transmissió. Torneu-ho a intentar en uns minuts.",
"busyTitle": "Ara mateix, tots els reproductors són ocupats",
@@ -616,6 +626,7 @@
"no": "No",
"participant": "Participant",
"participantStats": "Estadístiques del participant",
"selectTabTitle": "🎥 Trieu aquesta pestanya per a enregistrar",
"sessionToken": "Identificador de la sessió",
"start": "Inicia l'enregistrament",
"stop": "Atura l'enregistrament",
@@ -638,6 +649,8 @@
"connectedOneMember": "{{name}} s'ha unit a la reunió",
"connectedThreePlusMembers": "{{name}} i molts altres s'han unit a la reunió",
"connectedTwoMembers": "{{first}} i {{second}} s'han unit a la reunió",
"dataChannelClosed": "Qualitat del vídeo deteriorada",
"dataChannelClosedDescription": "El canal pont s'ha desconnectat i per la qualitat de vídeo està limitada al valor inferior.",
"disconnected": "desconnectat",
"displayNotifications": "Mostra les notificacions sobre",
"focus": "Focus de la conferència",
@@ -658,6 +671,8 @@
"linkToSalesforceKey": "Enllaça aquesta reunió",
"linkToSalesforceProgress": "S'està enllaçant la reunió a Salesforce...",
"linkToSalesforceSuccess": "La reunió s'ha enllaçat a Salesforce",
"localRecordingStarted": "{{name}} ha iniciat un enregistrament local.",
"localRecordingStopped": "{{name}} ha aturat has stopped a local recording.",
"me": "Jo",
"moderationInEffectCSDescription": "Aixequeu la mà si voleu compartir la pantalla.",
"moderationInEffectCSTitle": "El moderador ha blocat la compartició de pantalla",
@@ -678,6 +693,10 @@
"newDeviceAction": "Usa",
"newDeviceAudioTitle": "S'ha detectat un aparell d'àudio nou",
"newDeviceCameraTitle": "S'ha detectat una càmera nova",
"noiseSuppressionDesktopAudioDescription": "La supressió de soroll no es pot activar mentre es comparteix l'àudio de l'escriptori. Desactiveu-lo i proveu una altra vegada.",
"noiseSuppressionFailedTitle": "No s'ha pogut iniciar la supressió de soroll",
"noiseSuppressionNoTrackDescription": "Abans, activeu el vostre micròfon.",
"noiseSuppressionStereoDescription": "Ara per ara, no és possible la supressió de soroll d'àudio en estèreo",
"oldElectronClientDescription1": "Sembla que useu una versió antiga del client Jitsi Meet, que té vulnerabilitats de seguretat conegudes. Assegureu-vos d'actualitzar-lo",
"oldElectronClientDescription2": "última construcció",
"oldElectronClientDescription3": "ara!",
@@ -813,6 +832,7 @@
"initiated": "S'ha iniciat la trucada",
"joinAudioByPhone": "Entra amb àudio de telèfon",
"joinMeeting": "Entra a la reunió",
"joinMeetingInLowBandwidthMode": "Uneix-t'hi en mode de poca amplada de banda",
"joinWithoutAudio": "Entra sense àudio",
"keyboardShortcuts": "Activa les dreceres del teclat",
"linkCopied": "L'enllaç s'ha copiat al porta-retalls",
@@ -888,13 +908,23 @@
"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.",
"localRecordingNoVideo": "El vídeo no s'està enregistrant",
"localRecordingStartWarning": "Assegureu-vos que atureu l'enregistrament abans de sortir de la reunió per a poder-lo desar.",
"localRecordingStartWarningTitle": "Atura l'enregistrament per a desar-lo",
"localRecordingVideoStop": "Aturar el vídeo també aturarà l'enregistrament local. Segur que voleu continuar?",
"localRecordingVideoWarning": "Per a enregistrar el vostre vídeo, cal que ho feu en començar l'enregistrament",
"localRecordingWarning": "Assegureu-vos de triar la pestanya actual per a poder usar el vídeo i àudios correctes. L'enregistrament actualment està limitat a 1 GB. Això són, aproximadament, 100 minuts.",
"loggedIn": "Sessió iniciada com a {{userName}}",
"noStreams": "No s'ha detectat flux d'àudio ni vídeo.",
"off": "S'ha aturat l'enregistrament",
"offBy": "{{name}} ha aturat l'enregistrament",
"on": "L'enregistrament ha començat",
"onBy": "{{name}} ha iniciat l'enregistrament",
"onlyRecordSelf": "Enregistra només el meu àudio i vídeo",
"pending": "S'està preparant per a enregistrar la reunió...",
"rec": "ENREG",
"saveLocalRecording": "Desa el fitxer de l'enregistrament en local (beta)",
"serviceDescription": "El servei d'enregistrament desarà el vostre enregistrament",
"serviceDescriptionCloud": "Enregistrament al núvol",
"serviceDescriptionCloudInfo": "Les reunions enregistrades s'esborren automàticament 24 hores després de l'enregistrament.",
@@ -902,6 +932,7 @@
"sessionAlreadyActive": "Aquesta sessió ja s'està enregistrant o emetent en directe.",
"signIn": "Inicia la sessió",
"signOut": "Tanca la sessió",
"surfaceError": "Trieu la pestanya actual.",
"title": "Enregistrament",
"unavailable": "Vaja! El servei {{serviceName}} ara mateix no és disponible. Treballem per a resoldre el problema. Torneu-ho a intentar més tard.",
"unavailableTitle": "L'enregistrament no és disponible",
@@ -918,6 +949,7 @@
"title": "Opcions de seguretat"
},
"settings": {
"buttonLabel": "Paràmetres",
"calendar": {
"about": "La integració de l'agenda {{appName}} s'usa per a accedir de forma segura a la vostra agenda perquè pugui llegir els esdeveniments pròxims.",
"disconnect": "Desconnectat",
@@ -941,6 +973,7 @@
"name": "Nom",
"noDevice": "Cap",
"participantJoined": "S'ha unit un participant",
"participantKnocking": "El participant ha entrat a la sala d'espera",
"participantLeft": "Un participant ha sortit de la reunió",
"playSounds": "Reprodueix el so",
"reactions": "Reaccions de la reunió",
@@ -970,13 +1003,21 @@
"disableCrashReportingWarning": "Esteu segur que voleu desactivar l'informe de fallades? La configuració s'aplicarà després de reiniciar l'aplicació.",
"disableP2P": "Desactiva el mode d'igual a igual",
"displayName": "Nom visible",
"displayNamePlaceholderText": "P. ex.: Pere Cullera",
"email": "Adreça electrònica",
"emailPlaceholderText": "email@example.com",
"goTo": "Ves a",
"header": "Configuració",
"help": "Ajuda",
"links": "Enllaços",
"privacy": "Privadesa",
"profileSection": "Perfil",
"serverURL": "URL del servidor",
"showAdvanced": "Mostra la configuració avançada",
"startCarModeInLowBandwidthMode": "Inicia el mode cotxe en el mode d'amplada de banda baixa",
"startWithAudioMuted": "Comença amb l'àudio silenciat",
"startWithVideoMuted": "Comença amb el vídeo desactivat",
"terms": "Condicions",
"version": "Versió"
},
"share": {
@@ -1003,6 +1044,7 @@
},
"startupoverlay": {
"genericTitle": "La reunió requereix usar el micròfon i la càmera.",
"policyText": "",
"title": "{{app}} requereix usar el micròfon i la càmera."
},
"suspendedoverlay": {
@@ -1013,6 +1055,7 @@
"termsView": {
"title": "Condicions"
},
"toggleTopPanelLabel": "Mostra o amaga el panell superior",
"toolbar": {
"Settings": "Configuració",
"accessibilityLabel": {
@@ -1030,6 +1073,7 @@
"document": "Activa o desactiva el document compartit",
"download": "Baixeu les nostres aplicacions",
"embedMeeting": "Insereix la reunió",
"endConference": "Finalitza la reunió per a tothom",
"expand": "Expandeix",
"feedback": "Deixa comentaris",
"fullScreen": "Activa o desactiva la pantalla completa",
@@ -1054,6 +1098,7 @@
"muteEveryoneElse": "Silencia tots els altres participants",
"muteEveryoneElsesVideoStream": "Atura el vídeo a tots els altres",
"muteEveryonesVideoStream": "Atura el vídeo a tothom",
"noiseSuppression": "Supressió de soroll",
"participants": "Participants",
"pip": "Activa o desactiva el mode imatge en imatge",
"privateMessage": "Envia un missatge privat",
@@ -1079,7 +1124,8 @@
"toggleCamera": "Activa o desactiva la càmera",
"toggleFilmstrip": "Mostra o amaga la cinta",
"videoblur": "Activa o desactiva el desenfocament del vídeo",
"videomute": "Activa o desactiva la càmera"
"videomute": "Activa o desactiva la càmera",
"whiteboard": "Mostra o amaga la pissarra"
},
"addPeople": "Afegeix persones a la trucada",
"audioOnlyOff": "Desactiva el mode de poca amplada de banda",
@@ -1093,12 +1139,14 @@
"clap": "Picament de mans",
"closeChat": "Tanca el xat",
"closeReactionsMenu": "Tanca el menú de reaccions",
"disableNoiseSuppression": "Desactiva la supressió de soroll",
"disableReactionSounds": "Podeu desactivar els sons de reacció per a aquesta reunió",
"documentClose": "Tanca el document compartit",
"documentOpen": "Obre el document compartit",
"download": "Baixeu les nostres aplicacions",
"e2ee": "Xifratge d'extrem a extrem",
"embedMeeting": "Insereix la reunió",
"endConference": "Finalitza la reunió per a tothom",
"enterFullScreen": "Mostra en pantalla completa",
"enterTileView": "Mostra en mode mosaic",
"exitFullScreen": "Surt de la pantalla completa",
@@ -1107,6 +1155,7 @@
"giphy": "Mostra o amaga el menú GIPHY",
"hangup": "Surt la reunió",
"help": "Ajuda",
"hideWhiteboard": "Amaga la pissarra",
"invite": "Convida-hi persones",
"joinBreakoutRoom": "Entra a la sala de descans",
"laugh": "Riure",
@@ -1129,6 +1178,7 @@
"noAudioSignalDialInDesc": "També podeu marcar usant:",
"noAudioSignalDialInLinkDesc": "Números de marcatge",
"noAudioSignalTitle": "No entra cap so pel vostre micròfon!",
"noiseSuppression": "Supressió de soroll",
"noisyAudioInputDesc": "Sembla que el vostre micròfon fa soroll, considereu de silenciar-lo o canviar l'aparell.",
"noisyAudioInputTitle": "Sembla que el micròfon fa soroll!",
"openChat": "Obre el xat",
@@ -1151,6 +1201,7 @@
"shareaudio": "Comparteix l'àudio",
"sharedvideo": "Comparteix el vídeo",
"shortcuts": "Mostra les dreceres",
"showWhiteboard": "Mostra la pissarra",
"silence": "Silenci",
"speakerStats": "Estadístiques de l'interlocutor",
"startScreenSharing": "Atura la compartició de la pantalla",
@@ -1174,8 +1225,12 @@
"labelToolTip": "La reunió s'està transcrivint",
"off": "La transcripció s'ha aturat",
"pending": "S'està preparant per a enregistrar la reunió...",
"sourceLanguageDesc": "La llengua actual de la reunió és <b>{{sourceLanguage}}</b>. <br/> Podeu canviar-la",
"sourceLanguageHere": "aquí",
"start": "Activa els subtítols",
"stop": "Desactiva els subtítols",
"subtitles": "Subtítols",
"subtitlesOff": "Inactiu",
"tr": "TR"
},
"userMedia": {
@@ -1311,6 +1366,7 @@
"roomname": "Introduïu el nom de la sala",
"roomnameHint": "Introduïu el nom o l'URL de la sala on voleu entrar. Podeu crear un nom, només cal que les persones amb qui us reuniu el coneguin i introdueixin el mateix nom.",
"sendFeedback": "Envia comentaris",
"settings": "Paràmetres",
"startMeeting": "Inicia la reunió",
"terms": "Condicions",
"title": "Videoconferència segura, plena de funcionalitats i completament gratuïta i lliure"

View File

@@ -184,13 +184,21 @@
"deepLinking": {
"appNotInstalled": "Sie benötigen die „{{app}}“-App, um der Konferenz auf dem Smartphone beizutreten.",
"description": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. Versuchen Sie es erneut oder treten Sie der Konferenz in {{app}} im Web bei.",
"descriptionNew": "Nichts passiert? Wir haben versucht, die Konferenz in {{app}} zu öffnen. <br /><br /> Versuchen Sie es erneut oder treten Sie der Konferenz im Web bei.",
"descriptionWithoutWeb": "Ist nichts passiert? Wir haben versucht, Ihre Besprechung in der „{{app}}“-Desktop-App zu starten.",
"downloadApp": "App herunterladen",
"downloadMobileApp": "Aus dem App Store herunterladen",
"ifDoNotHaveApp": "Wenn Sie die App noch nicht haben:",
"ifHaveApp": "Wenn Sie die App bereits haben:",
"joinInApp": "Mit der App am Meeting teilnehmen",
"joinInAppNew": "Mit der App",
"joinInBrowser": "Im Browser",
"launchMeetingLabel": "Wie möchten Sie an der Konferenz teilnehmen?",
"launchWebButton": "Im Web öffnen",
"noMobileApp": "Sie haben die App noch nicht installiert?",
"termsAndConditions": "Indem Sie fortfahren, stimmen Sie underen<a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>Nutzungsbedingungen</a> zu.",
"title": "Die Konferenz wird in {{app}} geöffnet …",
"titleNew": "Konferenz starten ...",
"tryAgainButton": "Erneut mit der nativen Applikation versuchen",
"unsupportedBrowser": "Sie verwenden einen Browser, der noch nicht unterstützt wird."
},
@@ -203,6 +211,12 @@
"microphonePermission": "Fehler beim Bezug der Mikrofon-Zugriffsberechtigungen"
},
"deviceSelection": {
"hid": {
"callControl": "Anrufsteuerung",
"connectedDevices": "Verbundene Geräte:",
"deleteDevice": "Gerät löschen",
"pairDevice": "Gerät verbinden"
},
"noPermission": "Berechtigungen nicht erteilt",
"previewUnavailable": "Keine Vorschau verfügbar",
"selectADevice": "Ein Gerät wählen",
@@ -226,7 +240,9 @@
"WaitingForHostTitle": "Warten auf den Beginn der Konferenz …",
"Yes": "Ja",
"accessibilityLabel": {
"liveStreaming": "Livestream"
"close": "Popup schließen",
"liveStreaming": "Livestream",
"sharingTabs": "Optionen zum Teilen"
},
"add": "Hinzufügen",
"addMeetingNote": "Notiz zu dieser Konferenz hinzufügen",
@@ -438,6 +454,11 @@
"veryBad": "Sehr schlecht",
"veryGood": "Sehr gut"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "Videominiaturen"
}
},
"giphy": {
"noResults": "Keine Ergebnisse :(",
"search": "GIPHY durchsuchen"
@@ -654,6 +675,7 @@
"dataChannelClosedDescription": "Die Steuerungsverbindung (Bridge Channel) wurde unterbrochen, daher ist die Videoqulität auf die schlechteste Stufe limitiert.",
"disconnected": "getrennt",
"displayNotifications": "Benachrichtigungen anzeigen für",
"dontRemindMe": "Nicht erinnern",
"focus": "Konferenzleitung",
"focusFail": "{{component}} ist im Moment nicht verfügbar wiederholen in {{ms}} Sekunden",
"gifsMenu": "GIPHY",
@@ -662,6 +684,7 @@
"invitedOneMember": "{{name}} wurde eingeladen",
"invitedThreePlusMembers": "{{name}} und {{count}} andere wurden eingeladen",
"invitedTwoMembers": "{{first}} und {{second}} wurden eingeladen",
"joinMeeting": "Beitreten",
"kickParticipant": "{{kicked}} wurde von {{kicker}} ausgewiesen",
"leftOneMember": "{{name}} hat die Konferenz verlassen",
"leftThreePlusMembers": "{{name}} und Weitere haben die Konferenz verlassen",
@@ -751,6 +774,7 @@
"headings": {
"lobby": "Lobby ({{count}})",
"participantsList": "Anwesende ({{count}})",
"visitors": "Gäste ({{count}})",
"waitingLobby": "In der Lobby ({{count}})"
},
"search": "Suche Anwesende",
@@ -758,6 +782,7 @@
},
"passwordDigitsOnly": "Bis zu {{number}} Ziffern",
"passwordSetRemotely": "von einer anderen Person gesetzt",
"pinParticipant": "{{participantName}} - anheften",
"pinnedParticipant": "Die Person ist angeheftet",
"polls": {
"answer": {
@@ -916,6 +941,7 @@
"localRecordingVideoWarning": "Um Ihr eigenes Kamerabild aufzuzeichnen, müssen Sie Ihre Kamera beim Start der Aufnahme einschalten",
"localRecordingWarning": "Bitte prüfen Sie, dass das aktuelle Tab auswählen, um Bild und Ton aufzuzeichnen. Die Länge der Aufzeichnung ist aktuell auf 1GB beschränkt, was ungefähr 100 Minuten entspricht.",
"loggedIn": "Als {{userName}} angemeldet",
"noMicPermission": "Zugriff auf Mikrofon fehlgeschlagen. Bitte erlauben Sie den Zugriff auf das Mikrofon.",
"noStreams": "Kein Ton oder Video erkannt.",
"off": "Aufnahme gestoppt",
"offBy": "{{name}} stoppte die Aufnahme",
@@ -949,6 +975,7 @@
"title": "Sicherheitsoptionen"
},
"settings": {
"audio": "Audio",
"buttonLabel": "Einstellungen",
"calendar": {
"about": "Die Kalenderintegration von {{appName}} wird verwendet, um ein sicheres Zugreifen auf Ihren Kalender und Auslesen der bevorstehenden Termine zu ermöglichen.",
@@ -969,9 +996,11 @@
"maxStageParticipants": "Maximale Anzahl an Personen, die zur Hauptansicht angeheftet werden können",
"microphones": "Mikrofon",
"moderator": "Moderation",
"moderatorOptions": "Moderationseinstellungen",
"more": "Mehr",
"name": "Name",
"noDevice": "Kein",
"notifications": "Benachrichtigungen",
"participantJoined": "Neue Person nimmt teil",
"participantKnocking": "Person hat Lobby betreten",
"participantLeft": "Person verlässt die Konferenz",
@@ -982,13 +1011,14 @@
"selectCamera": "Kamera",
"selectMic": "Mikrofon",
"selfView": "Eigene Ansicht",
"sounds": "Hinweistöne",
"shortcuts": "Tastaturkürzel",
"speakers": "Lautsprecher",
"startAudioMuted": "Alle Personen treten stummgeschaltet bei",
"startReactionsMuted": "Interaktionstöne für alle deaktivieren",
"startVideoMuted": "Alle Personen treten ohne Video bei",
"talkWhileMuted": "Wenn bei Stummschaltung gesprochen wird",
"title": "Einstellungen"
"title": "Einstellungen",
"video": "Kamera"
},
"settingsView": {
"advanced": "Erweitert",
@@ -1069,18 +1099,29 @@
"cc": "Untertitel ein-/ausschalten",
"chat": "Chatfenster öffnen / schließen",
"clap": "Klatschen",
"closeChat": "Chat schließen",
"closeMoreActions": "„Weitere Einstellungen“ schließen",
"closeParticipantsPane": "Anwesendenliste schließen",
"collapse": "Einklappen",
"document": "Geteiltes Dokument schließen",
"documentClose": "Geteiltes Dokument schließen",
"documentOpen": "Geteiltes Dokument öffnen",
"download": "Unsere Apps herunterladen",
"embedMeeting": "Konferenz einbetten",
"endConference": "Konferenz für alle beenden",
"enterFullScreen": "Vollbildmodus einschalten",
"enterTileView": "Kachelansicht einschalten",
"exitFullScreen": "Vollbildansicht ausschalten",
"exitTileView": "Kachelansicht ausschalten",
"expand": "Ausklappen",
"feedback": "Feedback hinterlassen",
"fullScreen": "Vollbildmodus ein-/ausschalten",
"giphy": "GIPHY ein-/ausschalten",
"grantModerator": "Moderationsrechte vergeben",
"hangup": "Konferenz verlassen",
"heading": "Toolbar",
"help": "Hilfe",
"hideWhiteboard": "Whiteboard ausblenden",
"invite": "Person einladen",
"kick": "Person entfernen",
"laugh": "Lachen",
@@ -1090,6 +1131,7 @@
"lobbyButton": "Lobbymodus ein-/ausschalten",
"localRecording": "Lokale Aufzeichnungssteuerelemente ein-/ausschalten",
"lockRoom": "Konferenzpasswort ein-/ausschalten",
"lowerHand": "Hand senken",
"moreActions": "Menü „Weitere Einstellungen“ ein-/ausschalten",
"moreActionsMenu": "Menü „Weitere Einstellungen“",
"moreOptions": "Menü „Weitere Optionen“",
@@ -1099,6 +1141,7 @@
"muteEveryoneElsesVideoStream": "Alle anderen Kameras ausschalten",
"muteEveryonesVideoStream": "Alle Kameras ausschalten",
"noiseSuppression": "Rauschunterdrückung",
"openChat": "Chat öffnen",
"participants": "Anwesende",
"pip": "Bild-in-Bild-Modus ein-/ausschalten",
"privateMessage": "Private Nachricht senden",
@@ -1117,15 +1160,19 @@
"sharedvideo": "Videofreigabe ein-/ausschalten",
"shortcuts": "Tastenkombinationen ein-/ausblenden",
"show": "Im Vordergrund anzeigen",
"showWhiteboard": "Whiteboard anzeigen",
"silence": "Stille",
"speakerStats": "Sprechstatistik ein-/ausblenden",
"stopScreenSharing": "Bildschirmfreigabe beenden",
"stopSharedVideo": "Videofreigabe beenden",
"surprised": "Überrascht",
"tileView": "Kachelansicht ein-/ausschalten",
"toggleCamera": "Kamera wechseln",
"toggleFilmstrip": "Miniaturansichten ein-/ausschalten",
"unmute": "Stummschaltung aufheben",
"videoblur": "Unscharfer Hintergrund ein-/ausschalten",
"videomute": "„Video stummschalten“ ein-/ausschalten",
"whiteboard": "Whiteboard ein-/ausschalten"
"videounmute": "Kamera einschalten"
},
"addPeople": "Personen zur Konferenz hinzufügen",
"audioOnlyOff": "Modus „Nur Audio“ deaktivieren",
@@ -1138,6 +1185,7 @@
"chat": "Chat öffnen / schließen",
"clap": "Klatschen",
"closeChat": "Chat schließen",
"closeParticipantsPane": "Anwesenheitsliste schließen",
"closeReactionsMenu": "Interaktionsmenü schließen",
"disableNoiseSuppression": "Rauschunterdrückung deaktivieren",
"disableReactionSounds": "Sie können die Interaktionstöne für diese Konferenz deaktivieren",
@@ -1146,6 +1194,7 @@
"download": "Unsere Apps herunterladen",
"e2ee": "Ende-zu-Ende-Verschlüsselung",
"embedMeeting": "Konferenz einbetten",
"enableNoiseSuppression": "Rauschunterdrückung einschalten",
"endConference": "Konferenz für alle beenden",
"enterFullScreen": "Vollbildmodus",
"enterTileView": "Kachelansicht einschalten",
@@ -1170,7 +1219,7 @@
"lowerYourHand": "Hand senken",
"moreActions": "Weitere Einstellungen",
"moreOptions": "Weitere Optionen",
"mute": "Mikrofon aktivieren / deaktivieren",
"mute": "Stummschalten",
"muteEveryone": "Alle stummschalten",
"muteEveryonesVideo": "Alle Kameras ausschalten",
"noAudioSignalDesc": "Wenn Sie das Gerät nicht absichtlich über die Systemeinstellungen oder die Hardware stumm geschaltet haben, sollten Sie einen Wechsel des Geräts in Erwägung ziehen.",
@@ -1214,8 +1263,10 @@
"talkWhileMutedPopup": "Versuchen Sie zu sprechen? Ihr Mikrofon ist stummgeschaltet.",
"tileViewToggle": "Kachelansicht ein-/ausschalten",
"toggleCamera": "Kamera wechseln",
"unmute": "Stummschaltung aufheben",
"videoSettings": "Kameraeinstellungen",
"videomute": "Kamera starten / stoppen"
"videomute": "Kamera stoppen",
"videounmute": "Kamera einschalten"
},
"transcribing": {
"ccButtonTooltip": "Untertitel ein-/ausschalten",
@@ -1233,6 +1284,7 @@
"subtitlesOff": "Ausschalten",
"tr": "TR"
},
"unpinParticipant": "{{participantName}} - Nicht mehr anheften",
"userMedia": {
"androidGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
"chromeGrantPermissions": "Wählen Sie <b><i>Zulassen</i></b>, wenn der Browser um Berechtigungen bittet.",
@@ -1271,9 +1323,11 @@
"ldTooltip": "Video wird in niedriger Auflösung angezeigt",
"lowDefinition": "Niedrige Auflösung",
"performanceSettings": "Qualitätseinstellungen",
"recording": "Aufnahme läuft",
"sd": "SD",
"sdTooltip": "Video wird in Standardauflösung angezeigt",
"standardDefinition": "Standardauflösung"
"standardDefinition": "Standardauflösung",
"streaming": "Streaming läuft"
},
"videothumbnail": {
"connectionInfo": "Verbindungsinformationen",
@@ -1285,6 +1339,7 @@
"grantModerator": "Moderationsrechte vergeben",
"hideSelfView": "Eigene Ansicht ausblenden",
"kick": "Hinauswerfen",
"mirrorVideo": "Mein Video spiegeln",
"moderator": "Moderation",
"mute": "Person ist stumm geschaltet",
"muted": "Stummgeschaltet",
@@ -1322,6 +1377,7 @@
"webAssemblyWarning": "WebAssembly wird nicht unterstützt",
"webAssemblyWarningDescription": "WebAssembly ist deaktiviert oder wird in diesem Browser nicht unterstützt"
},
"visitorsLabel": "Anzahl Gäste: {{count}}",
"volumeSlider": "Lautstärkeregler",
"welcomepage": {
"accessibilityLabel": {
@@ -1354,6 +1410,7 @@
"microsoftLogo": "Microsoft Logo",
"policyLogo": "Richtlinienlogo"
},
"meetingsAccessibilityLabel": "Konferenzen",
"mobileDownLoadLinkAndroid": "Android App Download",
"mobileDownLoadLinkFDroid": "F-Droid App Download",
"mobileDownLoadLinkIos": "iOS App Download",
@@ -1373,5 +1430,10 @@
"terms": "AGB",
"title": "Sichere, voll funktionale und komplett kostenlose Videokonferenzen",
"upcomingMeetings": "Ihre zukünftigen Konferenzen"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Whiteboard"
}
}
}

1379
lang/main-dsb.json Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -46,21 +46,15 @@
"today": "Today"
},
"chat": {
"error": "Error: your message \"{{originalText}}\" was not sent. Reason: {{error}}",
"fieldPlaceHolder": "",
"messageTo": "",
"messagebox": "Type a message",
"nickname": {
"popover": "Choose a nickname",
"title": "Enter a nickname to use chat",
"titleWithPolls": "Enter a nickname to use chat"
},
"noMessagesMessage": "",
"privateNotice": "",
"sendButton": "Send",
"title": "Chat",
"titleWithPolls": "Chat",
"you": ""
"titleWithPolls": "Chat"
},
"chromeExtensionBanner": {
"buttonText": "",

View File

@@ -838,7 +838,7 @@
"selectCamera": "Cámara",
"selectMic": "Micrófono",
"sounds": "Sonidos",
"speakers": "Parlantes",
"speakers": "Altavoces",
"startAudioMuted": "Todos inician silenciados",
"startVideoMuted": "Todos inician con cámara desactivada",
"talkWhileMuted": "Hablar en silencio",

View File

@@ -429,7 +429,12 @@
"startSilentTitle": "",
"suboptimalExperienceDescription": "Valitettavasti {{appName}} ei taida toimia kovin hyvin täällä. Yritämme löytää parannuskeinoja, mutta sillä välin kannattaa käyttää jotain <a href='{{recommendedBrowserPageLink}}' target='_blank'>täysin tuettua selainta</a>.",
"suboptimalExperienceTitle": "Selainvaroitus",
"unmute": ""
"unmute": "Poista mykistys"
},
"participantsPane": {
"actions": {
"muteEveryoneElse": "Mykistä kaikki muut"
}
},
"passwordDigitsOnly": "",
"passwordSetRemotely": "",
@@ -563,11 +568,13 @@
"moreActions": "Säädä Lisää toimintoja -valikkoa",
"moreActionsMenu": "Lisää toimintoja -valikko",
"mute": "Säädä äänen mykistystä",
"muteEveryoneElse": "Mykistä kaikki muut",
"pip": "Säädä Kuva kuvassa (PiP) -tilaa",
"profile": "Muokkaa profiilia",
"raiseHand": "Säädä käden nostoa",
"recording": "Säädä nauhoitusta",
"remoteMute": "Mykistä osanottaja",
"selectBackground": "Valitse tausta",
"shareRoom": "Kutsu joku",
"shareYourScreen": "Säädä näytön jakoa",
"sharedvideo": "Säädä videon jakoa",
@@ -657,29 +664,37 @@
"pending": "{{displayName}} on kutsuttu"
},
"videoStatus": {
"adjustFor": "Muokkaa:",
"audioOnly": "ÄÄNI",
"audioOnlyExpanded": "Käytössäsi on Vain ääni -tila. Se säästää kaistanleveyttä, mutta et näe muiden videoita.",
"callQuality": "",
"bestPerformance": "Paras suorituskyky",
"callQuality": "Videon laatu",
"hd": "HD",
"highDefinition": "Teräväpiirto",
"highestQuality": "Korkein laatu",
"labelTooiltipNoVideo": "Ei videota",
"labelTooltipAudioOnly": "Vain ääni -tila käytössä",
"ld": "LD",
"lowDefinition": "Alhainen kuvanlaatu",
"onlyAudioAvailable": "Vain ääni -tila on käytettävissä",
"onlyAudioSupported": "Tässä selaimessa tuemme vain ääntä.",
"performanceSettings": "Suorituskykyasetukset",
"sd": "SD",
"standardDefinition": "Vakiopiirto"
},
"videothumbnail": {
"domute": "Mykistä",
"domuteOthers": "Mykistä kaikki muut",
"domuteVideoOfOthers": "Estä muiden kamera",
"flip": "Käännä",
"kick": "Poista",
"moderator": "Valvoja",
"mute": "",
"mute": "Osallistuja on mykistetty",
"muted": "Mykistetty",
"pinToStage": "Kiinnitä ruutuun",
"remoteControl": "Etäkäyttö",
"show": "",
"show": "Näytä ruudulla",
"unpinFromStage": "Irroita kiinnitys",
"videomute": ""
},
"welcomepage": {

View File

@@ -11,7 +11,6 @@
"defaultEmail": "Votre email par défaut",
"disabled": "Vous ne pouvez pas inviter quelqu'un.",
"failedToAdd": "Erreur lors de l'ajout des participants",
"footerText": "Appels sortants désactivés.",
"googleEmail": "Gmail",
"inviteMoreHeader": "Vous êtes seul(e) dans la réunion",
"inviteMoreMailSubject": "Rejoindre une réunion {{appName}}",
@@ -31,6 +30,7 @@
},
"audioDevices": {
"bluetooth": "Bluetooth",
"car": "Système audio du véhicule",
"headphones": "Écouteurs",
"none": "Aucune source audio n'est disponible",
"phone": "Téléphone",
@@ -76,6 +76,16 @@
"refresh": "Rafraîchir le calendrier",
"today": "Aujourd'hui"
},
"carmode": {
"actions": {
"selectSoundDevice": "Sélectionnez le dispositif audio"
},
"labels": {
"buttonLabel": "Mode voiture",
"title": "Mode voiture",
"videoStopped": "Votre vidéo est arrêtée"
}
},
"chat": {
"enter": "Entrez dans le salon",
"error": "Erreur : votre message n'a pas été envoyé. Raison : {{error}}",
@@ -86,6 +96,7 @@
"messageAccessibleTitleMe": "Je dis: ",
"messageTo": "Message privé à {{recipient}}",
"messagebox": "Saisissez un message",
"newMessages": "Nouveaux messages",
"nickname": {
"popover": "Choisissez un pseudonyme",
"title": "Entrez un pseudonyme pour utiliser le chat",
@@ -105,6 +116,7 @@
},
"chromeExtensionBanner": {
"buttonText": "Installer l'extension Chrome",
"buttonTextEdge": "Installer lextension Edge",
"close": "Fermer",
"dontShowAgain": "Ne plus me montrer ceci",
"installExtensionText": "Installer l'extension pour l'intégration de Google Calendar et Office 365"
@@ -135,6 +147,7 @@
"bridgeCount": "Nombre de serveurs :",
"codecs": "Codecs (A/V) :",
"connectedTo": "Connecté à :",
"e2eeVerified": "E2EE vérifié",
"framerate": "Images par seconde :",
"less": "Cacher les détails",
"localaddress": "Adresse locale :",
@@ -171,13 +184,21 @@
"deepLinking": {
"appNotInstalled": "Vous avez besoin de l'application mobile {{app}} pour participer à cette réunion avec votre téléphone.",
"description": "Rien ne s'est passé ? Nous avons essayé de lancer votre réunion dans l'application de bureau {{app}}. Essayez à nouveau ou lancez-la dans l'application web {{app}}.",
"descriptionNew": "Rien ne s'est passé ? Nous avons essayé de lancer votre réunion dans l'application de bureau {{app}}. <br /><br /> Vous pouvez essayer à nouveau ou la lancer dans l'application web.",
"descriptionWithoutWeb": "Rien ne s'est passé ? Nous avons essayé de démarrer votre réunion dans l'application bureau {{app}}.",
"downloadApp": "Télécharger l'application",
"downloadMobileApp": "Télécharger l'application depuis le Store",
"ifDoNotHaveApp": "Si vous n'avez pas encore l'application:",
"ifHaveApp": "Si vous avez déjà installé l'application:",
"joinInApp": "Rejoindre la réunion en utilisant l'application",
"joinInAppNew": "Rejoindre depuis lapplication",
"joinInBrowser": "Rejoindre depuis le navigateur",
"launchMeetingLabel": "Comment voulez-vous rejoindre la réunion ?",
"launchWebButton": "Lancer dans le navigateur",
"noMobileApp": "Vous navez pas lapplication ?",
"termsAndConditions": "En continuant, vous acceptez nos <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>conditions générales dutilisation.</a>",
"title": "Lancement de votre réunion dans {{app}} en cours ...",
"titleNew": "Lancement de votre réunion ...",
"tryAgainButton": "Réessayez sur le bureau",
"unsupportedBrowser": "Il semble que vous utilisez un navigateur non supporté."
},
@@ -190,11 +211,20 @@
"microphonePermission": "Erreur lors de l'obtention de la permission du microphone"
},
"deviceSelection": {
"hid": {
"callControl": "Contrôle des appels",
"connectedDevices": "Appareils connectés",
"deleteDevice": "Supprimer un appareil",
"pairDevice": "Connecter un appareil"
},
"noPermission": "Permission non accordée",
"previewUnavailable": "Aperçu non disponible",
"selectADevice": "Sélectionner un périphérique",
"testAudio": "Tester la sortie audio"
},
"dialIn": {
"screenTitle": "Bilan des appels"
},
"dialOut": {
"statusMessage": "est maintenant {{status}}"
},
@@ -210,7 +240,9 @@
"WaitingForHostTitle": "En attente de l'hôte ...",
"Yes": "Oui",
"accessibilityLabel": {
"liveStreaming": "Diffusion en direct"
"close": "Fermer la popup",
"liveStreaming": "Diffusion en direct",
"sharingTabs": "Options de partage"
},
"add": "Ajouter",
"addMeetingNote": "Ajouter une note à cette conférence",
@@ -256,6 +288,7 @@
"gracefulShutdown": "Notre service est actuellement en maintenance. Veuillez réessayer plus tard.",
"grantModeratorDialog": "Êtes-vous sûr de vouloir rendre ce participant modérateur ?",
"grantModeratorTitle": "Nommer modérateur",
"hide": "Cacher",
"hideShareAudioHelper": "Ne pas montrer ce dialogue à nouveau",
"incorrectPassword": "Nom d'utilisateur ou mot de passe incorrect",
"incorrectRoomLockPassword": "Mot de passe incorrect",
@@ -270,7 +303,6 @@
"linkMeetingTitle": "Relier la conférence à Salesforce",
"liveStreaming": "Direct",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Impossible durant l'enregistrement",
"liveStreamingDisabledTooltip": "La diffusion en direct est désactivée",
"localUserControls": "Contrôles de l'utilisateur local",
"lockMessage": "Impossible de verrouiller la conférence.",
"lockRoom": "Ajouter un $t(lockRoomPassword) à la réunion ",
@@ -325,7 +357,6 @@
"recentlyUsedObjects": "Vos objets récemment utilisés",
"recording": "Enregistrement",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Impossible durant le direct",
"recordingDisabledTooltip": "L'enregistrement est désactivé.",
"rejoinNow": "Rejoindre maintenant",
"remoteControlAllowedMessage": "{{user}} a accepté votre demande de prise en main à distance !",
"remoteControlDeniedMessage": "{{user}} a refusé votre demande de prise en main à distance !",
@@ -375,6 +406,7 @@
"shareYourScreenDisabled": "Le partage d'écran est désactivé.",
"sharedVideoDialogError": "Erreur: URL invalide",
"sharedVideoLinkPlaceholder": "lien YouTube ou lien vidéo direct",
"show": "Afficher",
"start": "Démarrer ",
"startLiveStreaming": "Démarrer la diffusion en direct",
"startRecording": "Commencer l'enregistrement",
@@ -393,6 +425,10 @@
"user": "Utilisateur",
"userIdentifier": "Identifiant utilisateur",
"userPassword": "mot de passe utilisateur",
"verifyParticipantConfirm": "Ils correspondent",
"verifyParticipantDismiss": "Ils ne correspondent pas",
"verifyParticipantQuestion": "EXPÉRIMENTAL: Demander au participant {{participantName}} s'il voit le même contenu dans le même ordre. ",
"verifyParticipantTitle": "Vérification utilisateur",
"videoLink": "Lien de la vidéo",
"viewUpgradeOptions": "Voir les options de mise à jour",
"viewUpgradeOptionsContent": "Pour obtenir un accès illimité à des capacités premium comme l'enregistrement, les transcriptions, diffusion RTMP et plus, vous devez mettre à jour votre plan.",
@@ -418,13 +454,15 @@
"veryBad": "Très mauvais",
"veryGood": "Très bon"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "Vignettes vidéos"
}
},
"giphy": {
"noResults": "Aucun résultat de recherche :(",
"search": "Rechercher dans GIPHY"
},
"helpView": {
"title": "Centre d'aide"
},
"incomingCall": {
"answer": "Répondre",
"audioCallTitle": "Appel entrant",
@@ -465,9 +503,11 @@
"noRoom": "Aucune réunion n'a été spécifiée pour l'appel entrant.",
"numbers": "Numéros d'appel",
"password": "$t(lockRoomPasswordUppercase) :",
"reachedLimit": "Vous avez atteint la limite de votre abonnement.",
"sip": "adresse SIP",
"title": "Partager",
"tooltip": "Partager le lien et les informations de connexion pour cette conférence"
"tooltip": "Partager le lien et les informations de connexion pour cette conférence",
"upgradeOptions": "Veuillez vérifier les options de mise à niveau"
},
"inlineDialogFailure": {
"msg": "Il y a eu un petit problème.",
@@ -502,6 +542,10 @@
"toggleShortcuts": "Afficher / Masquer les raccourcis clavier",
"videoMute": "Démarrer / Arrêter votre caméra"
},
"largeVideo": {
"screenIsShared": "Vous êtes en train de partager votre écran",
"showMeWhatImSharing": "Me montrer ce que je partage"
},
"liveStreaming": {
"busy": "Nous tentons de libérer des ressources de diffusion. Veuillez réessayez dans quelques minutes.",
"busyTitle": "Tous les flux sont actuellement occupés",
@@ -542,7 +586,6 @@
"lobby": {
"admit": "Accepter",
"admitAll": "Tout accepter",
"allow": "Autoriser",
"backToKnockModeButton": "Aucun mot de passe, demander à rejoindre plutôt",
"chat": "Chat",
"dialogTitle": "Mode salle d'attente",
@@ -605,6 +648,7 @@
"no": "Non",
"participant": "Participant(e)",
"participantStats": "Statistiques du participant",
"selectTabTitle": "🎥 Veuillez sélectionner cet onglet pour enregistrer",
"sessionToken": "Token de la session",
"start": "Démarrer l'enregistrement",
"stop": "Arrêter l'enregistrement",
@@ -627,6 +671,8 @@
"connectedOneMember": "{{name}} a rejoint la réunion",
"connectedThreePlusMembers": "{{name}} et {{count}} autres personnes ont rejoint la réunion",
"connectedTwoMembers": "{{first}} et {{second}} ont rejoint la réunion",
"dataChannelClosed": "Qualité vidéo dégradée",
"dataChannelClosedDescription": "Le canal de communication avec le Bridge a été interrompu, la qualité vidéo se trouve limitée à sa valeur la plus faible.",
"disconnected": "déconnecté",
"displayNotifications": "Afficher les notifications pour",
"focus": "Focus de conférence",
@@ -647,6 +693,8 @@
"linkToSalesforceKey": "Relier cette conférence",
"linkToSalesforceProgress": "Liaison de la conférence à Salesforce...",
"linkToSalesforceSuccess": "La conférence a été reliée à Salesforce",
"localRecordingStarted": "{{name}} a commencé un enregistrement local.",
"localRecordingStopped": "{{name}} a arrêté un enregistrement local.",
"me": "Moi",
"moderationInEffectCSDescription": "Merci de lever la main si vous voulez partager votre écran.",
"moderationInEffectCSTitle": "Le partage d'écran est interdit par le modérateur",
@@ -667,6 +715,10 @@
"newDeviceAction": "Utiliser",
"newDeviceAudioTitle": "Nouveau périphérique audio détecté",
"newDeviceCameraTitle": "Nouvelle caméra détectée",
"noiseSuppressionDesktopAudioDescription": "La suppression de bruit ne peut pas être activée en même temps que la partage audio du système, veuillez le désactiver et réessayer.",
"noiseSuppressionFailedTitle": "Échec du démarrage de la suppression de bruit",
"noiseSuppressionNoTrackDescription": "Veuillez activer votre microphone d'abord.",
"noiseSuppressionStereoDescription": "La suppression de bruit dune source stéréo nest pas encore supportée.",
"oldElectronClientDescription1": "Vous semblez utiliser une ancienne version du client Jitsi Meet qui présente des failles de sécurité connues. Veuillez vous assurer de mettre à jour vers notre ",
"oldElectronClientDescription2": "dernière build",
"oldElectronClientDescription3": " rapidement !",
@@ -681,6 +733,8 @@
"reactionSoundsForAll": "Bloquer les réactions sonores pour tous",
"screenShareNoAudio": " La case Partager l'audio n'a pas été cochée dans l'écran de sélection de la fenêtre.",
"screenShareNoAudioTitle": "La case Partager l'audio n'a pas été cochée",
"screenSharingAudioOnlyDescription": "Veuillez noter quen partageant votre écran, vous impactez le mode “Meilleure Performance” et vous utilisez plus de bande passante.",
"screenSharingAudioOnlyTitle": "Mode \"Meilleure Performance\"",
"selfViewTitle": "Vous pouvez toujours rétablir l'affichage de votre propre vidéo dans les paramètres",
"somebody": "Quelqu'un",
"startSilentDescription": "Rejoignez la réunion de nouveau pour activer l'audio",
@@ -718,6 +772,7 @@
"headings": {
"lobby": "Salle d'attente ({{count}})",
"participantsList": "Participants de la réunion ({{count}})",
"visitors": "Visiteurs {{count}}",
"waitingLobby": "Dans la salle d'attente ({{count}})"
},
"search": "Rechercher des participants",
@@ -725,6 +780,7 @@
},
"passwordDigitsOnly": "Jusqu'à {{number}} chiffres",
"passwordSetRemotely": "défini par un autre participant",
"pinParticipant": "Épingler - {{participantName}}",
"pinnedParticipant": "Participant toujours affiché",
"polls": {
"answer": {
@@ -802,6 +858,7 @@
"initiated": "Appel lancé",
"joinAudioByPhone": "Rejoindre avec l'audio du téléphone",
"joinMeeting": "Rejoindre la réunion",
"joinMeetingInLowBandwidthMode": "Rejoindre en mode bande passante réduite",
"joinWithoutAudio": "Rejoignez sans microphone",
"keyboardShortcuts": "Activer les raccourcis clavier",
"linkCopied": "Lien copié dans le presse-papiers",
@@ -829,9 +886,6 @@
"rejected": "Rejeté",
"ringing": "Appel en cours ..."
},
"privacyView": {
"title": "Confidentialité"
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Choisissez un pseudo",
@@ -877,13 +931,24 @@
"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.",
"live": "DIRECT",
"localRecordingNoNotificationWarning": "Le démarrage de lenregistrement 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 denregistrement",
"localRecordingStartWarning": "Assurez-vous darrêter lenregistrement vidéo avant de quitter la réunion afin de pouvoir le sauvegarder.",
"localRecordingStartWarningTitle": "Arrêter lenregistrement pour le sauvegarder",
"localRecordingVideoStop": "Arrêter votre vidéo va aussi arrêter votre enregistrement local. Êtes-vous sûrs de vouloir continuer ?",
"localRecordingVideoWarning": "Pour enregistrer votre vidéo, vous devez avoir celle-ci active au moment de commencer lenregistrement.",
"localRecordingWarning": "Assurez-vous de sélectionner longlet courant pour utiliser le bon son et la bonne vidéo. Lenregistrement est pour le moment limité à 1Go, soit approximativement 100 minutes.",
"loggedIn": "Connecté en tant que {{userName}}",
"noMicPermission": "La piste microphone ne peut pas être créée. Veuillez autoriser lutilisation du microphone.",
"noStreams": "Aucun flux audio ou vidéo détectés.",
"off": "Enregistrement arrêté",
"offBy": "{{name}} a arrêté l'enregistrement",
"on": "Enregistrement",
"onBy": "{{name}} a démarré l'enregistrement",
"onlyRecordSelf": "Enregistrer seulement mon audio et ma vidéo.",
"pending": "Préparation de l'enregistrement de la réunion ...",
"rec": "REC",
"saveLocalRecording": "Sauvegarder lenregistrement local (Beta)",
"serviceDescription": "Votre enregistrement sera enregistré par le service dédié",
"serviceDescriptionCloud": "Enregistrement Cloud",
"serviceDescriptionCloudInfo": "Les conférences enregistrées sont automatiquement supprimées 24h après leur heure d'enregistrement.",
@@ -891,11 +956,13 @@
"sessionAlreadyActive": "Cette session est déjà en cours d'enregistrement ou de diffusion.",
"signIn": "Se connecter",
"signOut": "Se déconnecter",
"surfaceError": "Veuillez sélectionner longlet courant.",
"title": "Enregistrement",
"unavailable": "Oups ! Le {{serviceName}} est actuellement indisponible. Nous tentons de résoudre le problème. Veuillez réessayer plus tard.",
"unavailableTitle": "Enregistrement indisponible",
"uploadToCloud": "Envoyer vers le cloud"
},
"screenshareDisplayName": "Écran {{name}}",
"sectionList": {
"pullToRefresh": "Tirer pour recharger"
},
@@ -906,6 +973,8 @@
"title": "Options de sécurité"
},
"settings": {
"audio": "Audio",
"buttonLabel": "Paramètres",
"calendar": {
"about": "L'intégration de {{appName}} avec votre calendrier permet d'accéder de manière sécurisée aux événements à venir.",
"disconnect": "Se déconnecter",
@@ -922,12 +991,16 @@
"incomingMessage": "un message arrive",
"language": "Langue",
"loggedIn": "Connecté en tant que {{name}}",
"maxStageParticipants": "Nombre maximum de participants pouvant être épinglé sur laffichage principal (EXPÉRIMENTAL)",
"microphones": "Microphones",
"moderator": "Modérateur",
"moderatorOptions": "Options de modérateur",
"more": "Plus",
"name": "Nom",
"noDevice": "Aucun",
"notifications": "Notifications",
"participantJoined": "un participant arrive",
"participantKnocking": "un participant en salle dattente",
"participantLeft": "un participant quitte",
"playSounds": "Jouer un son quand",
"reactions": "il y a une réaction à la réunion",
@@ -936,13 +1009,14 @@
"selectCamera": "Caméra",
"selectMic": "Microphone",
"selfView": "Affichage de votre propre vidéo",
"sounds": "Sons",
"shortcuts": "Raccourcis",
"speakers": "Haut-parleurs",
"startAudioMuted": "Tout le monde commence en muet",
"startReactionsMuted": "Tout le monde commence avec les réactions sonores bloquées",
"startVideoMuted": "Tout le monde commence sans vidéo",
"talkWhileMuted": "vous parlez en étant muet",
"title": "Paramètres"
"title": "Paramètres",
"video": "Vidéo"
},
"settingsView": {
"advanced": "Avancé",
@@ -957,13 +1031,21 @@
"disableCrashReportingWarning": "Etes-vous certain de vouloir désactiver les rapports de plantage ? Le paramètre sera effectif après le redémarrage de l'application.",
"disableP2P": "Désactiver le mode pair à pair",
"displayName": "Pseudo",
"displayNamePlaceholderText": "Ex : Jean Dupond",
"email": "Email",
"emailPlaceholderText": "email@example..com",
"goTo": "Aller à",
"header": "Paramètres",
"help": "Aide",
"links": "Liens",
"privacy": "Confidentialité",
"profileSection": "Profil",
"serverURL": "URL du serveur",
"showAdvanced": "Afficher les paramètres avancés",
"startCarModeInLowBandwidthMode": "Commencer le mode voiture en mode bande passante réduite",
"startWithAudioMuted": "Commencez avec l'audio en sourdine",
"startWithVideoMuted": "Commencez avec la vidéo en sourdine",
"terms": "Conditions dutilisations",
"version": "Version"
},
"share": {
@@ -1001,6 +1083,7 @@
"termsView": {
"title": "Conditions d'utilisation"
},
"toggleTopPanelLabel": "Basculer le panneau supérieur",
"toolbar": {
"Settings": "Paramètres",
"accessibilityLabel": {
@@ -1010,6 +1093,7 @@
"boo": "Hou",
"breakoutRoom": "Rejoindre/quitter une salle annexe",
"callQuality": "Ajuster la qualité vidéo",
"carmode": "Mode voiture",
"cc": "Activer / Désactiver les sous-titres",
"chat": "Afficher / Masquer la discussion instantanée",
"clap": "Applaudir",
@@ -1017,16 +1101,19 @@
"document": "Activer / Désactiver le document partagé",
"download": "Télécharger nos applications",
"embedMeeting": "Intégrer la réunion",
"endConference": "Terminer la réunion pour tout le monde",
"expand": "Développer",
"feedback": "Laisser des commentaires",
"fullScreen": "Activer / Désactiver le plein écran",
"giphy": "Activer/désactiver le menu GIPHY",
"grantModerator": "donner des droits de modérateur",
"hangup": "Quitter la conversation",
"heading": "Barre d'outils",
"help": "Aide",
"invite": "Inviter des participants",
"kick": "Expulser le participant",
"laugh": "Rire",
"leaveConference": "Quitter la réunion",
"like": "Approuver",
"linkToSalesforce": "Lien à Salesforce",
"lobbyButton": "Activer / Désactiver le mode salle d'attente",
@@ -1040,6 +1127,7 @@
"muteEveryoneElse": "Couper le micro de tous les autres",
"muteEveryoneElsesVideoStream": "Couper la caméra de tous les autres",
"muteEveryonesVideoStream": "Couper la caméra de tout le monde",
"noiseSuppression": "Suppression du bruit",
"participants": "Participants",
"pip": "Activer / Désactiver le mode Picture in Picture",
"privateMessage": "Envoyer un message privé",
@@ -1065,7 +1153,8 @@
"toggleCamera": "Changer de caméra",
"toggleFilmstrip": "Afficher ou masquer les vignettes vidéo",
"videoblur": "Activer / désactiver le floutage",
"videomute": "Activer / Couper la vidéo"
"videomute": "Activer / Couper la vidéo",
"whiteboard": "Afficher / Cacher le tableau blanc"
},
"addPeople": "Ajouter des personnes à votre appel",
"audioOnlyOff": "Désactiver le mode bande passante réduite",
@@ -1079,12 +1168,15 @@
"clap": "Applaudir",
"closeChat": "Fermer le chat",
"closeReactionsMenu": "Fermer le menu réactions",
"disableNoiseSuppression": "Arrêter la suppression du bruit",
"disableReactionSounds": "Vous pouvez interdire les réactions sonores à cette réunion",
"documentClose": "Fermer le document partagé",
"documentOpen": "Ouvrir le document partagé",
"download": "Télécharger nos applications",
"e2ee": "Chiffrement de Bout-en-Bout",
"embedMeeting": "Intégrer la réunion",
"enableNoiseSuppression": "Activer la suppression du bruit",
"endConference": "Terminer la réunion pour tout le monde",
"enterFullScreen": "Afficher en plein écran",
"enterTileView": "Accéder au mode mosaïque",
"exitFullScreen": "Quitter le mode plein écran",
@@ -1093,10 +1185,12 @@
"giphy": "Activer/désactiver le menu GIPHY",
"hangup": "Quitter",
"help": "Aide",
"hideWhiteboard": "Cacher le tableau blanc",
"invite": "Inviter des participants",
"joinBreakoutRoom": "Rejoindre salle annexe",
"laugh": "Rire",
"leaveBreakoutRoom": "Quitter salle annexe",
"leaveConference": "Quitter la réunion",
"like": "Approuver",
"linkToSalesforce": "Lien à Salesforce",
"lobbyButtonDisable": "Désactiver le mode salle d'attente / contrôle des participant(e)s",
@@ -1114,6 +1208,7 @@
"noAudioSignalDialInDesc": "Vous pouvez également appeler en utilisant :",
"noAudioSignalDialInLinkDesc": "Numéros d'appel",
"noAudioSignalTitle": "Il n'y a pas de signal provenant de votre micro !",
"noiseSuppression": "Suppression du bruit",
"noisyAudioInputDesc": "Il semble que votre microphone soit bruyant, veuillez le couper ou changer de périphérique.",
"noisyAudioInputTitle": "Votre microphone semble être bruyant !",
"openChat": "Ouvrir le chat",
@@ -1136,6 +1231,7 @@
"shareaudio": "Partager l'audio",
"sharedvideo": "Partager une vidéo",
"shortcuts": "Afficher les raccourcis",
"showWhiteboard": "Afficher le tableau blanc",
"silence": "Silence",
"speakerStats": "Statistiques de l'interlocuteur",
"startScreenSharing": "Démarrer le partage d'écran",
@@ -1159,10 +1255,15 @@
"labelToolTip": "La transcription de la réunion est en cours",
"off": "La transcription désactivée",
"pending": "Préparation de la transcription de la réunion ...",
"sourceLanguageDesc": "Actuellement, la langue de la réunion est sélectionnée à <b>{{sourceLanguage}}</b>. <br/> Vous pouvez la changer à partir de ",
"sourceLanguageHere": "ici",
"start": "Activer les sous-titres",
"stop": "Désactiver les sous-titres",
"subtitles": "sous-titres",
"subtitlesOff": "off",
"tr": "TR"
},
"unpinParticipant": "Désépingler - {{participantName}}",
"userMedia": {
"androidGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
"chromeGrantPermissions": "Sélectionnez <b><i>Autoriser</i></b> lorsque votre navigateur demande votre autorisation.",
@@ -1201,9 +1302,11 @@
"ldTooltip": "Regardez la vidéo en basse définition",
"lowDefinition": "Basse définition",
"performanceSettings": "Paramètres de performance",
"recording": "Enregistrement en cours",
"sd": "MD",
"sdTooltip": "Regardez la vidéo en définition standard",
"standardDefinition": "Moyenne Définition"
"standardDefinition": "Moyenne Définition",
"streaming": "Diffusion en direct en cours"
},
"videothumbnail": {
"connectionInfo": "Informations de la connexion",
@@ -1215,6 +1318,7 @@
"grantModerator": "Donner des droits de modérateur",
"hideSelfView": "Cacher l'affichage de votre propre vidéo",
"kick": "Exclure",
"mirrorVideo": "Inverser ma vidéo",
"moderator": "Modérateur",
"mute": "Le participant a coupé son micro",
"muted": "Muet",
@@ -1224,6 +1328,7 @@
"show": "Afficher en premier plan",
"showSelfView": "Montrer votre propre vidéo",
"unpinFromStage": "Ne plus garder affiché",
"verify": "Vérifier le participant",
"videoMuted": "Caméra coupée",
"videomute": "Le participant a arrêté la caméra"
},
@@ -1251,6 +1356,7 @@
"webAssemblyWarning": "WebAssembly non supporté",
"webAssemblyWarningDescription": "WebAssembly invalidé ou non supporté par ce navigateur"
},
"visitorsLabel": "Nombre de visiteurs: {{count}}",
"volumeSlider": "Curseur de volume",
"welcomepage": {
"accessibilityLabel": {
@@ -1283,6 +1389,7 @@
"microsoftLogo": "Logo Microsoft",
"policyLogo": "Logo de la politique"
},
"meetingsAccessibilityLabel": "Réunions",
"mobileDownLoadLinkAndroid": "Télécharger l'application mobile sur Android",
"mobileDownLoadLinkFDroid": "Télécharger l'application mobile sur F-Droid",
"mobileDownLoadLinkIos": "Télécharger l'application mobile sur iOS",
@@ -1291,13 +1398,21 @@
"recentList": "Récent",
"recentListDelete": "Supprimer",
"recentListEmpty": "Votre liste récente est actuellement vide. Discuter avec votre équipe et vous trouverez toutes vos réunions récentes ici.",
"recentMeetings": "Vos réunions récentes",
"reducedUIText": "Bienvenue sur {{app}} !",
"roomNameAllowedChars": "Le nom de la réunion ne doit contenir aucun de ces caractères : ?, &, :, ', \", %, #.",
"roomname": "Saisissez un nom de salle",
"roomnameHint": "Entrez le nom ou l'URL de la salle que vous souhaitez rejoindre. Vous pouvez faire un nom, laissez les gens que vous rencontrerez le savoir afin qu'ils entrent le même nom.",
"sendFeedback": "Envoyer votre avis",
"settings": "Paramètres",
"startMeeting": "Démarrer la conférence",
"terms": "Termes",
"title": "Système de vidéoconférence sécurisé, riche en fonctionnalités et gratuit"
"title": "Système de vidéoconférence sécurisé, riche en fonctionnalités et gratuit",
"upcomingMeetings": "Vos réunions à venir"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Tableau blanc"
}
}
}

View File

@@ -828,18 +828,34 @@
"expandedPending": "録画の開始中です...",
"failedToStart": "録画の開始に失敗しました",
"fileSharingdescription": "録画をミーティングの参加者と共有する",
"highlight": "ハイライト",
"highlightMoment": "この瞬間をハイライト",
"highlightMomentDisabled": "録画が開始後にハイライトは利用可能になります。",
"highlightMomentSuccess": "ハイライトされました",
"highlightMomentSucessDescription": "ハイライトされた瞬間は議事録に追加されます。",
"inProgress": "録画またはライブ配信中です",
"limitNotificationDescriptionNative": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。無制限に録画するには<3>{{app}}</3>をお試しください。",
"limitNotificationDescriptionWeb": "利用者が多いため、あなたの録画は {{limit}} 分に制限されます。 無制限に録画するには<a href={{url}} rel='noopener noreferrer' target='_blank'>{{app}}</a>をお試しください。",
"linkGenerated": "あなたの録画へのリンクを生成しました。",
"live": "LIVE",
"localRecordingNoNotificationWarning": "この録画は他の参加者に通知されません。このミーティングが録画されていることを他の参加者に伝えてください。",
"localRecordingNoVideo": "ビデオは録画されません。",
"localRecordingStartWarning": "録画を保存するためにはミーティング退出前に録画を停止してください。",
"localRecordingStartWarningTitle": "録画を停止して保存",
"localRecordingVideoStop": "ビデオを停止すると録画も停止されます。停止してもよろしいですか?",
"localRecordingVideoWarning": "ビデオを録画するためには録画開始前に有効化しておく必要があります",
"localRecordingWarning": "正しく録画をするために必ず現在のタブを選択してください。現在録画は1GBまで、約100分に制限されています。",
"loggedIn": "{{userName}} としてログイン",
"noMicPermission": "マイクが認識できませんでした。マイクへのアクセス権を確認してください。",
"noStreams": "音声・映像が検出されませんでした。",
"off": "録画を停止しました",
"offBy": "{{name}} が録画を停止しました",
"on": "録画を開始しました",
"onBy": "{{name}} が録画を開始しました",
"onlyRecordSelf": "自身の音声・映像のみを録画する",
"pending": "ミーティングの録画準備中...",
"rec": "REC",
"saveLocalRecording": "ローカルに録画を保存 (Beta)",
"serviceDescription": "ビデオは録画サービスで録画されます",
"serviceDescriptionCloud": "クラウドレコーディング",
"serviceName": "録画サービス",

View File

@@ -68,9 +68,9 @@
},
"join": "Participar",
"joinTooltip": "Participar na reunião",
"nextMeeting": "próxima reunião",
"nextMeeting": "Próxima reunião",
"noEvents": "Não há eventos próximos agendados.",
"ongoingMeeting": "reunião a decorrer",
"ongoingMeeting": "Reunião a decorrer",
"permissionButton": "Abrir configurações",
"permissionMessage": "Permissão do calendário é requerida para ver as suas reuniões na aplicação.",
"refresh": "Atualizar calendário",
@@ -183,16 +183,24 @@
},
"deepLinking": {
"appNotInstalled": "Precisa da aplicação móvel {{app}} para participar na reunião com o seu telefone.",
"description": "Não acontece nada? Estamos a tentar iniciar a sua reunião na aplicação desktop {{app}}. Tente novamente ou inicie na aplicação web {{app}}.",
"description": "Não aconteceu nada? Tentámos iniciar a sua reunião na aplicação desktop {{app}}. Tente novamente ou inicie-a na aplicação web {{app}}.",
"descriptionNew": "Não aconteceu nada? Tentámos iniciar a sua reunião na aplicação desktop {{app}}. <br /><br /> Pode tentar novamente ou iniciá-la na web.",
"descriptionWithoutWeb": "Não aconteceu nada? Tentamos iniciar a sua reunião na aplicação desktop {{app}}.",
"downloadApp": "Transfira a aplicação",
"downloadApp": "Descarregar a aplicação",
"downloadMobileApp": "Descarregar da App Store",
"ifDoNotHaveApp": "Se ainda não tem a aplicação:",
"ifHaveApp": "Se já tem a aplicação:",
"joinInApp": "Participe nesta reunião utilizando a aplicação",
"launchWebButton": "Iniciar na web",
"title": "A iniciar a sua reunião na {{app}}...",
"joinInAppNew": "Entrar pela aplicação",
"joinInBrowser": "Entrar pelo navegador de Internet",
"launchMeetingLabel": "Como deseja entrar nesta reunião?",
"launchWebButton": "Iniciar pelo navegador de Internet",
"noMobileApp": "Não tem a aplicação?",
"termsAndConditions": "Ao continuar, concorda com os nossos <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>termos & condições.</a>",
"title": "Iniciando a sua reunião na {{app}}...",
"titleNew": "Iniciando a sua reunião ...",
"tryAgainButton": "Tente novamente no desktop",
"unsupportedBrowser": "Parece que está a usar um browser que não suportamos."
"unsupportedBrowser": "Parece que está a usar um navegador que não suportamos."
},
"defaultLink": "ex.: {{url}}",
"defaultNickname": "ex.: João Dias",
@@ -203,10 +211,16 @@
"microphonePermission": "Erro ao obter permissão para o microfone"
},
"deviceSelection": {
"hid": {
"callControl": "Controlo de chamadas",
"connectedDevices": "Dispositivos ligados:",
"deleteDevice": "Apagar dispositivo",
"pairDevice": "Emparelhar dispositivo"
},
"noPermission": "Permissão não concedida",
"previewUnavailable": "Visualização indisponível",
"selectADevice": "Selecione um dispositivo",
"testAudio": "Tocar um som de teste"
"testAudio": "Teste"
},
"dialIn": {
"screenTitle": "Resumo da marcação"
@@ -226,7 +240,9 @@
"WaitingForHostTitle": "À espera do anfitrião ...",
"Yes": "Sim",
"accessibilityLabel": {
"liveStreaming": "Transmissão em direto"
"close": "Fechar caixa de diálogo",
"liveStreaming": "Transmissão em direto",
"sharingTabs": "Opções de partilha"
},
"add": "Adicionar",
"addMeetingNote": "Acrescentar uma nota sobre esta reunião",
@@ -438,6 +454,11 @@
"veryBad": "Muito má",
"veryGood": "Muito boa"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "Miniaturas de vídeo"
}
},
"giphy": {
"noResults": "Não foram encontrados resultados :(",
"search": "Procurar no GIPHY"
@@ -662,6 +683,7 @@
"invitedOneMember": "{{displayName}} foi convidado",
"invitedThreePlusMembers": "{{name}} e {{count}} outros foram convidados",
"invitedTwoMembers": "{{first}} e {{second}} foram convidados",
"joinMeeting": "Entrar",
"kickParticipant": "{{kicked}} foi expulso por {{kicker}}",
"leftOneMember": "{{name}} deixou a reunião",
"leftThreePlusMembers": "{{name}} e muitos outros deixaram a reunião",
@@ -687,8 +709,8 @@
"moderationStoppedTitle": "A moderação parou",
"moderationToggleDescription": "pelo {{participantDisplayName}}",
"moderator": "É agora um moderador",
"muted": "Iniciou uma conversa com o microfone desativado.",
"mutedRemotelyDescription": "Pode sempre voltar a ativar o microfone quando estiver pronto para falar. Silencie de volta quando estiver pronto para manter o barulho afastado da reunião.",
"muted": "Iniciou uma conversa com o microfone desligado.",
"mutedRemotelyDescription": "Pode sempre voltar a ligar o microfone quando estiver pronto para falar. Silencie de volta quando estiver pronto para manter o barulho afastado da reunião.",
"mutedRemotelyTitle": "Foi silenciado pelo {{participantDisplayName}}",
"mutedTitle": "Está silenciado!",
"newDeviceAction": "Usar",
@@ -720,7 +742,7 @@
"startSilentTitle": "Entrou sem áudio!",
"suboptimalBrowserWarning": "Tememos que sua experiência de reunião não seja tão boa aqui. Estamos procurando maneiras de melhorar isso, mas até então, tente usar um dos <a href='{{recommendedBrowserPageLink}}' target='_blank'>navegadores completamente suportados</a>.",
"suboptimalExperienceTitle": "Alerta do navegador",
"unmute": "Ativar som",
"unmute": "Ligar microfone",
"videoMutedRemotelyDescription": "Pode sempre ligá-la novamente.",
"videoMutedRemotelyTitle": "A sua câmara foi desligada pelo {{participantDisplayName}}.",
"videoUnmuteBlockedDescription": "A operação de ligar a câmara e partilhar o ambiente de trabalho foi temporariamente bloqueada devido aos limites do sistema.",
@@ -751,6 +773,7 @@
"headings": {
"lobby": "Sala de espera ({{count}})",
"participantsList": "Participantes da reunião ({{count}})",
"visitors": "Visitantes ({{count}})",
"waitingLobby": "Aguardam na sala de espera ({{count}})"
},
"search": "Pesquisar participantes",
@@ -758,6 +781,7 @@
},
"passwordDigitsOnly": "Até {{number}} dígitos",
"passwordSetRemotely": "Definido por outro participante",
"pinParticipant": "{{participantName}} - Afixar",
"pinnedParticipant": "O participante está afixado",
"polls": {
"answer": {
@@ -839,7 +863,7 @@
"joinWithoutAudio": "Entrar sem áudio",
"keyboardShortcuts": "Ativar os atalhos de teclado",
"linkCopied": "Link copiado para a área de transferência",
"lookGood": "O microfone está a funcionar corretamente",
"lookGood": "O seu microfone funciona corretamente",
"or": "ou",
"premeeting": "Pré-reunião",
"screenSharingError": "Erro de partilha de ecrã:",
@@ -865,9 +889,9 @@
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Definir seu nome de exibição",
"setDisplayNameLabel": "Nome",
"setEmailInput": "Digite email",
"setEmailLabel": "Definir seu email de gravatar",
"setEmailLabel": "Email de gravatar",
"title": "Perfil"
},
"raisedHand": "Gostaria de falar",
@@ -950,6 +974,7 @@
"title": "Opções de segurança"
},
"settings": {
"audio": "Áudio",
"buttonLabel": "Definições",
"calendar": {
"about": "A integração do calendário {{appName}} é utilizada para aceder com segurança ao seu calendário para que este possa ler os próximos eventos.",
@@ -970,26 +995,29 @@
"maxStageParticipants": "Número máximo de participantes que podem ser afixados (EXPERIMENTAL)",
"microphones": "Microfones",
"moderator": "Moderador",
"more": "Mais",
"moderatorOptions": "Opções de moderador",
"more": "Geral",
"name": "Nome",
"noDevice": "Nenhum",
"notifications": "Notificações",
"participantJoined": "Entrar um participante",
"participantKnocking": "Entrar um participante na sala de espera",
"participantLeft": "Sair um participante",
"playSounds": "Reproduzir som quando",
"reactions": " uma reação na reunião",
"reactions": "Existir uma reação na reunião",
"sameAsSystem": "O mesmo que o sistema ({{label}})",
"selectAudioOutput": "Saída de áudio",
"selectCamera": "Câmara",
"selectMic": "Microfone",
"selfView": "Autovisualização",
"sounds": "Sons",
"speakers": "Participantes",
"shortcuts": "Atalhos",
"speakers": "Altifalantes",
"startAudioMuted": "Todos começam com microfone desligado",
"startReactionsMuted": "Todos começam com os sons de reação desativados",
"startVideoMuted": "Todos começam com câmara desligada",
"talkWhileMuted": "Falar com o microfone desligado",
"title": "Definições"
"title": "Definições",
"video": "Vídeo"
},
"settingsView": {
"advanced": "Avançado",
@@ -1070,18 +1098,29 @@
"cc": "Mudar legendas",
"chat": "Abrir / Fechar chat",
"clap": "Aplausos",
"closeChat": "Fechar chat",
"closeMoreActions": "Fechar menu de mais ações",
"closeParticipantsPane": "Fechar painel de participantes",
"collapse": "Colapsar",
"document": "Mudar para documento partilhado",
"documentClose": "Fechar documento partilhado",
"documentOpen": "Abrir documento partilhado",
"download": "Descarregar as nossas aplicações",
"embedMeeting": "Reunião incorporada",
"endConference": "Terminar reunião para todos",
"enterFullScreen": "Ver ecrã inteiro",
"enterTileView": "Entrar na vista em quadrícula",
"exitFullScreen": "Sair de ecrã inteiro",
"exitTileView": "Sair da vista em quadrícula",
"expand": "Expandir",
"feedback": "Deixar comentários",
"fullScreen": "Mudar para ecrã completo",
"giphy": "Ativar/Desativar o menu GIPHY",
"grantModerator": "Conceder direitos de moderador",
"hangup": "Sair da reunião",
"heading": "Barra de ferramentas",
"help": "Ajuda",
"hideWhiteboard": "Esconder quadro branco",
"invite": "Convidar pessoas",
"kick": "Remover participante",
"laugh": "Risos",
@@ -1091,21 +1130,23 @@
"lobbyButton": "Ativar/desativar sala de espera",
"localRecording": "Mudar os controlos locais de gravação",
"lockRoom": "Mudar palavra-chave de reunião",
"lowerHand": "Baixar a mão",
"moreActions": "Mais ações",
"moreActionsMenu": "Menu de mais ações",
"moreOptions": "Mostrar mais opções",
"mute": "Ativar / Desativar microfone",
"mute": "Desligar microfone",
"muteEveryone": "Silenciar a todos",
"muteEveryoneElse": "Silenciar todos os outros",
"muteEveryoneElsesVideo": "Parar o vídeo de todos os outros",
"muteEveryonesVideo": "Parar o vídeo de todos",
"noiseSuppression": "Supressão de ruído",
"participants": "Participantes",
"openChat": "Abrir chat",
"participants": "Abrir painel de participantes",
"pip": "Mudar para o modo Picture-in-Picture",
"privateMessage": "Enviar mensagem privada",
"profile": "Editar o seu perfil",
"raiseHand": "Levantar / Baixar a mão",
"reactionsMenu": "Abrir / Fechar menu de reações",
"raiseHand": "Levantar a mão",
"reactionsMenu": "Menu de reações",
"recording": "Mudar gravação",
"remoteMute": "Participante sem som",
"remoteVideoMute": "Desativar a câmara do participante",
@@ -1113,20 +1154,24 @@
"selectBackground": "Selecionar plano de fundo",
"selfView": "Mudar a autovisualização",
"shareRoom": "Convidar alguém",
"shareYourScreen": "Iniciar / Parar partilha de ecrã",
"shareYourScreen": "Iniciar partilha de ecrã",
"shareaudio": "Partilhar áudio",
"sharedvideo": "Mudar a partilha de vídeos",
"sharedvideo": "Partilhar vídeo",
"shortcuts": "Mostrar / Esconder atalhos",
"show": "Mostrar no palco",
"showWhiteboard": "Mostrar quadro branco",
"silence": "Silêncio",
"speakerStats": "Mostrar / Esconder estatísticas dos participantes",
"stopScreenSharing": "Parar de partilhar o seu ecrã",
"stopSharedVideo": "Parar vídeo",
"surprised": "Surpreendido",
"tileView": "Mudar a vista em quadrícula",
"toggleCamera": "Mudar a câmara",
"toggleFilmstrip": "Mudar a película de filme",
"unmute": "Ligar microfone",
"videoblur": "Mudar o desfoque de vídeo",
"videomute": "Iniciar / Parar câmara",
"whiteboard": "Mostrar / Esconder quadro branco"
"videomute": "Parar câmara",
"videounmute": "Iniciar câmara"
},
"addPeople": "Adicione pessoas à sua chamada",
"audioOnlyOff": "Desativar modo de largura de banda baixa",
@@ -1139,6 +1184,7 @@
"chat": "Abrir / Fechar chat",
"clap": "Aplausos",
"closeChat": "Fechar chat",
"closeParticipantsPane": "Fechar painel de participantes",
"closeReactionsMenu": "Fechar menu de reações",
"disableNoiseSuppression": "Desativar a supressão de ruído",
"disableReactionSounds": "Pode desactivar os sons de reacção para esta reunião",
@@ -1147,6 +1193,7 @@
"download": "Descarregar as nossas aplicações",
"e2ee": "Criptografia ponta a ponta",
"embedMeeting": "Incorporar reunião",
"enableNoiseSuppression": "Ativar a supressão de ruído",
"endConference": "Terminar reunião para todos",
"enterFullScreen": "Ver em ecrã completo",
"enterTileView": "Ver em quadrícula",
@@ -1171,7 +1218,7 @@
"lowerYourHand": "Baixar a mão",
"moreActions": "Mais ações",
"moreOptions": "Mais opções",
"mute": "Ativar / Desativar microfone",
"mute": "Desligar microfone",
"muteEveryone": "Silenciar todos",
"muteEveryonesVideo": "Desativar a câmara de todos",
"noAudioSignalDesc": "Se não o silenciou propositadamente a partir de configurações do sistema ou hardware, considere mudar de dispositivo.",
@@ -1188,7 +1235,7 @@
"pip": "Entrar no modo Picture-in-Picture",
"privateMessage": "Enviar mensagem privada",
"profile": "Editar o seu perfil",
"raiseHand": "Levantar / Baixar a mão",
"raiseHand": "Levantar a mão",
"raiseYourHand": "Levantar a mão",
"reactionBoo": "Enviar reação de vaia",
"reactionClap": "Enviar reação de aplausos",
@@ -1212,11 +1259,13 @@
"stopSharedVideo": "Parar vídeo",
"stopSubtitles": "Parar legendas",
"surprised": "Surpreendido",
"talkWhileMutedPopup": "Está a tentar falar? Está com o microfone desativado.",
"talkWhileMutedPopup": "Está a tentar falar? Está com o microfone desligado.",
"tileViewToggle": "Mudar para vista em quadrícula",
"toggleCamera": "Mudar a câmara",
"unmute": "Ligar microfone",
"videoSettings": "Definições de vídeo",
"videomute": "Iniciar / Parar câmara"
"videomute": "Parar câmara",
"videounmute": "Iniciar câmara"
},
"transcribing": {
"ccButtonTooltip": "Iniciar/parar legendas",
@@ -1234,6 +1283,7 @@
"subtitlesOff": "Desligado",
"tr": "TR"
},
"unpinParticipant": "{{participantName}} - Desafixar",
"userMedia": {
"androidGrantPermissions": "Selecione <b><i>Permitir</i></b> quando o seu navegador perguntar pelas permissões.",
"chromeGrantPermissions": "Selecione <b><i>Permitir</i></b> quando o seu navegador perguntar pelas permissões.",
@@ -1272,9 +1322,11 @@
"ldTooltip": "Ver vídeo em baixa definição",
"lowDefinition": "Baixa definição (LD)",
"performanceSettings": "Definições de desempenho",
"recording": "Gravação em curso",
"sd": "SD",
"sdTooltip": "Ver vídeo em definição padrão",
"standardDefinition": "Definição padrão"
"standardDefinition": "Definição padrão",
"streaming": "Transmissão em curso"
},
"videothumbnail": {
"connectionInfo": "Informações sobre a ligação",
@@ -1286,6 +1338,7 @@
"grantModerator": "Conceder direitos de moderador",
"hideSelfView": "Ocultar a autovisualização",
"kick": "Expulsar",
"mirrorVideo": "Espelhar o meu vídeo",
"moderator": "Moderador",
"mute": "Participante está sem som",
"muted": "Sem som",
@@ -1303,7 +1356,7 @@
"addBackground": "Adicionar imagem de fundo",
"apply": "Aplicar",
"backgroundEffectError": "Falha ao aplicar efeito de fundo.",
"blur": "Desfocagem",
"blur": "Esbatido",
"deleteImage": "Apagar imagem",
"desktopShare": "Partilhar área de trabalho",
"desktopShareError": "Não foi possível partilhar a área de trabalho",
@@ -1317,12 +1370,13 @@
"none": "Nenhum",
"pleaseWait": "Por favor aguarde...",
"removeBackground": "Remover imagem de fundo",
"slightBlur": "Desfocagem ligeira",
"title": "Planos de fundo virtuais",
"slightBlur": "Ligeiro esbatido",
"title": "Fundos virtuais",
"uploadedImage": "Imagem carregada {{index}}",
"webAssemblyWarning": "WebAssembly não suportado",
"webAssemblyWarningDescription": "WebAssembly desactivado ou não suportado por este navegador"
},
"visitorsLabel": "Número de visitantes: {{count}}",
"volumeSlider": "Controlo de volume",
"welcomepage": {
"accessibilityLabel": {
@@ -1355,6 +1409,7 @@
"microsoftLogo": "Logo da Microsoft",
"policyLogo": "Logo da Política de Privacidade"
},
"meetingsAccessibilityLabel": "Reuniões",
"mobileDownLoadLinkAndroid": "Descarregar aplicação móvel para Android",
"mobileDownLoadLinkFDroid": "Descarregar aplicação móvel para F-Droid",
"mobileDownLoadLinkIos": "Descarregar aplicação móvel para iOS",
@@ -1374,5 +1429,10 @@
"terms": "Termos",
"title": "Videoconferências mais seguras, flexíveis e totalmente gratuitas",
"upcomingMeetings": "As suas próximas reuniões"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Quadro branco"
}
}
}

View File

@@ -11,7 +11,6 @@
"defaultEmail": "Ваш адрес электронной почты",
"disabled": "Поиск не дал результата.",
"failedToAdd": "Не удалось добавить участников",
"footerText": "Вызов номера отключен.",
"googleEmail": "Электронная почта Google",
"inviteMoreHeader": "Сейчас вы одни в этой встрече",
"inviteMoreMailSubject": "Присоединиться к встрече {{appName}} ",
@@ -96,6 +95,7 @@
"messageAccessibleTitleMe": "я говорю:",
"messageTo": "Личное сообщение пользователю {{recipient}}",
"messagebox": "Введите сообщение",
"newMessages": "Новые сообщения",
"nickname": {
"popover": "Выберите имя",
"title": "Введите имя для использования чата",
@@ -115,6 +115,7 @@
},
"chromeExtensionBanner": {
"buttonText": "Установить расширение Chrome",
"buttonTextEdge": "Установить расширение Edge",
"close": "Закрыть",
"dontShowAgain": "Не показывай мне это снова",
"installExtensionText": "Установите расширение для интеграции с Google Календарь и Office 365"
@@ -183,10 +184,15 @@
"description": "Ничего не случилось? Мы попытались запустить вашу встречу в настольном приложении {{app}}. Повторите попытку или запустите ее в веб-приложении {{app}}.",
"descriptionWithoutWeb": "Ничего не произошло? Мы попытались запустить вашу конференцию в настольном приложении {{app}}",
"downloadApp": "Скачать приложение",
"downloadMobileApp": "Скачать из App Store",
"ifDoNotHaveApp": "Если у Вас ещё нет приложения:",
"ifHaveApp": "Если у Вас уже есть приложение:",
"joinInApp": "Присоединиться к этой встрече с помощью приложения",
"joinInAppNew": "Присоединиться в приложении",
"joinInBrowser": "Присоединиться в браузере",
"launchMeetingLabel": "Как вы хотите присоединиться к этой встрече?",
"launchWebButton": "Запустить в браузере",
"noMobileApp": "У вас нет приложения?",
"title": "Запуск вашей встречи в {{app}}...",
"tryAgainButton": "Повторите в настольном приложении",
"unsupportedBrowser": "Вы используете браузер, который мы не поддерживаем."
@@ -266,6 +272,7 @@
"gracefulShutdown": "Технические работы. Пожалуйста, попробуйте позже.",
"grantModeratorDialog": "Вы уверены, что хотите сделать этого участника модератором?",
"grantModeratorTitle": "Сделать модератором",
"hide": "Скрыть",
"hideShareAudioHelper": "Больше не показывать это диалоговое окно",
"incorrectPassword": "Ошибка имени пользователя или пароля",
"incorrectRoomLockPassword": "Неверный пароль",
@@ -280,7 +287,6 @@
"linkMeetingTitle": "Связать встречу с Salesforce",
"liveStreaming": "Трансляция",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Невозможно пока активна запись",
"liveStreamingDisabledTooltip": "Возможность трансляции отключена",
"localUserControls": "Локальные пользовательские элементы управления",
"lockMessage": "Не удалось запереть конференцию",
"lockRoom": "Добавить конференцию $t(lockRoomPasswordUppercase)",
@@ -335,7 +341,6 @@
"recentlyUsedObjects": "Ваши недавно использованные объекты",
"recording": "Запись",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "Невозможно пока активно потоковое вещание",
"recordingDisabledTooltip": "Невозможно начать запись",
"rejoinNow": "Подключиться снова",
"remoteControlAllowedMessage": "{{user}} принял ваш запрос на удаленное управление!",
"remoteControlDeniedMessage": "{{user}} отклонил ваш запрос на удаленное управление!",
@@ -385,6 +390,7 @@
"shareYourScreenDisabled": "Демонстрация экрана отключена",
"sharedVideoDialogError": "Ошибка: Невалидный URL",
"sharedVideoLinkPlaceholder": "Ссылка на YouTube или прямая ссылка на видео",
"show": "Показать",
"start": "Начать",
"startLiveStreaming": "Начать трансляцию",
"startRecording": "Начать запись",
@@ -432,9 +438,6 @@
"noResults": "Результатов поиска не найдено :(",
"search": "Поиск GIPHY"
},
"helpView": {
"title": "Справка"
},
"incomingCall": {
"answer": "Ответ",
"audioCallTitle": "Входящий звонок",
@@ -512,6 +515,10 @@
"toggleShortcuts": "Скрыть/Показать клавиша быстрого доступа",
"videoMute": "Камера (вкл./выкл.)"
},
"largeVideo": {
"screenIsShared": "Вы демонстрируете свой экран",
"showMeWhatImSharing": "Показать мне что я демонстрирую"
},
"liveStreaming": {
"busy": "Освобождаем новые ресурсы для трансляции. Пожалуйста, попробуйте снова через несколько минут.",
"busyTitle": "Все ресурсы для трансляции уже задействованы",
@@ -552,7 +559,6 @@
"lobby": {
"admit": "Признать",
"admitAll": "Признать все",
"allow": "Разрешить",
"backToKnockModeButton": "Попросить присоединиться",
"chat": "Чат",
"dialogTitle": "Режим лобби",
@@ -647,6 +653,7 @@
"invitedOneMember": "{{name}} был приглашен",
"invitedThreePlusMembers": "Приглашены {{name}} и {{count}} других пользователей(ля)",
"invitedTwoMembers": "{{first}} и {{second}} присоединились к конференции",
"joinMeeting": "Присоединиться",
"kickParticipant": "{{kicker}} отключил {{kicked}}",
"leftOneMember": "{{name}} покинул собрание",
"leftThreePlusMembers": "{{name}} и многие другие покинули встречу",
@@ -657,6 +664,8 @@
"linkToSalesforceKey": "Отправить ссылку на встречу для Salesforce",
"linkToSalesforceProgress": "Отправка ссылки на встречу для Salesforce...",
"linkToSalesforceSuccess": "Ссылка на эту встречу для Salesforce была отправлена",
"localRecordingStarted": "{{name}} начал локальную запись.",
"localRecordingStopped": "{{name}} остановил локальную запись.",
"me": "Я",
"moderationInEffectCSDescription": "Пожалуйста, поднимите руку, если вы хотите поделиться своим экраном.",
"moderationInEffectCSTitle": "Демонстрация экрана заблокирована модератором",
@@ -677,6 +686,10 @@
"newDeviceAction": "Использовать",
"newDeviceAudioTitle": "Обнаружено новое аудиоустройство",
"newDeviceCameraTitle": "Обнаружена новая камера",
"noiseSuppressionDesktopAudioDescription": "Шумоподавление не может быть включено при совместном использовании звука рабочего стола, пожалуйста, отключите его и повторите попытку.",
"noiseSuppressionFailedTitle": "Не удалось запустить шумоподавление",
"noiseSuppressionNoTrackDescription": "Пожалуйста, сначала включите звук микрофона.",
"noiseSuppressionStereoDescription": "Шумоподавление стереозвука в настоящее время не поддерживается.",
"oldElectronClientDescription1": "Похоже, вы используете старую версию клиента {{app}}, которая имеет известные уязвимости в системе безопасности. Убедитесь, что вы обновили до нашей ",
"oldElectronClientDescription2": "последней версии",
"oldElectronClientDescription3": " сейчас!",
@@ -725,7 +738,6 @@
"videoModeration": "Разрешить видео"
},
"close": "Закрыть",
"header": "Участники",
"headings": {
"lobby": "Лобби ({{count}})",
"participantsList": "Список участников ({{count}})",
@@ -841,9 +853,6 @@
"rejected": "Отклонен",
"ringing": "Звоню. . ."
},
"privacyView": {
"title": "Конфиденциальность"
},
"profile": {
"avatar": "аватар",
"setDisplayNameLabel": "Отображаемое имя",
@@ -892,10 +901,12 @@
"loggedIn": "Вошел как {{userName}}",
"off": "Запись остановлена",
"offBy": "{{name}} остановил запись",
"on": "Запись",
"on": "Запись началась",
"onBy": "{{name}} включил запись",
"onlyRecordSelf": "Записать только мои аудио и видео потоки",
"pending": "Подготовка записи конференции. . .",
"rec": "ИДЕТ ЗАПИСЬ",
"saveLocalRecording": "Сохранить файл записи локально (Beta)",
"serviceDescription": "Ваша запись будет сохранена соответствующей службой",
"serviceDescriptionCloud": "Облачная запись",
"serviceDescriptionCloudInfo": "Сохранённые записи автоматически удаляются спуся 24 часа со старта.",
@@ -903,6 +914,7 @@
"sessionAlreadyActive": "Этот сеанс уже записывается или транслируется в прямом эфире.",
"signIn": "Вход",
"signOut": "Выход",
"surfaceError": "Пожалуйста, выберите текущую вкладку.",
"title": "Запись",
"unavailable": "Служба {{serviceName}} сейчас недоступна. Мы работаем над исправлением этой ошибки. Пожалуйста, попробуйте позже.",
"unavailableTitle": "Запись невозможна",
@@ -918,6 +930,7 @@
"title": "Настройки безопасности"
},
"settings": {
"audio": "Звук",
"buttonLabel": "Настройки",
"calendar": {
"about": "Интеграция с календарем {{appName}} используется для безопасного доступа к вашему календарю и синхронизации запланированных мероприятий.",
@@ -937,10 +950,13 @@
"loggedIn": "Вошел как {{name}}",
"microphones": "Микрофоны",
"moderator": "Модератор",
"moderatorOptions": "Настройки модератора",
"more": "Больше опций",
"name": "Имя",
"noDevice": "нет",
"notifications": "Оповещения",
"participantJoined": "Участник присоединился",
"participantKnocking": "Участник вошел в лобби",
"participantLeft": "Участник вышел",
"playSounds": "Включить звук",
"reactions": "Реакции на встречи",
@@ -949,13 +965,14 @@
"selectCamera": "Камера",
"selectMic": "Микрофон",
"selfView": "Самостоятельный просмотр",
"sounds": "Звуки",
"shortcuts": "Сочетания клавиш",
"speakers": "Динамики",
"startAudioMuted": "Все начинают с выключенным звуком",
"startReactionsMuted": "Отключение звука реакции для всех",
"startVideoMuted": "Все начинают в скрытом режиме",
"talkWhileMuted": "Говорите без звука",
"title": "Настройки"
"title": "Настройки",
"video": "Видео"
},
"settingsView": {
"advanced": "Дополнительные",
@@ -1061,6 +1078,7 @@
"muteEveryoneElse": "Заглушить всех остальных",
"muteEveryoneElsesVideoStream": "Остановить чужое видео",
"muteEveryonesVideoStream": "Остановить видео для всех",
"noiseSuppression": "Шумоподавление",
"participants": "Участники",
"pip": "Вкл/Выкл режим Картинка-в-картинке",
"privateMessage": "Отправить личное сообщение",
@@ -1086,7 +1104,8 @@
"toggleCamera": "Переключить камеру",
"toggleFilmstrip": "Включить диафильм",
"videoblur": "Вкл/Выкл размытие фона",
"videomute": "Вкл/Выкл видео"
"videomute": "Вкл/Выкл видео",
"whiteboard": "Показать / Скрыть интерактивную доску"
},
"addPeople": "Добавить людей к вашему сеансу связи",
"audioOnlyOff": "Включить видео (стандартный режим)",
@@ -1107,6 +1126,7 @@
"download": "Скачать приложение",
"e2ee": "Сквозное шифрование",
"embedMeeting": "Встроить встречу",
"enableNoiseSuppression": "Включить шумоподавление",
"endConference": "Завершить встречу для всех",
"enterFullScreen": "На полный экран",
"enterTileView": "Общий план",
@@ -1116,6 +1136,7 @@
"giphy": "Показать GIPHY меню",
"hangup": "Выход",
"help": "Справка",
"hideWhiteboard": "Скрыть интерактивную доску",
"invite": "Пригласить",
"joinBreakoutRoom": "Войти в сессионный зал",
"laugh": "Смеяться",
@@ -1138,6 +1159,7 @@
"noAudioSignalDialInDesc": "Вы можете также дозвониться используя:",
"noAudioSignalDialInLinkDesc": "Номера для дозвона",
"noAudioSignalTitle": "От вашего микрофона не идет звуковой сигнал!",
"noiseSuppression": "Шумоподавление",
"noisyAudioInputDesc": "Возможно, ваш микрофон создает шум. Вы можете выключить его или смените устройство.",
"noisyAudioInputTitle": "Похоже, ваш микрофон создает шум!",
"openChat": "Открыть чат",
@@ -1160,6 +1182,7 @@
"shareaudio": "Предоставить доступ к звуку",
"sharedvideo": "Видео YouTube",
"shortcuts": "Комбинации клавиш",
"showWhiteboard": "Показать интерактивную доску",
"silence": "Молчание",
"speakerStats": "Статистика",
"startScreenSharing": "Начать трансляцию с экрана",
@@ -1225,9 +1248,11 @@
"ldTooltip": "Видео низкого качества",
"lowDefinition": "Низкое качество",
"performanceSettings": "Параметры производительности",
"recording": "Идет запись",
"sd": "SD",
"sdTooltip": "Видео стандартного качества",
"standardDefinition": "Стандартное качество (SD)"
"standardDefinition": "Стандартное качество (SD)",
"streaming": "Идет трансляция"
},
"videothumbnail": {
"connectionInfo": "Информация о соединении",
@@ -1239,6 +1264,7 @@
"grantModerator": "Сделать модератором",
"hideSelfView": "Скрыть собственное представление",
"kick": "Отключить",
"mirrorVideo": "Зеркально отразить видео",
"moderator": "Модератор",
"mute": "Без звука",
"muted": "Звук выключен",
@@ -1248,6 +1274,7 @@
"show": "Показать крупным планом",
"showSelfView": "Показать своё представление",
"unpinFromStage": "Отпинить",
"verify": "Проверить участника",
"videoMuted": "Камера выключена",
"videomute": "Участник выключил камеру"
},
@@ -1307,6 +1334,7 @@
"microsoftLogo": "Логотип Майкрософт",
"policyLogo": "Логотип политики"
},
"meetingsAccessibilityLabel": "Конференции",
"mobileDownLoadLinkAndroid": "Скачать мобильное приложение для Android",
"mobileDownLoadLinkFDroid": "Скачать мобильное приложение для F-Droid",
"mobileDownLoadLinkIos": "Скачать мобильное приложение для iOS",
@@ -1315,13 +1343,21 @@
"recentList": "Недавние",
"recentListDelete": "Удалить",
"recentListEmpty": "Сейчас ваш список недавно проведенных конференций пуст. По мере вашего пользования сервисом он будет пополняться.",
"recentMeetings": "Ваши недавние конференции",
"reducedUIText": "Добро пожаловать в {{app}}!",
"roomNameAllowedChars": "Название конференции не должно содержать следующие символы: ?, &, :, ', \", %, #.",
"roomname": "Укажите название комнаты",
"roomnameHint": "Укажите название комнаты или ее адрес. Можете сами создать название и передать его будущим участникам встречи, чтобы они использовали именно его.",
"sendFeedback": "Обратная связь",
"settings": "Настройки",
"startMeeting": "Создать конференцию",
"terms": "Условия",
"title": "Защищенная, полнофункциональная и совершенно бесплатная система видеоконференций"
"title": "Защищенная, полнофункциональная и совершенно бесплатная система видеоконференций",
"upcomingMeetings": "Ваши предстоящие конференции"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Интерактивная доска"
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,6 @@
"defaultEmail": "Email-i Juaj Parazgjedhje",
"disabled": "Smund të ftoni persona.",
"failedToAdd": "Su arrit të shtohen pjesëmarrës",
"footerText": "Formimi i numrave është i çaktivizuar.",
"googleEmail": "Email Google",
"inviteMoreHeader": "Në takim jeni vetëm ju",
"inviteMoreMailSubject": "Merrni pjesë në takim me {{appName}}",
@@ -31,6 +30,7 @@
},
"audioDevices": {
"bluetooth": "Bluetooth",
"car": "Audio Automjeti",
"headphones": "Kufje",
"none": "Ska pajisje audio",
"phone": "Telefon",
@@ -39,9 +39,6 @@
"audioOnly": {
"audioOnly": "Gjerësi e ulët bande"
},
"blankPage": {
"meetingEnded": "Takimi përfundoi."
},
"breakoutRooms": {
"actions": {
"add": "Shtoni aneks konsultimesh",
@@ -79,15 +76,27 @@
"refresh": "Rifresko kalendarin",
"today": "Sot"
},
"carmode": {
"actions": {
"selectSoundDevice": "Përzgjidhni pajisje zëri"
},
"labels": {
"buttonLabel": "Mënyra automjet",
"title": "Mënyra automjet",
"videoStopped": "Videoja juaj është ndalur"
}
},
"chat": {
"enter": "Hyni në fjalosje",
"error": "Gabim: mesazhi juaj su dërgua. Arsye: {{error}}",
"fieldPlaceHolder": "Shtypni këtu mesazhin tuaj",
"lobbyChatMessageTo": "Mesazh fjalosjeje në holl për {{recipient}}",
"message": "Mesazh",
"messageAccessibleTitle": "{{user}} thotë:",
"messageAccessibleTitleMe": "unë them:",
"messageTo": "Mesazh privat për {{recipient}}",
"messagebox": "Shtypni një mesazh",
"newMessages": "Mesazhe të rinj",
"nickname": {
"popover": "Zgjidhni një nofkë",
"title": "Që të përdorni fjalosjen, jepni një nofkë",
@@ -96,7 +105,7 @@
"noMessagesMessage": "Te takimi ska ende mesazhe. Nisni një bisedë këtu!",
"privateNotice": "Mesazh privat për {{recipient}}",
"sendButton": "Dërgoje",
"smileysPanel": "Panel emoji-sh",
"smileysPanel": "Panel emoxhish",
"tabs": {
"chat": "Fjalosje",
"polls": "Pyetësorë"
@@ -107,6 +116,7 @@
},
"chromeExtensionBanner": {
"buttonText": "Instaloni Zgjerimin për Chrome",
"buttonTextEdge": "Instaloni Zgjerimin 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"
@@ -137,6 +147,7 @@
"bridgeCount": "Numër shërbyesish: ",
"codecs": "Kodekë (A/V): ",
"connectedTo": "Lidhur te:",
"e2eeVerified": "I verifikuar si E2EE:",
"framerate": "Shpejtësi kuadrosh:",
"less": "Shfaq më pak",
"localaddress": "Adresë vendore:",
@@ -172,14 +183,22 @@
},
"deepLinking": {
"appNotInstalled": "Që të merrni pjesë në këtë takim që nga telefoni juaj, ju duhet aplikacioni për celular {{app}}.",
"description": "Sngjau gjë? Provuam të nisim takimin tuaj te aplikacioni për desktop {{app}}. Rorpovoni, ose niseni nga aplikacioni web {{app}}.",
"description": "Sngjau gjë? Provuam të nisim takimin tuaj te aplikacioni për desktop {{app}}. Riprovoni, ose niseni nga aplikacioni web {{app}}.",
"descriptionNew": "Sngjau gjë? Provuam nisjen e takimit tuaj te aplikacioni për desktop {{app}}. <br /><br /> Mund të riprovoni, ose ta nisni në web.",
"descriptionWithoutWeb": "Sngjau gjë? Provuam nisjen e takimit tuaj te aplikacioni për desktop {{app}}.",
"downloadApp": "Shkarkoni aplikacionin",
"downloadMobileApp": "Shkarkojeni prej App Store",
"ifDoNotHaveApp": "Nëse se keni ende aplikacionin:",
"ifHaveApp": "Nëse e keni tashmë aplikacionin:",
"joinInApp": "Merrni pjesë në këtë takim duke përdorur aplikacionin",
"joinInAppNew": "Hyni që nga aplikacioni",
"joinInBrowser": "Hyni që nga shfletues",
"launchMeetingLabel": "Si doni të hyhet në këtë takim?",
"launchWebButton": "Nise në web",
"noMobileApp": "Se keni aplikacionin?",
"termsAndConditions": "Duke vazhduar, pajtoheni me <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a> tona",
"title": "Po niset takimi juaj në {{app}}…",
"titleNew": "Po niset takimi juaj…",
"tryAgainButton": "Riprovoni në desktop",
"unsupportedBrowser": "Duket se përdorni një shfletues që se mbulojmë."
},
@@ -192,11 +211,20 @@
"microphonePermission": "Gabim në marrje lejesh mbi mikrofonin"
},
"deviceSelection": {
"hid": {
"callControl": "Kontroll thirrjesh",
"connectedDevices": "Pajisje të lidhura:",
"deleteDevice": "Fshije pajisjen",
"pairDevice": "Çiftoni pajisje"
},
"noPermission": "Su akordua leje",
"previewUnavailable": "Sbëhet dot paraparje",
"selectADevice": "Përzgjidhni një pajisje",
"testAudio": "Luaj një tingull, për provë"
},
"dialIn": {
"screenTitle": "Përmbledhje rënieje numrash"
},
"dialOut": {
"statusMessage": "tani është {{status}}"
},
@@ -215,6 +243,8 @@
"liveStreaming": "Transmetim i Drejtpërdrejtë"
},
"add": "Shtoni",
"addMeetingNote": "Shtoni një shënim rreth këtij takimi",
"addOptionalNote": "Shtoni një shënim (në daçi):",
"allow": "Lejoje",
"alreadySharedVideoMsg": "Një tjetër pjesëmarrës po ndan me të tjerët një video. Kjo konferencë lejon vetëm një ndarje videoje në herë.",
"alreadySharedVideoTitle": "Lejohet vetëm një ndarje videoje me të tjerët në herë",
@@ -256,6 +286,7 @@
"gracefulShutdown": "Shërbimi ynë është aktualisht i ndërprerë, për punë mirëmbajtjeje. Ju lutemi, riprovoni më vonë.",
"grantModeratorDialog": "Jeni i sigurt se doni të akordohen të drejta moderatori për {{participantName}}?",
"grantModeratorTitle": "Akordoni të drejta moderatori",
"hide": "Fshihe",
"hideShareAudioHelper": "Mos e shfaq më këtë dialog",
"incorrectPassword": "Emër përdoruesi ose fjalëkalim i pasaktë",
"incorrectRoomLockPassword": "Fjalëkalim i pasaktë",
@@ -266,9 +297,10 @@
"kickParticipantDialog": "Jeni i sigurt se doni të përzihet ky pjesëmarrës?",
"kickParticipantTitle": "Të përzihet ky pjesëmarrës?",
"kickTitle": "Ooh! {{participantDisplayName}} ju përzuri nga takimi",
"linkMeeting": "Lidheni takimin",
"linkMeetingTitle": "Lidheni takimin me Salesforce",
"liveStreaming": "Transmetim i Drejtpërdrejtë",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "Jo e mundshme, kur është aktiv regjistrimi",
"liveStreamingDisabledTooltip": "Nisje transmetimesh të drejtpërdrejta e çaktivizuar.",
"localUserControls": "Kontrolle vendore përdoruesi",
"lockMessage": "Su arrit të kyçej konferenca.",
"lockRoom": "Shtoni takim $t(lockRoomPasswordUppercase)",
@@ -280,7 +312,7 @@
"maxUsersLimitReachedTitle": "U mbërrit në kufi numri maksimum pjesëmarrësish",
"micConstraintFailedError": "Mikrofoni juaj splotëson disa nga kufizimet e domosdoshme.",
"micNotFoundError": "Su gjet mikrofon.",
"micNotSendingData": "Kaloni te rregullimet e kompjuterit tuaj që ti hiqni mikrofonit heshtimin dhe të ujdisni volumin për të",
"micNotSendingData": "Kaloni te rregullimet e kompjuterit tuaj, që ti hiqni mikrofonit heshtimin dhe të ujdisni volumin për të",
"micNotSendingDataTitle": "Mikrofoni juaj është heshtuar nga rregullimet e sistemit tuaj",
"micPermissionDeniedError": "Skeni akorduar leje për tu përdorur mikrofoni juaj. Mundeni prapëseprapë të merrni pjesë te konferenca, por të tjerët sdo tju dëgjojnë. Përdorni butonin e kamerës, te shtylla e adresave, për ta ndrequr këtë gjë.",
"micTimeoutError": "Su nis dot burim audio. Ndodhi mbarim kohe!",
@@ -320,15 +352,15 @@
"popupError": "Shfletuesi juaj i bllokon dritaret flluskë prej këtij sajti. Ju lutemi, aktivizoni flluskat te rregullimet e sigurisë të shfletuesit tuaj dhe riprovoni.",
"popupErrorTitle": "Flluska u bllokua",
"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ë",
"recordingDisabledTooltip": "Nisja e regjistrimit është çaktivizuar.",
"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!",
"remoteControlErrorMessage": "Ndodhi një gabim teksa provohej të kërkoheshin leje kontrolli së largëti nga {{user}}!",
"remoteControlRequestMessage": "A do ta lejoni {{user}} të kontrollojë së largëti desktopin tuaj?",
"remoteControlShareScreenWarning": "Mbani parasysh se nëse shtypni \"Lejoje\", do tu tregoni ekranin tuaj!",
"remoteControlShareScreenWarning": "Mbani parasysh se nëse shtypni Lejoje, do tu tregoni ekranin tuaj!",
"remoteControlStopMessage": "Sesioni me kontroll së largëti përfundoi!",
"remoteControlTitle": "Kontroll desktopi së largëti",
"remoteUserControls": "Kontrolle përdoruesi së largëti të {{username}}",
@@ -342,6 +374,12 @@
"screenSharingFailed": "Hëm! Diç shkoi ters, sqemë në gjendje të nisnim tregim ekrani!",
"screenSharingFailedTitle": "Tregimi i ekrani dështoi!",
"screenSharingPermissionDeniedError": "Hëm! Diç shkoi ters me lejet tuaja për tregim ekrani. Ju lutemi, ringarkojeni dhe riprovoni.",
"searchInSalesforce": "Kërkoni në Salesforce",
"searchResults": "Përfundime kërkimi({{count}})",
"searchResultsDetailsError": "Diç shkoi ters teksa provohej të merreshin të dhënat e të zotit.",
"searchResultsError": "Diç shkoi ters teksa provohej të merreshin të dhëna.",
"searchResultsNotFound": "Su gjetën përfundime kërkimi.",
"searchResultsTryAgain": "Provoni duke përdorur terma alternativë.",
"sendPrivateMessage": "Tani së fundi morët një mesazh privat. Kishit ndërmend ti përgjigjeni privatisht, apo doni tia dërgoni mesazhin grupit?",
"sendPrivateMessageCancel": "Dërgoja grupit",
"sendPrivateMessageOk": "Dërgoje privatisht",
@@ -352,12 +390,12 @@
"shareAudio": "Vazhdo",
"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 ti vini shenjë mundësisë \"ndani audio me të tjerë\".",
"shareAudioWarningD2": "lypset të rinisni tregimin e ekranit tuaj dhe ti vini shenjë mundësisë ndani audio me të tjerë.",
"shareAudioWarningH1": "Nëse doni të ndani vetëm audio me të tjerë:",
"shareAudioWarningTitle": "Lypset të ndalni tregimin e ekranit, para se të ndani audio me të tjerë",
"shareMediaWarningGenericH2": "Nëse doni të tregoni ekranin dhe të ndani audio me të tjerë",
"shareScreenWarningD1": "lypset të ndalni ndarjen e audios me të tjerë, para se të tregoni ekranin tuaj.",
"shareScreenWarningD2": "lypset të ndalni ndarjen e audios me të tjerë, të nisni tregimin e ekranit dhe ti vini shenjë mundësisë \"ndani audio me të tjerë\".",
"shareScreenWarningD2": "lypset të ndalni ndarjen e audios me të tjerë, të nisni tregimin e ekranit dhe ti vini shenjë mundësisë ndani audio me të tjerë.",
"shareScreenWarningH1": "Nëse thjesht doni të tregoni ekranin tuaj:",
"shareScreenWarningTitle": "Lypset të ndalni ndarjen e audios me të tjerë, para tregimit të ekranit tuaj",
"shareVideoLinkError": "Ju lutemi, jepni një lidhje të saktë videoje.",
@@ -366,6 +404,8 @@
"shareYourScreenDisabled": "Tregimi i ekranit është i çaktivizuar.",
"sharedVideoDialogError": "Gabim: URL e pavlefshme",
"sharedVideoLinkPlaceholder": "Lidhje YouTube ose lidhje e drejtpërdrejtë për video",
"show": "Shfaqe",
"start": "Fillo ",
"startLiveStreaming": "Nisni transmetim të drejtpërdrejtë",
"startRecording": "Fillo regjistrim",
"startRemoteControlErrorMessage": "Ndodhi një gabim teksa provohej të nisej sesioni i kontrollit së largëti!",
@@ -383,6 +423,10 @@
"user": "Përdorues",
"userIdentifier": "Identifikues përdoruesi",
"userPassword": "Fjalëkalim përdoruesi",
"verifyParticipantConfirm": "Përputhen",
"verifyParticipantDismiss": "Nuk përputhen",
"verifyParticipantQuestion": "EKSPERIMENTALE: Pyeteni pjesëmarrësin {{participantName}} nëse sheh të njëjtën lëndë, sipas të njëjtës radhë.",
"verifyParticipantTitle": "Verifikim përdoruesi",
"videoLink": "Lidhje videoje",
"viewUpgradeOptions": "Shihni mundësi përmirësimi",
"viewUpgradeOptionsContent": "Që të përfitoni përdorim të pakufizuar veçorish me pagesë, të tilla si regjistrimi, transcriptime, RTMP Streaming & etj, duhet të përmirësoni planin tuaj.",
@@ -408,8 +452,14 @@
"veryBad": "Shumë i Dobët",
"veryGood": "Shumë i Mirë"
},
"helpView": {
"title": "Qendër ndihme"
"filmstrip": {
"accessibilityLabel": {
"heading": "Miniatura videosh"
}
},
"giphy": {
"noResults": "Su gjetën përfundime :(",
"search": "Kërkoni në GIPHY"
},
"incomingCall": {
"answer": "Përgjigjuni",
@@ -451,9 +501,11 @@
"noRoom": "Su dha dhomë për të cilën të formësohet numri.",
"numbers": "Numra Për Tu Përdorur",
"password": "$t(lockRoomPasswordUppercase): ",
"reachedLimit": "Keni mbërritur në kufijtë e planit tuaj.",
"sip": "Adresë SIP",
"title": "Ndani me të tjerë",
"tooltip": "Ndani me të tjerë lidhje dhe hollësi numrash për këtë takim"
"tooltip": "Ndani me të tjerë lidhje dhe hollësi numrash për këtë takim",
"upgradeOptions": "Ju lutemi, shihni mundësitë e përmirësimit, te"
},
"inlineDialogFailure": {
"msg": "Ngecëm pak.",
@@ -474,10 +526,11 @@
"focusLocal": "Fokusi te videoja juaj",
"focusRemote": "Fokusi te videoja e një personi tjetër",
"fullScreen": "Hyni ose dilni në mënyrën “Sa krejt ekrani”",
"giphyMenu": "Shfaq/Fshish menu GIPHY",
"keyboardShortcuts": "Shkurtore tastiere",
"localRecording": "Shfaqni ose fshini kontrolle regjistrimi lokal",
"mute": "Mbyllni ose hapni mikrofonin tuaj",
"pushToTalk": "Për të folur, shtypeni",
"pushToTalk": " të flisni, shtypni",
"raiseHand": "Ngrini ose ulni dorën",
"showSpeakerStats": "Shfaq statistika folësish",
"toggleChat": "Hapni ose mbyllni fjalosjen",
@@ -487,6 +540,10 @@
"toggleShortcuts": "Shfaqni ose fshihni shkurtore tastiere",
"videoMute": "Vini në punë ose ndalni kamerën tuaj"
},
"largeVideo": {
"screenIsShared": "Po u tregoni ekranin tuaj",
"showMeWhatImSharing": "Tregomë çpo u tregoj"
},
"liveStreaming": {
"busy": "Po përpiqemi të lirojmë burime transmetimi. Ju lutemi, riprovoni pas pak minutash.",
"busyTitle": "Krejt transmetuesit janë aktualisht të zënë",
@@ -527,8 +584,8 @@
"lobby": {
"admit": "Pranoje",
"admitAll": "Pranoji të tërë",
"allow": "Lejoje",
"backToKnockModeButton": "Kërkoji të marrë pjesë",
"chat": "Fjalosje",
"dialogTitle": "Mënyra holl",
"disableDialogContent": "Mënyra holl është aktualisht e aktivizuar. Kjo veçori siguron që pjesëmarrës të padëshiruar të mos mund të hyjnë në takimin tuaj. Doni të çaktivizohet?",
"disableDialogSubmit": "Çaktivizoje",
@@ -541,6 +598,7 @@
"errorMissingPassword": "Ju lutemi, jepni fjalëkalimin e takimit",
"invalidPassword": "Fjalëkalim i pavlefshëm",
"joinRejectedMessage": "Kërkesa juaj për hyrje u hodh poshtë nga një moderator.",
"joinRejectedTitle": "Kërkesa për pjesëmarrje u hodh poshtë.",
"joinTitle": "Merrni Pjesë Në Takim",
"joinWithPasswordMessage": "Po provohet të hyhet me fjalëkalim, ju lutemi, pritni…",
"joiningMessage": "Do të hyni në takim sapo dikush të pranojë kërkesën tuaj",
@@ -549,6 +607,8 @@
"knockButton": "Kërko të Hyhet",
"knockTitle": "Dikush dëshiron të hyjë në takim",
"knockingParticipantList": "Listë pjesëmarrësish që duan të hyjnë",
"lobbyChatStartedNotification": "{{moderator}} filloi një fjalosje në holl me {{attendee}}",
"lobbyChatStartedTitle": "{{moderator}} ka filluar një fjalosje në holl me ju.",
"nameField": "Jepni emrin tuaj",
"notificationLobbyAccessDenied": "Hyrja e {{targetParticipantName}} është hedhur poshtë nga {{originParticipantName}}",
"notificationLobbyAccessGranted": "{{targetParticipantName}} është lejuar të hyjë nga {{originParticipantName}}",
@@ -586,6 +646,7 @@
"no": "Jo",
"participant": "Pjesëmarrës",
"participantStats": "Statistika Pjesëmarrësish",
"selectTabTitle": "🎥 Ju lutemi, për regjistrim përzgjidhni këtë skedë",
"sessionToken": "Token Sesioni",
"start": "Nis Regjistrim",
"stop": "Ndale Regjistrimin",
@@ -608,10 +669,13 @@
"connectedOneMember": "{{name}} nisi takimin",
"connectedThreePlusMembers": "{{name}} dhe mjaft të tjerë tjerë hynë në takim",
"connectedTwoMembers": "{{first}} dhe {{second}} tjetër hynë në takim",
"dataChannelClosed": "Rënie cilësie videoje",
"dataChannelClosedDescription": "Kanali urë u shkëput, kështu që cilësia e videos është kufizuar te vlera më e ulët.",
"disconnected": "u shkëput",
"displayNotifications": "Shfaq njoftime për",
"focus": "Fokusi te konferenca",
"focusFail": "{{component}} jo i passhëm - riprovoni pas {{ms}} sekondash",
"gifsMenu": "GIPHY",
"groupTitle": "Njoftime",
"hostAskedUnmute": "Moderatori do të donte të flisnit",
"invitedOneMember": "{{name}} u ftua",
@@ -621,6 +685,14 @@
"leftOneMember": "{{name}} doli nga takimi",
"leftThreePlusMembers": "{{name}} dhe mjaft të tjerë dolën nga takimi",
"leftTwoMembers": "{{first}} dhe {{second}} dolën nga takimi",
"linkToSalesforce": "Lidheni te Salesforce",
"linkToSalesforceDescription": "Mund ta lidhni përmbledhjen e takimit te një objekt Salesforce.",
"linkToSalesforceError": "Su arrit të lidhe takimi te Salesforce",
"linkToSalesforceKey": "Lidheni këtë takim",
"linkToSalesforceProgress": "Po lidhet takimi te Salesforce…",
"linkToSalesforceSuccess": "Takimi u lidh te Salesforce",
"localRecordingStarted": "{{name}} ka filluar një regjistrim vendor.",
"localRecordingStopped": "{{name}} ka ndalur një regjistrim vendor.",
"me": "Unë",
"moderationInEffectCSDescription": "Ju lutemi, ngrini dorën, nëse doni të tregoni ekranin tuaj.",
"moderationInEffectCSTitle": "Tregimi i ekranit është bllokuar nga moderatori",
@@ -641,7 +713,11 @@
"newDeviceAction": "Përdore",
"newDeviceAudioTitle": "U pikas pajisje audio e re",
"newDeviceCameraTitle": "U pikas kamerë e re",
"oldElectronClientDescription1": "Duket se përdorni një version të vjetër të klientit Jitsi Meet, i cili ka cenueshmëri sigurie që njihen. Ju lutemi, siguroni përditësimin me ",
"noiseSuppressionDesktopAudioDescription": "Mbytja e zhurmave smund të aktivizohet teksa ndahet me të tjerët audioja e desktopit, ju lutemi, çaktivizojeni dhe riprovoni.",
"noiseSuppressionFailedTitle": "Su arrit të nisej mbytja e zhurmave",
"noiseSuppressionNoTrackDescription": "Ju lutemi, së pari, çheshtoni mikrofonin tuaj.",
"noiseSuppressionStereoDescription": "Aktualisht nuk mbulohet mbytje zhurmash audioje 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!",
"participantWantsToJoin": "Dëshiron të hyjë në takim",
@@ -655,6 +731,8 @@
"reactionSoundsForAll": "Çaktivizoji tingujt për të tërë",
"screenShareNoAudio": "Kutizës për ndarje audioje me të tjerë si është vënë shenjë te skena e përzgjedhjes së dritares.",
"screenShareNoAudioTitle": "Su 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",
"screenSharingAudioOnlyTitle": "Mënyra “”Punimi më i mirë",
"selfViewTitle": "Mundeni përherë të hiqni fshehjen e pamjes së vetes, që nga rregullimet",
"somebody": "Dikush",
"startSilentDescription": "Që të aktivizohet audioja, rihyni në takim",
@@ -674,7 +752,7 @@
"allow": "Lejoju pjesëmarrësve të:",
"allowVideo": "Çaktivizoni videon",
"askUnmute": "Kërkoni heqje heshtimi",
"audioModeration": "Hiqni heshtim të vetes",
"audioModeration": "Heqin heshtim të vetes",
"blockEveryoneMicCamera": "Bllokoni mikrofonin dhe kamerën e gjithkujt",
"invite": "Ftoni Dikë",
"moreModerationActions": "Më tepër mundësi moderimi",
@@ -686,12 +764,13 @@
"stopEveryonesVideo": "Ndal videon e gjithkujt",
"stopVideo": "Ndale videon",
"unblockEveryoneMicCamera": "Zhblloko mikrofonin dhe kamerën e gjithkujt",
"videoModeration": "Nis videon e vet"
"videoModeration": "Nisin videon e vetes"
},
"close": "Mbylle",
"headings": {
"lobby": "Holli ({{count}})",
"participantsList": "Pjesëmarrës në takim ({{count}})",
"visitors": "Vizitorë ({{count}})",
"waitingLobby": "Duke pritur në holl ({{count}})"
},
"search": "Kërkoni te pjesëmarrësit",
@@ -699,6 +778,8 @@
},
"passwordDigitsOnly": "Deri në {{number}} shifra",
"passwordSetRemotely": "Caktuar nga një tjetër pjesëmarrës",
"pinParticipant": "{{participantName}} - Fiksoje",
"pinnedParticipant": "Pjesëmarrësi është fiksuar",
"polls": {
"answer": {
"skip": "Anashkaloje",
@@ -775,6 +856,7 @@
"initiated": "U nis thirrja",
"joinAudioByPhone": "Merrni pjesë me audio telefoni",
"joinMeeting": "Merrni pjesë në takim",
"joinMeetingInLowBandwidthMode": "Merrni pjesë nën mënyrën “gjerësi e ulët bande”",
"joinWithoutAudio": "Merrni pjesë pa audio",
"keyboardShortcuts": "Aktivizo shkurtore tastiere",
"linkCopied": "Lidhja u kopjua në të papastër",
@@ -802,9 +884,6 @@
"rejected": "Hedhur poshtë",
"ringing": "Po i bihet ziles…"
},
"privacyView": {
"title": "Privatësi"
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Caktoni emrin tuaj për në ekran",
@@ -814,6 +893,18 @@
},
"raisedHand": "Do të donte të fliste",
"raisedHandsLabel": "Numër duarsh të ngritura",
"record": {
"already": {
"linked": "Takimi është i lidhur tashmë te ky objekt Salesforce."
},
"type": {
"account": "Llogari",
"contact": "Kontakt",
"lead": "Lead",
"opportunity": "Mundësi",
"owner": "Zotërues"
}
},
"recording": {
"authDropboxText": "Ngarkoje në Dropbox",
"availableSpace": "Hapësirë e gatshme: {{spaceLeft}} MB (afërsisht {{duration}} minuta regjistrim)",
@@ -828,29 +919,48 @@
"expandedPending": "Po niset regjistrimi…",
"failedToStart": "Su arrit të niset regjistrimi",
"fileSharingdescription": "Ndajeni regjistrimin me pjesëmarrësit në takim",
"highlight": "Nxjerrje në pah",
"highlightMoment": "Nxirni në pah një çast",
"highlightMomentDisabled": "Mund të nxirrni në pah çaste kur fillon regjistrimi",
"highlightMomentSuccess": "Çasti u nxorr 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.",
"live": "DREJTPËRSËDREJTI",
"localRecordingNoNotificationWarning": "Regjistrimi sdo tu njoftohet pjesëmarrësve të tjerë. Do tju duhet ti vini në dijeni se takimi po regjistrohet.",
"localRecordingNoVideo": "Videoja nuk po regjistrohet",
"localRecordingStartWarning": "Ju lutemi, sigurohuni se e ndalni regjistrimin para se dilni nga takimi, që të mund ta ruani.",
"localRecordingStartWarningTitle": "Ndaleni regjistrimin që ta ruani",
"localRecordingVideoStop": "Ndalja e videos tuaj do të ndalë gjithashtu edhe regjistrimin vendor. Jeni i sigurt se doni të vazhdohet?",
"localRecordingVideoWarning": "Që ta regjistroni, videon tuaj duhet ta keni të hapur, kur niset regjistrimi",
"localRecordingWarning": "Sigurohuni se përzgjidhni skedën e tanishme, që të mund të përdoret videoja dhe audioja e saktë. Regjistrimi aktualisht është i kufizuar deri në 1GB, çka është aty afër 100 minutave.",
"loggedIn": "I futur si {{userName}}",
"noMicPermission": "Su krijua dot pistë mikrofoni. Ju lutemi, akordoni leje për përdorim të mikrofonit.",
"noStreams": "Su pikas rrjedhë audio ose video.",
"off": "Regjistrimi u ndal",
"offBy": "{{name}} ndali regjistrimin",
"on": "Regjistrimi nisi",
"onBy": "{{name}} nisi regjistrimin",
"onlyRecordSelf": "Regjistro vetëm rrjedhat e mia audio dhe video",
"pending": "Po përgatitet të regjistrohet takimi…",
"rec": "REC",
"saveLocalRecording": "Ruajeni lokalisht kartelën e regjistrimit (Beta)",
"serviceDescription": "Regjistrimi juaj do të ruhet nga shërbimi i regjistrimit",
"serviceDescriptionCloud": "Regjistrim në re",
"serviceDescriptionCloudInfo": "Takimet e regjistruara spastrohen automatikisht 24h pas kohës së regjistrimit të tyre.",
"serviceName": "Shërbim regjistrimi",
"sessionAlreadyActive": "Ky sesion po regjistrohet ose transmetohet drejtpërsëdrejti tashmë.",
"signIn": "Hyni",
"signOut": "Dilni",
"surfaceError": "Ju lutemi, përdorni skedën e tanishme.",
"title": "Regjistrim",
"unavailable": "Hëm! {{serviceName}} sështë i passhëm aktualisht. Po punojmë për të zgjidhur problemin. Ju lutemi, riprovoni më vonë.",
"unavailableTitle": "Regjistrim jo i passhëm",
"uploadToCloud": "Ngarkojeni te reja"
},
"screenshareDisplayName": "Skena e {{name}}",
"sectionList": {
"pullToRefresh": "Tërhiqeni që të rifreskohet"
},
@@ -861,8 +971,9 @@
"title": "Mundësi Sigurie"
},
"settings": {
"buttonLabel": "Rregullime",
"calendar": {
"about": "Integrimi i me kalendar {{appName}} përdoret për të hyrë me sukses te kalendari juaj, që kështu të mund të lexohen veprimtari të ardhshme.",
"about": "Integrimi me kalendar {{appName}} përdoret për të hyrë me sukses te kalendari juaj, që kështu të mund të lexohen veprimtari të ardhshme.",
"disconnect": "Shkëputu",
"microsoftSignIn": "Hyni me Microsoft",
"signedIn": "Aktualisht po shihen veprimtari kalendari për {{email}}. Klikoni mbi butonin Shkëputu më poshtë që të ndalni parjen e veprimtarive të kalendarit.",
@@ -877,12 +988,14 @@
"incomingMessage": "Mesazh ardhës",
"language": "Gjuhë",
"loggedIn": "I futur si {{name}}",
"maxStageParticipants": "Numër maksimum pjesëmarrësish që mund të fiksohen te skena kryesore (EKSPERIMENTALe)",
"microphones": "Mikrofona",
"moderator": "Moderator",
"more": "Më tepër",
"name": "Emër",
"noDevice": "Asnjë",
"participantJoined": "Hyri Pjesëmarrës",
"participantKnocking": "Pjesëmarrës hyri në holl",
"participantLeft": "Doli Pjesëmarrës",
"playSounds": "Luaj tingull kur",
"reactions": "Reagime takimi",
@@ -912,13 +1025,21 @@
"disableCrashReportingWarning": "Jeni i sigurt se doni të çaktivizohet raportim vithisjesh? Rregullimi do të vihet në punë pasi të rinisni aplikacionin.",
"disableP2P": "Çaktivizo mënyrë Tek-Për-Tek",
"displayName": "Emër në ekrani",
"displayNamePlaceholderText": "P.sh.: Zamir Gjoli",
"email": "Email",
"emailPlaceholderText": "email@example.com",
"goTo": "Kalo te",
"header": "Rregullime",
"help": "Ndihmë",
"links": "Lidhje",
"privacy": "Privatësi",
"profileSection": "Profil",
"serverURL": "URL Shërbyesi",
"showAdvanced": "Shfaq rregullime të mëtejshme",
"startCarModeInLowBandwidthMode": "Nën mënyrën “gjerësi e ulët bande” nis mënyrën automjet",
"startWithAudioMuted": "Fillo me audio të mbyllur",
"startWithVideoMuted": "Fillo me video të mbyllur",
"terms": "Terma",
"version": "Version"
},
"share": {
@@ -956,6 +1077,7 @@
"termsView": {
"title": "Terma"
},
"toggleTopPanelLabel": "Shfaq/fshih panelin e epërm",
"toolbar": {
"Settings": "Rregullime",
"accessibilityLabel": {
@@ -965,6 +1087,7 @@
"boo": "Ya",
"breakoutRoom": "Hyni/Dilni nga dhomë aneks konsultimesh",
"callQuality": "Administroni cilësi videoje",
"carmode": "Mënyra Automjet",
"cc": "Shfaq/Fshih titra",
"chat": "Hapni / Mbyllni fjalosje",
"clap": "Duartrokitje",
@@ -972,16 +1095,21 @@
"document": "Shfaq/Fshih dokument të ndarë",
"download": "Shkarkoni aplikacionet tona",
"embedMeeting": "Trupëzoni takimin",
"endConference": "Përfundoje takimin për të tërë",
"expand": "Zgjeroje",
"feedback": "Lini përshtypje",
"fullScreen": "Kalo/Dil nga mënyra “Sa krejt ekrani”",
"fullScreen": "Kalo nën/Dil nga mënyra “Sa krejt ekrani”",
"giphy": "Shfaq/fshih menunë GIPHY",
"grantModerator": "Akordoji të Drejta Moderatori",
"hangup": "Braktiseni takimin",
"heading": "Panel",
"help": "Ndihmë",
"invite": "Ftoni njerëz",
"kick": "Përzëre pjesëmarrësin",
"laugh": "E qeshur",
"leaveConference": "Dilni nga takimi",
"like": "Thumbs Up",
"linkToSalesforce": "Lidhje për te Salesforce",
"lobbyButton": "Aktivizo/Çaktivizoni mënyrën holl",
"localRecording": "Shfaq/Fshih kontrolle regjistrimi vendor",
"lockRoom": "Aktivizo/Çaktivizo fjalëkalim takimi",
@@ -993,6 +1121,7 @@
"muteEveryoneElse": "Heshto gjithkënd tjetër",
"muteEveryoneElsesVideoStream": "Ndal videon e gjithkujt tjetër",
"muteEveryonesVideoStream": "Ndal videon e gjithkujt",
"noiseSuppression": "Mbytje zhurmash",
"participants": "Pjesëmarrës",
"pip": "Aktivizo/Çaktivizo mënyrën “Picture-in-Picture”",
"privateMessage": "Dërgoni mesazh privat",
@@ -1004,7 +1133,7 @@
"remoteVideoMute": "Çaktivizo kamerën e pjesëmarrësit",
"security": "Mundësi sigurie",
"selectBackground": "Përzgjidhni Sfond",
"selfView": "Shfaq/Fshih pamje veteje",
"selfView": "Shfaq/Fshih pamje vetes",
"shareRoom": "Ftoni dikë",
"shareYourScreen": "Nisni / Ndalni tregimin e ekranit tuaj",
"shareaudio": "Ndani audio me të tjerë",
@@ -1014,11 +1143,12 @@
"silence": "Heshtje",
"speakerStats": "Shfaq/Fshih statistika folësi",
"surprised": "I befasuar",
"tileView": "Kalo/Dil nga mënyra mozaik",
"tileView": "Kalo/Dil nga mënyra mozaik",
"toggleCamera": "Hap/Mbyll kamerën",
"toggleFilmstrip": "Shfaq/Fshih shirit filmi",
"videoblur": "Aktivizo/Çaktivizo turbullim videoje",
"videomute": "Nis / Ndal kamerën"
"videomute": "Nis / Ndal kamerën",
"whiteboard": "Shfaq / Fshih tabelën"
},
"addPeople": "Shtoni persona te thirrja juaj",
"audioOnlyOff": "Çaktivizo mënyrën “Sasi e ulët të dhënash trafiku”",
@@ -1032,24 +1162,30 @@
"clap": "Duartrokitje",
"closeChat": "Mbyll fjalosjen",
"closeReactionsMenu": "Mbyll menu reagimesh",
"disableNoiseSuppression": "Çaktivizo mbytje 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",
"embedMeeting": "Trupëzoni takim",
"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",
"feedback": "Lini përshtypje",
"giphy": "Shfaq/Fshih menunë GIPHY",
"hangup": "Braktisni takimin",
"help": "Ndihmë",
"hideWhiteboard": "Fshihe tabelën",
"invite": "Ftoni persona",
"joinBreakoutRoom": "Hyni në dhomë aneks konsultimesh",
"laugh": "Qeshje",
"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",
@@ -1065,6 +1201,7 @@
"noAudioSignalDialInDesc": "Mund ti bini numrit edhe duke përdorur:",
"noAudioSignalDialInLinkDesc": "Numra thirrjeje",
"noAudioSignalTitle": "Ska sinjal që vjen nga mikrofoni juaj!",
"noiseSuppression": "Mbytje zhurmash",
"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",
@@ -1075,18 +1212,19 @@
"profile": "Përpunoni profilin tuaj",
"raiseHand": "Ngrini / Ulni dorën",
"raiseYourHand": "Ngrini dorën",
"reactionBoo": "Dërgo reagim me ya",
"reactionClap": "Dërgo reagim me duartrokitje",
"reactionLaugh": "Dërgo reagim me qeshje",
"reactionLike": "Dërgo reagim me “thumbs up”",
"reactionSilence": "Dërgo reagim me heshtje",
"reactionSurprised": "Dërgo reagim të befasuari",
"reactionBoo": "Dërgoni reagim me ya",
"reactionClap": "Dërgoni reagim me duartrokitje",
"reactionLaugh": "Dërgoni reagim me qeshje",
"reactionLike": "Dërgoni reagim me “thumbs up”",
"reactionSilence": "Dërgoni reagim me heshtje",
"reactionSurprised": "Dërgoni reagim të befasuari",
"security": "Mundësi sigurie",
"selectBackground": "Përzgjidhni sfond",
"shareRoom": "Ftoni dikë",
"shareaudio": "Ndani audio me të tjerë",
"sharedvideo": "Ndani video me të tjerë",
"shortcuts": "Shihni shkurtore",
"showWhiteboard": "Shfaq tabelë",
"silence": "Heshtje",
"speakerStats": "Statistika folësi",
"startScreenSharing": "Nise tregimin e ekranit",
@@ -1097,7 +1235,7 @@
"stopSubtitles": "Ndali titrat",
"surprised": "I befasuar",
"talkWhileMutedPopup": "Po provoni të flisni? Jeni i heshtuar.",
"tileViewToggle": "Kaloni/Dilni nga mënyra mozaik",
"tileViewToggle": "Kalo/Dil nga mënyra mozaik",
"toggleCamera": "Hapni/Mbyllni kamerën",
"videoSetting": "Rregullime videoje",
"videomute": "Nisni / Ndalni kamerën"
@@ -1110,10 +1248,15 @@
"labelToolTip": "Takimit po i bëhet transkriptim",
"off": "Transkriptimi u ndal",
"pending": "Po përgatitet të transkriptohet takimi…",
"sourceLanguageDesc": "Aktualisht si gjuhë takimi është caktuar <b>{{sourceLanguage}}</b>. <br/> Mund ta ndryshoni që nga ",
"sourceLanguageHere": "këtu",
"start": "Fillo shfaqje titrash",
"stop": "Ndal shfaqje titrash",
"subtitles": "Titra",
"subtitlesOff": "Off",
"tr": "TR"
},
"unpinParticipant": "{{participantName}} - Hiqja fiksimin",
"userMedia": {
"androidGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni <b><i>Lejoje</i></b>.",
"chromeGrantPermissions": "Kur shfletuesi juaj të kërkojë leje, përzgjidhni <b><i>Lejoje</i></b>.",
@@ -1152,9 +1295,11 @@
"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",
"sd": "CS",
"sdTooltip": "Po shihet video në cilësi standarde",
"standardDefinition": "Cilësi standarde"
"standardDefinition": "Cilësi standarde",
"streaming": "Transmetim në kryerje e sipër"
},
"videothumbnail": {
"connectionInfo": "Hollësi Lidhjeje",
@@ -1166,13 +1311,17 @@
"grantModerator": "Akordoji të Drejta Moderatori",
"hideSelfView": "Fshihe pamjen e vetes",
"kick": "Përzëre",
"mirrorVideo": "Pasqyro videon time",
"moderator": "Moderator",
"mute": "Pjesëmarrësi është heshtuar",
"muted": "I heshtuar",
"pinToStage": "Fiksoje në skenë",
"remoteControl": "Nis / Ndal kontroll së largëti",
"screenSharing": "Pjesëmarrësi po tregon ekranin e vet",
"show": "Shfaqe në skenë",
"showSelfView": "Shfaq pamje të vetes",
"unpinFromStage": "Çfiksoje",
"verify": "Verifikoni pjesëmarrës",
"videoMuted": "Kamera e çaktivizuar",
"videomute": "Pjesëmarrësi ka ndalur kamerën"
},
@@ -1183,7 +1332,7 @@
"blur": "Turbulloje",
"deleteImage": "Fshije figurën",
"desktopShare": "Tregim desktopi",
"desktopShareError": "Su krijua dot tregim desktopi",
"desktopShareError": "Su formua dot tregim desktopi",
"image1": "Plazh",
"image2": "Mur i bardhë asnjanës",
"image3": "Dhomë e bardhë e zbrazët",
@@ -1200,6 +1349,7 @@
"webAssemblyWarning": "Nuk mbulohet WebAssembly",
"webAssemblyWarningDescription": "WebAssembly e çaktivizuar ose e pambuluar nga ky shfletues"
},
"visitorsLabel": "Numër vizitorësh: {{count}}",
"volumeSlider": "Rrëshqitës volumi",
"welcomepage": {
"accessibilityLabel": {
@@ -1240,13 +1390,21 @@
"recentList": "Së fundi",
"recentListDelete": "Fshije zërin",
"recentListEmpty": "Lista juaj për “së fundi” aktualisht është e zbrazët. Bisedoni me ekipin tuaj dhe do të gjeni këtu krejt takimet tuaj së fundi.",
"recentMeetings": "Takimet tuaja së fundi",
"reducedUIText": "Mirë se vini në {{app}}!",
"roomNameAllowedChars": "Emri i takimit sduhet të përmbajë ndonjë nga këto shenja: ?, &, :, ', \", %, #.",
"roomname": "Jepni emër dhome",
"roomnameHint": "Jepni emrin ose URL-në e dhomës ku doni të hyhet. Emrin mund ta vini si të doni, thjesht tregojuani personave me të cilët po takoheni, që të japin të njëjtin emër.",
"sendFeedback": "Dërgoni përshtypje",
"settings": "Rregullime",
"startMeeting": "Nisni takim",
"terms": "Kushte",
"title": "Konferenca video të parrezik, me të gjitha veçoritë dhe plotësisht të lira"
"title": "Konferenca video të parrezik, me të gjitha veçoritë dhe plotësisht të lira",
"upcomingMeetings": "Takimet tuaja safërmi"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Tabelë shënimesh"
}
}
}

View File

@@ -68,9 +68,9 @@
},
"join": "Приєднатися",
"joinTooltip": "Приєднатися до зустрічі",
"nextMeeting": "наступна зустріч",
"nextMeeting": "Наступна зустріч",
"noEvents": "Немає запланованих подій.",
"ongoingMeeting": "поточна зустріч",
"ongoingMeeting": "Поточна зустріч",
"permissionButton": "Налаштування",
"permissionMessage": "Для перегляду зустрічей у застосунку потрібен дозвіл Календаря.",
"refresh": "Оновити календар",
@@ -89,7 +89,7 @@
"chat": {
"enter": "Увійти в кімнату",
"error": "Помилка: ваше повідомлення не було відправлено. Причина: {{error}}",
"fieldPlaceHolder": "Текст повідомлення",
"fieldPlaceHolder": "Аа",
"lobbyChatMessageTo": "Повідомлення у приймальній для {{recipient}}",
"message": "Повідомлення",
"messageAccessibleTitle": "{{user}} пише:",
@@ -147,6 +147,7 @@
"bridgeCount": "Кількість серверів: ",
"codecs": "Кодеки (A/V): ",
"connectedTo": "З'єднано з:",
"e2eeVerified": "E2EE підтверджено:",
"framerate": "Частота кадрів:",
"less": "Показати менше",
"localaddress": "Локальна адреса:",
@@ -183,13 +184,21 @@
"deepLinking": {
"appNotInstalled": "Встановіть застосунок {{app}}, щоб приєднатися до цієї зустрічі з мобільного пристрою.",
"description": "Ми спробували розпочати вашу зустріч у програмі {{app}}. Спробуйте ще раз або відкрийте {{app}} у веб-браузері.",
"descriptionNew": "Ми спробували розпочати вашу зустріч у програмі {{app}}. <br /><br /> Спробуйте ще раз або розпочніть зустріч у веб-браузері.",
"descriptionWithoutWeb": "Ми спробували розпочати вашу зустріч у програмі {{app}}.",
"downloadApp": "Завантажити застосунок",
"downloadMobileApp": "Завантажити з App Store",
"ifDoNotHaveApp": "Якщо застосунок ще не встановлено:",
"ifHaveApp": "Якщо ви вже встановили застосунок:",
"joinInApp": "Приєднатися до цієї зустрічі за допомогою застосунку",
"joinInAppNew": "Приєднатися із застосунку",
"joinInBrowser": "Приєднатися у веб-браузері",
"launchMeetingLabel": "Яким чином приєднатися до цієї зустрічі?",
"launchWebButton": "Відкрити у веб-браузері",
"noMobileApp": "Застосунок не встановлений?",
"termsAndConditions": "Продовжуючи, ви погоджуєтесь з нашіми <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>умовами використання.</a>",
"title": "Приєднання до вашої зустрічі у {{app}}...",
"titleNew": "Приєднання до вашої зустрічі ...",
"tryAgainButton": "Спробуйте у програмі на ПК",
"unsupportedBrowser": "Ви використовуєте веб-браузер, який ми не підтримуємо."
},
@@ -202,10 +211,16 @@
"microphonePermission": "Помилка отримання дозволу доступу до мікрофона"
},
"deviceSelection": {
"hid": {
"callControl": "Налаштування зв'язку",
"connectedDevices": "Приєднані пристрої:",
"deleteDevice": "Вилучити пристрій",
"pairDevice": "Додати пристрій Bluetooth"
},
"noPermission": "Дозвіл не надано",
"previewUnavailable": "Перегляд недоступний",
"selectADevice": "Виберіть пристрій",
"testAudio": "Перевірити звук"
"testAudio": "Перевірити"
},
"dialIn": {
"screenTitle": "Підсумок вихідного дзвінка"
@@ -225,7 +240,9 @@
"WaitingForHostTitle": "В очікуванні організатора...",
"Yes": "Так",
"accessibilityLabel": {
"liveStreaming": "Трансляція"
"close": "Закрити",
"liveStreaming": "Трансляція",
"sharingTabs": "Параметри спільного доступу"
},
"add": "Додати",
"addMeetingNote": "Додати примітку про цю зустріч",
@@ -408,6 +425,10 @@
"user": "Користувач",
"userIdentifier": "Ідентифікатор користувача",
"userPassword": "Пароль",
"verifyParticipantConfirm": "Збігаються",
"verifyParticipantDismiss": "Не збігаються",
"verifyParticipantQuestion": "Запитайте, чи учасник {{participantName}} бачить однаковий з вашим вміст і в тому самому порядку (ТЕСТУВАННЯ).",
"verifyParticipantTitle": "Підтвердження особи учасника",
"videoLink": "URL-адреса відео",
"viewUpgradeOptions": "Переглянути додаткові послуги",
"viewUpgradeOptionsContent": "Щоб отримати необмежений доступ до таких преміум-послуг, як записування, транскрипція, RTMP трансляцію тощо, вам потрібно оновити ваш пакет послуг.",
@@ -433,13 +454,15 @@
"veryBad": "Дуже погано",
"veryGood": "Дуже добре"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "Панель видів"
}
},
"giphy": {
"noResults": "Нічого не знайдено :(",
"search": "Пошук GIPHY"
},
"helpView": {
"title": "Довідка"
},
"incomingCall": {
"answer": "Відповісти",
"audioCallTitle": "Вхідний дзвінок",
@@ -563,7 +586,6 @@
"lobby": {
"admit": "Допустити",
"admitAll": "Допустити всіх",
"allow": "Дозволити",
"backToKnockModeButton": "Запитати дозволу",
"chat": "Чат",
"dialogTitle": "Приймальна",
@@ -649,8 +671,11 @@
"connectedOneMember": "{{name}} на зв'язку",
"connectedThreePlusMembers": "{{name}} та {{count}} інших учасників приєдналися до зустрічі",
"connectedTwoMembers": "{{first}} та {{second}} приєдналися до зустрічі",
"dataChannelClosed": "Погіршення якості відео",
"dataChannelClosedDescription": "Канал мультимедійного мосту відключено; якість відео знижена до мінімуму.",
"disconnected": "з'єднання розірване",
"displayNotifications": "Показувати сповіщення:",
"dontRemindMe": "Не нагадувати",
"focus": "Фокус зустрічі",
"focusFail": "{{component}} недоступний - повторіть спробу через {{ms}} мс",
"gifsMenu": "GIPHY",
@@ -659,6 +684,7 @@
"invitedOneMember": "{{name}} запрошено",
"invitedThreePlusMembers": "Запрошено {{name}} та {{count}} інших користувачів",
"invitedTwoMembers": "{{first}} та {{second}} запрошено до зустрічі",
"joinMeeting": "Приєднатися",
"kickParticipant": "{{kicker}} від'єднав {{kicked}} від зустрічі",
"leftOneMember": "{{name}} покинув зустріч",
"leftThreePlusMembers": "{{name}} та багато інших учасників покинули зустріч",
@@ -709,6 +735,8 @@
"reactionSoundsForAll": "Вимкнути звукові сповіщення для всіх",
"screenShareNoAudio": "На екрані вибору вікна не була ввімкнена опція «Поділитися аудіо».",
"screenShareNoAudioTitle": "Не вдалося надати спільний доступ до аудіо!",
"screenSharingAudioOnlyDescription": "Увага: увімкнення спільного перегляду екрана збільшить споживання пропускної здатності, що погіршить якість режиму \"Найкраща продуктивність\".",
"screenSharingAudioOnlyTitle": "Режим \"Найкраща продуктивність\"",
"selfViewTitle": "Ви завжди можете скасувати приховування виду на себе в налаштуваннях",
"somebody": "Учасник",
"startSilentDescription": "Повторно приєднайтеся до зустрічі, щоб увімкнути звук",
@@ -746,6 +774,7 @@
"headings": {
"lobby": "Приймальна ({{count}})",
"participantsList": "Учасники ({{count}})",
"visitors": "Відвідувачі ({{count}})",
"waitingLobby": "Очікують у приймальній ({{count}})"
},
"search": "Пошук учасників",
@@ -753,6 +782,7 @@
},
"passwordDigitsOnly": "До {{number}} цифр",
"passwordSetRemotely": "Встановлено іншим учасником",
"pinParticipant": "{{participantName}} - Закріпити",
"pinnedParticipant": "Учасник закріплений",
"polls": {
"answer": {
@@ -858,12 +888,9 @@
"rejected": "Відмовився",
"ringing": "Дзвінок..."
},
"privacyView": {
"title": "Конфіденційність"
},
"profile": {
"avatar": "аватар",
"setDisplayNameLabel": "Ім'я на екрані",
"setDisplayNameLabel": "Ім'я",
"setEmailInput": "Зазначте email",
"setEmailLabel": "Email-адреса для Gravatar",
"title": "Профіль"
@@ -914,6 +941,7 @@
"localRecordingVideoWarning": "Щоб записати ваше відео, камера має бути увімкнена до початку запису",
"localRecordingWarning": "Виберіть поточну вкладку веб-браузера, щоб використовувати правильні налаштування камери та мікрофона. Запис наразі обмежений 1 ГБ, що становить приблизно 100 хв.",
"loggedIn": "Ви ввійшли як {{userName}}",
"noMicPermission": "Не вдалося створити мікрофонну доріжку. Надайте дозвіл на доступ до мікрофона.",
"noStreams": "Аудіо чи відео потік не виявлено.",
"off": "Запис зупинено",
"offBy": "{{name}} зупинив запис",
@@ -922,7 +950,7 @@
"onlyRecordSelf": "Записувати лише мої аудіо та відео потоки",
"pending": "Підготовка до запису зустрічі...",
"rec": "REC",
"saveLocalRecording": "Зберегти файл запису локально (бета-версія)",
"saveLocalRecording": "Зберегти файл запису локально (ТЕСТУВАННЯ)",
"serviceDescription": "Ваш запис буде збережено послугою запису",
"serviceDescriptionCloud": "Хмарний запис",
"serviceDescriptionCloudInfo": "Записані зустрічі будуть видалені автоматично через 24 години після їх запису.",
@@ -947,6 +975,7 @@
"title": "Параметри безпеки"
},
"settings": {
"audio": "Аудіо",
"buttonLabel": "Налаштування",
"calendar": {
"about": "Інтеграція календаря дає {{appName}} безпечний доступ до вашого календаря та запланованих подій.",
@@ -964,12 +993,14 @@
"incomingMessage": "Вхідне повідомлення",
"language": "Мова",
"loggedIn": "Увійшли як {{name}}",
"maxStageParticipants": "Максимальна кількість учасників, яку можна закріпити на головній сцені",
"maxStageParticipants": "Максимальна кількість учасників, яку можна закріпити на головній сцені (ТЕСТУВАННЯ)",
"microphones": "Мікрофони",
"moderator": "Модератор",
"more": "Додаткові параметри",
"moderatorOptions": "Параметри модерації",
"more": "Загальні параметри",
"name": "Ім'я",
"noDevice": "Немає",
"notifications": "Сповіщення",
"participantJoined": "Учасник приєднався до зустрічі",
"participantKnocking": "Учасник зайшов у приймальну",
"participantLeft": "Учасник покинув зустріч",
@@ -980,13 +1011,14 @@
"selectCamera": "Камера",
"selectMic": "Мікрофон",
"selfView": "Вид на себе",
"sounds": "Звукові сповіщення",
"shortcuts": "Комбінації клавіш",
"speakers": "Динаміки",
"startAudioMuted": "Усі починають з вимкненим мікрофоном",
"startReactionsMuted": "Вимкнути звуки реакції для всіх",
"startVideoMuted": "Усі починають з вимкненим відео",
"talkWhileMuted": "Спроба говорити, коли мікрофон вимкнено",
"title": "Налаштування"
"title": "Налаштування",
"video": "Відео"
},
"settingsView": {
"advanced": "Додатково",
@@ -1003,6 +1035,7 @@
"displayName": "Ім'я на екрані",
"displayNamePlaceholderText": "Наприклад: Іван Безіменний",
"email": "Електронна пошта",
"emailPlaceholderText": "email@example.com",
"goTo": "Гаразд",
"header": "Налаштування",
"help": "Довідка",
@@ -1066,18 +1099,29 @@
"cc": "Субтитри",
"chat": "Показати/приховати чат",
"clap": "Овації",
"closeChat": "Приховати чат",
"closeMoreActions": "Приховати меню додаткових команд",
"closeParticipantsPane": "Приховати панель учасників",
"collapse": "Згорнути",
"document": "Відкрити/закрити спільний документ",
"documentClose": "Закрити спільний документ",
"documentOpen": "Відкрити спільний документ",
"download": "Звантажити мобільний застосунок",
"embedMeeting": "Вставити зустріч",
"endConference": "Завершити зустріч для всіх",
"enterFullScreen": "Показати на весь екран",
"enterTileView": "Показати плитки",
"exitFullScreen": "Вийти з режиму на весь екран",
"exitTileView": "Вийти з режиму плиток",
"expand": "Розгорнути",
"feedback": "Залишити відгук",
"fullScreen": "На весь екран",
"giphy": "Показати/приховати меню GIPHY",
"grantModerator": "Надати права модератора",
"hangup": "Покинути зустріч",
"heading": "Панель інструментів",
"help": "Довідка",
"hideWhiteboard": "Приховати дошку",
"invite": "Запросити на зустріч",
"kick": "Від'єднати учасника",
"laugh": "Сміюся",
@@ -1087,21 +1131,23 @@
"lobbyButton": "Увімкнути/вимкнути приймальну",
"localRecording": "Показати/приховати панель керування відеозаписом",
"lockRoom": "Встановити/прибрати пароль",
"lowerHand": "Опустити руку",
"moreActions": "Додаткові команди",
"moreActionsMenu": "Меню додаткових команд",
"moreOptions": "Додаткові параметри",
"mute": "Увімкнути/вимкнути мікрофон",
"mute": "Вимкнути мікрофон",
"muteEveryone": "Вимкнути мікрофони всім",
"muteEveryoneElse": "Вимкнути мікрофони всім іншим",
"muteEveryoneElsesVideoStream": "Вимкнути камери всім іншим",
"muteEveryonesVideoStream": "Вимкнути камери всім",
"noiseSuppression": "Придушення шуму",
"participants": "Показати/приховати панель учасників",
"openChat": "Показати чат",
"participants": "Показати панель учасників",
"pip": "Увімкнути/вимкнути режим «Картинка в картинці».",
"privateMessage": "Надіслати приватне повідомлення",
"profile": "Редагувати профіль",
"raiseHand": "Підняти/опустити руку",
"reactionsMenu": "Відкрити/закрити меню реакцій",
"raiseHand": "Підняти руку",
"reactionsMenu": "Меню реакцій",
"recording": "Увімкнути/вимкнути відеозапис",
"remoteMute": "Вимкнути мікрофон учасника",
"remoteVideoMute": "Вимкнути камеру учасника",
@@ -1111,18 +1157,22 @@
"shareRoom": "Запросити на зустріч",
"shareYourScreen": "Спільний перегляд екрана",
"shareaudio": "Поділитися аудіо",
"sharedvideo": "Почати/зупинити спільне відео",
"sharedvideo": "Почати спільне відео",
"shortcuts": "Показати/приховати комбінації клавіш",
"show": "Показати на сцені",
"showWhiteboard": "Показати дошку",
"silence": "Тиша",
"speakerStats": "Показати/приховати статистику спілкування",
"stopScreenSharing": "Вимкнути спільний перегляд екрана",
"stopSharedVideo": "Зупинити спільне відео",
"surprised": "Подив",
"tileView": "Увімкнути/вимкнути плитки",
"toggleCamera": "Увімкнути/вимкнути камеру",
"toggleFilmstrip": "Показати/приховати панель видів",
"unmute": "Увімкнути мікрофон",
"videoblur": "Увімкнути/вимкнути розмиття фону",
"videomute": "Увімкнути/вимкнути камеру",
"whiteboard": "Показати/приховати дошку"
"videomute": "Вимкнути камеру",
"videounmute": "Увімкнути камеру"
},
"addPeople": "Додати учасників до зустрічі",
"audioOnlyOff": "Вимкнути режим економії",
@@ -1135,6 +1185,7 @@
"chat": "Показати/приховати чат",
"clap": "овації",
"closeChat": "Панель чату",
"closeParticipantsPane": "Приховати панель учасників",
"closeReactionsMenu": "Закрити меню реакцій",
"disableNoiseSuppression": "Вимкнути придушення шуму",
"disableReactionSounds": "Ви можете вимкнути звуки реакції для цієї зустрічі",
@@ -1143,6 +1194,7 @@
"download": "Звантажити мобільний застосунок",
"e2ee": "Наскрізне шифрування",
"embedMeeting": "Вставити зустріч",
"enableNoiseSuppression": "Увімкнути придушення шуму",
"endConference": "Завершити зустріч для всіх",
"enterFullScreen": "На весь екран",
"enterTileView": "Режим плиток",
@@ -1167,7 +1219,7 @@
"lowerYourHand": "Опустити руку",
"moreActions": "Додаткові команди",
"moreOptions": "Додаткові параметри",
"mute": "Мікрофон",
"mute": "Вимкнути мікрофон",
"muteEveryone": "Вимкнути мікрофони всім",
"muteEveryonesVideo": "Вимкнути камери всім",
"noAudioSignalDesc": "Якщо ви не вимикали мікрофон у системних або апаратних налаштуваннях, спробуйте перемикнути його.",
@@ -1184,7 +1236,7 @@
"pip": "Режим «Картинка-у-картинці»",
"privateMessage": "Надіслати приватне повідомлення",
"profile": "Редагувати профіль",
"raiseHand": "Підняти/опустити руку",
"raiseHand": "Підняти руку",
"raiseYourHand": "Підняти руку",
"reactionBoo": "Надіслати реакцію «невдоволення»",
"reactionClap": "Надіслати реакцію «овації»",
@@ -1211,8 +1263,10 @@
"talkWhileMutedPopup": "Намагаєтесь говорити? Ваш мікрофон вимкнено.",
"tileViewToggle": "Плитки",
"toggleCamera": "Увімкнути/вимкнути камеру",
"unmute": "Увімкнути мікрофон",
"videoSettings": "Налаштування камери",
"videomute": "Камера"
"videomute": "Вимкнути камеру",
"videounmute": "Увімкнути камеру"
},
"transcribing": {
"ccButtonTooltip": "Субтитри",
@@ -1230,6 +1284,7 @@
"subtitlesOff": "Вимкнені",
"tr": "TR"
},
"unpinParticipant": "{{participantName}} - Відкріпити",
"userMedia": {
"androidGrantPermissions": "Виберіть <b><i>«Дозволити»</i></b>, коли ваш веб-браузер запитає дозволи.",
"chromeGrantPermissions": "Виберіть <b><i>«Дозволити»</i></b>, коли ваш веб-браузер запитає дозволи.",
@@ -1268,9 +1323,11 @@
"ldTooltip": "Відео низької якості",
"lowDefinition": "Низька якість (LD)",
"performanceSettings": "Параметри продуктивності",
"recording": "Триває запис",
"sd": "SD",
"sdTooltip": "Відео стандартної якості",
"standardDefinition": "Стандартна якість (SD)"
"standardDefinition": "Стандартна якість (SD)",
"streaming": "Триває трансляція"
},
"videothumbnail": {
"connectionInfo": "Інформація про з'єднання",
@@ -1282,6 +1339,7 @@
"grantModerator": "Надати права модератора",
"hideSelfView": "Приховати вид на себе",
"kick": "Від'єднати",
"mirrorVideo": "Віддзеркалити моє відео",
"moderator": "Модератор",
"mute": "Мікрофон учасника вимкнено",
"muted": "Вимкнено мікрофон",
@@ -1291,6 +1349,7 @@
"show": "Показати на сцені",
"showSelfView": "Показати вид на себе",
"unpinFromStage": "Відкріпити",
"verify": "Підтвердити особу учасника",
"videoMuted": "Камера вимкнена",
"videomute": "Учасник вимкнув камеру"
},
@@ -1312,12 +1371,13 @@
"none": "Немає",
"pleaseWait": "Будь ласка, зачекайте...",
"removeBackground": "Прибрати фон",
"slightBlur": "Легке розмиття",
"slightBlur": "Напіврозмиття",
"title": "Віртуальні фони",
"uploadedImage": "Завантажена картинка {{index}}",
"webAssemblyWarning": "WebAssembly не підтримується",
"webAssemblyWarningDescription": "WebAssembly вимкнено або не підтримується цим веб-браузером"
},
"visitorsLabel": "Кількість відвідувачів: {{count}}",
"volumeSlider": "Регулятор гучності",
"welcomepage": {
"accessibilityLabel": {
@@ -1350,6 +1410,7 @@
"microsoftLogo": "Логотип Microsoft",
"policyLogo": "Логотип політики"
},
"meetingsAccessibilityLabel": "Зустрічі",
"mobileDownLoadLinkAndroid": "Завантажте мобільний застосунок для Android",
"mobileDownLoadLinkFDroid": "Завантажте мобільний застосунок для F-Droid",
"mobileDownLoadLinkIos": "Завантажте мобільний застосунок для iOS",
@@ -1358,6 +1419,7 @@
"recentList": "Нещодавні",
"recentListDelete": "Вилучити",
"recentListEmpty": "Зараз ваш список нещодавніх зустрічей порожній. Починайте спілкування, і ви знайдете тут усі свої нещодавні зустрічі.",
"recentMeetings": "Нещодавні зустрічі",
"reducedUIText": "Вітаємо у {{app}}!",
"roomNameAllowedChars": "Назва зустрічі не повинна містити такі символи: ?, &, :, ', \", %, #.",
"roomname": "Зазначте назву кімнати",
@@ -1366,6 +1428,12 @@
"settings": "Налаштування",
"startMeeting": "Почати зустріч",
"terms": "Умови користування",
"title": "Захищена, повнофункціональна та безкоштовна система відеоконференцій"
"title": "Захищена, повнофункціональна та безкоштовна система відеоконференцій",
"upcomingMeetings": "Заплановані зустрічі"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Дошка"
}
}
}

View File

@@ -3,7 +3,7 @@
"add": "Mời",
"copyInvite": "Sao chép lời mời",
"countryNotSupported": "Chúng tôi chưa hỗ trợ đích đến này.",
"countryReminder": "Đang gọi ra ngoài Mỹ? Đảm bảo bắt đầu bằng mã quốc gia!",
"countryReminder": "Nhớ đảm bảo bắt đầu bằng mã quốc gia!",
"disabled": "Bạn không thể mời thêm người.",
"failedToAdd": "",
"footerText": "Quay số bị tắt.",
@@ -18,7 +18,7 @@
"searchPeopleAndNumbers": "Tìm người và thêm số",
"shareInvite": "Chia sẻ lời mời tham dự cuộc họp",
"shareLink": "Chia sẻ đường dẫn để mời người khác tham dự cuộc họp",
"telephone": "Số:{{number}}",
"telephone": "Số: {{number}}",
"title": "Mời người tham dự cuộc họp này"
},
"audioDevices": {
@@ -28,24 +28,24 @@
"speaker": "Diễn giả"
},
"audioOnly": {
"audioOnly": "Chỉ âm thanh"
"audioOnly": "Chỉ nghe âm thanh"
},
"calendarSync": {
"addMeetingURL": "Thêm một liên kết họp",
"confirmAddLink": "Bạn có muốn thêm một liên kiết tới sự kiện này?",
"error": {
"appConfiguration": "Tích hợp lịch chưa được cấu hình đúng.",
"generic": "Một lỗi xuất hiện. Vui lòng kiểm tra cấu hình lịch hoặc thử làm tươi lịch.",
"generic": " lỗi xảy ra. Vui lòng kiểm tra cấu hình lịch hoặc thử làm mới lịch.",
"notSignedIn": "Một lỗi xảy ra khi xác thực để xem lịch sự kiện. Vui lòng kiểm tra cấu hình lịch và thử đăng nhập lại."
},
"join": "Tham gia",
"joinTooltip": "Tham gia cuc họp",
"joinTooltip": "Tham gia cuc họp",
"nextMeeting": "Cuộc họp tiếp theo",
"noEvents": "Không có sự kiện được lên lịch nào tiếp theo.",
"ongoingMeeting": "cuộc họp đang diễn ra",
"ongoingMeeting": "Cuộc họp đang diễn ra",
"permissionButton": "Mở cấu hình",
"permissionMessage": "Yêu cầu quyền truy cập Lịch để thấy cuộc họp của bạn trên ứng dụng.",
"refresh": "Làm tươi lịch",
"permissionMessage": "Yêu cầu quyền truy cập lịch để thấy cuộc họp của bạn trên ứng dụng.",
"refresh": "Làm mới lịch",
"today": "Hôm nay"
},
"chat": {
@@ -53,16 +53,16 @@
"messagebox": "Nhập nội dung tin nhắn",
"nickname": {
"popover": "Chọn tên",
"title": "Nhập tên của bạn để tán gẫu",
"titleWithPolls": "Nhập tên của bạn để tán gẫu"
"title": "Nhập tên của bạn để gửi tin nhắn",
"titleWithPolls": "Nhập tên của bạn để gửi tin nhắn"
},
"sendButton": "Gửi",
"title": "Tán gẫu",
"titleWithPolls": "Tán gẫu",
"title": "Cuộc hội thoại",
"titleWithPolls": "Cuộc hội thoại",
"you": "bạn"
},
"connectingOverlay": {
"joiningRoom": "Đang kết nối tới cuộc họp của bạn"
"joiningRoom": "Đang kết nối tới cuộc họp của bạn..."
},
"connection": {
"ATTACHED": "Đã đính kèm",
@@ -78,35 +78,35 @@
},
"connectionindicator": {
"address": "Địa chỉ:",
"bandwidth": "Băng thông ước tính:",
"bandwidth": "Băng thông:",
"bitrate": "Tốc độ:",
"bridgeCount": "Máy chủ:",
"connectedTo": "Đã kết nối tới:",
"framerate": "Tỷ lệ khung hình:",
"framerate": "FPS:",
"less": "Hiển thị ít hơn",
"localaddress_0": "Địa chỉ địa phương:",
"localaddress_1": "Các địa chỉ địa phương:",
"localport_0": "Cổng địa phương:",
"localport_1": "Các cổng địa phương:",
"localaddress_0": "IP thiết bị:",
"localaddress_1": "Các IP thiết bị:",
"localport_0": "Cổng thiết bị:",
"localport_1": "Các cổng thiết bị:",
"more": "Hiển thị nhiều hơn",
"packetloss": "Mất gói tin:",
"participant_id": "ID của người tham dự:",
"packetloss": "Dữ liệu hỏng:",
"participant_id": "ID người tham dự:",
"quality": {
"good": "Tốt",
"inactive": "Không active",
"inactive": "Đang treo máy",
"lost": "Mất kết nối",
"nonoptimal": "Không tối ưu",
"poor": "Kém chất lượng"
},
"remoteaddress_0": "Địa chỉ từ xa:",
"remoteaddress_1": "Các địa chỉ từ xa:",
"remoteaddress_0": "IP từ xa:",
"remoteaddress_1": "Các IP từ xa:",
"remoteport_0": "Cổng từ xa:",
"remoteport_1": "Các cổng từ xa:",
"resolution": "Độ phân giải:",
"status": "Kết nối:",
"status": "Trạng thái kết nối:",
"transport_0": "Vận chuyển:",
"transport_1": "Các vận chuyển:",
"turn": "turn"
"turn": "lượt"
},
"dateUtils": {
"earlier": "Sớm hơn",
@@ -114,27 +114,27 @@
"yesterday": "Hôm qua"
},
"deepLinking": {
"appNotInstalled": "Bạn cần ứng dụng {{app}} mobile để tham gia vào cuộc họp này bằng điện thoại.",
"description": "Không có gì diễn ra? Chúng tôi đang chạy cuộc họp trên ứng dụng desktop {{app}}. Thử lại hoặc chạy trên ứng dụng web {{app}}.",
"descriptionWithoutWeb": "",
"downloadApp": "Tải phần mềm",
"launchWebButton": "Chạy trên web",
"openApp": "Tiếp tục ứng dụng này",
"appNotInstalled": "Bạn cần ứng dụng {{app}} để tham gia vào cuộc họp này bằng điện thoại.",
"description": "Chúng tôi đã yêu cầu chạy cuộc họp trên ứng dụng {{app}}, ứng dụng vẫn không mở? Thử lại hoặc chạy trên trang web.",
"descriptionWithoutWeb": "Chúng tôi đã yêu cầu chạy cuộc họp trên ứng dụng {{app}}, ứng dụng vẫn không mở? Hãy thử lại.",
"downloadApp": "Tải ứng dụng",
"launchWebButton": "Chạy trên trang web",
"openApp": "Tiếp tục trên ứng dụng này",
"title": "Thực hiện cuộc họp trên {{app}}…",
"tryAgainButton": "Thử lại trên desktop"
"tryAgainButton": "Thử lại"
},
"defaultLink": "ví dụ: {{url}}",
"defaultLink": "Ví dụ: {{url}}",
"deviceError": {
"cameraError": "Truy cập camera thất bại",
"cameraPermission": "Lỗi đọc quyền của camera",
"microphoneError": "Truy cập Microphone thất bại",
"microphonePermission": "Lỗi đọc quyền của microphone"
"cameraPermission": "Lỗi cấp quyền camera",
"microphoneError": "Truy cập micro thất bại",
"microphonePermission": "Lỗi cấp quyền micro"
},
"deviceSelection": {
"noPermission": "Không được cấp quyền",
"previewUnavailable": "Xem trước không khả dụng",
"selectADevice": "Chọn một thiết bị",
"testAudio": "Chạy thử tệp âm thanh"
"testAudio": "Phát thử âm thanh"
},
"dialOut": {
"statusMessage": "hiện đang {{status}}"
@@ -142,38 +142,38 @@
"dialog": {
"Back": "Quay lại",
"Cancel": "Hủy",
"IamHost": "Tôi là chủ nghị",
"Ok": ược",
"IamHost": "Mình là quản trị viên",
"Ok": ồng ý",
"Remove": "Xóa",
"Share": "Chia sẻ",
"Submit": "Đăng ký",
"WaitForHostMsg": "Cuộc họp chưa được khởi tạo. Nếu bạn là chủ nghị vui lòng xác thực. Nếu không, vui lòng đợi chủ nghị.",
"WaitingForHost": "Đang đợi chủ nghị …",
"WaitForHostMsg": "Cuộc họp chưa được bắt đầu. Nếu bạn là quản trị viên vui lòng xác thực. Nếu không, vui lòng đợi quản trị viên.",
"WaitingForHost": "Đang đợi quản trị viên...",
"Yes": "Có",
"accessibilityLabel": {
"liveStreaming": "Phát trực tuyến"
},
"allow": "Cho phép",
"alreadySharedVideoMsg": "",
"alreadySharedVideoTitle": "Mỗi lúc chỉ một người được chia sẻ video.",
"alreadySharedVideoTitle": "Chỉ một người được chia sẻ video đồng thời.",
"applicationWindow": "Cửa sổ ứng dụng",
"cameraConstraintFailedError": "Camera của bạn không đáp ứng được một số yêu cầu bắt buộc.",
"cameraNotFoundError": "Không tìm thấy camera.",
"cameraNotSendingData": "Không truy cập được camera của bạn. Kiểm tra xem có ứng dung khác đang sử dụng camera không, hoặc chọn một camera khác trong phần cài đặt, hay tải lại ứng dụng",
"cameraNotSendingDataTitle": "Không truy cập được camera",
"cameraPermissionDeniedError": "Bạn chưa cho phép sử dụng camera của mình. Bạn vẫn có thể tham gia hội nghị nhưng những người khác sẽ không nhìn thấy bạn. Sử dụng nút camera trên thanh địa chỉ để sửa lỗi này.",
"cameraUnknownError": "Không thể sử dụng camera vì lý do không rõ ràng.",
"cameraPermissionDeniedError": "Bạn chưa cho phép sử dụng camera của mình. Bạn vẫn có thể tham gia cuộc họp nhưng những người khác sẽ không nhìn thấy bạn. Sử dụng nút camera trên thanh điều hướng để sửa lỗi này.",
"cameraUnknownError": "Không thể sử dụng camera vì một lý do không xác định.",
"cameraUnsupportedResolutionError": "Camera của bạn không hỗ trợ độ phân giải video yêu cầu.",
"close": "Đóng",
"conferenceDisconnectMsg": "Bạn có thể muốn kiểm tra kết nối mạng của mình. Đang kết nối lại trong {{seconds}} giây",
"conferenceDisconnectMsg": "Bạn có thể cần kiểm tra kết nối mạng của mình. Đang kết nối lại trong {{seconds}} giây...",
"conferenceDisconnectTitle": "Bạn đã bị ngắt kết nối.",
"conferenceReloadMsg": "Chúng tôi đang cố gắng sửa lỗi này. Đang kết nối lại trong {{seconds}} giây",
"conferenceReloadTitle": "Thật không may, có điều gì đó đã sai.",
"conferenceReloadMsg": "Chúng tôi đang cố gắng sửa lỗi này. Đang kết nối lại trong {{seconds}} giây...",
"conferenceReloadTitle": "Thật không may, đã có lỗi xảy ra.",
"confirm": "Xác nhận",
"confirmNo": "Không",
"confirmYes": "Có",
"connectError": "Rất tiếc! Đã xảy ra sự cố và chúng tôi không thể kết nối với hội nghị.",
"connectErrorWithMsg": "Rất tiếc! Đã xảy ra sự cố và chúng tôi không thể kết nối với hội nghị: {{msg}}",
"connectError": "Rất tiếc! Đã xảy ra sự cố và chúng tôi không thể kết nối với cuộc họp.",
"connectErrorWithMsg": "Rất tiếc! Đã xảy ra sự cố và chúng tôi không thể kết nối với cuộc họp. Nguyên nhân: {{msg}}",
"connecting": "Đang kết nối",
"contactSupport": "Liên hệ hỗ trợ kỹ thuật",
"copy": "Sao chép",
@@ -189,39 +189,39 @@
"externalInstallationTitle": "Yêu cầu tiện ích mở rộng",
"goToStore": "Đi tới cửa hàng trên mạng",
"gracefulShutdown": "Dịch vụ của chúng tôi hiện đang bảo trì. Vui lòng thử lại sau.",
"grantModeratorDialog": " Bạn có thực sự muốn cấp quyền quản trị cho người này?",
"grantModeratorDialog": "Bạn có thực sự muốn cấp quyền quản trị cho người này?",
"incorrectPassword": "Tên người dùng hoặc mật khẩu không đúng",
"incorrectRoomLockPassword": "",
"incorrectRoomLockPassword": "Mật khẩu không đúng",
"inlineInstallExtension": "Cài đặt ngay",
"inlineInstallationMsg": "Bạn cần cài đặt tiện ích mở rộng chia sẻ máy tính của chúng tôi.",
"internalError": "Duh! Có lỗi xy ra. Lỗi cụ thể là: {{error}}",
"internalError": "Đã có lỗi xy ra. Chi tiết: {{error}}",
"internalErrorTitle": "Lỗi cục bộ",
"kickMessage": "",
"kickParticipantButton": ẩy ra",
"kickParticipantDialog": "Bạn có chắc muốn đẩy người này ra?",
"kickParticipantButton": uổi ra",
"kickParticipantDialog": "Bạn có chắc muốn đuổi người này ra?",
"kickParticipantTitle": "Tắt tiếng của người tham dự này?",
"kickTitle": "",
"liveStreaming": "Phát trực tuyến",
"liveStreamingDisabledForGuestTooltip": "Khách không thể phát trực tuyến.",
"liveStreamingDisabledTooltip": "Khởi tạo phát trực tuyến đã tắt.",
"lockMessage": "Khóa hội nghị thất bại.",
"lockMessage": "Khóa cuộc họp thất bại.",
"lockRoom": "",
"lockTitle": "Khóa thất bại",
"logoutQuestion": "Bạn có chắc chắn muốn đăng xuất và dừng hội nghị?",
"logoutQuestion": "Bạn có chắc chắn muốn đăng xuất và dừng cuộc họp?",
"logoutTitle": "Đăng xuất",
"maxUsersLimitReached": "",
"maxUsersLimitReachedTitle": "",
"micConstraintFailedError": "Microphone của bạn không đáp ứng được một số yêu cầu bắt buộc.",
"micNotFoundError": "Không tìm thấy microphone.",
"micConstraintFailedError": "Micro của bạn không đáp ứng được một số yêu cầu bắt buộc.",
"micNotFoundError": "Không tìm thấy micro.",
"micNotSendingData": "",
"micNotSendingDataTitle": "",
"micPermissionDeniedError": "Bạn chưa cấp phép sử dụng microphone của bạn. Bạn vẫn có thể tham gia hội nghị nhưng những người khác sẽ không nghe thấy bạn. Sử dụng nút camera trên thanh địa chỉ để sửa lỗi này.",
"micUnknownError": "Không thể sử dụng microphone vì lý do không rõ ràng.",
"micPermissionDeniedError": "Bạn chưa cấp phép sử dụng micro của bạn. Bạn vẫn có thể tham gia hội nghị nhưng những người khác sẽ không nghe thấy bạn. Sử dụng nút micro trên thanh điều hướng để sửa lỗi này.",
"micUnknownError": "Không thể sử dụng micro vì một lý do không xác định.",
"muteEveryoneDialog": " Bạn có thực sự muốn tắt tiếng tất cả mọi người? Bạn sẽ không thể bật lại tiếng cho họ nhưng họ có thể tự mở tiếng lại bất kỳ lúc nào.",
"muteEveryoneElseDialog": "Một khi đã tắt tiếng, bạn không thể bật lại. Nhưng họ có thể tự mở tiếng lại bất kỳ lúc nào.",
"muteEveryoneElseTitle": "Tắt tiếng tất cả ngoại trừ {{whom}}?",
"muteEveryoneTitle": "Tắt tiếng tất cả mọi người?",
"muteEveryonesVideoDialog": " Bạn có chắc muốn tắt camera của tất cả mọi người? Bạn không thể mở lại camera của người tham dự nhưng họ có thể mở lại bất kỳ lúc nào.",
"muteEveryonesVideoDialog": "Bạn có chắc muốn tắt camera của tất cả mọi người? Bạn không thể mở lại camera của người tham dự nhưng họ có thể mở lại bất kỳ lúc nào.",
"muteEveryonesVideoTitle": "Tắt camera của tất cả mọi người?",
"muteParticipantBody": "Bạn không thể tắt tiếng của họ, nhưng họ có thể tự tắt tiếng bất cứ lúc nào.",
"muteParticipantButton": "Tắt tiếng",
@@ -234,12 +234,12 @@
"passwordNotSupported": "Phòng họp không hỗ trợ khóa bằng mật khẩu.",
"passwordNotSupportedTitle": "",
"passwordRequired": "",
"popupError": "Trình duyệt của bạn đã chặn cửa sổ pop-up từ website hiện hành. Làm ơn cho phép pop-up trong cài đặt của trình duyệt và thử lại",
"popupError": "Trình duyệt của bạn đã chặn cửa sổ pop-up từ trang web hiện tại. Vui lòng cho phép pop-up trong cài đặt của trình duyệt và thử lại",
"popupErrorTitle": "Cửa sổ Pop-Up bị chặn",
"recording": "Đang ghi âm",
"recording": "Đang ghi hình",
"recordingDisabledForGuestTooltip": "Khách không thể khởi tạo ghi hình.",
"recordingDisabledTooltip": "Khởi động ghi âm đã bị tắt.",
"rejoinNow": "Tham gia lại luôn",
"recordingDisabledTooltip": "Khởi động ghi hình đã bị tắt.",
"rejoinNow": "Tham gia lại ngay",
"remoteControlAllowedMessage": "{{user}} đã chấp nhận yêu cầu điều khiển từ xa của bạn!",
"remoteControlDeniedMessage": "{{user}} đã từ chối yêu cầu điều khiển từ xa của bạn!",
"remoteControlErrorMessage": "Đã xảy ra lỗi khi cố gắng yêu cầu quyền điều khiển từ xa từ {{user}}!",
@@ -254,11 +254,11 @@
"reservationErrorMsg": "Mã lỗi: {{code}}, thông báo: {{msg}}",
"retry": "Thử lại",
"screenSharingAudio": "Chia sẻ âm thanh",
"screenSharingFailedToInstall": "Duh! Không cài đặt được bộ mở rộng chia sẻ màn hình",
"screenSharingFailedToInstallTitle": "Duh! Bộ mở rộng chia sẻ màn hình có vấn đề với cấu hình bảo mật. Làm ơn tải và thử lại ",
"screenSharingFailedToInstall": "Lỗi! Không cài đặt được bộ mở rộng chia sẻ màn hình",
"screenSharingFailedToInstallTitle": "Lỗi! Bộ mở rộng chia sẻ màn hình có vấn đề với cấu hình bảo mật. Vui lòng tải và thử lại ",
"screenSharingFirefoxPermissionDeniedError": "Có gì đó sai khi chúng tôi cố gắng chia sẻ màn hình của bạn. Vui lòng đảm bảo bạn đã cho phép chúng tôi thực hiện.",
"screenSharingFirefoxPermissionDeniedTitle": "Chúng tôi không thể chia sẻ màn hình!",
"screenSharingPermissionDeniedError": "Không thể truy cập micro",
"screenSharingPermissionDeniedError": "Không thể truy cập màn hình do lỗi cấp quyền",
"serviceUnavailable": "Dịch vụ không khả dụng",
"sessTerminated": "Cuộc gọi kết thúc",
"shareVideoLinkError": "Vui lòng cung cấp liên kết chính xác.",
@@ -267,13 +267,13 @@
"shareYourScreenDisabled": "Chia sẻ màn hình đã tắt.",
"shareYourScreenDisabledForGuest": "Khách không thể chia sẻ màn hình.",
"startLiveStreaming": "Bắt đầu phát trực tuyến",
"startRecording": "Bắt đầu ghi âm",
"startRecording": "Bắt đầu ghi hình",
"startRemoteControlErrorMessage": "Có lỗi khi thử khởi động phiên điều khiển từ xa",
"stopLiveStreaming": "Dừng phát trực tuyến",
"stopRecording": "Dừng ghi âm",
"stopRecordingWarning": "Bạn có chắc chắn muốn dừng ghi âm không?",
"stopRecording": "Dừng ghi hình",
"stopRecordingWarning": "Bạn có chắc chắn muốn dừng ghi hình không?",
"stopStreamingWarning": "Bạn có chắc chắn muốn dừng phát trực tuyến?",
"streamKey": "Key phát trực tuyến",
"streamKey": " phát trực tuyến",
"thankYou": "Cám ơn bạn đã sử dụng {{appName}}!",
"token": "mã thông báo",
"tokenAuthFailed": "Rất tiếc, bạn không được phép tham gia cuộc gọi này.",
@@ -308,13 +308,13 @@
"cancelPassword": "",
"conferenceURL": "Liên kết:",
"country": "Quốc gia",
"dialANumber": "Để tham gia cuộc họp của bạn, quay một trong các số sau và nhập mã.",
"dialANumber": "Để tham gia cuộc họp của bạn, gọi một trong các số sau và nhập mã.",
"dialInConferenceID": "Mã:",
"dialInNotSupported": "Xin lỗi, quay số không được hỗ trợ.",
"dialInNumber": "Quay số:",
"dialInSummaryError": "Lỗi nạp thông tin quay số. Vui lòng thử lại.",
"dialInTollFree": "Miễn phí",
"genericError": "Chà, có gì đó không ổn.",
"genericError": "Lỗi, có gì đó không ổn.",
"inviteLiveStream": "Để xem phát trực tuyến cuộc họp này, chọn liên kết: {{url}}",
"invitePhone": "",
"invitePhoneAlternatives": "",
@@ -333,10 +333,10 @@
"tooltip": "Chia sẻ liên kết và thông tin quay số của cuộc họp này"
},
"inlineDialogFailure": {
"msg": "Chúng tôi hơi vấp chút.",
"msg": "Chúng tôi đang xảy ra chút lỗi.",
"retry": "Thử lại",
"support": "Hỗ trợ",
"supportMsg": "Nếu vẫn xảy ra, hãy liên hệ với"
"supportMsg": "Nếu vẫn xảy ra, hãy liên hệ với "
},
"inviteDialog": {
"alertText": "Không thể mời một vài người.",
@@ -347,20 +347,20 @@
"send": "Gửi"
},
"keyboardShortcuts": {
"focusLocal": "Tập trung vào video của bạn",
"focusRemote": "Tập trung vào hình ảnh của người khác",
"focusLocal": "Tập trung vào khung hình của bạn",
"focusRemote": "Tập trung vào khung hình của người khác",
"fullScreen": "Xem hoặc thoát chế độ toàn màn hình",
"keyboardShortcuts": "Phím tắt",
"localRecording": "Hiện hoặc ẩn Kiểm soát ghi hình cục bộ",
"mute": "Tắt hoặc bật microphone của bạn",
"mute": "Tắt hoặc bật micro của bạn",
"pushToTalk": "Ấn chuông để nói chuyện",
"raiseHand": "Giơ hoặc Hạ tay",
"raiseHand": "Giơ hoặc hạ tay",
"showSpeakerStats": "Hiển thị thống kê của diễn giả",
"toggleChat": "Mở hoặc Đóng cuộc hội thoại",
"toggleChat": "Mở hoặc đóng cuộc hội thoại",
"toggleFilmstrip": "Hiện hoặc ẩn hình ảnh thu nhỏ",
"toggleScreensharing": "Chuyển đổi giữa camera và chia sẻ màn hình",
"toggleShortcuts": "Hiện hoặc ẩn phím tắt",
"videoMute": "Bật hoặc Tắt camera của bạn"
"videoMute": "Bật hoặc tắt camera của bạn"
},
"liveStreaming": {
"busy": "Chúng tôi đang giải phóng tài nguyên streaming. Xin thử lại sau vài phút.",
@@ -374,13 +374,13 @@
"errorLiveStreamNotEnabled": "Phát trực tuyến không được bật với email {{email}}. Vui lòng bật phát trực tuyến hoặc truy cập một tài khoản đã bật phát trực tuyến.",
"expandedOff": "Phát trực tuyến đã dừng",
"expandedOn": "Cuộc họp đang được phát trên Youtube.",
"expandedPending": "Phát trực tuyến đang bắt đầu",
"expandedPending": "Phát trực tuyến đang bắt đầu...",
"failedToStart": "Không thể bắt đầu phát trực tuyến",
"getStreamKeyManually": "Không thể thu nhận phát trực tuyến nào. Thử lấy mã phát trực tuyến từ Youtube.",
"invalidStreamKey": "Mã phát trực tuyến có thể sai.",
"off": "Phát trực tuyến đã dừng",
"on": "Phát trực tuyến",
"pending": "Đang bắt đầu phát trực tuyến",
"pending": "Đang bắt đầu phát trực tuyến...",
"serviceName": "Dịch vụ Phát trực tuyến",
"signIn": "Đăng nhập với Google",
"signInCTA": "Đăng nhập hoặc nhập key phát trực tuyến từ Youtube.",
@@ -389,7 +389,7 @@
"start": "Bắt đầu phát trực tuyến",
"streamIdHelp": "Đây là gì?",
"title": "Phát trực tuyến",
"unavailableTitle": "Không Live Stream được"
"unavailableTitle": "Không thể hát trực tuyến"
},
"localRecording": {
"clientState": {
@@ -401,23 +401,23 @@
"duration": "Thời lượng",
"durationNA": "Không",
"encoding": "Mã hóa",
"label": "Trời ơi",
"label": "Ghi hình",
"labelToolTip": "Ghi hình cục bộ đang bận",
"localRecording": "Ghi hình cục bộ",
"me": "Tôi",
"messages": {
"engaged": "Ghi hình cục bộ đã bận.",
"finished": "Phiên ghi hình {{token}} đã kết thúc. Vui lòng gửi tệp ghi hình cho người điều hành.",
"finishedModerator": "Token phiên ghi hình {{token}} đã kết thúc. Ghi hình cục bộ đã được lưu. Vui lòng hỏi những người tham gia khác để cung cấp ghi hình của họ.",
"finishedModerator": "Phiên ghi hình {{token}} đã kết thúc. Ghi hình cục bộ đã được lưu. Vui lòng hỏi những người tham gia khác để cung cấp ghi hình của họ.",
"notModerator": "Bạn không phải người điều hành. Bạn không thể khởi tạo hoặc dừng ghi hình."
},
"moderator": "Quản trị viên",
"no": "Không",
"participant": "Người tham gia",
"participantStats": "Trạng thái người tham gia",
"participant": "Người tham dự",
"participantStats": "Thống người tham dự",
"sessionToken": "Mã phiên",
"start": "Bắt đầu ghi âm",
"stop": "Dừng ghi âm",
"start": "Bắt đầu ghi hình",
"stop": "Dừng ghi hình",
"yes": "Có"
},
"lockRoomPassword": "Mật khẩu",
@@ -425,32 +425,32 @@
"me": "Tôi",
"notify": {
"connectedOneMember": "{{name}} đã tham gia cuộc họp",
"connectedThreePlusMembers": "{{name}} và{{count}} khác đã tham gia cuộc họp",
"connectedTwoMembers": "{{first}} và{{second}} đã tham gia cuộc họp",
"connectedThreePlusMembers": "{{name}} và {{count}} người khác đã tham gia cuộc họp",
"connectedTwoMembers": "{{first}} và {{second}} đã tham gia cuộc họp",
"disconnected": "đã ngắt kết nối",
"focus": "Hội nghị tập trung",
"focus": "Cuộc họp tập trung",
"focusFail": "{{component}} không khả dụng - thử lại trong {{ms}} giây",
"grantedTo": "Quyền của người điều hành đã được cấp cho {{to}}!",
"grantedTo": "Quyền quản trị viên đã được cấp cho {{to}}!",
"invitedOneMember": "{{name}} đã được mời",
"invitedThreePlusMembers": "",
"invitedTwoMembers": "",
"kickParticipant": "",
"me": "Tôi",
"moderator": "Quyền của người điều hành đã được cấp!",
"moderator": "Quyền quản trị viên đã được cấp!",
"muted": "Bạn đã bắt đầu cuộc trò chuyện bị tắt tiếng.",
"mutedRemotelyDescription": "",
"mutedRemotelyTitle": "",
"mutedTitle": "Bạn bị tắt tiếng!",
"newDeviceAction": "Sử dụng",
"newDeviceAudioTitle": "Thiết bị âm thanh mới được phát hiện",
"newDeviceCameraTitle": "Camera mới được phát hiện",
"newDeviceCameraTitle": "Thiết bị camera mới được phát hiện",
"passwordRemovedRemotely": "",
"passwordSetRemotely": "",
"raisedHand": "{{name}} muốn phát biểu.",
"somebody": "Ai đó",
"startSilentDescription": "",
"startSilentTitle": "",
"suboptimalExperienceDescription": "Chúng tôi lo rằng trải nghiệm của bạn với {{appName}} đang không tốt. Chúng tôi đang tìm cách cải thiện, hiện tại thử một trong <a href='{{recommendedBrowserPageLink}}' target='_blank'>các trình duyệt được hỗ trợ</a>.",
"suboptimalExperienceDescription": "Chúng tôi lo rằng trải nghiệm của bạn với {{appName}} đang không tốt. Chúng tôi đang tìm cách cải thiện, hiện tại thử một trong <a href='{{recommendedBrowserPageLink}}' target='_blank'>các trình duyệt được hỗ trợ</a>.",
"suboptimalExperienceTitle": "Cảnh báo trình duyệt",
"unmute": ""
},
@@ -461,7 +461,7 @@
"mute": "Tắt tiếng",
"muteAll": "Tắt tiếng tất cả mọi người",
"muteEveryoneElse": "Tắt tiếng tất cả những người khác",
"startModeration": "Unmute themselves or start video",
"startModeration": "Tự bật tiếng hoặc bắt đầu video",
"stopEveryonesVideo": "Tắt hình của tất cả mọi người",
"stopVideo": "Tắt hình",
"unblockEveryoneMicCamera": "Mở khóa camera và micro của tất cả mọi người"
@@ -492,7 +492,7 @@
"profile": {
"setDisplayNameLabel": "Nhập tên hiển thị của bạn",
"setEmailInput": "Nhập địa chỉ email",
"setEmailLabel": "Nhập địa chỉ Gravatar thư điện tử của bạn",
"setEmailLabel": "Nhập địa chỉ email tài khoản Gravatar của bạn",
"title": "Hồ sơ"
},
"recording": {
@@ -501,28 +501,28 @@
"beta": "Bản thử nghiệm",
"busy": "Chương trình đang bận giải phóng tài nguyên thu hình. Xin thử lại sau vài phút.",
"busyTitle": "Tất cả các đầu ghi hình hiện đang bận.",
"error": "Ghi âm không thành công. Vui lòng thử lại.",
"error": "Ghi hình không thành công. Vui lòng thử lại.",
"expandedOff": "Ghi hình đã dừng",
"expandedOn": "Cuộc họp đang được ghi hình.",
"expandedPending": "Ghi hình đang khởi động",
"failedToStart": "Khởi động ghi âm thất bại",
"expandedPending": "Ghi hình đang khởi động...",
"failedToStart": "Khởi động ghi hình thất bại",
"fileSharingdescription": "Chia sẻ ghi hình với người tham gia họp",
"live": "Trực tuyến",
"loggedIn": "Đã đăng nhập dưới tên {{userName}}",
"off": "Đã ngừng ghi âm",
"on": "Đang ghi âm",
"pending": "Đang chuẩn bị để ghi hình cuộc họp",
"off": "Đã ngừng ghi hình",
"on": "Đang ghi hình",
"pending": "Đang chuẩn bị để ghi hình cuộc họp...",
"rec": "REC",
"serviceDescription": "Ghi hình của bạn sẽ được lưu bởi dịch vụ ghi hình",
"serviceName": "Dịch vụ ghi hình",
"signIn": "Đăng nhập",
"signOut": "Đăng xuất",
"title": "Đang ghi âm",
"title": "Đang ghi hình",
"unavailable": "Rất tiếc! Dịch vụ {{serviceName}} đang không sẵn sàng. Chúng tôi đang xử lý vấn đề này. Vui lòng thử lại sau.",
"unavailableTitle": "Ghi hình không hoạt động."
},
"sectionList": {
"pullToRefresh": "Kéo để làm tươi"
"pullToRefresh": "Kéo để làm mới"
},
"security": {
"about": "Bạn có thể thiết lập mật khẩu cho cuộc họp. Người tham dự cần phải nhập mật khẩu trước khi được phép vào phòng họp.",
@@ -547,7 +547,7 @@
"noDevice": "Không",
"selectAudioOutput": "Đầu ra âm thanh",
"selectCamera": "Camera",
"selectMic": "Microphone",
"selectMic": "Micro",
"startAudioMuted": "Mọi người bắt đầu đều bị tắt tiếng",
"startVideoMuted": "Mọi người bắt đầu đều bị ẩn",
"title": "Cài đặt"
@@ -557,14 +557,14 @@
"alertTitle": "Cảnh báo",
"alertURLText": "URL máy chủ đã nhập không hợp lệ",
"buildInfoSection": "Thông tin phiên bản",
"conferenceSection": "Hội nghị",
"conferenceSection": "Cuộc họp",
"displayName": "Tên hiển thị",
"email": "Email",
"header": "Cài đặt",
"profileSection": "Hồ sơ",
"serverURL": "URL máy chủ",
"startWithAudioMuted": "Bắt đầu không thu tiếng",
"startWithVideoMuted": "Bắt đầu không thu hình",
"startWithAudioMuted": "Bắt đầu không mở tiếng",
"startWithVideoMuted": "Bắt đầu không hiện hình",
"version": "Phiên bản"
},
"share": {
@@ -573,72 +573,72 @@
},
"speaker": "Diễn giả",
"speakerStats": {
"hours": "{{count}}h",
"minutes": "{{count}}m",
"hours": "{{count}} giờ",
"minutes": "{{count}} phút",
"name": "Tên",
"seconds": "{{count}}s",
"seconds": "{{count}} giây",
"speakerStats": "Thống kê về diễn giả",
"speakerTime": "Thời gian của diễn giả"
},
"startupoverlay": {
"policyText": " ",
"title": "{{app}} cần sử dụng microphone và camera của bạn."
"title": "{{app}} cần sử dụng micro và camera của bạn."
},
"suspendedoverlay": {
"rejoinKeyTitle": "Tham gia lại",
"text": "Bấm nút <i> Rejoin </i> để kết nối lại.",
"title": "Cuộc gọi hình của bạn bị gián đoạn vì máy tính này chuyển sang trạng thái ngủ."
"text": "Bấm nút <i> Tham gia lại </i> để kết nối lại.",
"title": "Cuộc họp của bạn bị gián đoạn vì máy tính này chuyển sang trạng thái ngủ."
},
"toolbar": {
"Settings": "Cài đặt",
"accessibilityLabel": {
"Settings": "Mở/Đóng Cấu hình",
"audioOnly": "Chuyển sang chỉ tiếng",
"audioOnly": "Chuyển sang chỉ nghe âm thanh",
"audioRoute": "Chọn thiết bị âm thanh",
"callQuality": "",
"cc": "Mở/Đóng phụ đề",
"chat": "Mở/Đóng cửa sổ Chat",
"chat": "Mở/Đóng cuộc hội thoại",
"document": "Mở/Đóng tài liệu được chia sẻ",
"feedback": "Để lại phản hồi",
"fullScreen": "Mở/Đóng toàn màn hình",
"fullScreen": "Bật/Tắt toàn màn hình",
"grantModerator": "Cấp quyền quản trị",
"hangup": "Rời cuộc gọi",
"invite": "Mời người tham gia",
"kick": ẩy người tham gia ra",
"localRecording": "Mở/Đóng điều khiển ghi hình cục bộ",
"kick": uổi người tham gia ra",
"localRecording": "Bật/Tắt điều khiển ghi hình cục bộ",
"lockRoom": "Mở/Đóng mật khẩu phòng họp",
"moreActions": "Mở/Đóng Thêm hành động",
"moreActionsMenu": "Menu Thêm hành động",
"mute": "Mở/Đóng Tắt tiếng",
"moreActions": "Xem thêm",
"moreActionsMenu": "Menu thêm",
"mute": "Bật/Tắt tiếng",
"muteEveryone": "Tắt tiếng tất cả mọi người",
"muteEveryoneElse": "Tắt tiếng những người khác",
"muteEveryonesVideo": "Tắt tất cả camera",
"pip": "Mở/Đóng chế độ Hình-trong-Hình",
"pip": "Bật/Tắt chế độ Hình-trong-Hình",
"profile": "Chỉnh sửa hồ sơ cá nhân",
"raiseHand": "Mở/Đóng Giơ tay",
"recording": "Mở/Đóng Ghi hình",
"raiseHand": "Giơ/Hạ tay",
"recording": "Bật/Tắt ghi hình",
"remoteMute": "Tắt tiếng người tham gia",
"selectBackground": "Chọn hình nền",
"shareRoom": "Mời ai đó",
"shareYourScreen": "Mở/Đóng Chia sẻ màn hình",
"sharedvideo": "Mở/Đóng Chia",
"shortcuts": "Mở/Đóng Phím tắt",
"shareYourScreen": "Bật/Tắt chia sẻ màn hình",
"sharedvideo": "Mở/Đóng chia sẻ video",
"shortcuts": "Bật/Tắt phím tắt",
"show": "",
"speakerStats": "Mở/Đóng Thống kê",
"tileView": "Mở/Đóng Xem dạng lưới",
"toggleCamera": "Mở/Đóng Camera",
"speakerStats": "Mở/Đóng thống kê",
"tileView": "Mở/Đóng xem dạng lưới",
"toggleCamera": "Bật/Tắt Camera",
"videoblur": "Chuyển đổi làm mờ video",
"videomute": "Mở/Đóng Tiếng, Hình"
"videomute": "Bật/Tắt tiếng và hình"
},
"addPeople": "Thêm người vào cuộc gọi",
"audioOnlyOff": "Chế độ chỉ tắt tiếng",
"audioOnlyOn": "Bật chế độ Chỉ âm thanh",
"addPeople": "Thêm người vào cuộc họp",
"audioOnlyOff": "Tắt chế độ chỉ nghe âm thanh",
"audioOnlyOn": "Bật chế độ chỉ nghe âm thanh",
"audioRoute": "Chọn thiết bị âm thanh",
"audioSettings": "Cài đặt âm thanh",
"authenticate": "Xác thực",
"callQuality": "Chỉnh chất lượng",
"chat": "Mở / Đóng cuộc hội thoại",
"closeChat": "Đóng Chat",
"chat": "Mở/Đóng cuộc hội thoại",
"closeChat": "Đóng cuộc hội thoại",
"documentClose": "Đóng tài liệu được chia sẻ",
"documentOpen": "Mở tài liệu được chia sẻ",
"enterFullScreen": "Xem toàn màn hình",
@@ -646,29 +646,29 @@
"exitFullScreen": "Thoát toàn màn hình",
"exitTileView": "Thoát xem dạng lưới",
"feedback": "Để lại phản hồi",
"hangup": "Thoát",
"hangup": "Rời cuộc họp",
"invite": "Mời người tham gia",
"login": "Đăng nhập",
"logout": "Đăng xuất",
"lowerYourHand": "Hạ tay",
"moreActions": "Thêm hành động",
"mute": "Tắt tiếng / Bật tiếng",
"mute": "Tắt/Bật tiếng",
"muteEveryone": "Tắt tiếng tất cả mọi người",
"muteEveryonesVideo": "Tắt tất cả camera",
"noisyAudioInputDesc": "Dường như micro của bạn đang tạo ra tiếng ồn. Vui lòng tắt tiếng hoặc thay thiết bị khác.",
"noisyAudioInputTitle": "Micro của bạn dường như có nhiều tiếng ồn!",
"openChat": "Mở Chat",
"openChat": "Mở cuộc hội thoại",
"participants": "Những người tham dự",
"pip": "Vào chế độ Ảnh-trong-Ảnh",
"profile": "Chỉnh sửa hồ sơ cá nhân",
"raiseHand": "Giơ / Hạ tay",
"raiseHand": "Giơ/Hạ tay",
"raiseYourHand": "Giơ tay",
"security": "Tùy chọn bảo mật",
"selectBackground": "Chọn hình nền",
"shareRoom": "Mời ai đó",
"shareRoom": "Chia sẻ phòng",
"sharedvideo": "Chia sẻ video",
"shortcuts": "Xem phím tắt",
"speakerStats": "Thống kê về diễn giả",
"speakerStats": "Thống kê về người tham dự",
"startScreenSharing": "Bắt đầu chia sẻ màn hình",
"startSubtitles": "Bắt đầu phụ đề",
"startvideoblur": "",
@@ -676,11 +676,11 @@
"stopSharedVideo": "Dừng video",
"stopSubtitles": "Dừng phụ đề",
"stopvideoblur": "",
"talkWhileMutedPopup": "Cố gắng để nói chuyện? Bạn đang tắt tiếng.",
"tileViewToggle": "Mở/Đóng Xem dạng lưới",
"toggleCamera": "Mở/Đóng Camera",
"talkWhileMutedPopup": "Đang nói chuyện? Bạn đang tắt tiếng.",
"tileViewToggle": "Mở/Đóng xem dạng lưới",
"toggleCamera": "Mở/Đóng camera",
"videoSettings": "Cài đặt hình ảnh",
"videomute": "Bật / Tắt camera"
"videomute": "Bật/Tắt camera"
},
"transcribing": {
"ccButtonTooltip": "Chạy/Dừng phụ đề",
@@ -689,7 +689,7 @@
"failedToStart": "Khởi chạy phiên âm thất bại",
"labelToolTip": "Cuộc họp đang được phiên âm",
"off": "Phiên âm đã dừng",
"pending": "Đang chuẩn bị phiên âm cuộc họp",
"pending": "Đang chuẩn bị phiên âm cuộc họp...",
"start": "Bắt đầu hiển thị phụ đề",
"stop": "Dừng hiển thị phụ đề",
"tr": "TR"
@@ -698,17 +698,17 @@
"androidGrantPermissions": "Chọn <b><i>Cho phép</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"chromeGrantPermissions": "Chọn <b><i>Cho phép</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"edgeGrantPermissions": "Chọn <b><i>Có</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"electronGrantPermissions": "Vui lòng cấp quyền sử dụng camera và microphone của bạn",
"electronGrantPermissions": "Vui lòng cấp quyền sử dụng camera và micro của bạn",
"firefoxGrantPermissions": "Chọn <b><i>Chia sẻ thiết bị đã chọn</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"iexplorerGrantPermissions": "Chọn <b><i>Có</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"nwjsGrantPermissions": "Vui lòng cấp quyền sử dụng camera và microphone của bạn",
"nwjsGrantPermissions": "Vui lòng cấp quyền sử dụng camera và micro của bạn",
"operaGrantPermissions": "Chọn <b><i>Cho phép</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"react-nativeGrantPermissions": "Chọn <b><i>Cho phép</i></b> khi trình duyệt của bạn yêu cầu cấp phép.",
"safariGrantPermissions": "Chọn <b><i>Có</i></b> khi trình duyệt của bạn yêu cầu cấp phép."
},
"videoSIPGW": {
"busy": "Chúng tôi đang giải phóng tài nguyên. Vui lòng thử lại sau vài phút.",
"busyTitle": "Dịch vụ Phòng họp đang bận",
"busyTitle": "Dịch vụ phòng họp đang bận",
"errorAlreadyInvited": "{{displayName}} đã được mời",
"errorInvite": "Cuộc họp chưa được khởi tạo. Vui lòng thử lại.",
"errorInviteFailed": "Chúng tôi đang xử lý vấn đề. Vui lòng thử lại sau.",
@@ -718,22 +718,22 @@
},
"videoStatus": {
"audioOnly": "AUD",
"audioOnlyExpanded": "Bạn đang ở chế độ chỉ tiếng. Chế độ này giảm băng thông nhưng không thấy hình ảnh người khác.",
"audioOnlyExpanded": "Bạn đang ở chế độ chỉ nghe âm thanh. Chế độ này giảm băng thông nhưng không thấy hình ảnh người khác.",
"callQuality": "Chất lượng hình ảnh",
"hd": "HD",
"highDefinition": "HD",
"highDefinition": "Độ phân giải cao",
"labelTooiltipNoVideo": "Không hình ảnh",
"labelTooltipAudioOnly": "Chế độ chỉ tiếng đã bật",
"labelTooltipAudioOnly": "Chế độ chỉ nghe âm thanh đã bật",
"ld": "LD",
"lowDefinition": "Phân giải thấp",
"lowDefinition": "Độ phân giải thấp",
"onlyAudioAvailable": "Chỉ có âm thanh sẵn sàng",
"onlyAudioSupported": "Chỉ hỗ trợ âm thanh trên trình duyệt này.",
"sd": "SD",
"standardDefinition": "Phân giải SD"
"standardDefinition": "Độ phân giải thường"
},
"videothumbnail": {
"domute": "Tắt tiếng",
"flip": "Lật",
"flip": "Lật hình",
"grantModerator": "Cấp quyền quản trị",
"kick": "Đẩy ra",
"moderator": "Quản trị viên",
@@ -771,22 +771,22 @@
"join": "Chạm để tham gia",
"roomname": "Nhập tên phòng"
},
"appDescription": "Tiếp tục, chat hình với toàn bộ nhóm. Thực tế, mời người bạn biết. {{app}} được mã hóa, 100% giải pháp hội nghị mã mở mà bạn có thể sử dụng hàng ngày, miễn phí.",
"appDescription": "{{app}} được mã hóa, 100% giải pháp cuộc họp trực tuyến mã nguồn mở mà bạn có thể sử dụng hàng ngày, miễn phí.",
"audioVideoSwitch": {
"audio": "Tiếng",
"video": "Hình ảnh"
},
"calendar": "Lịch",
"connectCalendarButton": "Kết nối Lịch của bạn",
"connectCalendarButton": "Kết nối lịch của bạn",
"connectCalendarText": "Kết nối lịch của bạn để xem tất cả các cuộc họp {{app}}. Thêm, thêm cuộc họp {{provider}} vào lịch của bạn và bắt đầu.",
"enterRoomTitle": "Bắt đầu cuộc họp mới",
"go": I",
"go": i",
"info": "Thông tin",
"join": "THAM GIA",
"join": "Tham gia",
"privacy": "Bảo mật",
"recentList": "Hiện tại",
"recentListDelete": "Xóa",
"recentListEmpty": "Danh sách cuộc họp rỗng. Thực hiện cuộc họp và bạn sẽ thấy danh sách hiện tại đây.",
"recentListEmpty": "Danh sách cuộc họp trống. Thực hiện cuộc họp và bạn sẽ thấy danh sách hiện tại đây.",
"reducedUIText": "",
"roomname": "Nhập tên phòng",
"roomnameHint": "Thêm tên hoặc URL của phòng họp bạn muốn tham gia. Ban có thể tạo tên phòng, gửi cho người bạn muốn mời để họ sử dụng tên đó.",

View File

@@ -23,10 +23,10 @@
"shareInvite": "分享會議邀請",
"shareLink": "分享會議連結以邀請他人",
"shareStream": "複製分享連結",
"sipAddresses": "SIP位址",
"sipAddresses": "SIP 位址",
"telephone": "電話號碼:{{number}}",
"title": "邀請他人至會議",
"yahooEmail": "Yahoo Email"
"yahooEmail": "Yahoo! Email"
},
"audioDevices": {
"bluetooth": "藍牙",
@@ -60,7 +60,7 @@
},
"calendarSync": {
"addMeetingURL": "增加會議連結",
"confirmAddLink": "您要為此活動加入Jitsi連結嗎",
"confirmAddLink": "您要為此活動加入 Jitsi 連結嗎?",
"error": {
"appConfiguration": "行事曆整合尚未正確設定。",
"generic": "發生錯誤,請檢查行事曆設定,或是重新整理行事曆。",
@@ -81,8 +81,8 @@
"selectSoundDevice": "選擇音訊裝置"
},
"labels": {
"buttonLabel": "駕駛模式",
"title": "駕駛模式",
"buttonLabel": "行車模式",
"title": "行車模式",
"videoStopped": "您的視訊已停用"
}
},
@@ -90,7 +90,7 @@
"enter": "加入聊天室",
"error": "錯誤:您的訊息未被傳送。原因:{{error}}",
"fieldPlaceHolder": "在此輸入您的訊息",
"lobbyChatMessageTo": "大聊天訊息傳送至{{recipient}}",
"lobbyChatMessageTo": "大聊天訊息傳送至{{recipient}}",
"message": "訊息",
"messageAccessibleTitle": "{{user}}",
"messageAccessibleTitleMe": "說:",
@@ -119,7 +119,7 @@
"buttonTextEdge": "安裝 Edge 外掛程式",
"close": "關閉",
"dontShowAgain": "不要再問了",
"installExtensionText": "安裝適用於Google行事曆及Office 365整合的擴充功能"
"installExtensionText": "安裝適用於 Google 行事曆及 Office 365 整合的擴充功能"
},
"connectingOverlay": {
"joiningRoom": "正在將您連接至您的會議……"
@@ -131,7 +131,7 @@
"CONNECTED": "已經連接",
"CONNECTING": "連接中",
"CONNFAIL": "連接失敗",
"DISCONNECTED": "已經中斷連接",
"DISCONNECTED": "已斷線",
"DISCONNECTING": "中斷連接中",
"ERROR": "錯誤",
"FETCH_SESSION_ID": "正在取得工作階段ID……",
@@ -182,11 +182,11 @@
},
"deepLinking": {
"appNotInstalled": "您需要在手機上安裝{{app}}行動應用程式才能加入這場會議。",
"description": "麼事情都沒發生?我們已嘗試在您的{{app}}桌面應用程式開啟會議。請再試一次,或是在{{app}}網路應用程式開啟會議。",
"descriptionWithoutWeb": "麼事情都沒發生?我們已試著將您的會議在桌面應用程式{{app}}中啟動。",
"description": "麼事情都沒發生?我們已嘗試在您的{{app}}桌面應用程式開啟會議。請再試一次,或是在{{app}}網路應用程式開啟會議。",
"descriptionWithoutWeb": "麼事情都沒發生?我們已試著將您的會議在桌面應用程式{{app}}中啟動。",
"downloadApp": "下載App",
"ifDoNotHaveApp": "如果您尚未安裝App",
"ifHaveApp": "如果您已經此App",
"ifHaveApp": "如果您已經安裝此App",
"joinInApp": "使用App加入會議",
"launchWebButton": "在瀏覽器開啟",
"title": "正在{{app}}發起您的會議……",
@@ -216,12 +216,12 @@
"dialog": {
"Back": "返回",
"Cancel": "取消",
"IamHost": "我是主持人",
"IamHost": "我是會議主持人",
"Ok": "確定",
"Remove": "移除",
"Share": "分享",
"Submit": "提交",
"WaitForHostMsg": "此會議尚未開始,如果您是主持人,請進行認證並以主持人身分開始會議。",
"Submit": "送出",
"WaitForHostMsg": "此會議尚未開始,如果您是會議主持人,請進行認證並以主持人身分開始會議。",
"WaitingForHostTitle": "正在等候主持人加入……",
"Yes": "是",
"accessibilityLabel": {
@@ -237,7 +237,7 @@
"authenticationRequired": "需要驗證",
"cameraConstraintFailedError": "您的網路攝影機不符合要求。",
"cameraNotFoundError": "找不到網路攝影機。",
"cameraNotSendingData": "我們無法存取您的網路攝影機,請檢查是否有其他應用程式正在使用這個裝置,從裝置選單裡選擇其他設備或者重新載入。",
"cameraNotSendingData": "我們無法存取您的網路攝影機,請檢查是否有其他應用程式正在使用這個裝置,從裝置選單裡選擇其他設備或者重新載入。",
"cameraNotSendingDataTitle": "無法存取網路攝影機",
"cameraPermissionDeniedError": "未取得網路攝影機的存取權,您仍可參加會議,但其他人無法看到你。按一下網址列中的「攝影機」圖示 ,然後選取「一律允許」選項。",
"cameraTimeoutError": "無法啟動視訊裝置,連線逾時!",
@@ -268,7 +268,7 @@
"embedMeeting": "嵌入會議",
"enterDisplayName": "請在此輸入您自己的名字",
"error": "錯誤",
"gracefulShutdown": "我們目前正在維護中,請稍後再試。",
"gracefulShutdown": "服務目前正在維護中,請稍後再試。",
"grantModeratorDialog": "您確定要授予{{participantName}}主持人權限嗎?",
"grantModeratorTitle": "授予主持人權限",
"hide": "隱藏",
@@ -283,7 +283,7 @@
"kickParticipantTitle": "移除這位與會者?",
"kickTitle": "噢!{{participantDisplayName}}將您從會議中移除",
"linkMeeting": "連結會議",
"linkMeetingTitle": "將會議連結至Salesforce",
"linkMeetingTitle": "將會議連結至 Salesforce",
"liveStreaming": "直播串流中",
"liveStreamingDisabledBecauseOfActiveRecordingTooltip": "正在錄製,無法使用",
"localUserControls": "本機使用者控制",
@@ -297,7 +297,7 @@
"maxUsersLimitReachedTitle": "與會人數已達上限",
"micConstraintFailedError": "您的麥克風不符合要求。",
"micNotFoundError": "未發現麥克風。",
"micNotSendingData": "至電腦設定中解除麥克風靜音並調整大小",
"micNotSendingData": "至電腦設定中解除麥克風靜音並調整音量",
"micNotSendingDataTitle": "您的麥克風由電腦系統設定為靜音",
"micPermissionDeniedError": "您未允許麥克風的使用權限,雖然可以繼續參加會議但其他人將無法聽到您的聲音,利用位址欄中的網路攝影機按鈕修正這個問題。",
"micTimeoutError": "無法啟動音訊裝置,連線逾時!",
@@ -312,11 +312,11 @@
"muteEveryoneElsesVideoTitle": "是否要關閉除了{{whom}}以外的人的網路攝影機?",
"muteEveryoneSelf": "您自己",
"muteEveryoneStartMuted": "現在所有人皆已靜音",
"muteEveryoneTitle": "靜音所有人?",
"muteEveryoneTitle": "要將所有人靜音嗎",
"muteEveryonesVideoDialog": "與會者隨時可以重新開啟自己的網路攝影機。",
"muteEveryonesVideoDialogModerationOn": "與會者可以隨時傳送開啟視訊請求。",
"muteEveryonesVideoDialogOk": "停用",
"muteEveryonesVideoTitle": "停用所有人的網路攝影機?",
"muteEveryonesVideoTitle": "要關閉所有人的網路攝影機",
"muteParticipantBody": "您無法對他們解除靜音,但是他們自己隨時可以解除靜音。",
"muteParticipantButton": "靜音",
"muteParticipantsVideoBody": "您無法重新開啟,只有對方能自己重新開啟。",
@@ -324,8 +324,8 @@
"muteParticipantsVideoButton": "停用網路攝影機",
"muteParticipantsVideoDialog": "確定要停用這位與會者的網路攝影機?您不能再重新開啟對方的網路攝影機,但他們隨時能重新開啟。",
"muteParticipantsVideoDialogModerationOn": "您確定要關閉此與會者的網路攝影機嗎?您和他都無法再將視訊重新開啟。",
"muteParticipantsVideoTitle": "停用此與會者的網路攝影機?",
"noDropboxToken": "沒有有效的Dropbox token",
"muteParticipantsVideoTitle": "要關閉此與會者的網路攝影機",
"noDropboxToken": "沒有有效的 Dropbox token",
"password": "密碼",
"passwordLabel": "會議已被一位與會者鎖定,請輸入$t(lockRoomPassword)以加入。",
"passwordNotSupported": "尚未支援設定會議$t(lockRoomPassword)。",
@@ -337,7 +337,7 @@
"popupError": "您的瀏覽器在此網站上阻擋彈出視窗,請在瀏覽器的安全設定中啟用並再試一次。",
"popupErrorTitle": "彈出視窗遭到阻擋",
"readMore": "更多",
"recentlyUsedObjects": "您近使用過的物件",
"recentlyUsedObjects": "您近使用過的物件",
"recording": "錄製中",
"recordingDisabledBecauseOfActiveLiveStreamingTooltip": "正在直播時無法使用",
"rejoinNow": "立即重新加入",
@@ -358,8 +358,8 @@
"screenSharingAudio": "分享音訊",
"screenSharingFailed": "噢喔!發生錯誤,我們無法啟動分享畫面!",
"screenSharingFailedTitle": "分享畫面失敗!",
"screenSharingPermissionDeniedError": "噢喔!您的影像分享權限發生問題,請重新載入再試一次。",
"searchInSalesforce": "在Salesforce中搜尋",
"screenSharingPermissionDeniedError": "噢喔!您的影像分享權限發生問題,請重新載入再試一次。",
"searchInSalesforce": "在 Salesforce 中搜尋",
"searchResults": "搜尋結果({{count}}",
"searchResultsDetailsError": "取得擁有者資料時發生錯誤。",
"searchResultsError": "取得資料時發生錯誤。",
@@ -388,17 +388,17 @@
"shareYourScreen": "分享您的畫面",
"shareYourScreenDisabled": "畫面分享已停用。",
"sharedVideoDialogError": "錯誤:網址無效",
"sharedVideoLinkPlaceholder": "YouTube或影片網址",
"sharedVideoLinkPlaceholder": "YouTube 或影片網址",
"show": "顯示",
"start": "開始",
"startLiveStreaming": "啟動直播串流",
"startLiveStreaming": "開始直播串流",
"startRecording": "啟動錄製作業",
"startRemoteControlErrorMessage": "嘗試啟動遠端控制階段時發生錯誤!",
"stopLiveStreaming": "停直播串流",
"stopLiveStreaming": "停直播串流",
"stopRecording": "停用錄製",
"stopRecordingWarning": "確定要停用錄製嗎?",
"stopStreamingWarning": "確定要停直播串流嗎?",
"streamKey": "直播串流鑰",
"stopStreamingWarning": "確定要停直播串流嗎?",
"streamKey": "直播串流鑰",
"thankYou": "感謝您使用{{appName}}",
"token": "token",
"tokenAuthFailed": "抱歉,您未被允許加入此會議。",
@@ -410,7 +410,7 @@
"userPassword": "用戶密碼",
"videoLink": "影片連結",
"viewUpgradeOptions": "查看升級方案",
"viewUpgradeOptionsContent": "若要不受限地使用錄製、逐字稿、RTMP串流等進階版功能您必須升級您的方案。",
"viewUpgradeOptionsContent": "若要不受限地使用錄製、逐字稿、RTMP 串流等進階版功能,您必須升級您的方案。",
"viewUpgradeOptionsTitle": "您找到了進階版功能!",
"yourEntireScreen": "您的整個畫面"
},
@@ -435,7 +435,7 @@
},
"giphy": {
"noResults": "找不到任何結果 :(",
"search": "搜尋 GIPHY"
"search": "搜尋 GIPHY 圖庫"
},
"helpView": {
"title": "說明中心"
@@ -508,7 +508,7 @@
"giphyMenu": "切換 GIPHY 選單",
"keyboardShortcuts": "快捷鍵",
"localRecording": "顯示或隱藏本機端錄製控制項",
"mute": "靜音或解除靜音",
"mute": "靜音或取消靜音",
"pushToTalk": "按鍵通話",
"raiseHand": "舉手或放下",
"showSpeakerStats": "顯示聲音輸出數據",
@@ -529,16 +529,16 @@
"changeSignIn": "切換帳號",
"choose": "選擇直播串流",
"chooseCTA": "請選擇直播串流選項,您目前是以{{email}}身份登入。",
"enterStreamKey": "在此輸入您的YouTube直播串流鑰。",
"enterStreamKey": "在此輸入您的 YouTube 直播串流鑰。",
"error": "直播串流失敗,請重試。",
"errorAPI": "在存取您的YouTube直播時發生問題請重新登入。",
"errorAPI": "在存取您的 YouTube 直播時發生問題,請重新登入。",
"errorLiveStreamNotEnabled": "直播在{{email}}尚未啟用,請開啟直播串流或登入有啟用直播串流的帳號。",
"expandedOff": "直播已停用",
"expandedOn": "會議目前正在YouTube上直播。",
"expandedOn": "會議目前正在 YouTube 上直播。",
"expandedPending": "直播串流正被啟動……",
"failedToStart": "直播串流啟動失敗",
"getStreamKeyManually": "我們無法解析任何直播串流請嘗試從YouTube取得您的直播串流金鑰。",
"googlePrivacyPolicy": "Google隱私權政策",
"getStreamKeyManually": "我們無法解析任何直播串流,請嘗試從 YouTube 取得您的直播串流金鑰。",
"googlePrivacyPolicy": "Google 隱私權政策",
"inProgress": "正在錄製或直播",
"invalidStreamKey": "直播串流金鑰可能不正確。",
"limitNotificationDescriptionNative": "您的最大直播長度將被限制在{{limit}}分鐘,若要不受限的直播,請使用{{app}}。",
@@ -551,18 +551,18 @@
"serviceName": "直播串流服務",
"sessionAlreadyActive": "已在錄製或直播此工作階段。",
"signIn": "使用 Google 帳號登入",
"signInCTA": "輸入YouTube直播串流鑰,或登入帳號。",
"signInCTA": "輸入 YouTube 直播串流鑰,或登入帳號。",
"signOut": "登出",
"signedInAs": "您目前登入名稱為:",
"start": "啟動直播串流",
"streamIdHelp": "這是什麼?",
"title": "直播串流",
"unavailableTitle": "直播串流無法使用",
"youtubeTerms": "YouTube服務條款"
"youtubeTerms": "YouTube 服務條款"
},
"lobby": {
"admit": "許",
"admitAll": "許所有人",
"admit": "許",
"admitAll": "許所有人",
"allow": "允許",
"backToKnockModeButton": "請求加入",
"chat": "聊天",
@@ -613,13 +613,13 @@
"durationNA": "不適用",
"encoding": "編碼中",
"label": "LOR",
"labelToolTip": "本地端錄製投入中",
"labelToolTip": "本地端錄製進行中",
"localRecording": "本地端錄製中",
"me": "我",
"messages": {
"engaged": "本地端錄製已投入。",
"engaged": "本地端錄製已啟用。",
"finished": "錄製階段{{token}}已完成,請傳送錄製檔案案至主持人。",
"finishedModerator": "錄製階段{{token}}已完成,本地端錄製追蹤已存檔,請要求各與會者提其錄製檔案案。",
"finishedModerator": "錄製階段{{token}}已完成,本地端錄製追蹤已存檔,請要求各與會者提其錄製檔案案。",
"notModerator": "您不是主持人,無法啟動或停用本地端錄製。"
},
"moderator": "主持人",
@@ -663,8 +663,8 @@
"leftOneMember": "{{name}}已離開會議",
"leftThreePlusMembers": "{{name}}與其他人已離開會議",
"leftTwoMembers": "{{first}}與{{second}}已離開會議",
"linkToSalesforce": "連結至Salesforce",
"linkToSalesforceDescription": "您可以將會議摘要連結至Salesforce物件。",
"linkToSalesforce": "連結至 Salesforce",
"linkToSalesforceDescription": "您可以將會議摘要連結至 Salesforce 物件。",
"linkToSalesforceError": "無法將會議連結至 Salesforce",
"linkToSalesforceKey": "連結此會議",
"linkToSalesforceProgress": "正在將會議連結至 Salesforce……",
@@ -694,26 +694,26 @@
"noiseSuppressionDesktopAudioDescription": "分享電腦音訊時無法啟用雜訊抑制,請停用後重試。",
"noiseSuppressionFailedTitle": "啟用雜訊抑制失敗",
"noiseSuppressionNoTrackDescription": "請先解除麥克風的靜音。",
"noiseSuppressionStereoDescription": "目前不支持對身歷聲音訊啟用雜訊抑制。",
"oldElectronClientDescription1": "您似乎正在使用存在已知安全漏洞的過時Jitsi Meet用戶端請盡快更新到最新版本",
"noiseSuppressionStereoDescription": "目前不支援立體聲降噪功能。",
"oldElectronClientDescription1": "您似乎正在使用存在已知安全漏洞的過時 Jitsi Meet 用戶端,請盡快更新到最新版本!",
"oldElectronClientDescription2": "",
"oldElectronClientDescription3": "",
"participantWantsToJoin": "想要加入會議",
"participantsWantToJoin": "想要加入會議",
"passwordRemovedRemotely": "$t(lockRoomPasswordUppercase)已被其他與會者移除",
"passwordSetRemotely": "$t(lockRoomPasswordUppercase)由其他與會者設定",
"raiseHandAction": "舉手",
"raiseHandAction": "舉手發言",
"raisedHand": "{{name}}想要發言。",
"raisedHands": "{{participantName}}與其他{{raisedHands}}人",
"reactionSounds": "停用音效",
"reactionSoundsForAll": "為所有人停用音效",
"reactionSounds": "關閉音效",
"reactionSoundsForAll": "為所有人關閉音效",
"screenShareNoAudio": "您未在選擇視窗時勾選分享音訊",
"screenShareNoAudioTitle": "無法分享電腦聲音!",
"selfViewTitle": "您隨時可以在設定中取消隱藏本人視圖",
"somebody": "某人",
"startSilentDescription": "重新加入會議以啟用音訊",
"startSilentTitle": "您加入時沒有啟音訊!",
"suboptimalBrowserWarning": "我恐怕您本次會議體驗不佳,我們會想辦法改進的。在此期間,请尝试使用<a href='{{recommendedBrowserPageLink}}' target='_blank'>支援的瀏覽器</a> 。",
"startSilentTitle": "您加入時沒有啟音訊!",
"suboptimalBrowserWarning": "我恐怕您本次會議體驗不佳,我們會努力改善。在此期間,請嘗試使用<a href='{{recommendedBrowserPageLink}}' target='_blank'>支援的瀏覽器</a> 。",
"suboptimalExperienceTitle": "瀏覽器警告",
"unmute": "取消靜音",
"videoMutedRemotelyDescription": "您隨時可以再次啟用。",
@@ -732,7 +732,7 @@
"blockEveryoneMicCamera": "停用所有人的麥克風和網路攝影機",
"invite": "邀請他人",
"moreModerationActions": "更多主持人選項",
"moreModerationControls": "更多主持人控制項",
"moreModerationControls": "更多主持人操作",
"moreParticipantOptions": "更多與會者選項",
"mute": "靜音",
"muteAll": "靜音所有人",
@@ -757,7 +757,7 @@
"polls": {
"answer": {
"skip": "跳過",
"submit": "提交"
"submit": "送出"
},
"by": "由{{ name }}",
"create": {
@@ -765,7 +765,7 @@
"answerPlaceholder": "選項{{index}}",
"cancel": "取消",
"create": "建立投票",
"pollOption": "投票選項{{index}}",
"pollOption": "選項{{index}}",
"pollQuestion": "投票問題",
"questionPlaceholder": "詢問問題",
"removeOption": "移除選項",
@@ -863,7 +863,7 @@
},
"profile": {
"avatar": "頭像",
"setDisplayNameLabel": "設定您的顯示名稱",
"setDisplayNameLabel": "設定顯示名稱",
"setEmailInput": "輸入您的電子信箱",
"setEmailLabel": "設定您的 Gravatar 電子信箱",
"title": "簡介"
@@ -872,14 +872,14 @@
"raisedHandsLabel": "舉手人數",
"record": {
"already": {
"linked": "會議已連結至此Salesforce物件。"
"linked": "會議已連結至此 Salesforce 物件。"
},
"type": {
"account": "帳號",
"contact": "聯絡人",
"lead": "在客戶",
"lead": "在客戶",
"opportunity": "機會",
"owner": "擁有者"
"owner": "負責人"
}
},
"recording": {
@@ -891,7 +891,7 @@
"copyLink": "複製連結",
"error": "錄製失敗,請重試。",
"errorFetchingLink": "取得錄製檔案連結時發生錯誤。",
"expandedOff": "錄製已經停用",
"expandedOff": "錄製已停止",
"expandedOn": "此會議目前正在錄製。",
"expandedPending": "錄製正在啟動……",
"failedToStart": "錄製啟動失敗",
@@ -907,17 +907,17 @@
"linkGenerated": "我們建立了您的錄製檔案的連結。",
"live": "直播",
"localRecordingNoNotificationWarning": "系統不會主動知會與會者錄製已開啟,主持人需另行通知。",
"localRecordingNoVideo": "有錄製的視訊",
"localRecordingNoVideo": "有錄製的視訊",
"localRecordingStartWarning": "請確保在退出會議之前停用錄製以便保存。",
"localRecordingStartWarningTitle": "停用錄製以保存",
"localRecordingVideoStop": "停用您的視訊也將停本地錄製,確定繼續嗎?",
"localRecordingVideoStop": "關閉您的視訊也將停本地錄製,確定繼續嗎?",
"localRecordingVideoWarning": "錄製視訊必須在開始時啟用",
"localRecordingWarning": "確保選擇當前分頁以錄製正確的視訊和音訊。錄製目前限制為1GB約100分鐘。",
"localRecordingWarning": "確保選擇目前的分頁以錄製正確的視訊和音訊。錄製目前限制為1GB可錄製100分鐘。",
"loggedIn": "以{{userName}}登入",
"noStreams": "未檢測到音訊或視訊。",
"off": "錄製已停用",
"off": "錄製已停用",
"offBy": "{{name}}停用了錄製",
"on": "錄製",
"on": "正在錄製",
"onBy": "{{name}}啟動了錄製",
"onlyRecordSelf": "",
"pending": "準備錄製此會議……",
@@ -930,7 +930,7 @@
"sessionAlreadyActive": "已在錄製或直播此工作階段。",
"signIn": "登入",
"signOut": "登出",
"surfaceError": "請選擇前分頁",
"surfaceError": "請選擇前分頁",
"title": "錄製中",
"unavailable": "喔哦!{{serviceName}}目前無法使用,我們正在解決此問題,請稍後再試。",
"unavailableTitle": "錄製無法使用",
@@ -941,15 +941,15 @@
"pullToRefresh": "下拉以重新整理"
},
"security": {
"about": "您可以添加$t(lockRoomPassword)至您的會議,與會者在加入會議前必須先輸入$t(lockRoomPassword)。",
"aboutReadOnly": "主持人可以添加$t(lockRoomPassword)至會議,與會者在加入會議前必須先輸入$t(lockRoomPassword)。",
"about": "您可以新增$t(lockRoomPassword)至您的會議,與會者在加入會議前必須先輸入$t(lockRoomPassword)。",
"aboutReadOnly": "主持人可以新增$t(lockRoomPassword)至會議,與會者在加入會議前必須先輸入$t(lockRoomPassword)。",
"insecureRoomNameWarning": "會議室名稱過於簡單,任何人都可以加入此會議,請考慮使用安全性選項以保護您的會議安全。",
"title": "安全性選項"
},
"settings": {
"buttonLabel": "設定",
"calendar": {
"about": "{{appName}}行事曆整合以安全的方式存取您行事曆中即將舉行的活動。",
"about": "{{appName}}行事曆整合功能可安全地存取您行事曆中即將舉行的活動。",
"disconnect": "中斷連接",
"microsoftSignIn": "使用Microsoft帳號登入",
"signedIn": "目前正在存取{{email}}的行事曆事件,點按下方中斷連接可以停用存取行事曆事件。",
@@ -979,7 +979,7 @@
"selectAudioOutput": "音訊輸出",
"selectCamera": "網路攝影機",
"selectMic": "麥克風",
"selfView": "自我檢視",
"selfView": "自身畫面",
"sounds": "音訊",
"speakers": "喇叭",
"startAudioMuted": "所有人啟動時處於靜音",
@@ -998,7 +998,7 @@
"conferenceSection": "會議",
"disableCallIntegration": "停用原生通話整合",
"disableCrashReporting": "停用錯誤回報",
"disableCrashReportingWarning": "您確定要停用錯誤回報嗎?變更將在重啟後生效。",
"disableCrashReportingWarning": "您確定要停用錯誤回報功能嗎?變更將在重啟應用程式後生效。",
"disableP2P": "停用點對點模式",
"displayName": "顯示名稱",
"displayNamePlaceholderText": "例如John Doe",
@@ -1011,15 +1011,15 @@
"profileSection": "簡介",
"serverURL": "伺服器網址",
"showAdvanced": "顯示進階設定",
"startCarModeInLowBandwidthMode": "同時啟用駕駛模式與低頻寬模式",
"startCarModeInLowBandwidthMode": "同時啟用行車模式與低頻寬模式",
"startWithAudioMuted": "啟動並靜音",
"startWithVideoMuted": "啟動並關閉影像",
"terms": "條款",
"version": "版本"
},
"share": {
"dialInfoText": "\n\n=====\n\n只想要透過手機撥入嗎\n\n{{defaultDialInNumber}}點此連結來查看此會議的電話撥入號碼\n{{dialInfoPageUrl}}",
"mainText": "點下方連結加入會議:\n{{roomUrl}}"
"dialInfoText": "\n\n=====\n\n只想要透過手機撥打加入嗎?\n\n撥打{{defaultDialInNumber}}點此連結來查看此會議的電話撥入號碼\n{{dialInfoPageUrl}}",
"mainText": "點下方連結加入會議:\n{{roomUrl}}"
},
"speaker": "喇叭",
"speakerStats": {
@@ -1028,13 +1028,13 @@
"displayEmotions": "顯示表情",
"fearful": "可怕",
"happy": "笑臉",
"hours": "{{count}}時",
"minutes": "{{count}}分",
"hours": "{{count}}時",
"minutes": "{{count}} 分",
"name": "名字",
"neutral": "中立",
"sad": "悲傷",
"search": "搜尋",
"seconds": "{{count}}秒",
"seconds": "{{count}} 秒",
"speakerStats": "發言統計",
"speakerTime": "發言時間",
"surprised": "驚訝"
@@ -1042,11 +1042,11 @@
"startupoverlay": {
"genericTitle": "此會議需要使用您的麥克風和網路攝影機。",
"policyText": " ",
"title": "{{app}}需要使用您的麥克風和網路攝影機。"
"title": "{{app}} 需要使用您的麥克風和網路攝影機。"
},
"suspendedoverlay": {
"rejoinKeyTitle": "重新加入",
"text": "按下 <i>重新加入</i> 按鈕重新連接。",
"text": "按下 <i>重新加入</i> 按鈕重新連接。",
"title": "由於電腦進入休眠,您的視訊通話已經中斷。"
},
"termsView": {
@@ -1062,19 +1062,19 @@
"boo": "喝倒彩",
"breakoutRoom": "加入/離開分組討論室",
"callQuality": "管理視訊品質",
"carmode": "駕駛模式",
"carmode": "行車模式",
"cc": "啟用/停用字幕",
"chat": "打開/關閉聊天視窗",
"clap": "鼓掌",
"collapse": "收回",
"document": "啟用/停用分享文",
"document": "啟用/停用分享文",
"download": "下載我們的應用程式",
"embedMeeting": "嵌入會議",
"endConference": "全體會議結束",
"expand": "展開",
"feedback": "留下反饋",
"feedback": "留下建議",
"fullScreen": "啟用/停用全畫面",
"giphy": "啟用/停用GIPHY選單",
"giphy": "啟用/停用 GIPHY 選單",
"grantModerator": "授予主持人權限",
"hangup": "離開會議",
"help": "協助",
@@ -1083,7 +1083,7 @@
"laugh": "大笑",
"leaveConference": "離開會議",
"like": "比讚",
"linkToSalesforce": "連結至Salesforce",
"linkToSalesforce": "連結至 Salesforce",
"lobbyButton": "啟用/停用大廳模式",
"localRecording": "啟用/停用本地端錄製控制",
"lockRoom": "啟用/停用會議密碼",
@@ -1092,7 +1092,7 @@
"moreOptions": "顯示更多選項",
"mute": "靜音/取消靜音",
"muteEveryone": "將所有人靜音",
"muteEveryoneElse": "全体静音",
"muteEveryoneElse": "全體靜音",
"muteEveryoneElsesVideoStream": "停用其他人的網路攝影機",
"muteEveryonesVideoStream": "停用所有人的網路攝影機",
"noiseSuppression": "雜訊抑制",
@@ -1107,7 +1107,7 @@
"remoteVideoMute": "停用與會者的網路攝影機",
"security": "安全性選項",
"selectBackground": "選擇背景",
"selfView": "啟用/停用本人視圖",
"selfView": "啟用/停用自身畫面",
"shareRoom": "邀請他人",
"shareYourScreen": "啟用/停用畫面分享",
"shareaudio": "分享音訊",
@@ -1149,7 +1149,7 @@
"exitFullScreen": "離開全畫面",
"exitTileView": "跳出畫廊檢視",
"feedback": "回饋",
"giphy": "啟用/停用GIPHY選單",
"giphy": "啟用/停用 GIPHY 選單",
"hangup": "離開會議",
"help": "協助",
"hideWhiteboard": "停用白板",
@@ -1159,7 +1159,7 @@
"leaveBreakoutRoom": "離開分組討論室",
"leaveConference": "離開會議",
"like": "比讚",
"linkToSalesforce": "連結至Salesforce",
"linkToSalesforce": "連結至 Salesforce",
"lobbyButtonDisable": "停用大廳模式",
"lobbyButtonEnable": "啟用大廳模式",
"login": "登入",
@@ -1216,13 +1216,13 @@
},
"transcribing": {
"ccButtonTooltip": "啟動/停用字幕",
"error": "轉錄失敗,請重試。",
"error": "轉錄失敗,請再試一次。",
"expandedLabel": "轉錄已開啟",
"failedToStart": "轉錄啟動失敗",
"labelToolTip": "此會議正在轉錄",
"off": "轉錄已停用",
"pending": "準備轉錄會議……",
"sourceLanguageDesc": "會議語言前設定為<b>{{sourceLanguage}}</b><br/>您可以在這裡",
"sourceLanguageDesc": "會議語言前設定為<b>{{sourceLanguage}}</b><br/>您可以在這裡",
"sourceLanguageHere": "修改",
"start": "開始顯示字幕",
"stop": "停用顯示字幕",
@@ -1246,7 +1246,7 @@
"busy": "我們正在釋放資源,請過幾分鐘後再試。",
"busyTitle": "會議室服務目前忙碌中",
"errorAlreadyInvited": "{{displayName}}已經受邀",
"errorInvite": "會議尚未開始,請稍再試。",
"errorInvite": "會議尚未開始,請稍再試。",
"errorInviteFailed": "我們正在努力解決這個問題,請稍後再試。",
"errorInviteFailedTitle": "邀請{{displayName}}失敗",
"errorInviteTitle": "會議室邀請錯誤",
@@ -1286,7 +1286,7 @@
"mute": "與會者處於靜音",
"muted": "處於靜音",
"pinToStage": "釘選至畫面",
"remoteControl": "開始/停用遠端控制",
"remoteControl": "啟用/停用遠端控制",
"screenSharing": "與會者正在分享他們的畫面",
"show": "顯示在台上",
"showSelfView": "顯示自我檢視",
@@ -1316,12 +1316,12 @@
"title": "虛擬背景",
"uploadedImage": "上傳圖片{{index}}",
"webAssemblyWarning": "不支援 WebAssembly",
"webAssemblyWarningDescription": "WebAssembly 停用或不被此覽器支援"
"webAssemblyWarningDescription": "WebAssembly 停用或不被此覽器支援"
},
"volumeSlider": "音量滑",
"volumeSlider": "音量滑",
"welcomepage": {
"accessibilityLabel": {
"join": "點即可加入",
"join": "點即可加入",
"roomname": "輸入會議室名稱"
},
"addMeetingName": "新增會議室名稱",
@@ -1337,7 +1337,7 @@
"getHelp": "取得協助",
"go": "開始",
"goSmall": "開始",
"headerSubtitle": "安全且高品質的會議",
"headerSubtitle": "安全且高品質的視訊會議",
"headerTitle": "Jitsi Meet",
"info": "資訊",
"jitsiOnMobile": "Jitsi 手機應用程式 下載應用程式,不論何時何地都能發起會議",
@@ -1345,15 +1345,15 @@
"logo": {
"calendar": "行事曆圖示",
"desktopPreviewThumbnail": "桌面預覽縮圖",
"googleLogo": "Google圖示",
"logoDeepLinking": "Jitsi Meet圖示",
"microsoftLogo": "Microsoft圖示",
"googleLogo": "Google 圖示",
"logoDeepLinking": "Jitsi Meet 圖示",
"microsoftLogo": "Microsoft 圖示",
"policyLogo": "政策圖示"
},
"mobileDownLoadLinkAndroid": "下載 Android 版本的手機應用程式",
"mobileDownLoadLinkFDroid": "前往 F-Droid 下載 Android 版本的手機應用程式",
"mobileDownLoadLinkIos": "下載 iOS 版本的手機應用程式",
"moderatedMessage": "或以主持人身份<a href=\"{{url}}rel=\"noopener noreferrertarget=\"_blank\">預先建立會議</a>。",
"moderatedMessage": "或以主持人身份<a href=\"{{url}}\" rel=\"noopener noreferrer\" target=\"_blank\">預先建立會議</a>。",
"privacy": "隱私權",
"recentList": "最近使用",
"recentListDelete": "刪除",
@@ -1361,7 +1361,7 @@
"reducedUIText": "歡迎使用{{app}}",
"roomNameAllowedChars": "會議室名稱不應包含以下字元:? & : ' \" % #",
"roomname": "輸入會議室名稱",
"roomnameHint": "請輸入您想加入的會議室名稱或網址,您可以用個名稱來建立會議室,只要其他人輸入相同的名稱就能加入會議室喔。",
"roomnameHint": "請輸入您想加入的會議室名稱或網址,您可以用個名稱來建立會議室,只要其他人輸入相同的名稱就能加入會議室喔。",
"sendFeedback": "傳送回饋",
"settings": "設定",
"startMeeting": "開始會議",

View File

@@ -68,9 +68,9 @@
},
"join": "Join",
"joinTooltip": "Join the meeting",
"nextMeeting": "next meeting",
"nextMeeting": "Next meeting",
"noEvents": "There are no upcoming events scheduled.",
"ongoingMeeting": "ongoing meeting",
"ongoingMeeting": "Ongoing meeting",
"permissionButton": "Open settings",
"permissionMessage": "The Calendar permission is required to see your meetings in the app.",
"refresh": "Refresh calendar",
@@ -156,6 +156,7 @@
"localport_plural": "Local ports:",
"maxEnabledResolution": "send max",
"more": "Show more",
"no": "no",
"packetloss": "Packet loss:",
"participant_id": "Participant id:",
"quality": {
@@ -174,7 +175,8 @@
"status": "Connection:",
"transport": "Transport:",
"transport_plural": "Transports:",
"video_ssrc": "Video SSRC:"
"video_ssrc": "Video SSRC:",
"yes": "yes"
},
"dateUtils": {
"earlier": "Earlier",
@@ -184,13 +186,21 @@
"deepLinking": {
"appNotInstalled": "You need the {{app}} mobile app to join this meeting on your phone.",
"description": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. Try again or launch it in the {{app}} web app.",
"descriptionNew": "Nothing happened? We tried launching your meeting in the {{app}} desktop app. <br /><br /> You can try again or launch it on web.",
"descriptionWithoutWeb": "Nothing happened? We tried launching your meeting in the {{app}} desktop app.",
"downloadApp": "Download the app",
"downloadMobileApp": "Download from App Store",
"ifDoNotHaveApp": "If you don't have the app yet:",
"ifHaveApp": "If you already have the app:",
"joinInApp": "Join this meeting using the app",
"joinInAppNew": "Join in app",
"joinInBrowser": "Join in browser",
"launchMeetingLabel": "How do you want to join this meeting?",
"launchWebButton": "Launch in web",
"noMobileApp": "You dont have the app?",
"termsAndConditions": "By continuing you agree to our <a href='{{termsAndConditionsLink}}' rel='noopener noreferrer' target='_blank'>terms & conditions.</a>",
"title": "Launching your meeting in {{app}}...",
"titleNew": "Launching your meeting ...",
"tryAgainButton": "Try again in desktop",
"unsupportedBrowser": "It looks like you're using a browser we don't support."
},
@@ -203,10 +213,16 @@
"microphonePermission": "Error obtaining microphone permission"
},
"deviceSelection": {
"hid": {
"callControl": "Call control",
"connectedDevices": "Connected devices:",
"deleteDevice": "Delete device",
"pairDevice": "Pair device"
},
"noPermission": "Permission not granted",
"previewUnavailable": "Preview unavailable",
"selectADevice": "Select a device",
"testAudio": "Play a test sound"
"testAudio": "Test"
},
"dialIn": {
"screenTitle": "Dial-in summary"
@@ -226,7 +242,9 @@
"WaitingForHostTitle": "Waiting for the host ...",
"Yes": "Yes",
"accessibilityLabel": {
"liveStreaming": "Live Stream"
"close": "Close dialog",
"liveStreaming": "Live Stream",
"sharingTabs": "Sharing options"
},
"add": "Add",
"addMeetingNote": "Add a note about this meeting",
@@ -438,6 +456,11 @@
"veryBad": "Very Bad",
"veryGood": "Very Good"
},
"filmstrip": {
"accessibilityLabel": {
"heading": "Video thumbnails"
}
},
"giphy": {
"noResults": "No results found :(",
"search": "Search GIPHY"
@@ -654,6 +677,7 @@
"dataChannelClosedDescription": "The bridge channel has been disconnected and thus video quality is limited to its lowest setting.",
"disconnected": "disconnected",
"displayNotifications": "Display notifications for",
"dontRemindMe": "Do not remind me",
"focus": "Conference focus",
"focusFail": "{{component}} not available - retry in {{ms}} sec",
"gifsMenu": "GIPHY",
@@ -662,6 +686,7 @@
"invitedOneMember": "{{name}} has been invited",
"invitedThreePlusMembers": "{{name}} and {{count}} others have been invited",
"invitedTwoMembers": "{{first}} and {{second}} have been invited",
"joinMeeting": "Join",
"kickParticipant": "{{kicked}} was kicked by {{kicker}}",
"leftOneMember": "{{name}} left the meeting",
"leftThreePlusMembers": "{{name}} and many others left the meeting",
@@ -751,6 +776,7 @@
"headings": {
"lobby": "Lobby ({{count}})",
"participantsList": "Meeting participants ({{count}})",
"visitors": "Visitors ({{count}})",
"waitingLobby": "Waiting in lobby ({{count}})"
},
"search": "Search participants",
@@ -758,6 +784,7 @@
},
"passwordDigitsOnly": "Up to {{number}} digits",
"passwordSetRemotely": "Set by another participant",
"pinParticipant": "{{participantName}} - Pin",
"pinnedParticipant": "The participant is pinned",
"polls": {
"answer": {
@@ -865,9 +892,9 @@
},
"profile": {
"avatar": "avatar",
"setDisplayNameLabel": "Set your display name",
"setDisplayNameLabel": "Name",
"setEmailInput": "Enter email",
"setEmailLabel": "Set your gravatar email",
"setEmailLabel": "Gravatar email",
"title": "Profile"
},
"raisedHand": "Would like to speak",
@@ -950,6 +977,7 @@
"title": "Security Options"
},
"settings": {
"audio": "Audio",
"buttonLabel": "Settings",
"calendar": {
"about": "The {{appName}} calendar integration is used to securely access your calendar so it can read upcoming events.",
@@ -970,9 +998,11 @@
"maxStageParticipants": "Maximum number of participants who can be pinned to the main stage (EXPERIMENTAL)",
"microphones": "Microphones",
"moderator": "Moderator",
"more": "More",
"moderatorOptions": "Moderator options",
"more": "General",
"name": "Name",
"noDevice": "None",
"notifications": "Notifications",
"participantJoined": "Participant Joined",
"participantKnocking": "Participant entered lobby",
"participantLeft": "Participant Left",
@@ -983,13 +1013,14 @@
"selectCamera": "Camera",
"selectMic": "Microphone",
"selfView": "Self view",
"sounds": "Sounds",
"shortcuts": "Shortcuts",
"speakers": "Speakers",
"startAudioMuted": "Everyone starts muted",
"startReactionsMuted": "Mute reaction sounds for everyone",
"startVideoMuted": "Everyone starts hidden",
"talkWhileMuted": "Talk while muted",
"title": "Settings"
"title": "Settings",
"video": "Video"
},
"settingsView": {
"advanced": "Advanced",
@@ -1070,18 +1101,29 @@
"cc": "Toggle subtitles",
"chat": "Open / Close chat",
"clap": "Clap",
"closeChat": "Close chat",
"closeMoreActions": "Close more actions menu",
"closeParticipantsPane": "Close participants pane",
"collapse": "Collapse",
"document": "Toggle shared document",
"documentClose": "Close shared document",
"documentOpen": "Open shared document",
"download": "Download our apps",
"embedMeeting": "Embed meeting",
"endConference": "End meeting for all",
"enterFullScreen": "View full screen",
"enterTileView": "Enter tile view",
"exitFullScreen": "Exit full screen",
"exitTileView": "Exit tile view",
"expand": "Expand",
"feedback": "Leave feedback",
"fullScreen": "Toggle full screen",
"giphy": "Toggle GIPHY menu",
"grantModerator": "Grant Moderator Rights",
"hangup": "Leave the meeting",
"heading": "Toolbar",
"help": "Help",
"hideWhiteboard": "Hide whiteboard",
"invite": "Invite people",
"kick": "Kick participant",
"laugh": "Laugh",
@@ -1091,21 +1133,23 @@
"lobbyButton": "Enable/disable lobby mode",
"localRecording": "Toggle local recording controls",
"lockRoom": "Toggle meeting password",
"lowerHand": "Lower your hand",
"moreActions": "More actions",
"moreActionsMenu": "More actions menu",
"moreOptions": "Show more options",
"mute": "Mute / Unmute",
"mute": "Mute",
"muteEveryone": "Mute everyone",
"muteEveryoneElse": "Mute everyone else",
"muteEveryoneElsesVideoStream": "Stop everyone else's video",
"muteEveryonesVideoStream": "Stop everyone's video",
"noiseSuppression": "Noise suppression",
"participants": "Participants",
"openChat": "Open chat",
"participants": "Open participants pane",
"pip": "Toggle Picture-in-Picture mode",
"privateMessage": "Send private message",
"profile": "Edit your profile",
"raiseHand": "Raise / Lower your hand",
"reactionsMenu": "Open / Close reactions menu",
"raiseHand": "Raise your hand",
"reactionsMenu": "Reactions menu",
"recording": "Toggle recording",
"remoteMute": "Mute participant",
"remoteVideoMute": "Disable camera of participant",
@@ -1113,20 +1157,24 @@
"selectBackground": "Select Background",
"selfView": "Toggle self view",
"shareRoom": "Invite someone",
"shareYourScreen": "Start / Stop sharing your screen",
"shareYourScreen": "Start sharing your screen",
"shareaudio": "Share audio",
"sharedvideo": "Toggle video sharing",
"sharedvideo": "Share video",
"shortcuts": "Toggle shortcuts",
"show": "Show on stage",
"showWhiteboard": "Show whiteboard",
"silence": "Silence",
"speakerStats": "Toggle participants statistics",
"stopScreenSharing": "Stop sharing your screen",
"stopSharedVideo": "Stop video",
"surprised": "Surprised",
"tileView": "Toggle tile view",
"toggleCamera": "Toggle camera",
"toggleFilmstrip": "Toggle filmstrip",
"unmute": "Unmute",
"videoblur": "Toggle video blur",
"videomute": "Start / Stop camera",
"whiteboard": "Show / Hide whiteboard"
"videomute": "Stop camera",
"videounmute": "Start camera"
},
"addPeople": "Add people to your call",
"audioOnlyOff": "Disable low bandwidth mode",
@@ -1139,6 +1187,7 @@
"chat": "Open / Close chat",
"clap": "Clap",
"closeChat": "Close chat",
"closeParticipantsPane": "Close participants pane",
"closeReactionsMenu": "Close reactions menu",
"disableNoiseSuppression": "Disable noise suppression",
"disableReactionSounds": "You can disable reaction sounds for this meeting",
@@ -1147,6 +1196,7 @@
"download": "Download our apps",
"e2ee": "End-to-End Encryption",
"embedMeeting": "Embed meeting",
"enableNoiseSuppression": "Enable noise suppression",
"endConference": "End meeting for all",
"enterFullScreen": "View full screen",
"enterTileView": "Enter tile view",
@@ -1171,7 +1221,7 @@
"lowerYourHand": "Lower your hand",
"moreActions": "More actions",
"moreOptions": "More options",
"mute": "Mute / Unmute",
"mute": "Mute",
"muteEveryone": "Mute everyone",
"muteEveryonesVideo": "Disable everyone's camera",
"noAudioSignalDesc": "If you did not purposely mute it from system settings or hardware, consider switching the device.",
@@ -1188,7 +1238,7 @@
"pip": "Enter Picture-in-Picture mode",
"privateMessage": "Send private message",
"profile": "Edit your profile",
"raiseHand": "Raise / Lower your hand",
"raiseHand": "Raise your hand",
"raiseYourHand": "Raise your hand",
"reactionBoo": "Send boo reaction",
"reactionClap": "Send clap reaction",
@@ -1215,8 +1265,10 @@
"talkWhileMutedPopup": "Trying to speak? You are muted.",
"tileViewToggle": "Toggle tile view",
"toggleCamera": "Toggle camera",
"unmute": "Unmute",
"videoSettings": "Video settings",
"videomute": "Start / Stop camera"
"videomute": "Stop camera",
"videounmute": "Start camera"
},
"transcribing": {
"ccButtonTooltip": "Start / Stop subtitles",
@@ -1234,6 +1286,7 @@
"subtitlesOff": "Off",
"tr": "TR"
},
"unpinParticipant": "{{participantName}} - Unpin",
"userMedia": {
"androidGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
"chromeGrantPermissions": "Select <b><i>Allow</i></b> when your browser asks for permissions.",
@@ -1272,9 +1325,11 @@
"ldTooltip": "Viewing low definition video",
"lowDefinition": "Low definition",
"performanceSettings": "Performance settings",
"recording": "Recording in progress",
"sd": "SD",
"sdTooltip": "Viewing standard definition video",
"standardDefinition": "Standard definition"
"standardDefinition": "Standard definition",
"streaming": "Streaming in progress"
},
"videothumbnail": {
"connectionInfo": "Connection Info",
@@ -1286,6 +1341,7 @@
"grantModerator": "Grant Moderator Rights",
"hideSelfView": "Hide self view",
"kick": "Kick out",
"mirrorVideo": "Mirror my video",
"moderator": "Moderator",
"mute": "Participant is muted",
"muted": "Muted",
@@ -1317,12 +1373,20 @@
"none": "None",
"pleaseWait": "Please wait...",
"removeBackground": "Remove background",
"slightBlur": "Slight Blur",
"slightBlur": "Half Blur",
"title": "Virtual backgrounds",
"uploadedImage": "Uploaded image {{index}}",
"webAssemblyWarning": "WebAssembly not supported",
"webAssemblyWarningDescription": "WebAssembly disabled or not supported by this browser"
},
"visitors": {
"chatIndicator": "(visitor)",
"labelTooltip": "Number of visitors: {{count}}",
"notification": {
"description": "To participate raise your hand",
"title": "You are a visitor in the meeting"
}
},
"volumeSlider": "Volume slider",
"welcomepage": {
"accessibilityLabel": {
@@ -1355,6 +1419,7 @@
"microsoftLogo": "Microsoft logo",
"policyLogo": "Policy logo"
},
"meetingsAccessibilityLabel": "Meetings",
"mobileDownLoadLinkAndroid": "Download mobile app for Android",
"mobileDownLoadLinkFDroid": "Download mobile app for F-Droid",
"mobileDownLoadLinkIos": "Download mobile app for iOS",
@@ -1374,5 +1439,10 @@
"terms": "Terms",
"title": "Secure, fully featured, and completely free video conferencing",
"upcomingMeetings": "Your upcoming meetings"
},
"whiteboard": {
"accessibilityLabel": {
"heading": "Whiteboard"
}
}
}

View File

@@ -10,7 +10,7 @@ The translation of Jitsi Meet is handled editing manually the language files.
You can use the `update-translation.js` script as follows to help you with that:
```js
```sh
cd lang
node update-translation.js main-es.json
```
@@ -29,7 +29,7 @@ You can add translatable text in the HTML:
* **via attribute on HTML element** - add **data-i18n** attribute with value the key of the translatable text.
```
```html
<span data-i18n="dialog.OK">OK</span>
```
@@ -37,7 +37,7 @@ You can add translatable text in the HTML:
You can also use APP.translation.generateTranslationHTML(key, options) to get this HTML code as Javascript string.
```
```js
APP.translation.generateTranslationHTML("dialog.OK") // returns <span data-i18n="dialog.OK">OK</span>
```
@@ -46,7 +46,7 @@ You can add translatable text in the HTML:
**Note:** If you dynamically add HTML elements don't forget to call APP.translation.translateElement(jquery_selector) to translate the text initially.
```
```js
APP.translation.translateString("dialog.OK") // returns the value for the key of the current language file. "OK" for example.
```

View File

@@ -2,10 +2,8 @@
import Logger from '@jitsi/logger';
import {
createApiEvent,
sendAnalytics
} from '../../react/features/analytics';
import { createApiEvent } from '../../react/features/analytics/AnalyticsEvents';
import { sendAnalytics } from '../../react/features/analytics/functions';
import {
approveParticipantAudio,
approveParticipantVideo,
@@ -19,37 +17,41 @@ import {
import { isEnabledFromState } from '../../react/features/av-moderation/functions';
import {
endConference,
getCurrentConference,
sendTones,
setFollowMe,
setLocalSubject,
setPassword,
setSubject
} from '../../react/features/base/conference';
import { getWhitelistedJSON, overwriteConfig } from '../../react/features/base/config';
} from '../../react/features/base/conference/actions';
import { getCurrentConference } from '../../react/features/base/conference/functions';
import { overwriteConfig } from '../../react/features/base/config/actions';
import { getWhitelistedJSON } from '../../react/features/base/config/functions.any';
import { toggleDialog } from '../../react/features/base/dialog/actions';
import { isSupportedBrowser } from '../../react/features/base/environment';
import { parseJWTFromURLParams } from '../../react/features/base/jwt';
import { isSupportedBrowser } from '../../react/features/base/environment/environment';
import { parseJWTFromURLParams } from '../../react/features/base/jwt/functions';
import JitsiMeetJS, { JitsiRecordingConstants } from '../../react/features/base/lib-jitsi-meet';
import { MEDIA_TYPE, VIDEO_TYPE } from '../../react/features/base/media';
import { MEDIA_TYPE, VIDEO_TYPE } from '../../react/features/base/media/constants';
import {
LOCAL_PARTICIPANT_DEFAULT_ID,
getLocalParticipant,
getParticipantById,
getScreenshareParticipantIds,
getVirtualScreenshareParticipantByOwnerId,
grantModerator,
hasRaisedHand,
isLocalParticipantModerator,
isParticipantModerator,
kickParticipant,
overwriteParticipantsNames,
pinParticipant,
raiseHand
} from '../../react/features/base/participants';
import { updateSettings } from '../../react/features/base/settings';
} from '../../react/features/base/participants/actions';
import { LOCAL_PARTICIPANT_DEFAULT_ID } from '../../react/features/base/participants/constants';
import {
getLocalParticipant,
getParticipantById,
getScreenshareParticipantIds,
getVirtualScreenshareParticipantByOwnerId,
hasRaisedHand,
isLocalParticipantModerator,
isParticipantModerator
} from '../../react/features/base/participants/functions';
import { updateSettings } from '../../react/features/base/settings/actions';
import { getDisplayName } from '../../react/features/base/settings/functions.web';
import { isToggleCameraEnabled, toggleCamera } from '../../react/features/base/tracks';
import { toggleCamera } from '../../react/features/base/tracks/actions.any';
import { isToggleCameraEnabled } from '../../react/features/base/tracks/functions';
import {
autoAssignToBreakoutRooms,
closeBreakoutRoom,
@@ -68,12 +70,17 @@ import { openChat } from '../../react/features/chat/actions.web';
import {
processExternalDeviceRequest
} from '../../react/features/device-selection/functions';
import { appendSuffix } from '../../react/features/display-name';
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox';
import { appendSuffix } from '../../react/features/display-name/functions';
import { isEnabled as isDropboxEnabled } from '../../react/features/dropbox/functions';
import { setMediaEncryptionKey, toggleE2EE } from '../../react/features/e2ee/actions';
import { addStageParticipant, resizeFilmStrip, setVolume } from '../../react/features/filmstrip/actions.web';
import { isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web';
import { invite } from '../../react/features/invite';
import {
addStageParticipant,
resizeFilmStrip,
setVolume,
togglePinStageParticipant
} from '../../react/features/filmstrip/actions.web';
import { getPinnedActiveParticipants, isStageFilmstripAvailable } from '../../react/features/filmstrip/functions.web';
import { invite } from '../../react/features/invite/actions.any';
import {
selectParticipantInLargeVideo
} from '../../react/features/large-video/actions.any';
@@ -83,32 +90,29 @@ import {
} from '../../react/features/large-video/actions.web';
import { answerKnockingParticipant, toggleLobbyMode } from '../../react/features/lobby/actions';
import { setNoiseSuppressionEnabled } from '../../react/features/noise-suppression/actions';
import {
NOTIFICATION_TIMEOUT_TYPE,
NOTIFICATION_TYPE,
hideNotification,
showNotification
} from '../../react/features/notifications';
import { hideNotification, showNotification } from '../../react/features/notifications/actions';
import { NOTIFICATION_TIMEOUT_TYPE, NOTIFICATION_TYPE } from '../../react/features/notifications/constants';
import {
close as closeParticipantsPane,
open as openParticipantsPane
} from '../../react/features/participants-pane/actions';
import { getParticipantsPaneOpen, isForceMuted } from '../../react/features/participants-pane/functions';
import { startLocalVideoRecording, stopLocalVideoRecording } from '../../react/features/recording';
import { startLocalVideoRecording, stopLocalVideoRecording } from '../../react/features/recording/actions.any';
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';
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture';
import { toggleScreenshotCaptureSummary } from '../../react/features/screenshot-capture/actions';
import { isScreenshotCaptureEnabled } from '../../react/features/screenshot-capture/functions';
import SettingsDialog from '../../react/features/settings/components/web/SettingsDialog';
import { SETTINGS_TABS } from '../../react/features/settings/constants';
import { playSharedVideo, stopSharedVideo } from '../../react/features/shared-video/actions.any';
import { extractYoutubeIdOrURL } from '../../react/features/shared-video/functions';
import { setRequestingSubtitles, toggleRequestingSubtitles } from '../../react/features/subtitles/actions';
import { isAudioMuteButtonDisabled } from '../../react/features/toolbox/functions';
import { setTileView, toggleTileView } from '../../react/features/video-layout';
import { setTileView, toggleTileView } from '../../react/features/video-layout/actions.any';
import { muteAllParticipants } from '../../react/features/video-menu/actions';
import { setVideoQuality } from '../../react/features/video-quality';
import VirtualBackgroundDialog from '../../react/features/virtual-background/components/VirtualBackgroundDialog';
import { setVideoQuality } from '../../react/features/video-quality/actions';
import { getJitsiMeetTransport } from '../transport';
import { API_ID, ENDPOINT_TEXT_MESSAGE_NAME } from './constants';
@@ -241,6 +245,22 @@ function initCommands() {
logger.debug('Pin participant command received');
const state = APP.store.getState();
// if id not provided, unpin everybody.
if (!id) {
if (isStageFilmstripAvailable(state)) {
const pinnedParticipants = getPinnedActiveParticipants(state);
pinnedParticipants?.forEach(p => {
APP.store.dispatch(togglePinStageParticipant(p.participantId));
});
} else {
APP.store.dispatch(pinParticipant());
}
return;
}
const participant = videoType === VIDEO_TYPE.DESKTOP
? getVirtualScreenshareParticipantByOwnerId(state, id) : getParticipantById(state, id);
@@ -254,7 +274,7 @@ function initCommands() {
const participantId = participant.id;
if (isStageFilmstripAvailable(APP.store.getState())) {
if (isStageFilmstripAvailable(state)) {
APP.store.dispatch(addStageParticipant(participantId, true));
} else {
APP.store.dispatch(pinParticipant(participantId));
@@ -777,7 +797,8 @@ function initCommands() {
APP.store.dispatch(overwriteConfig(whitelistedConfig));
},
'toggle-virtual-background': () => {
APP.store.dispatch(toggleDialog(VirtualBackgroundDialog));
APP.store.dispatch(toggleDialog(SettingsDialog, {
defaultTab: SETTINGS_TABS.VIRTUAL_BACKGROUND }));
},
'end-conference': () => {
APP.store.dispatch(endConference());
@@ -1208,6 +1229,22 @@ class API {
});
}
/**
* Notify the external app that a notification has been triggered.
*
* @param {string} title - The notification title.
* @param {string} description - The notification description.
*
* @returns {void}
*/
notifyNotificationTriggered(title: string, description: string) {
this._sendEvent({
description,
name: 'notification-triggered',
title
});
}
/**
* Notify external application that the video quality setting has changed.
*

View File

@@ -127,6 +127,7 @@ const events = {
'mouse-enter': 'mouseEnter',
'mouse-leave': 'mouseLeave',
'mouse-move': 'mouseMove',
'notification-triggered': 'notificationTriggered',
'outgoing-message': 'outgoingMessage',
'participant-joined': 'participantJoined',
'participant-kicked-out': 'participantKickedOut',
@@ -388,11 +389,18 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
const frameName = `jitsiConferenceFrame${id}`;
this._frame = document.createElement('iframe');
this._frame.allow = 'camera; microphone; display-capture; autoplay; clipboard-write';
this._frame.allow = 'camera; microphone; display-capture; autoplay; clipboard-write; hid';
this._frame.name = frameName;
this._frame.id = frameName;
this._setSize(height, width);
this._frame.sandbox = 'allow-scripts allow-same-origin allow-popups allow-forms allow-downloads';
this._frame.sandbox = [
'allow-scripts',
'allow-same-origin',
'allow-popups',
'allow-forms',
'allow-downloads',
'allow-top-navigation-by-user-activation'
].join(' ');
this._frame.setAttribute('allowFullScreen', 'true');
this._frame.style.border = 0;
@@ -401,10 +409,9 @@ export default class JitsiMeetExternalAPI extends EventEmitter {
// and fires event when it is done
this._frame.onload = onload;
}
this._frame.src = this._url;
this._frame = this._parentNode.appendChild(this._frame);
this._frame.src = this._url;
}
/**

View File

@@ -5,18 +5,17 @@ const UI = {};
import Logger from '@jitsi/logger';
import EventEmitter from 'events';
import $ from 'jquery';
import { isMobileBrowser } from '../../react/features/base/environment/utils';
import { setColorAlpha } from '../../react/features/base/util';
import { setDocumentUrl } from '../../react/features/etherpad';
import { setFilmstripVisible } from '../../react/features/filmstrip';
import { setColorAlpha } from '../../react/features/base/util/helpers';
import { setDocumentUrl } from '../../react/features/etherpad/actions';
import { setFilmstripVisible } from '../../react/features/filmstrip/actions.any';
import {
NOTIFICATION_TIMEOUT_TYPE,
joinLeaveNotificationsDisabled,
setNotificationsEnabled,
showNotification
} from '../../react/features/notifications';
} from '../../react/features/notifications/actions';
import { NOTIFICATION_TIMEOUT_TYPE } from '../../react/features/notifications/constants';
import {
dockToolbox,
setToolboxEnabled,
@@ -106,16 +105,16 @@ UI.start = function() {
VideoLayout.resizeVideoArea();
if (isMobileBrowser()) {
$('body').addClass('mobile-browser');
document.body.classList.add('mobile-browser');
} else {
$('body').addClass('desktop-browser');
document.body.classList.add('desktop-browser');
}
if (config.backgroundAlpha !== undefined) {
const backgroundColor = $('body').css('background-color');
const backgroundColor = getComputedStyle(document.body).getPropertyValue('background-color');
const alphaColor = setColorAlpha(backgroundColor, config.backgroundAlpha);
$('body').css('background-color', alphaColor);
document.body.style.backgroundColor = alphaColor;
}
if (config.iAmRecorder) {
@@ -134,33 +133,34 @@ UI.start = function() {
UI.registerListeners
= () => UIListeners.forEach((value, key) => UI.addListener(key, value));
/**
*
*/
function onResize() {
VideoLayout.onResize();
}
/**
* Setup some DOM event listeners.
*/
UI.bindEvents = () => {
/**
*
*/
function onResize() {
VideoLayout.onResize();
}
// Resize and reposition videos in full screen mode.
$(document).on(
'webkitfullscreenchange mozfullscreenchange fullscreenchange',
onResize);
document.addEventListener('webkitfullscreenchange', onResize);
document.addEventListener('mozfullscreenchange', onResize);
document.addEventListener('fullscreenchange', onResize);
$(window).resize(onResize);
window.addEventListener('resize', onResize);
};
/**
* Unbind some DOM event listeners.
*/
UI.unbindEvents = () => {
$(document).off(
'webkitfullscreenchange mozfullscreenchange fullscreenchange');
document.removeEventListener('webkitfullscreenchange', onResize);
document.removeEventListener('mozfullscreenchange', onResize);
document.removeEventListener('fullscreenchange', onResize);
$(window).off('resize');
window.removeEventListener('resize', onResize);
};
/**
@@ -292,17 +292,6 @@ UI.showToolbar = timeout => APP.store.dispatch(showToolbox(timeout));
// Used by torture.
UI.dockToolbar = dock => APP.store.dispatch(dockToolbox(dock));
/**
* Updates the displayed avatar for participant.
*
* @param {string} id - User id whose avatar should be updated.
* @param {string} avatarURL - The URL to avatar image to display.
* @returns {void}
*/
UI.refreshAvatarDisplay = function(id) {
VideoLayout.changeUserAvatar(id);
};
/**
* Notify user that connection failed.
* @param {string} stropheErrorMsg raw Strophe error message

View File

@@ -15,8 +15,8 @@ import {
isTokenAuthEnabled
} from '../../../react/features/authentication/functions';
import { getReplaceParticipant } from '../../../react/features/base/config/functions';
import { isDialogOpen } from '../../../react/features/base/dialog';
import { setJWT } from '../../../react/features/base/jwt';
import { isDialogOpen } from '../../../react/features/base/dialog/functions';
import { setJWT } from '../../../react/features/base/jwt/actions';
import UIUtil from '../util/UIUtil';
import ExternalLoginDialog from './LoginDialog';

View File

@@ -2,7 +2,8 @@
import $ from 'jquery';
import { getSharedDocumentUrl, setDocumentEditingState } from '../../../react/features/etherpad';
import { setDocumentEditingState } from '../../../react/features/etherpad/actions';
import { getSharedDocumentUrl } from '../../../react/features/etherpad/functions';
import { getToolboxHeight } from '../../../react/features/toolbox/functions.web';
import Filmstrip from '../videolayout/Filmstrip';
import LargeContainer from '../videolayout/LargeContainer';

View File

@@ -1,10 +1,7 @@
/* global APP */
import {
NOTIFICATION_TIMEOUT_TYPE,
showErrorNotification,
showWarningNotification
} from '../../../react/features/notifications';
import { showErrorNotification, showWarningNotification } from '../../../react/features/notifications/actions';
import { NOTIFICATION_TIMEOUT_TYPE } from '../../../react/features/notifications/constants';
const messageHandler = {
/**

View File

@@ -1,8 +1,9 @@
/* global APP, interfaceConfig */
import $ from 'jquery';
import { getVerticalFilmstripVisibleAreaWidth, isFilmstripVisible } from '../../../react/features/filmstrip';
import {
getVerticalFilmstripVisibleAreaWidth,
isFilmstripVisible
} from '../../../react/features/filmstrip/functions';
const Filmstrip = {
/**
@@ -14,16 +15,16 @@ const Filmstrip = {
// horizontal film strip mode for calculating how tall large video
// display should be.
if (isFilmstripVisible(APP.store) && !interfaceConfig.VERTICAL_FILMSTRIP) {
return $('.filmstrip').outerHeight();
return document.querySelector('.filmstrip').offsetHeight;
}
return 0;
},
/**
* Returns the width of the vertical filmstip if the filmstrip is visible and 0 otherwise.
* Returns the width of the vertical filmstrip if the filmstrip is visible and 0 otherwise.
*
* @returns {number} - The width of the vertical filmstip if the filmstrip is visible and 0 otherwise.
* @returns {number} - The width of the vertical filmstrip if the filmstrip is visible and 0 otherwise.
*/
getVerticalFilmstripWidth() {
return isFilmstripVisible(APP.store) ? getVerticalFilmstripVisibleAreaWidth() : 0;

View File

@@ -7,25 +7,24 @@ import ReactDOM from 'react-dom';
import { I18nextProvider } from 'react-i18next';
import { Provider } from 'react-redux';
import { createScreenSharingIssueEvent, sendAnalytics } from '../../../react/features/analytics';
import { Avatar } from '../../../react/features/base/avatar';
import { createScreenSharingIssueEvent } from '../../../react/features/analytics/AnalyticsEvents';
import { sendAnalytics } from '../../../react/features/analytics/functions';
import Avatar from '../../../react/features/base/avatar/components/Avatar';
import theme from '../../../react/features/base/components/themes/participantsPaneTheme.json';
import { i18next } from '../../../react/features/base/i18n';
import i18next from '../../../react/features/base/i18n/i18next';
import { JitsiTrackEvents } from '../../../react/features/base/lib-jitsi-meet';
import { VIDEO_TYPE } from '../../../react/features/base/media';
import { VIDEO_TYPE } from '../../../react/features/base/media/constants';
import {
getLocalParticipant,
getParticipantById,
getParticipantDisplayName,
isLocalScreenshareParticipant,
isScreenShareParticipant
} from '../../../react/features/base/participants';
} from '../../../react/features/base/participants/functions';
import { getHideSelfView } from '../../../react/features/base/settings/functions.any';
import {
getVideoTrackByParticipant,
trackStreamingStatusChanged
} from '../../../react/features/base/tracks';
import { CHAT_SIZE } from '../../../react/features/chat';
import { trackStreamingStatusChanged } from '../../../react/features/base/tracks/actions.any';
import { getVideoTrackByParticipant } from '../../../react/features/base/tracks/functions.any';
import { CHAT_SIZE } from '../../../react/features/chat/constants';
import {
isTrackStreamingStatusActive,
isTrackStreamingStatusInactive,
@@ -37,8 +36,8 @@ import {
updateKnownLargeVideoResolution
} from '../../../react/features/large-video/actions';
import { getParticipantsPaneOpen } from '../../../react/features/participants-pane/functions';
import { PresenceLabel } from '../../../react/features/presence-status';
import { shouldDisplayTileView } from '../../../react/features/video-layout';
import PresenceLabel from '../../../react/features/presence-status/components/PresenceLabel';
import { shouldDisplayTileView } from '../../../react/features/video-layout/functions.any';
/* eslint-enable no-unused-vars */
import { createDeferred } from '../../util/helpers';
import AudioLevels from '../audio_levels/AudioLevels';
@@ -128,16 +127,12 @@ export default class LargeVideoManager {
*/
this.videoTrack = undefined;
this.$container = $('#largeVideoContainer');
this.container = document.getElementById('largeVideoContainer');
this.$container.css({
display: 'inline-block'
});
this.container.style.display = 'inline-block';
this.$container.hover(
e => this.onHoverIn(e),
e => this.onHoverOut(e)
);
this.container.addEventListener('mouseenter', e => this.onHoverIn(e));
this.container.addEventListener('mouseleave', e => this.onHoverOut(e));
// Bind event handler so it is only bound once for every instance.
this._onVideoResolutionUpdate
@@ -172,7 +167,7 @@ export default class LargeVideoManager {
ReactDOM.unmountComponentAtNode(this._dominantSpeakerAvatarContainer);
this.$container.css({ display: 'none' });
this.container.style.display = 'none';
}
/**
@@ -540,8 +535,8 @@ export default class LargeVideoManager {
* @returns {void}
*/
updatePresenceLabel(id) {
const isConnectionMessageVisible
= $('#remoteConnectionMessage').is(':visible');
const isConnectionMessageVisible = getComputedStyle(
document.getElementById('remoteConnectionMessage')).display !== 'none';
if (isConnectionMessageVisible) {
this.removePresenceLabel();
@@ -549,9 +544,9 @@ export default class LargeVideoManager {
return;
}
const presenceLabelContainer = $('#remotePresenceMessage');
const presenceLabelContainer = document.getElementById('remotePresenceMessage');
if (presenceLabelContainer.length) {
if (presenceLabelContainer) {
ReactDOM.render(
<Provider store = { APP.store }>
<I18nextProvider i18n = { i18next }>
@@ -560,7 +555,7 @@ export default class LargeVideoManager {
className = 'presence-label' />
</I18nextProvider>
</Provider>,
presenceLabelContainer.get(0));
presenceLabelContainer);
}
}
@@ -570,10 +565,10 @@ export default class LargeVideoManager {
* @returns {void}
*/
removePresenceLabel() {
const presenceLabelContainer = $('#remotePresenceMessage');
const presenceLabelContainer = document.getElementById('remotePresenceMessage');
if (presenceLabelContainer.length) {
ReactDOM.unmountComponentAtNode(presenceLabelContainer.get(0));
if (presenceLabelContainer) {
ReactDOM.unmountComponentAtNode(presenceLabelContainer);
}
}
@@ -582,7 +577,11 @@ export default class LargeVideoManager {
* @param {boolean} show
*/
showWatermark(show) {
$('.watermark').css('visibility', show ? 'visible' : 'hidden');
const watermark = document.querySelectorAll('.watermark');
watermark.forEach(el => {
el.style.visibility = show ? 'visible' : 'hidden';
});
}
/**
@@ -607,9 +606,9 @@ export default class LargeVideoManager {
}
if (show) {
$('#remoteConnectionMessage').css({ display: 'block' });
document.getElementById('remoteConnectionMessage').style.display = 'block';
} else {
$('#remoteConnectionMessage').hide();
document.getElementById('remoteConnectionMessage').style.display = 'none';
}
}

View File

@@ -6,11 +6,11 @@ import React from 'react';
import ReactDOM from 'react-dom';
import { browser } from '../../../react/features/base/lib-jitsi-meet';
import { isTestModeEnabled } from '../../../react/features/base/testing';
import { FILMSTRIP_BREAKPOINT } from '../../../react/features/filmstrip';
import { LargeVideoBackground, ORIENTATION, updateLastLargeVideoMediaEvent } from '../../../react/features/large-video';
import { FILMSTRIP_BREAKPOINT } from '../../../react/features/filmstrip/constants';
import { setLargeVideoDimensions } from '../../../react/features/large-video/actions.any';
import { LAYOUTS, getCurrentLayout } from '../../../react/features/video-layout';
import { LargeVideoBackground, ORIENTATION } from '../../../react/features/large-video/components/LargeVideoBackground';
import { LAYOUTS } from '../../../react/features/video-layout/constants';
import { getCurrentLayout } from '../../../react/features/video-layout/functions.any';
/* eslint-enable no-unused-vars */
import UIUtil from '../util/UIUtil';
@@ -20,17 +20,9 @@ import LargeContainer from './LargeContainer';
// FIXME should be 'video'
export const VIDEO_CONTAINER_TYPE = 'camera';
// Corresponds to animation duration from the animatedFadeIn and animatedFadeOut CSS classes.
const FADE_DURATION_MS = 300;
/**
* List of container events that we are going to process, will be added as listener to the
* container for every event in the list. The latest event will be stored in redux.
*/
const containerEvents = [
'abort', 'canplay', 'canplaythrough', 'emptied', 'ended', 'error', 'loadeddata', 'loadedmetadata', 'loadstart',
'pause', 'play', 'playing', 'ratechange', 'stalled', 'suspend', 'waiting'
];
/**
* Returns an array of the video dimensions, so that it keeps it's aspect
* ratio and fits available area with it's larger dimension. This method
@@ -185,8 +177,8 @@ export class VideoContainer extends LargeContainer {
/**
*
*/
get $video() {
return $('#largeVideo');
get video() {
return document.getElementById('largeVideo');
}
/**
@@ -233,26 +225,20 @@ export class VideoContainer extends LargeContainer {
* @type {boolean}
*/
this.avatarDisplayed = false;
this.$avatar = $('#dominantSpeaker');
this.avatar = document.getElementById('dominantSpeaker');
/**
* A jQuery selector of the remote connection message.
* @type {jQuery|HTMLElement}
* The HTMLElements of the remote connection message.
* @type {HTMLElement}
*/
this.$remoteConnectionMessage = $('#remoteConnectionMessage');
this.$remotePresenceMessage = $('#remotePresenceMessage');
this.remoteConnectionMessage = document.getElementById('remoteConnectionMessage');
this.remotePresenceMessage = document.getElementById('remotePresenceMessage');
this.$wrapper = $('#largeVideoWrapper');
/**
* FIXME: currently using parent() because I can't come up with name
* for id. We'll need to probably refactor the HTML related to the large
* video anyway.
*/
this.$wrapperParent = this.$wrapper.parent();
this.avatarHeight = $('#dominantSpeakerAvatarContainer').height();
this.$video[0].onplaying = function(event) {
this.wrapperParent = document.getElementById('largeVideoElementsContainer');
this.avatarHeight = document.getElementById('dominantSpeakerAvatarContainer').getBoundingClientRect().height;
this.video.onplaying = function(event) {
if (typeof resizeContainer === 'function') {
resizeContainer(event);
}
@@ -265,15 +251,7 @@ export class VideoContainer extends LargeContainer {
*/
this._resizeListeners = new Set();
this.$video[0].onresize = this._onResize.bind(this);
if (isTestModeEnabled(APP.store.getState())) {
const cb = name => APP.store.dispatch(updateLastLargeVideoMediaEvent(name));
containerEvents.forEach(event => {
this.$video[0].addEventListener(event, cb.bind(this, event));
});
}
this.video.onresize = this._onResize.bind(this);
}
/**
@@ -301,7 +279,7 @@ export class VideoContainer extends LargeContainer {
* @returns {{width, height}}
*/
getStreamSize() {
const video = this.$video[0];
const video = this.video;
return {
@@ -376,8 +354,8 @@ export class VideoContainer extends LargeContainer {
* @returns {void}
*/
positionRemoteStatusMessages() {
this._positionParticipantStatus(this.$remoteConnectionMessage);
this._positionParticipantStatus(this.$remotePresenceMessage);
this._positionParticipantStatus(this.remoteConnectionMessage);
this._positionParticipantStatus(this.remotePresenceMessage);
}
/**
@@ -387,18 +365,16 @@ export class VideoContainer extends LargeContainer {
* @private
* @returns {void}
*/
_positionParticipantStatus($element) {
_positionParticipantStatus(element) {
if (this.avatarDisplayed) {
const $avatarImage = $('#dominantSpeakerAvatarContainer');
const avatarImage = document.getElementById('dominantSpeakerAvatarContainer').getBoundingClientRect();
$element.css(
'top',
$avatarImage.offset().top + $avatarImage.height() + 10);
element.style.top = avatarImage.top + avatarImage.height + 10;
} else {
const height = $element.height();
const parentHeight = $element.parent().height();
const height = element.getBoundingClientRect().height;
const parentHeight = element.parentElement.getBoundingClientRect().height;
$element.css('top', (parentHeight / 2) - (height / 2));
element.style.top = (parentHeight / 2) - (height / 2);
}
}
@@ -408,7 +384,7 @@ export class VideoContainer extends LargeContainer {
resize(containerWidth, containerHeight, animate = false) {
// XXX Prevent TypeError: undefined is not an object when the Web
// browser does not support WebRTC (yet).
if (this.$video.length === 0) {
if (!this.video) {
return;
}
const state = APP.store.getState();
@@ -501,8 +477,8 @@ export class VideoContainer extends LargeContainer {
}
// detach old stream
if (this.stream && this.$video[0]) {
this.stream.detach(this.$video[0]);
if (this.stream && this.video) {
this.stream.detach(this.video);
}
this.stream = stream;
@@ -512,18 +488,16 @@ export class VideoContainer extends LargeContainer {
return;
}
if (this.$video[0]) {
stream.attach(this.$video[0]);
if (this.video) {
stream.attach(this.video);
// Ensure large video gets play() called on it when a new stream is attached to it. This is necessary in the
// case of Safari as autoplay doesn't kick-in automatically on Safari 15 and newer versions.
browser.isWebKitBased() && this.$video[0].play();
browser.isWebKitBased() && this.video.play();
const flipX = stream.isLocal() && this.localFlipX && !this.isScreenSharing();
this.$video.css({
transform: flipX ? 'scaleX(-1)' : 'none'
});
this.video.style.transform = flipX ? 'scaleX(-1)' : 'none';
this._updateBackground();
}
}
@@ -534,12 +508,10 @@ export class VideoContainer extends LargeContainer {
*/
setLocalFlipX(val) {
this.localFlipX = val;
if (!this.$video || !this.stream || !this.stream.isLocal()) {
if (!this.video || !this.stream || !this.stream.isLocal()) {
return;
}
this.$video.css({
transform: this.localFlipX ? 'scaleX(-1)' : 'none'
});
this.video.style.transform = this.localFlipX ? 'scaleX(-1)' : 'none';
this._updateBackground();
}
@@ -558,37 +530,30 @@ export class VideoContainer extends LargeContainer {
* @param {boolean} show
*/
showAvatar(show) {
this.$avatar.css('visibility', show ? 'visible' : 'hidden');
this.avatar.style.visibility = show ? 'visible' : 'hidden';
this.avatarDisplayed = show;
APP.API.notifyLargeVideoVisibilityChanged(show);
}
/**
* We are doing fadeOut/fadeIn animations on parent div which wraps
* largeVideo, because when Temasys plugin is in use it replaces
* <video> elements with plugin <object> tag. In Safari jQuery is
* unable to store values on this plugin object which breaks all
* animation effects performed on it directly.
*
* TODO: refactor this since Temasys is no longer supported.
* Show video container.
*/
show() {
return new Promise(resolve => {
this.$wrapperParent.css('visibility', 'visible').fadeTo(
FADE_DURATION_MS,
1,
() => {
this._isHidden = false;
this._updateBackground();
resolve();
}
);
this.wrapperParent.style.visibility = 'visible';
this.wrapperParent.classList.remove('animatedFadeOut');
this.wrapperParent.classList.add('animatedFadeIn');
setTimeout(() => {
this._isHidden = false;
this._updateBackground();
resolve();
}, FADE_DURATION_MS);
});
}
/**
*
* Hide video container.
*/
hide() {
// as the container is hidden/replaced by another container
@@ -596,12 +561,14 @@ export class VideoContainer extends LargeContainer {
this.showAvatar(false);
return new Promise(resolve => {
this.$wrapperParent.fadeTo(FADE_DURATION_MS, 0, () => {
this.$wrapperParent.css('visibility', 'hidden');
this.wrapperParent.classList.remove('animatedFadeIn');
this.wrapperParent.classList.add('animatedFadeOut');
setTimeout(() => {
this.wrapperParent.style.visibility = 'hidden';
this._isHidden = true;
this._updateBackground();
resolve();
});
}, FADE_DURATION_MS);
});
}
@@ -649,7 +616,7 @@ export class VideoContainer extends LargeContainer {
&& this.localFlipX
}
orientationFit = { this._backgroundOrientation }
videoElement = { this.$video && this.$video[0] }
videoElement = { this.video }
videoTrack = { this.stream } />,
document.getElementById('largeVideoBackgroundContainer')
);

View File

@@ -2,16 +2,16 @@
import Logger from '@jitsi/logger';
import { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media';
import { MEDIA_TYPE, VIDEO_TYPE } from '../../../react/features/base/media/constants';
import {
getParticipantById,
getPinnedParticipant,
isScreenShareParticipantById
} from '../../../react/features/base/participants';
} from '../../../react/features/base/participants/functions';
import {
getTrackByMediaTypeAndParticipant,
getVideoTrackByParticipant
} from '../../../react/features/base/tracks';
} from '../../../react/features/base/tracks/functions.any';
import LargeVideoManager from './LargeVideoManager';
import { VIDEO_CONTAINER_TYPE } from './VideoContainer';
@@ -139,12 +139,6 @@ const VideoLayout = {
}
},
changeUserAvatar(id, avatarUrl) {
if (this.isCurrentlyOnLarge(id)) {
largeVideo.updateAvatar(avatarUrl);
}
},
isLargeVideoVisible() {
return this.isLargeContainerTypeVisible(VIDEO_CONTAINER_TYPE);
},

View File

@@ -7,12 +7,12 @@ import {
import {
getAudioOutputDeviceId
} from '../../react/features/base/devices/functions.web';
import { updateSettings } from '../../react/features/base/settings/actions';
import {
getUserSelectedCameraDeviceId,
getUserSelectedMicDeviceId,
getUserSelectedOutputDeviceId,
updateSettings
} from '../../react/features/base/settings';
getUserSelectedOutputDeviceId
} from '../../react/features/base/settings/functions';
/**
* Determines if currently selected audio output device should be changed after

View File

@@ -5,13 +5,12 @@ import Logger from '@jitsi/logger';
import {
ACTION_SHORTCUT_PRESSED as PRESSED,
ACTION_SHORTCUT_RELEASED as RELEASED,
createShortcutEvent,
sendAnalytics
} from '../../react/features/analytics';
import { toggleDialog } from '../../react/features/base/dialog';
createShortcutEvent
} from '../../react/features/analytics/AnalyticsEvents';
import { sendAnalytics } from '../../react/features/analytics/functions';
import { clickOnVideo } from '../../react/features/filmstrip/actions';
import { KeyboardShortcutsDialog }
from '../../react/features/keyboard-shortcuts';
import { openSettingsDialog } from '../../react/features/settings/actions';
import { SETTINGS_TABS } from '../../react/features/settings/constants';
const logger = Logger.getLogger(__filename);
@@ -120,15 +119,17 @@ const KeyboardShortcut = {
return jitsiLocalStorage.getItem(_enableShortcutsKey) === 'false' ? false : true;
},
getShortcutsDescriptions() {
return _shortcutsHelp;
},
/**
* Opens the {@KeyboardShortcutsDialog} dialog.
* Opens the {@SettingsDialog} dialog on the Shortcuts page.
*
* @returns {void}
*/
openDialog() {
APP.store.dispatch(toggleDialog(KeyboardShortcutsDialog, {
shortcutDescriptions: _shortcutsHelp
}));
APP.store.dispatch(openSettingsDialog(SETTINGS_TABS.SHORTCUTS, false));
},
/**

View File

@@ -3,7 +3,7 @@
import $ from 'jquery';
import jqueryI18next from 'jquery-i18next';
import { i18next } from '../../react/features/base/i18n';
import i18next from '../../react/features/base/i18n/i18next';
type DocumentElement = {

View File

@@ -2,7 +2,7 @@
// files from API modules will be included in external_api.js.
import { PostMessageTransportBackend, Transport } from '@jitsi/js-utils/transport';
import { getJitsiMeetGlobalNS } from '../../react/features/base/util';
import { getJitsiMeetGlobalNS } from '../../react/features/base/util/helpers';
import { API_ID } from '../API/constants';

1245
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -16,16 +16,10 @@
"readmeFilename": "README.md",
"dependencies": {
"@amplitude/react-native": "2.7.0",
"@atlaskit/flag": "14.1.0",
"@atlaskit/icon": "21.2.0",
"@atlaskit/inline-dialog": "13.0.9",
"@atlaskit/inline-message": "11.0.8",
"@atlaskit/modal-dialog": "11.2.4",
"@atlaskit/multi-select": "15.0.5",
"@atlaskit/spinner": "15.0.6",
"@atlaskit/tabs": "12.1.2",
"@atlaskit/theme": "11.0.2",
"@atlaskit/tooltip": "17.1.2",
"@emotion/react": "11.10.0",
"@emotion/styled": "11.10.0",
"@giphy/js-fetch-api": "4.7.1",
@@ -57,6 +51,7 @@
"@types/amplitude-js": "8.16.2",
"@types/audioworklet": "0.0.29",
"@types/w3c-image-capture": "1.0.6",
"@types/w3c-web-hid": "1.0.3",
"@vladmandic/human": "2.6.5",
"@vladmandic/human-models": "2.5.9",
"@xmldom/xmldom": "0.7.9",
@@ -78,7 +73,7 @@
"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/v1578.0.0+5855ca72/lib-jitsi-meet.tgz",
"lib-jitsi-meet": "https://github.com/jitsi/lib-jitsi-meet/releases/download/v1615.0.0+a23a8c7c/lib-jitsi-meet.tgz",
"lodash": "4.17.21",
"moment": "2.29.4",
"moment-duration-format": "2.2.2",
@@ -92,7 +87,7 @@
"react-focus-lock": "2.5.1",
"react-i18next": "10.11.4",
"react-linkify": "1.0.0-alpha",
"react-native": "0.68.5",
"react-native": "0.68.6",
"react-native-background-timer": "2.4.1",
"react-native-calendar-events": "2.2.0",
"react-native-callstats": "3.73.7",
@@ -117,12 +112,11 @@
"react-native-url-polyfill": "1.3.0",
"react-native-video": "https://git@github.com/react-native-video/react-native-video#7c48ae7c8544b2b537fb60194e9620b9fcceae52",
"react-native-watch-connectivity": "1.0.11",
"react-native-webrtc": "106.0.5",
"react-native-webrtc": "106.0.7",
"react-native-webview": "11.15.1",
"react-native-youtube-iframe": "2.2.1",
"react-redux": "7.1.0",
"react-textarea-autosize": "8.3.0",
"react-transition-group": "2.4.0",
"react-window": "1.8.6",
"react-youtube": "10.1.0",
"redux": "4.0.4",
@@ -145,7 +139,6 @@
"@babel/preset-env": "7.16.0",
"@babel/preset-flow": "7.16.0",
"@babel/preset-react": "7.16.0",
"@babel/runtime": "7.16.0",
"@jitsi/eslint-config": "4.1.5",
"@types/js-md5": "0.4.3",
"@types/lodash": "4.14.182",
@@ -155,6 +148,7 @@
"@types/react-native": "0.68.9",
"@types/react-redux": "7.1.24",
"@types/react-window": "1.8.5",
"@types/resemblejs": "^4.1.0",
"@types/unorm": "1.3.28",
"@types/uuid": "8.3.4",
"@types/zxcvbn": "4.4.1",
@@ -165,20 +159,18 @@
"circular-dependency-plugin": "5.2.0",
"clean-css-cli": "4.3.0",
"css-loader": "3.6.0",
"eslint": "8.25.0",
"eslint": "8.35.0",
"eslint-plugin-flowtype": "8.0.3",
"eslint-plugin-import": "2.25.2",
"eslint-plugin-jsdoc": "37.0.3",
"eslint-plugin-react": "7.26.1",
"eslint-plugin-react-native": "3.11.0",
"eslint-plugin-typescript-sort-keys": "2.1.0",
"imports-loader": "0.7.1",
"jetifier": "1.6.4",
"metro-react-native-babel-preset": "0.67.0",
"patch-package": "6.4.7",
"process": "0.11.10",
"sass": "1.26.8",
"string-replace-loader": "3.0.3",
"style-loader": "3.3.1",
"traverse": "0.6.6",
"ts-loader": "9.4.1",

View File

@@ -199,7 +199,7 @@ export default class AlwaysOnTop extends Component<*, State> {
color = { getAvatarColor(displayName, customAvatarBackgrounds) }
id = 'avatar'
initials = { getInitials(displayName) }
url = { displayName ? null : avatarURL } />)
url = { avatarURL } />)
</div>
<div
className = 'displayname'

View File

@@ -4,7 +4,7 @@ import React, { Component } from 'react';
// We need to reference these files directly to avoid loading things that are not available
// in this environment (e.g. JitsiMeetJS or interfaceConfig)
import { IconMic, IconMicSlash } from '../base/icons';
import { IconMic, IconMicSlash } from '../base/icons/svg';
import type { Props } from '../base/toolbox/components/AbstractButton';
import ToolbarButton from './ToolbarButton';

View File

@@ -3,7 +3,7 @@ import React, { Component } from 'react';
// We need to reference these files directly to avoid loading things that are not available
// in this environment (e.g. JitsiMeetJS or interfaceConfig)
import { IconHangup } from '../base/icons';
import { IconHangup } from '../base/icons/svg';
import type { Props } from '../base/toolbox/components/AbstractButton';
import ToolbarButton from './ToolbarButton';

View File

@@ -1,6 +1,6 @@
import React, { useCallback } from 'react';
import { Icon } from '../base/icons';
import Icon from '../base/icons/components/Icon';
type Props = {

View File

@@ -3,7 +3,7 @@ import React, { Component } from 'react';
// We need to reference these files directly to avoid loading things that are not available
// in this environment (e.g. JitsiMeetJS or interfaceConfig)
import { IconVideo, IconVideoOff } from '../base/icons';
import { IconVideo, IconVideoOff } from '../base/icons/svg';
import type { Props } from '../base/toolbox/components/AbstractButton';
import ToolbarButton from './ToolbarButton';

View File

@@ -350,7 +350,7 @@ export function createOfferAnswerFailedEvent() {
* @returns {Object} The event in a format suitable for sending via
* sendAnalytics.
*/
export function createPageReloadScheduledEvent(reason: string, timeout: number, details: Object) {
export function createPageReloadScheduledEvent(reason: string, timeout: number, details: Object = {}) {
return {
action: 'page.reload.scheduled',
attributes: {
@@ -887,7 +887,7 @@ export function createVpaasConferenceJoinedEvent(tenant: string) {
* @returns {Object} The event in a format suitable for sending via
* sendAnalytics.
*/
export function createWelcomePageEvent(action: string, actionSubject: string, attributes = {}) {
export function createWelcomePageEvent(action: string, actionSubject?: string, attributes = {}) {
return {
action,
actionSubject,

View File

@@ -62,7 +62,7 @@ export function resetAnalytics() {
* @param {Store} store - The redux store in which the specified {@code action} is being dispatched.
* @returns {Promise} Resolves with the handlers that have been successfully loaded.
*/
export async function createHandlers({ getState }: { getState: Function; }) {
export async function createHandlers({ getState }: IStore) {
getJitsiMeetGlobalNS().analyticsHandlers = [];
if (!isAnalyticsEnabled(getState)) {
@@ -236,7 +236,7 @@ export function initAnalytics(store: IStore, handlers: Array<Object>) {
* loaded or the analytics is disabled.
*/
function _loadHandlers(scriptURLs: any[] = [], handlerConstructorOptions: Object) {
const promises = [];
const promises: Promise<{ error?: Error; type: string; url?: string; }>[] = [];
for (const url of scriptURLs) {
promises.push(
@@ -255,7 +255,7 @@ function _loadHandlers(scriptURLs: any[] = [], handlerConstructorOptions: Object
return Promise.all(promises).then(values => {
for (const el of values) {
if (el.type === 'error') { // @ts-ignore
if (el.type === 'error') {
logger.warn(`Failed to load ${el.url}: ${el.error}`);
}
}

View File

@@ -31,7 +31,7 @@ export default class AmplitudeHandler extends AbstractHandler {
};
if (navigator.product === 'ReactNative') {
amplitude.getInstance().init(amplitudeAPPKey); // @ts-ignore
amplitude.getInstance().init(amplitudeAPPKey);
fixDeviceID(amplitude.getInstance()).then(() => {
amplitude.getInstance().getDeviceId()
@@ -41,7 +41,7 @@ export default class AmplitudeHandler extends AbstractHandler {
});
});
} else {
const amplitudeOptions = {
const amplitudeOptions: any = {
includeReferrer: true,
onError
};

View File

@@ -1,9 +1,9 @@
/**
* Custom logic for setting the correct device id.
*
* @param {AmplitudeClient} amplitude - The amplitude instance.
* @param {AmplitudeClient} _amplitude - The amplitude instance.
* @returns {void}
*/
export function fixDeviceID(amplitude: any) { // eslint-disable-line @typescript-eslint/no-unused-vars
export function fixDeviceID(_amplitude: any): Promise<any> {
return new Promise(resolve => resolve(true));
}

View File

@@ -1,2 +0,0 @@
export { default as AmplitudeHandler } from './AmplitudeHandler';
export { default as MatomoHandler } from './MatomoHandler';

View File

@@ -1,2 +0,0 @@
export * from './AnalyticsEvents';
export * from './functions';

View File

@@ -30,12 +30,10 @@ import {
// @ts-ignore
import { screen } from '../mobile/navigation/routes';
import { clearNotifications } from '../notifications/actions';
// @ts-ignore
import { setFatalError } from '../overlay';
import { addTrackStateToURL, getDefaultURL } from './functions.native';
import logger from './logger';
import { IStore } from './types';
import { IReloadNowOptions, IStore } from './types';
export * from './actions.any';
@@ -46,9 +44,10 @@ export * from './actions.any';
* @param {string|undefined} uri - The URI to which to navigate. It may be a
* full URL with an HTTP(S) scheme, a full or partial URI with the app-specific
* scheme, or a mere room name.
* @param {Object} [options] - Options.
* @returns {Function}
*/
export function appNavigate(uri?: string) {
export function appNavigate(uri?: string, options: IReloadNowOptions = {}) {
logger.info(`appNavigate to ${uri}`);
return async (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
@@ -144,7 +143,10 @@ export function appNavigate(uri?: string) {
dispatch(createDesiredLocalTracks());
dispatch(clearNotifications());
if (isPrejoinPageEnabled(getState())) {
// @ts-ignore
const { hidePrejoin } = options;
if (!hidePrejoin && isPrejoinPageEnabled(getState())) {
navigateRoot(screen.preJoin);
} else {
dispatch(connect());
@@ -162,10 +164,10 @@ export function appNavigate(uri?: string) {
* If we have a close page enabled, redirect to it without
* showing any other dialog.
*
* @param {Object} options - Ignored.
* @param {Object} _options - Ignored.
* @returns {Function}
*/
export function maybeRedirectToWelcomePage(options: any) { // eslint-disable-line @typescript-eslint/no-unused-vars
export function maybeRedirectToWelcomePage(_options?: any): any {
// Dummy.
}
@@ -177,7 +179,6 @@ export function maybeRedirectToWelcomePage(options: any) { // eslint-disable-lin
*/
export function reloadNow() {
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
dispatch(setFatalError(undefined));
const state = getState();
const { locationURL } = state['features/base/connection'];
@@ -188,6 +189,8 @@ export function reloadNow() {
logger.info(`Reloading the conference using URL: ${locationURL}`);
dispatch(appNavigate(toURLString(newURL)));
dispatch(appNavigate(toURLString(newURL), {
hidePrejoin: true
}));
};
}

View File

@@ -20,7 +20,6 @@ import {
import { isVpaasMeeting } from '../jaas/functions';
import { clearNotifications, showNotification } from '../notifications/actions';
import { NOTIFICATION_TIMEOUT_TYPE } from '../notifications/constants';
import { setFatalError } from '../overlay/actions';
import { isWelcomePageEnabled } from '../welcome/functions';
import {
@@ -222,7 +221,6 @@ export function maybeRedirectToWelcomePage(options: { feedbackSubmitted?: boolea
*/
export function reloadNow() {
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
dispatch(setFatalError(undefined));
const state = getState();
const { locationURL } = state['features/base/connection'];

View File

@@ -1,40 +1,37 @@
// @flow
import React, { Fragment } from 'react';
import { BaseApp } from '../../base/app';
import { toURLString } from '../../base/util';
import { OverlayContainer } from '../../overlay';
import BaseApp from '../../base/app/components/BaseApp';
import { toURLString } from '../../base/util/uri';
import { appNavigate } from '../actions';
import { getDefaultURL } from '../functions';
/**
* The type of React {@code Component} props of {@link AbstractApp}.
*/
export type Props = {
export interface IProps {
/**
* XXX Refer to the implementation of loadURLObject: in
* ios/sdk/src/JitsiMeetView.m for further information.
*/
timestamp: any,
timestamp: any;
/**
* The URL, if any, with which the app was launched.
*/
url: Object | string
};
url: Object | string;
}
/**
* Base (abstract) class for main App component.
*
* @abstract
*/
export class AbstractApp extends BaseApp<Props, *> {
export class AbstractApp<P extends IProps = IProps> extends BaseApp<P> {
/**
* The deferred for the initialisation {{promise, resolve, reject}}.
*/
_init: Object;
_init: {
promise: Promise<any>;
};
/**
* Initializes the app.
@@ -54,7 +51,7 @@ export class AbstractApp extends BaseApp<Props, *> {
*
* @inheritdoc
*/
async componentDidUpdate(prevProps: Props) {
async componentDidUpdate(prevProps: IProps) {
const previousUrl = toURLString(prevProps.url);
const currentUrl = toURLString(this.props.url);
const previousTimestamp = prevProps.timestamp;
@@ -73,24 +70,6 @@ export class AbstractApp extends BaseApp<Props, *> {
}
}
/**
* Creates an extra {@link ReactElement}s to be added (unconditionally)
* alongside the main element.
*
* @abstract
* @protected
* @returns {ReactElement}
*/
_createExtraElement() {
return (
<Fragment>
<OverlayContainer />
</Fragment>
);
}
_createMainElement: (React$Element<*>, Object) => ?React$Element<*>;
/**
* Gets the default URL to be opened when this {@code App} mounts.
*
@@ -99,6 +78,7 @@ export class AbstractApp extends BaseApp<Props, *> {
* mounts.
*/
_getDefaultURL() {
// @ts-ignore
return getDefaultURL(this.state.store);
}
@@ -110,7 +90,7 @@ export class AbstractApp extends BaseApp<Props, *> {
* @protected
* @returns {void}
*/
_openURL(url) {
this.state.store.dispatch(appNavigate(toURLString(url)));
_openURL(url: string | Object) {
this.state.store?.dispatch(appNavigate(toURLString(url)));
}
}

View File

@@ -1,26 +1,26 @@
import React from 'react';
import React, { ComponentType } from 'react';
import { NativeModules, Platform, StyleSheet, View } from 'react-native';
import { SafeAreaProvider } from 'react-native-safe-area-context';
import SplashScreen from 'react-native-splash-screen';
import { DialogContainer } from '../../base/dialog';
import BottomSheetContainer from '../../base/dialog/components/native/BottomSheetContainer';
import DialogContainer from '../../base/dialog/components/native/DialogContainer';
import { updateFlags } from '../../base/flags/actions';
import { CALL_INTEGRATION_ENABLED, SERVER_URL_CHANGE_ENABLED } from '../../base/flags/constants';
import { getFeatureFlag } from '../../base/flags/functions';
import { DimensionsDetector, clientResized, setSafeAreaInsets } from '../../base/responsive-ui';
import { updateSettings } from '../../base/settings';
import { clientResized, setSafeAreaInsets } from '../../base/responsive-ui/actions';
import DimensionsDetector from '../../base/responsive-ui/components/DimensionsDetector.native';
import { updateSettings } from '../../base/settings/actions';
import { _getRouteToRender } from '../getRouteToRender.native';
import logger from '../logger';
import { AbstractApp } from './AbstractApp';
import type { Props as AbstractAppProps } from './AbstractApp';
import { AbstractApp, IProps as AbstractAppProps } from './AbstractApp';
// Register middlewares and reducers.
import '../middlewares';
import '../reducers';
import '../middlewares.native';
import '../reducers.native';
declare var __DEV__;
declare let __DEV__: any;
const { AppInfo } = NativeModules;
@@ -31,37 +31,33 @@ const DialogContainerWrapper = Platform.select({
/**
* The type of React {@code Component} props of {@link App}.
*/
type Props = AbstractAppProps & {
interface IProps extends AbstractAppProps {
/**
* An object with the feature flags.
*/
flags: Object,
flags: Object;
/**
* An object with user information (display name, email, avatar URL).
*/
userInfo: ?Object
};
userInfo?: Object;
}
/**
* Root app {@code Component} on mobile/React Native.
*
* @augments AbstractApp
*/
export class App extends AbstractApp {
/**
* The deferred for the initialisation {{promise, resolve, reject}}.
*/
_init: Object;
export class App extends AbstractApp<IProps> {
/**
* Initializes a new {@code App} instance.
*
* @param {Props} props - The read-only React {@code Component} props with
* @param {IProps} props - The read-only React {@code Component} props with
* which the new instance is to be initialized.
*/
constructor(props: Props) {
constructor(props: IProps) {
super(props);
// In the Release configuration, React Native will (intentionally) throw
@@ -98,10 +94,11 @@ export class App extends AbstractApp {
* @returns {void}
*/
async _extraInit() {
const { dispatch, getState } = this.state.store;
const { dispatch, getState } = this.state.store ?? {};
const { flags } = this.props;
// We set these early enough so then we avoid any unnecessary re-renders.
dispatch(updateFlags(this.props.flags));
dispatch?.(updateFlags(flags));
const route = await _getRouteToRender();
@@ -112,8 +109,9 @@ export class App extends AbstractApp {
// Wait until the root navigator is ready.
// We really need to break the inheritance relationship between App,
// AbstractApp and BaseApp, it's very inflexible and cumbersome right now.
const rootNavigationReady = new Promise(resolve => {
const rootNavigationReady = new Promise<void>(resolve => {
const i = setInterval(() => {
// @ts-ignore
const { ready } = getState()['features/app'] || {};
if (ready) {
@@ -126,26 +124,27 @@ export class App extends AbstractApp {
await rootNavigationReady;
// Check if serverURL is configured externally and not allowed to change.
const serverURLChangeEnabled = getFeatureFlag(getState(), SERVER_URL_CHANGE_ENABLED, true);
const serverURLChangeEnabled = getState && getFeatureFlag(getState(), SERVER_URL_CHANGE_ENABLED, true);
if (!serverURLChangeEnabled) {
// As serverURL is provided externally, so we push it to settings.
if (typeof this.props.url !== 'undefined') {
// @ts-ignore
const { serverURL } = this.props.url;
if (typeof serverURL !== 'undefined') {
dispatch(updateSettings({ serverURL }));
dispatch?.(updateSettings({ serverURL }));
}
}
}
dispatch(updateSettings(this.props.userInfo || {}));
dispatch?.(updateSettings(this.props.userInfo || {}));
// Update settings with feature-flag.
const callIntegrationEnabled = this.props.flags[CALL_INTEGRATION_ENABLED];
const callIntegrationEnabled = flags[CALL_INTEGRATION_ENABLED as keyof typeof flags];
if (typeof callIntegrationEnabled !== 'undefined') {
dispatch(updateSettings({ disableCallIntegration: !callIntegrationEnabled }));
dispatch?.(updateSettings({ disableCallIntegration: !callIntegrationEnabled }));
}
}
@@ -155,7 +154,7 @@ export class App extends AbstractApp {
*
* @override
*/
_createMainElement(component, props) {
_createMainElement(component: ComponentType<any>, props: Object) {
return (
<SafeAreaProvider>
<DimensionsDetector
@@ -195,17 +194,19 @@ export class App extends AbstractApp {
return;
}
// @ts-ignore
const oldHandler = global.ErrorUtils.getGlobalHandler();
const newHandler = _handleException;
if (!oldHandler || oldHandler !== newHandler) {
// @ts-ignore
newHandler.next = oldHandler;
// @ts-ignore
global.ErrorUtils.setGlobalHandler(newHandler);
}
}
_onDimensionsChanged: (width: number, height: number) => void;
/**
* Updates the known available size for the app to occupy.
*
@@ -215,9 +216,9 @@ export class App extends AbstractApp {
* @returns {void}
*/
_onDimensionsChanged(width: number, height: number) {
const { dispatch } = this.state.store;
const { dispatch } = this.state.store ?? {};
dispatch(clientResized(width, height));
dispatch?.(clientResized(width, height));
}
/**
@@ -231,10 +232,10 @@ export class App extends AbstractApp {
* @private
* @returns {void}
*/
_onSafeAreaInsetsChanged(insets) {
const { dispatch } = this.state.store;
_onSafeAreaInsetsChanged(insets: Object) {
const { dispatch } = this.state.store ?? {};
dispatch(setSafeAreaInsets(insets));
dispatch?.(setSafeAreaInsets(insets));
}
/**
@@ -265,7 +266,7 @@ export class App extends AbstractApp {
* @private
* @returns {void}
*/
function _handleException(error, fatal) {
function _handleException(error: Error, fatal: boolean) {
if (fatal) {
// In the Release configuration, React Native will (intentionally) throw
// an unhandled JavascriptException for an unhandled JavaScript error.
@@ -274,6 +275,7 @@ function _handleException(error, fatal) {
logger.error(error);
} else {
// Forward to the next globalHandler of ErrorUtils.
// @ts-ignore
const { next } = _handleException;
typeof next === 'function' && next(error, fatal);

View File

@@ -1,12 +1,11 @@
// @flow
import { AtlasKitThemeProvider } from '@atlaskit/theme';
import React from 'react';
import React, { Fragment } from 'react';
import GlobalStyles from '../../base/ui/components/GlobalStyles.web';
import JitsiThemeProvider from '../../base/ui/components/JitsiThemeProvider.web';
import DialogContainer from '../../base/ui/components/web/DialogContainer';
import { ChromeExtensionBanner } from '../../chrome-extension-banner';
import ChromeExtensionBanner from '../../chrome-extension-banner/components/ChromeExtensionBanner.web';
import OverlayContainer from '../../overlay/components/web/OverlayContainer';
import { AbstractApp } from './AbstractApp';
@@ -14,19 +13,37 @@ import { AbstractApp } from './AbstractApp';
import '../middlewares';
import '../reducers';
/**
* Root app {@code Component} on Web/React.
*
* @augments AbstractApp
*/
export class App extends AbstractApp {
/**
* Creates an extra {@link ReactElement}s to be added (unconditionally)
* alongside the main element.
*
* @abstract
* @protected
* @returns {ReactElement}
*/
_createExtraElement() {
return (
<Fragment>
<OverlayContainer />
</Fragment>
);
}
/**
* Overrides the parent method to inject {@link AtlasKitThemeProvider} as
* the top most component.
*
* @override
*/
_createMainElement(component, props) {
_createMainElement(component: React.ComponentType, props: any) {
return (
<JitsiThemeProvider>
<AtlasKitThemeProvider mode = 'dark'>

View File

@@ -1,3 +0,0 @@
// @flow
export * from './App';

View File

@@ -10,8 +10,9 @@ const route = {
* Determines which route is to be rendered in order to depict a specific Redux
* store.
*
* @param {any} _stateful - Used on web.
* @returns {Promise<Object>}
*/
export function _getRouteToRender() {
export function _getRouteToRender(_stateful?: any) {
return Promise.resolve(route);
}

View File

@@ -1,15 +1,21 @@
// @ts-expect-error
import { generateRoomWithoutSeparator } from '@jitsi/js-utils/random';
import { isRoomValid } from '../base/conference';
import { isSupportedBrowser } from '../base/environment';
import { toState } from '../base/redux';
import { Conference } from '../conference';
import { getDeepLinkingPage } from '../deep-linking';
import { UnsupportedDesktopBrowser } from '../unsupported-browser';
import { BlankPage, WelcomePage } from '../welcome';
import { IStateful } from '../base/app/types';
import { isRoomValid } from '../base/conference/functions';
import { isSupportedBrowser } from '../base/environment/environment';
import { toState } from '../base/redux/functions';
// eslint-disable-next-line lines-around-comment
// @ts-ignore
import Conference from '../conference/components/web/Conference';
import { getDeepLinkingPage } from '../deep-linking/functions';
import UnsupportedDesktopBrowser from '../unsupported-browser/components/UnsupportedDesktopBrowser';
import BlankPage from '../welcome/components/BlankPage.web';
import WelcomePage from '../welcome/components/WelcomePage.web';
import { getCustomLandingPageURL, isWelcomePageEnabled } from '../welcome/functions';
import { IReduxState } from './types';
/**
* Determines which route is to be rendered in order to depict a specific Redux
* store.
@@ -18,7 +24,7 @@ import { getCustomLandingPageURL, isWelcomePageEnabled } from '../welcome/functi
* {@code getState} function.
* @returns {Promise<Object>}
*/
export function _getRouteToRender(stateful) {
export function _getRouteToRender(stateful: IStateful) {
const state = toState(stateful);
return _getWebConferenceRoute(state) || _getWebWelcomePageRoute(state);
@@ -31,7 +37,7 @@ export function _getRouteToRender(stateful) {
* @param {Object} state - The redux state.
* @returns {Promise|undefined}
*/
function _getWebConferenceRoute(state) {
function _getWebConferenceRoute(state: IReduxState) {
if (!isRoomValid(state['features/base/conference'].room)) {
return;
}
@@ -44,8 +50,8 @@ function _getWebConferenceRoute(state) {
// room into account.
const { locationURL } = state['features/base/connection'];
if (window.location.href !== locationURL.href) {
route.href = locationURL.href;
if (window.location.href !== locationURL?.href) {
route.href = locationURL?.href;
return Promise.resolve(route);
}
@@ -70,7 +76,7 @@ function _getWebConferenceRoute(state) {
* @param {Object} state - The redux state.
* @returns {Promise<Object>}
*/
function _getWebWelcomePageRoute(state) {
function _getWebWelcomePageRoute(state: IReduxState) {
const route = _getEmptyRoute();
if (isWelcomePageEnabled(state)) {
@@ -101,7 +107,10 @@ function _getWebWelcomePageRoute(state) {
*
* @returns {Object}
*/
function _getEmptyRoute() {
function _getEmptyRoute(): {
component: React.ReactNode;
href?: string;
} {
return {
component: BlankPage,
href: undefined

View File

@@ -1,20 +1,16 @@
// @flow
import { AnyAction } from 'redux';
import {
createConnectionEvent,
sendAnalytics
} from '../analytics';
import { SET_ROOM } from '../base/conference';
import {
CONNECTION_ESTABLISHED,
CONNECTION_FAILED,
getURLWithoutParams
} from '../base/connection';
import { MiddlewareRegistry } from '../base/redux';
import { createConnectionEvent } from '../analytics/AnalyticsEvents';
import { sendAnalytics } from '../analytics/functions';
import { SET_ROOM } from '../base/conference/actionTypes';
import { CONNECTION_ESTABLISHED, CONNECTION_FAILED } from '../base/connection/actionTypes';
import { getURLWithoutParams } from '../base/connection/utils';
import MiddlewareRegistry from '../base/redux/MiddlewareRegistry';
import { inIframe } from '../base/util/iframeUtils';
import { reloadNow } from './actions';
import { _getRouteToRender } from './getRouteToRender';
import { IStore } from './types';
MiddlewareRegistry.register(store => next => action => {
switch (action.type) {
@@ -44,7 +40,7 @@ MiddlewareRegistry.register(store => next => action => {
* @returns {Object} The new state that is the result of the reduction of the
* specified {@code action}.
*/
function _connectionEstablished(store, next, action) {
function _connectionEstablished(store: IStore, next: Function, action: AnyAction) {
const result = next(action);
// In the Web app we explicitly do not want to display the hash and
@@ -52,6 +48,7 @@ function _connectionEstablished(store, next, action) {
// importantly, its params are used not only in jitsi-meet but also in
// lib-jitsi-meet. Consequently, the time to remove the params is
// determined by when no one needs them anymore.
// @ts-ignore
const { history, location } = window;
if (inIframe()) {
@@ -62,12 +59,14 @@ function _connectionEstablished(store, next, action) {
&& location
&& history.length
&& typeof history.replaceState === 'function') {
// @ts-ignore
const replacement = getURLWithoutParams(location);
// @ts-ignore
if (location !== replacement) {
history.replaceState(
history.state,
(document && document.title) || '',
document?.title || '',
replacement);
}
}
@@ -86,7 +85,7 @@ function _connectionEstablished(store, next, action) {
* @returns {Object}
* @private
*/
function _connectionFailed({ dispatch, getState }, next, action) {
function _connectionFailed({ dispatch, getState }: IStore, next: Function, action: AnyAction) {
// In the case of a split-brain error, reload early and prevent further
// handling of the action.
if (_isMaybeSplitBrainError(getState, action)) {
@@ -109,7 +108,7 @@ function _connectionFailed({ dispatch, getState }, next, action) {
* @private
* @returns {boolean}
*/
function _isMaybeSplitBrainError(getState, action) {
function _isMaybeSplitBrainError(getState: IStore['getState'], action: AnyAction) {
const { error } = action;
const isShardChangedError = error
&& error.message === 'item-not-found'
@@ -121,7 +120,7 @@ function _isMaybeSplitBrainError(getState, action) {
const { timeEstablished } = state['features/base/connection'];
const { _immediateReloadThreshold } = state['features/base/config'];
const timeSinceConnectionEstablished = timeEstablished && Date.now() - timeEstablished;
const timeSinceConnectionEstablished = Number(timeEstablished && Date.now() - timeEstablished);
const reloadThreshold = typeof _immediateReloadThreshold === 'number' ? _immediateReloadThreshold : 1500;
const isWithinSplitBrainThreshold = !timeEstablished || timeSinceConnectionEstablished <= reloadThreshold;
@@ -147,7 +146,7 @@ function _isMaybeSplitBrainError(getState, action) {
* @private
* @returns {void}
*/
function _navigate({ getState }) {
function _navigate({ getState }: IStore) {
const state = getState();
const { app } = state['features/base/app'];
@@ -168,7 +167,7 @@ function _navigate({ getState }) {
* @returns {Object} The new state that is the result of the reduction of the
* specified {@code action}.
*/
function _setRoom(store, next, action) {
function _setRoom(store: IStore, next: Function, action: AnyAction) {
const result = next(action);
_navigate(store);

View File

@@ -48,5 +48,6 @@ import '../transcribing/middleware';
import '../video-layout/middleware';
import '../video-quality/middleware';
import '../videosipgw/middleware';
import '../visitors/middleware';
import './middleware';

Some files were not shown because too many files have changed in this diff Show More